Funciones y limitaciones de ICO

Una cosa que trato de entender es la limitación de los contratos inteligentes. Estaba investigando las ICO y siempre hacía una pregunta:

¿Es posible implementar una función 'enterICO' sin requerir que los usuarios llamen a la función?

Intentaré explicarlo con un ejemplo fuera de contexto:

pragma solidity ^0.4.17;

contract ICO {
    string message; /// just assume we have a function which allows us to set a message 

    function enterIco() payable public {
        if(msg.value == 0.00000001 ether)
        {
            return message; 
        }
    } 

}

Para este tipo de ejemplo, podemos suponer que en el front-end tendrá algunos web3js que le permitirán conectar MetaMask en el lado del usuario y llamar a la función enterIco cuando un usuario haga clic en el botón.

¿Podemos hacer que esta función se ejecute automáticamente cuando el usuario no tiene acceso al botón? Por ejemplo, el usuario envía Ethereum desde su propia billetera a la dirección del contrato sin hacer clic en el botón y la función se ejecuta automáticamente.

Este ejemplo puede referirse a las ICO. ¿Puede un usuario usar su billetera y su dirección de contrato inteligente para participar en la ICO?

PD: sé que las ICO no deberían implementarse de esta manera porque requieren KYC; sin embargo, tengo curiosidad por saber si podrían o si la solidez limita este tipo de comportamiento.

Respuestas (1)

Sí, puede hacerlo a través de la función de respaldo.

Si se llama a un contrato con datos de entrada vacíos o con una firma de función que no coincide con ninguna función del contrato, se ejecuta la función de reserva. Luego puede llamar a cualquier otra función que desee en esa función, algo como:

function() public payable {
    enterICO();
}
Cada día Solidity continúa impresionándome más y más. ¡Muchas gracias, estoy buscando hacer algunas pruebas con él!