Ich frage mich, wann Sie berücksichtigen sollten, dass eine Übertragung von ERC-20-Token bestätigt ist. Am Anfang dachte ich, dass es ausreichen würde, nur sicherzustellen, dass der Transaktionsaufruf erfolgreich bestätigt wird, aber dann begann ich zu denken, dass ich vielleicht stattdessen auf das Ereignis transfer
warten sollte .Transfer
Ich habe gesehen, dass die meisten Token da draußen das Transfer
Ereignis direkt innerhalb der transfer
Funktion ausgeben. Nehmen wir jedoch den folgenden Vertrag an:
transfer
Funktion auf, um Token an Adresse B zu übertragentransfer
Funktion sendet ein Ereignis, um die Validierung von Benutzer B anzuforderntransfer
Funktion wird an dieser Stelle abgeschlossen, aber es wurden noch keine Token übertragen und das Transfer
Event wird auch nicht ausgelöstTransfer
Ereignis wird jetzt ausgelöst und zeigt an, dass die Übertragung abgeschlossen istIn diesem Fall wäre es richtig, auf das Ereignis zu warten , um eine Transaktion von Token zu bestätigen, da es nicht ausreicht Transfer
, nur auf die Bestätigung der Transaktion zu warten, die die Funktion aufruft .transfer
Ich bin mir jedoch nicht sicher, ob dies die ERC-20-Spezifikation besagt und was die meisten Tools, die mit ERC-20-Tokens arbeiten, erwarten. Meine Frage ist also, ob es in Ordnung ist, ein Token zu erstellen, bei dem die Bestätigung der Übertragung erfolgt, wenn das Transfer
Ereignis ausgelöst wird, anstatt wenn die aufzurufende Transaktion transfer
bestätigt wird.
Die aufrufende Transaktion transfer
und das Transfer
Ereignis finden gleichzeitig statt. Transaktionen sind atomar, was bedeutet, dass Dinge, die darin passieren, sofort oder gar nicht aus dem Kontext einer externen Anwendung heraus geschehen. Sie können also entweder auf das Ereignis oder auf die Bestätigung der Transaktion lauschen, es liegt an Ihnen.
Das Token wird bestätigt, wenn Transfer
es ausgelöst wird.
Sie müssen jedoch die probabilistische Finalität der Proof-of-Work-Blockchain berücksichtigen. Wenn Sie den neuesten (lokalen) Block scannen können, könnte es sich um einen kleinen Fork handeln, da Miner darum rennen. Warten Sie unter normalen Bedingungen mindestens 10-20 Blöcke auf die endgültige Abrechnung.
transfer
Funktion nachsehen, heißt es, dass sie das Ereignis auslösen MUSS Transfer
. Ich denke also, wenn die Transaktion für den transfer
Anruf erfolgreich ist (Warten auf genügend Blockbestätigungen), können wir die Transaktion als bestätigt betrachten, auch ohne das Transfer
Ereignis zu überprüfen.
dgaviola
natewelch_
transfer
sollte ein Ereignis auslösenTransfer
, es sei denn, es schlägt fehl. In diesem Fall wird es zurückgesetzt, anstatt erfolgreich zu sein.dgaviola
Transfer
Ereignis in der Funktion ausgelösttransfer
werden, also denke ich, dass Sie Recht haben.