Wie kann ich meine DApp so programmieren, dass sie meinem Benutzer mitteilt, dass seine Aktion/Transaktion bestätigt wurde?

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?

Antworten (2)

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.)

alertdient 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.
Ich würde auch gerne wissen, wie man zur richtigen Zeit den Richtigen anruft.
"Der Rückruf wird normalerweise zweimal aufgerufen" ist ungenau. .sendTransaction()ruft den Rückruf nur einmal auf (der Rückruf für .newwird zweimal aufgerufen). ethereum.stackexchange.com/questions/7407/…

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).