Solidity - Smart Contract - Enviar eth desde una cuenta externa a un contrato inteligente

Leí este ejemplo http://solidity.readthedocs.io/en/latest/solidity-by-example.html#simple-open-auction para aprender cómo permitir que mi contrato inteligente reciba eth de una cuenta externa. Parece que necesito una función de pago simple. Así que escribí un contrato con una función de pago simple en Remix y lo probé con MetaMask (Ropsten Network), enviando 1 eth desde mi cuenta externa a mi contrato. Fracaso, MetaMask me dice que el contrato lanza una excepción. Entonces, agregué al contrato una función alternativa e intenté nuevamente enviar eth. ¡Funcionó! Pero el ejemplo vinculado anteriormente no me dice que necesito una función de respaldo, y no puedo realizar el almacenamiento de datos (como almacenar msg.value y msg.sender en variables) en una función de respaldo, porque requiere más gas del que puede ¡tener!

Por favor, ayúdame. Sé que es una pregunta de novato, pero no puedo entenderlo.

La fila de los muy pocos contratos:ingrese la descripción de la imagen aquí

EL ERROR:ingrese la descripción de la imagen aquí

¡Gracias a todos!

agregar su código de contrato y los errores definitivamente facilitarían la ayuda de las personas

Respuestas (3)

El problema es que incluso si tiene una payablefunción en su contrato, no la está llamando. Tienes que llamar a la función directamente. Si no llama a ninguna función específica directamente (lo que sucede si solo envía Ether con Metamask), se llamará a la función de respaldo (si existe).

Desafortunadamente, Metamask no parece admitir funciones de contrato de llamadas directamente. Necesita algunas herramientas adicionales (o herramientas diferentes). Consulte Metamask: cómo acceder/llamar a las funciones del contrato desplegado utilizando Metamask, por ejemplo.

Se ve bien, solo necesita implementar el contrato en la red ropsten (seleccione JavaScript VM en el menú superior derecho en remix). Luego use metamask para enviar ether al contrato después de que se implemente. Obviamente, para operaciones complejas, necesitará una función normal, pública y pagadera, como la función "oferta" que ya tiene.

ps, la función de respaldo es necesaria cuando desea que su contrato acepte ether sin ejecutar una función, como cuando desea enviar ether desde metamask al contrato.

Aquí hay un contrato simple que hice que se paga por la función makeWish. Esencialmente, puede arrojarle algo de éter y obtener la cadena de texto de su deseo agregada a la cadena de bloques en forma de Evento.

Aquí está el código del contrato: https://etherscan.io/address/0x592F9B9A7D7AaF70FD6b4dE9883a62cA888DE702#code

Puede interactuar con él a través de MetaMask aquí: https://etherscan.io/address/0x592F9B9A7D7AaF70FD6b4dE9883a62cA888DE702#writeContract