Senden Sie die Transaktion mit MetaMask injiziertes Web 3

Metamasks injiziert web3 gibt einen Fehler bei der Verwendungweb3.eth.sendTransaction()

web3.eth.sendTransaction({from:web3.eth.accounts[0], to:'', data: // hash to interact with contraact, gas:85000});

Geben Sie hier die Bildbeschreibung ein

Was wäre eine Möglichkeit, Metamask zu verwenden, damit eine Website einen Benutzer auffordert, eine Transaktion zu unterzeichnen?

Diese Fehlermeldung war ziemlich schlecht, sie wird dank Ihrer Frage in einer zukünftigen Version verbessert! github.com/MetaMask/metamask-plugin/pull/751

Antworten (2)

Ihnen fehlt das letzte Argument für sendTransaction, der Rückruffunction(error, transactionHash) { ... }

In den häufig gestellten Fragen zu MetaMask heißt es:

All Async - Stellen Sie sich MetaMask als Light-Client vor

Der Benutzer hat nicht die vollständige Blockchain auf seinem Computer, sodass die Datensuche etwas langsam sein kann. Aus diesem Grund können wir die meisten synchronen Methoden nicht unterstützen. Die Ausnahme hiervon ist:

eth_accounts (web3.eth.konten)

eth_coinbase (web3.eth.coinbase)

Normalerweise kann ein Methodenaufruf asynchron gemacht werden, indem einfach ein Callback als letztes Argument zu einer synchronen Methode hinzugefügt wird.

Siehe Ethereum-Wiki zum Thema „Callbacks verwenden“

Dies ist nicht nur eine technische Einschränkung, sondern auch ein Problem der Benutzererfahrung. Wenn Sie synchrone Aufrufe verwenden, blockieren Sie die Benutzeroberfläche, und daher ist dies sowieso eine allgemein schlechte Praxis. Betrachten Sie diese API-Einschränkung als Geschenk an Ihre Benutzer.

Daher sollten alle Aufrufe von web3.js als letztes Argument einen Rückruf haben: Die einzigen Aufrufe, bei denen dies nicht erforderlich ist, sind for web3.eth.accountsund web3.eth.coinbase. Die generische Form des Rückrufs ist function(error, result).

Nützlich bei diesen beiden Befehlen. Ich freue mich auf die Verwendungdeasync
Es gibt keine klare Anleitung, wie man dies überall erfolgreich zum Laufen bringt. Code einer richtig formatierten Schaltfläche, die mit MetaMask funktioniert, wäre nützlich. Es ist schlecht dokumentiert.
@TrumpPaiPence, versuchen Sie bitte, den MetaMask-Support zu suchen und zu kontaktieren.
var receiver = "0x541209bd9C60cDb11A5076b785ba1BD44cd15768";  
var sender = web3.eth.accounts[0];
web3.eth.sendTransaction({to:receiver,
                        from:sender, 
                       value:web3.toWei("0.5", "ether")}
                        ,function (err, res){});