Espero que todos estén bien.
Durante los últimos días he tenido problemas con una función de pagos que sé que definitivamente funciona. ¿Cómo sé que está funcionando? Ether se envía con éxito en Remix.
El siguiente código es de una sección de mi contrato:
function payRent()
public
payable
onlyTenant
inState(State.Started)
equalValue {
landlord.transfer(msg.value);
paidrents.push(PaidRent({
id : paidrents.length + 1,
value : msg.value
})); }
Suponga que el arrendador es una dirección que se indicó previamente en el contrato.
También he incluido la función de pago alternativo:
//fallback payable
function() public payable{}
Las funciones anteriores funcionan perfectamente con Remix. Creé una aplicación React que llamaría a esta función y usaría Metamask como proveedor web3. Dentro de la función, uso la sección de retorno así:
return rentalAgreementInstance.payRent.sendTransaction({from: accounts[0], value: this.state.web3.toWei(this.state.rent, "ether"), gas:30000})
La instancia se ha inicializado correctamente.
Esto está configurado para activarse con un clic de botón.
Cada vez que se hace clic en el botón, Metamask me proporciona una ventana emergente para confirmar la transacción con el valor adecuado definido. Ahora el problema surge una vez que se hace clic en confirmar.
La transacción se completa, pero no se deduce ningún éter de la cuenta del remitente y la cuenta receptora no recibe ningún éter.
Supongo que puedo estar llamándolo incorrectamente dentro de la función de retorno web3 de reaccionar.
Si se requieren más detalles relevantes, por favor hágamelo saber.
Un poco de ayuda sería realmente apreciada. ¡Gracias a todos!
Así que he logrado resolver el problema.
Ismael mencionó que la gasolina estaba demasiado baja.
Me di cuenta de esto cuando creé una prueba unitaria de trufa para la transacción pagadera. Una vez que la transacción fue exitosa, me dirigí al cliente de Ganache y noté el gas requerido para el pago.
Esto me hizo darme cuenta de que el gas que le había dado era demasiado bajo. Lo cambié de 30000 a 100000 y funcionó perfectamente.
Espero que alguien más pueda encontrar útil esta respuesta también.
david c
ismael
this.state.rent
?Prasad Acharya
this.state.rent
es un valor que puede ser fijado por el creador del contrato. Tenga en cuenta que estoy usando un nodo privado, Ganache específicamente.ismael
Prasad Acharya