Nehmen Sie ein Beispiel für eine Abstimmungs-DApp. Ein Benutzer klickt auf eine Abstimmungsschaltfläche, dann wird hinter den Kulissen die Transaktion, die die Abstimmung enthält, in der Blockchain abgebaut. Die DApp möchte dann alert('You have voted')
.
Da die Transaktion einige Zeit braucht, um abgebaut zu werden und einige Bestätigungen zu erhalten, welchen Code sollte die DApp ausführen, bevor sie die alert
? Ich habe von Leuten gehört, die Loops ausgeführt und gerufen haben getTransactionReceipt
. Soll man das so machen oder gibt es Alternativen? Gibt es Codeschnipsel oder Bibliotheken dafür?
Hat in web3.js .sendTransaction()
einen Rückruf.
https://github.com/ethereum/wiki/wiki/JavaScript-API#web3ethsendtransaction
Mehr zum Callback: https://github.com/ethereum/wiki/wiki/JavaScript-API#using-callbacks
Der Rückruf wird normalerweise zweimal aufgerufen, einmal, wenn die Transaktion das Netzwerk erreicht, und ein weiteres Mal, nachdem sie abgebaut wurde.
Außerdem alert()
wird im Allgemeinen von der Verwendung von Javascript abgeraten, da es sich um einen blockierenden Aufruf handelt und der asynchronen Natur von Javascript zuwiderläuft. (Besser wäre es beispielsweise, ein Bootstrap-Popup zu verwenden.)
Ich habe hier ein vollständiges funktionierendes Codebeispiel zur Verfügung gestellt, um festzustellen, ob Ihre Transaktion abgebaut wurde:
Woher weiß ich, wann ich kein Benzin mehr habe?
(Es berücksichtigt auch, wenn Ihnen das Benzin ausgeht :-)
Beachten Sie, dass, wenn der Knoten, mit dem Sie sprechen, nicht vertrauenswürdig ist, dies nicht 100 % zuverlässig ist. Woher weißt du, dass es nicht lügt? Sie sollten wirklich überprüfen, ob die Transaktion auf einer Stichprobe von Knoten abgebaut wurde. AFAICT Ich habe noch keinen Beispielcode dafür in der Ethereum-Welt gesehen. Bei Bitcoin gibt es solche Beispiele. Ich plane, einen solchen Code zu implementieren, wenn ich in die Produktion gehe (auch bekannt als mit echtem Geld).
eth
alert
dient nur als Beispiel ;) Upvoting, aber Codeschnipsel wären hilfreicher für die Leser. Auch "Rückruf wird normalerweise zweimal angerufen"? Snippet zum Erkennen beider Fälle wäre hilfreich.max
eth
.sendTransaction()
ruft den Rückruf nur einmal auf (der Rückruf für.new
wird zweimal aufgerufen). ethereum.stackexchange.com/questions/7407/…