Solidity - Smart Contract - Senden Sie eth von einem externen Konto an einen Smart Contract

Ich habe dieses Beispiel http://solidity.readthedocs.io/en/latest/solidity-by-example.html#simple-open-auction gelesen , um zu erfahren, wie ich meinen Smart Contract eth von einem externen Konto empfangen lasse. Es scheint, dass ich eine einfache kostenpflichtige Funktion brauche. Also habe ich einen Vertrag mit einer einfachen kostenpflichtigen Funktion auf Remix geschrieben und mit MetaMask (Ropsten Network) getestet, indem ich 1 eth von meinem externen Konto an meinen Vertrag gesendet habe. Fehler, MetaMask teilt mir mit, dass der Vertrag eine Ausnahme auslöst. Also habe ich dem Vertrag eine Fallback-Funktion hinzugefügt und erneut versucht, eth zu senden. Es funktionierte! Aber das oben verlinkte Beispiel sagt mir nicht, dass ich eine Fallback-Funktion benötige, und ich kann keine Datenspeicherung (wie das Speichern von msg.value und msg.sender in Variablen) in einer Fallback-Funktion durchführen, weil es mehr Gas benötigt, als es kann haben!

Bitte hilf mir. Ich weiß, es ist eine Noob-Frage, aber ich kann es nicht herausfinden.

Die Reihe der sehr wenigen Verträge:Geben Sie hier die Bildbeschreibung ein

DER FEHLER:Geben Sie hier die Bildbeschreibung ein

Danke an alle!

Das Hinzufügen Ihres Vertragscodes und der Fehler würde es den Leuten definitiv erleichtern, zu helfen

Antworten (3)

Das Problem ist, dass Sie, selbst wenn Sie eine payableFunktion in Ihrem Vertrag haben, diese nicht aufrufen. Sie müssen die Funktion direkt aufrufen. Wenn Sie keine bestimmte Funktion direkt aufrufen (was passiert, wenn Sie Ether einfach mit Metamask senden), wird die Fallback-Funktion aufgerufen (falls vorhanden).

Leider scheint Metamask den direkten Aufruf von Vertragsfunktionen nicht zu unterstützen. Sie benötigen einige zusätzliche Werkzeuge (oder andere Werkzeuge). Sehen Sie sich Metamask an: So greifen Sie beispielsweise mit Metamask auf die Funktionen des bereitgestellten Vertrags zu bzw. rufen diese auf.

Es sieht in Ordnung aus, Sie müssen nur den Vertrag im Ropsten-Netzwerk bereitstellen (wählen Sie JavaScript VM aus dem oberen rechten Menü bei Remix). Verwenden Sie dann Metamask, um Ether an den Vertrag zu senden, nachdem er bereitgestellt wurde. Offensichtlich benötigen Sie für komplexe Operationen eine normale Funktion, öffentlich und kostenpflichtig, wie die Funktion "Gebot", die Sie bereits haben.

ps Die Fallback-Funktion wird benötigt, wenn Sie möchten, dass Ihr Vertrag Ether akzeptiert, ohne eine Funktion auszuführen, z. B. wenn Sie Ether von Metamask an den Vertrag senden möchten.

Hier ist ein einfacher Vertrag, den ich abgeschlossen habe und der für die makeWish-Funktion zahlbar ist. Im Wesentlichen können Sie etwas Äther darauf werfen und Ihre Wunschtextzeichenfolge in Form eines Ereignisses zur Blockchain hinzufügen.

Hier ist der Vertragscode: https://etherscan.io/address/0x592F9B9A7D7AaF70FD6b4dE9883a62cA888DE702#code

Sie können hier über MetaMask damit interagieren: https://etherscan.io/address/0x592F9B9A7D7AaF70FD6b4dE9883a62cA888DE702#writeContract