Wenn ich richtig liege, ist die Nonce dafür verantwortlich, dass die Ordertransaktionen ausgeführt werden. Angenommen, Sie haben zwei Transaktionen T1 und T2. T1 hängt von T2 ab. Ich möchte also eine Bestellung T1 und dann T2 haben. Dies geschieht, indem T1 die Nonce und T2 Nonce + 1 gegeben wird. (Bitte korrigieren Sie mich, wenn das falsch ist)
Nun kann es in einigen Fällen vorkommen, dass T2 auch vom Zustand eines Vertrags abhängt. Ich möchte also sicherstellen, dass T1 nur dann ausgeführt wird, wenn T2 ausgeführt werden kann. Gibt es eine Möglichkeit, dies zu tun?
Um sicherzustellen, dass T1 und T2 im selben Block enthalten sind. Ich denke, das könnte durch einen Kostümvertrag erfolgen, bin mir aber nicht sicher, ob es eine bessere oder eine Art Standardlösung dafür gibt.
Vielen Dank für jeden Rat!
PS: Beispiel: Ich möchte etwas kaufen. T1 zahlt Geld ein (oder genehmigt) einen Vertrag. T2 etwas mit dem Vertrag kaufen.
Reales Beispiel: Ich möchte einen Token auf Ether Delta kaufen. T1: Anzahlung. T2: Token kaufen. Es macht keinen Sinn einzuzahlen, wenn jemand schneller war und diesen Token bereits für den angegebenen Preis gekauft hat.
Ich möchte also eine Bestellung T1 und dann T2 haben. Dies geschieht, indem T1 die Nonce und T2 Nonce + 1 gegeben wird. (Bitte korrigieren Sie mich, wenn das falsch ist)
Wenn sowohl T1 als auch T2 von demselben Konto gesendet werden, wird die Nonce-Anweisung befolgt, ja.
T2 hängt auch vom Zustand eines Vertrages ab. Ich möchte also sicherstellen, dass T1 nur dann ausgeführt wird, wenn T2 ausgeführt werden kann. Gibt es eine Möglichkeit, dies zu tun?
Szenario 1: Wenn T1 und T2 vom gleichen Konto sind, dann ist diese Order bereits durch die Nonces garantiert.
Szenario 2: Wenn sie von unterschiedlichen Konten stammen, ist T2 nur erfolgreich, wenn es eine gültige Änderung am Status vornimmt. Wenn es keine gültige Änderung am Status vornimmt, schlägt es fehl und wird nicht in einen Block aufgenommen.
Wenn T1 den Status "gültig" machen muss, bevor T2 eintrifft, können Sie einfach sicherstellen, dass es erneut gesendet wird, wenn T2 fehlschlägt (weil T1 noch nicht passiert ist).
Wenn T1 nicht erforderlich ist, um den Status "gültig" zu machen, und T2 funktionieren könnte, ohne dass T1 passiert ist, müssen Sie vorsichtig sein, um die Reihenfolge sicherzustellen.
Um sicherzustellen, dass T1 und T2 im selben Block enthalten sind.
Es ist nicht klar, warum Sie möchten, dass sie in denselben Block aufgenommen werden. Solange T1 vor T2 liegt – auch in einem früheren Block – funktionieren die Zustandsänderungen.
Außerdem können Sie nicht garantieren, dass sie in denselben Block aufgenommen werden. Es liegt an den Bergleuten. Sie könnten versuchen , dies mit den Gaspreisen zu erreichen, aber auch hier gibt es keine Garantie.
deposit()
Der ausländische Vertrag müsste das und in einer einzigen kombinierten Funktion implementieren buy()
(einen einzigen Anruf entgegennehmen), damit er das tun kann, was Sie verlangen. (Was sich anhört, als wäre es nicht der Fall.)
Greg
Michael Razum
Greg
Ismael