Problema de Metamask con transacciones pagaderas usando Truffle y Web3

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!

¿Puedes compartir el tx en etherscan?
¿La ventana emergente de la metamáscara muestra la cantidad correcta? ¿Puedes registrar qué valor tiene this.state.rent?
Sí, se muestra la cantidad correcta. this.state.rentes un valor que puede ser fijado por el creador del contrato. Tenga en cuenta que estoy usando un nodo privado, Ganache específicamente.
¿La transacción tiene éxito? Si consulta el recibo de la transacción, ¿cuál es el estado? Si falla, quizás el nivel de gasolina sea demasiado bajo.
Todavía no he encontrado una solución a esto. Y sí, la transacción tiene éxito. Esto funciona perfectamente en Remix, pero no en Metamask, todavía espero una solución para esto.

Respuestas (1)

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.