Esta es la función que estoy usando para transferir éteres de la cuenta de usuario a la cuenta del contrato.
function addEathersToContractAccount(address contractAddress)public payable returns(bool){
changePaymentStatus(2);
bool success= contractAddress.send(msg.value)
if(success){
changePaymentStatus(3);
return true;
}else{
return false;
}
}
mientras lo probaba en REMIX, descubrí que esta función siempre devuelve falso, pero los éteres se transfirieron de la cuenta de usuario a la cuenta del contrato.
Nuevamente lo probé usando ethereum testrpc pero el resultado fue el mismo.
yo tambien he probado
contractAddress.transfer(msg.value)
Esta es la salida proporcionada por remix
dosis alguien tiene alguna idea de por qué sucede esto.
send
regresa false
en caso de falla, y depende de usted manejar la falla. Es por eso que, excepto en algunos casos en los que desea/necesita manejar las fallas usted mismo, es mejor usar transfer
, que se encargará de eso por usted.
En tu caso, esto es lo que debes hacer.
function addEathersToContractAccount(address contractAddress)public payable returns(bool){
changePaymentStatus(2);
bool success= contractAddress.send(msg.value)
if(success){
changePaymentStatus(3);
}else{
revert();
}
return success;
}
revert
le permite revertir los cambios realizados y devolver un valor.
Todavía deberías usar esto:
function addEathersToContractAccount(address contractAddress)public payable returns(bool){
changePaymentStatus(2);
contractAddress.transfer(msg.value);
changePaymentStatus(3);
return success;
}
send
falle manualmente. si no lo hace send
, devolverá falso, pero se consumirá el envío eth con msg.value. Revisa mi comentario de arriba.
Prashant Prabhakar Singh
contractAddress.transfer(msg.value)
orequire(contractAddress.send(msg.value))