Metamask-Problem bei zahlbaren Transaktionen mit Truffle und Web3

Hoffe es geht allen gut.

In den letzten Tagen hatte ich Probleme mit einer kostenpflichtigen Funktion, von der ich weiß, dass sie definitiv funktioniert. Woher weiß ich, dass es funktioniert? Ether wird erfolgreich auf Remix gesendet.

Der folgende Code stammt aus einem Abschnitt meines Vertrages:

function payRent()   
public   
payable   
onlyTenant   
inState(State.Started)   
equalValue   {
        landlord.transfer(msg.value);
        paidrents.push(PaidRent({
        id : paidrents.length + 1,
        value : msg.value
        }));   }

Angenommen, der Vermieter ist eine Adresse, die zuvor im Vertrag angegeben wurde.

Ich habe auch die Fallback-Payment-Funktion eingebaut:

  //fallback payable
  function() public payable{}

Die oben genannten Funktionen funktionieren perfekt mit Remix. Ich habe eine React-Anwendung erstellt, die diese Funktion aufruft und die Metamask als web3-Anbieter verwendet. Innerhalb der Funktion verwende ich den Rückgabeabschnitt wie folgt:

return rentalAgreementInstance.payRent.sendTransaction({from: accounts[0], value: this.state.web3.toWei(this.state.rent, "ether"), gas:30000})

Instanz wurde ordnungsgemäß initialisiert.

Dies ist so eingestellt, dass es auf Knopfdruck aktiviert wird.

Jedes Mal, wenn auf die Schaltfläche geklickt wird, zeigt Metamask mir ein Popup an, um die Transaktion mit dem richtigen definierten Wert zu bestätigen. Jetzt tritt das Problem auf, sobald auf Bestätigen geklickt wird.

Die Transaktion wird abgeschlossen, aber vom Senderkonto wird kein Ether abgebucht und vom Empfängerkonto wird kein Ether empfangen.

Ich nehme an, ich nenne es möglicherweise falsch in der web3-Rückgabefunktion von React.

Wenn weitere relevante Details erforderlich sind, lassen Sie es mich bitte wissen.

Etwas Hilfe wäre wirklich dankbar. Danke euch allen!

Kannst du den TX auf Etherscan teilen?
Zeigt das Metamask-Popup den richtigen Betrag an? Können Sie protokollieren, welchen Wert hat this.state.rent?
Ja, der richtige Betrag wird angezeigt. this.state.rentist ein Wert, der vom Vertragsersteller eingestellt werden kann. Denken Sie daran, dass ich einen privaten Knoten verwende, speziell Ganache.
Gelingt die Transaktion? Wenn Sie den Transaktionsbeleg abfragen, wie ist der Status? Wenn es fehlschlägt, ist vielleicht das Gas zu niedrig.
Habe dazu noch keine Lösung gefunden. Und ja, die Transaktion gelingt. Das heißt, es funktioniert perfekt auf Remix, aber nicht auf Metamask, ich hoffe immer noch auf eine Lösung dafür.

Antworten (1)

Also ich habe es geschafft das Problem zu lösen.

Ismael erwähnte, dass das Gas zu niedrig sei.

Das wurde mir klar, als ich einen Trüffel-Einheitentest für die zahlbare Transaktion erstellte. Sobald die Transaktion erfolgreich war, ging ich zum Ganache-Client und bemerkte das für die Zahlung erforderliche Gas.

Dadurch wurde mir klar, dass ich zu wenig Gas gegeben hatte. Ich habe es von 30000 auf 100000 geändert und es hat perfekt funktioniert.

Ich hoffe, dass jemand anderes diese Antwort auch nützlich finden könnte.