Ich habe unten ein paar Codes erstellt
Pragma Solidität ^0.4.19;
contract SendAndTransferExample {
function SimpleSendToAccount() public returns(bool) {
return msg.sender.send(10000000000000000000);
}
function SimpleTransferToAccount() public {
msg.sender.transfer(10000000000000000000);
}
}
Ich habe beide Funktionen mit JavaScript vm ausgeführt und das Ergebnis ist immer gleich. erstes Ergebnis, wenn ich die Funktion send() ausgeführt habe, und das Ergebnis unten, als ich die Funktion transfer() ausgeführt habe
transact to SendAndTransferExample.SimpleTransferToAccount errored: VM error: revert.
revert The transaction has been reverted to the initial state.
Note: The constructor should be payable if you send value. Debug the transaction to get more information.
Ich habe keine Ahnung, was falsch war. Jemand hilft mir bitte.
Versuchen Sie dies für Ihren Vertrag:
pragma solidity ^0.4.24;
contract SendAndTransferExample {
constructor() public payable { }
function SimpleSendToAccount() public returns(bool) {
return msg.sender.send(10000000000000000000);
}
function SimpleTransferToAccount() public {
msg.sender.transfer(10000000000000000000);
}
function() public payable { }
}
Hier habe ich 2 Funktionen hinzugefügt:
Eine constructor()
Funktion, die nur einmal ausgeführt wird, direkt bei der Vertragserstellung. Sie können diese Funktion verwenden, um Variablen zu initialisieren, z. B. wer der Eigentümer des Vertrags ist, und andere globale Werte. In diesem Fall haben wir die Funktion erstellt payable
, was bedeutet, dass sie ETH akzeptieren kann. Während der Vertragserstellung können Sie die ETH als übergeben msg.value
und bei der Vertragserstellung wird die ETH als Teil ihres Saldos in den Vertrag aufgenommen.
Eine Fallback-Funktion ( function()
), die immer dann ausgeführt wird, wenn Sie den Vertrag aufrufen und keine der anderen Funktionen mit der Funktionskennung übereinstimmt oder wenn keine Daten geliefert wurden. Dies bedeutet, dass Sie ETH einfach an den Vertrag senden können, und da die Fallback-Funktion ebenfalls ist payable
, wird diese ETH akzeptiert.
Mit einer dieser Funktionen sollten Sie in der Lage sein, genügend ETH an Ihren Vertrag zu senden, damit Ihre anderen Funktionen funktionieren.
Sie sollten einige Zeit damit verbringen, die solidity-Dokumentation zu lesen, die diese beiden Themen und vieles mehr behandelt!
Es wird ungefähr so sein:
function send(address _receiver) payable {
_receiver.send(msg.value);
}
Ihre Methode sollte zahlbar sein, um Ether zu senden.
Beachten Sie, dass address.send (value) und address.transfer(value) beide gleich sind, außer dass send bei einem Fehler keine Ausnahme auslöst und alle Ihre Transaktionsgebühren und Übertragungsausnahmen verbraucht .
payable
Ether senden. Nur um Äther zu erhalten.
Shawn Tabrizi
msg.sender
. Enthält der Vertrag ETH zum Senden? Wie die Fehlermeldung andeutet, könnten Sie eine Konstruktorfunktion oder eine andere kostenpflichtige Funktion hinzufügen, die es dem Vertrag ermöglicht, ETH zu akzeptieren, die er dann senden könnte.grauchocobo
grauchocobo