Creé algunos códigos a continuación
solidez de pragma ^0.4.19;
contract SendAndTransferExample {
function SimpleSendToAccount() public returns(bool) {
return msg.sender.send(10000000000000000000);
}
function SimpleTransferToAccount() public {
msg.sender.transfer(10000000000000000000);
}
}
Ejecuté ambas funciones usando JavaScript vm y ese resultado siempre fue el mismo. primer resultado cuando ejecuté la función enviar () y el siguiente resultado cuando ejecuté la función transferir ()
transact to SendAndTransferExample.SimpleTransferToAccount errored: VM error: revert.
revert The transaction has been reverted to the initial state.
Note: The constructor should be payable if you send value. Debug the transaction to get more information.
No tengo idea de lo que estaba mal. Que alguien me ayude por favor.
Prueba esto para tu contrato:
pragma solidity ^0.4.24;
contract SendAndTransferExample {
constructor() public payable { }
function SimpleSendToAccount() public returns(bool) {
return msg.sender.send(10000000000000000000);
}
function SimpleTransferToAccount() public {
msg.sender.transfer(10000000000000000000);
}
function() public payable { }
}
Aquí he añadido 2 funciones:
Una constructor()
función que se ejecuta solo una vez, justo cuando se crea el contrato. Puede usar esta función para inicializar variables, como quién es el propietario del contrato y otros valores globales. En este caso, hicimos la función payable
, lo que significa que puede aceptar ETH. Entonces, durante la creación del contrato, puede pasar ETH como msg.value
y luego de la creación del contrato, el ETH se aceptará en el contrato como parte de su saldo.
Una función alternativa ( function()
) que se ejecuta cada vez que llama al contrato, y ninguna de las otras funciones coincide con el identificador de función, o cuando no se proporcionaron datos. Esto significa que simplemente puede enviar ETH al contrato y, debido a que la función de respaldo también es payable
, aceptará ese ETH.
Usando cualquiera de estas funciones, debería poder enviar a su contrato suficiente ETH para que sus otras funciones funcionen.
¡Debe dedicar algún tiempo a leer la documentación de solidez que trata sobre estos dos temas y mucho más!
Será algo así:
function send(address _receiver) payable {
_receiver.send(msg.value);
}
Su método debe ser pagadero para enviar ether.
NB address.send(value) y address.transfer(value) ambos son iguales, excepto que el envío no genera una excepción en caso de falla y consume todas las tarifas de transacción y la excepción de generación de transferencia .
payable
para enviar ether. Sólo para recibir éter.
shawn tabrizi
msg.sender
. ¿El contrato incluye algún ETH para enviar? Como sugiere el mensaje de error, podría agregar una función de constructor u otra función de pago que permita que el contrato acepte ETH, que luego podría enviar.grischocobo
grischocobo