Transaktionsrücksetzung in Remix

Hier ist mein Vertrag

pragma solidity ^0.4.14;
contract Sample {

  address private receiver;
  uint public amount;

  function pay(address _receiver, uint _amount) payable public returns (bool) {
    receiver = _receiver;
    amount =_amount;
    receiver.transfer(amount);
    return true;
  }
}

Der Fehler, den ich bekomme, ist,

transact to browser/ballot.sol:Sample.pay errored: VM error: revert. revert Die Transaktion wurde in den Ausgangszustand zurückgesetzt. Debuggen Sie die Transaktion, um weitere Informationen zu erhalten.

Antworten (1)

Problem: Du versuchst mit dem Befehl Ether zu senden receiver.transfer(amount);und gibst die Menge als Parameter an. Da Ihr Vertrag nicht über genügend Ether-Guthaben verfügt, wird die Transaktion rückgängig gemacht.

Lösung: Sie müssen genügend Ether in Ihrem Vertrag haben oder Sie sollten Ether zusammen mit dem Funktionsaufruf senden, um das Problem zu lösen.

Ändern Sie Ihren Smart Contract wie folgt, wenn Sie an eine Absenderadresse senden _amountmüssen_receiversender's

pragma solidity ^0.4.14;
contract Sample {

  address private receiver;
  uint public amount;

  function pay(address _receiver) payable public returns (bool) {
    receiver = _receiver;
    receiver.transfer(msg.value);
    return true;
  }
}

Und Ihre Anruferfunktion wie folgt

sampleContract.pay(_receiver, {value : <value in wei>});
Diese Parameter wurden bestanden, die Übertragung findet nicht statt"address", "{value : 1000000000000000000}"
Bekommst du irgendwelche Fehler? Möchten Sie den Code teilen, den Sie für den Anruf verwenden?
kein Fehler, aber Ether wird nicht übertragen, dh nicht zum Zielkonto hinzugefügt. Ich verwende Remix, Browser Solidity Compiler und übergebe nur Parameter für die Funktion wie: "Adresse", "{Wert: 1000000000000000000}"
Übergeben Sie den Parameter so "<target address>"und ändern Sie das Wertefeld, das im oberen Bereich des Panels angezeigt wird. Sie finden das Feld zusammen mit den Feldern Gaslimit, Gaspreis, Konto und Umgebung.
Danke, jetzt funktioniert es. Warum müssen wir das Feld "Wert" ändern?
Das Wertfeld im Remix wird verwendet, um zusätzlich zur Transaktionsgebühr Ether zu senden. Im realen Szenario reduziert es den gegebenen Wert von der Adresse des Vertragsanrufers.
Siehe auch Solidity Cheat Sheet , wenn Sie gerade erst mit Solidity beginnen.