¿Qué es una función alternativa cuando se usa address.send (...)?

Este código está en mi contrato:

 contract A {
      address x = 0x1234...;
      x.send(10);
 }

¿Cómo sería la función de reserva en el contrato en la dirección 0x1234...?

 contract B {
     ...
 }

No puedo encontrar ninguna información sobre estas funciones de reserva, excepto aquí :

ingrese la descripción de la imagen aquí

Respuestas (1)

Sí, lo encontré en documentos de solidez en la sección de preguntas frecuentes:

¿Cuál es el trato function () { ... }dentro de los contratos de Solidity? ¿Cómo puede una función no tener un nombre?

Esta función se llama "función de respaldo" y se llama cuando alguien acaba de enviar Ether al contrato sin proporcionar ningún dato o si alguien arruinó los tipos para intentar llamar a una función que no existe.

El comportamiento predeterminado (si no se proporciona explícitamente una función de respaldo) en estas situaciones es generar una excepción.

Si el contrato está destinado a recibir Ether con transferencias simples, debe implementar la función de respaldo como:

function() payable { }

Otro uso de la función de reserva es, por ejemplo, registrar que su contrato recibió ether mediante el uso de un evento.

Atención: si implementa la función de respaldo, tenga cuidado de que use la menor cantidad de gas posible, ya send()que solo suministrará una cantidad limitada.

También posiblemente de uso:

¿Es posible pasar argumentos a la función de reserva?

La función de reserva no puede tomar parámetros.

En circunstancias especiales, puede enviar datos. Si tiene cuidado de que no se invoque ninguna de las otras funciones, puede acceder a los datos mediante msg.data.

Más información aquí en Github:

Las funciones de respaldo se activan cuando la firma de la función no coincide con ninguna de las funciones disponibles en un contrato de Solidity. Por ejemplo, si lo hace address.call(bytes4(bytes32(sha3("thisShouldBeAFunction(uint,bytes32)"))), 1, "test"), el EVM intentará llamar a " thisShouldBeAFunction" en esa dirección. Si no existe, se activa la función de reserva.

send()especifica una firma de función en blanco y, por lo tanto, siempre activará la función de reserva si existe.

Las funciones de respaldo que requieren payablefueron un cambio importante introducido con la versión 0.4.0 de Solidity .