Wie wird ein Vertrag abgewickelt, wenn mehrere Wallets dieselbe Transaktion durchführen?

Ich werde die DApp CryptoKitties als Beispiel verwenden:

Nehmen wir an, eine süße digitale Katze wird mit einem "Jetzt kaufen"-Button für 1 Ethereum veröffentlicht und 3 Personen führen die Transaktion über MetaMask durch. Alle 3 Transaktionen beginnen ausstehend.

  • Person A sendet die Transaktion um 09:04:01 mit einem Gaspreis von 2 Gwei
  • Person B sendet die Transaktion um 09:04:21 mit einem Gaspreis von 20 Gwei
  • Person C sendet die Transaktion um 09:04:51 mit einem Gaspreis von 100 Gwei

Wenn die Überprüfung der Transaktion von Person A 5 Minuten dauert, die von Person B 40 Sekunden und die von Person C 10 Sekunden, dann:

  • Wessen Transaktion erhält Priorität und wird dem Block hinzugefügt? (Nur einer geht durch, während die anderen abzüglich des Benzins für die Berechnung erstattet werden.)

  • Hat der Zeitstempel der initiierten Transaktion Einfluss auf die Priorität?

Eine ausführliche/technische Antwort wäre sehr willkommen. Vielen Dank!

Sie geben keine Auskunft darüber, warum nur eine Transaktion erfolgreich sein wird und die anderen nicht. Sie alle senden 1 Äther? Sie werden alle bearbeitet.
Nur eine Transaktion ist erfolgreich, da das Kätzchen nur einer Person gehören kann. Ja, sie werden alle mit der Verarbeitung beginnen, aber nur 1 wird erfolgreich zum Block hinzugefügt, während die anderen 2 fehlschlagen und eine Rückerstattung erhalten.

Antworten (1)

Wessen Transaktion erhält Priorität und wird dem Block hinzugefügt? (Nur einer geht durch, während die anderen abzüglich des Benzins für die Berechnung erstattet werden.)

Welche der 3 Transaktionen vom Miner gewählt wurde, der den Block findet. Miner können beliebige Transaktionen auswählen, solange sie gültige Statusänderungen zulassen. (Sie können dies tun, indem sie ihren eigenen Mining-Code schreiben oder den Vanilla-Client-Code an ihre Bedürfnisse anpassen.)

Für die Miner, die den Geth-Client betreiben, wählen sie Transaktionen basierend auf dem Preis und der Nonce aus, wobei der höchste Preis zuerst gilt. Siehe diese vorherige Antwort für eine detaillierte Erklärung: Was ist die Standardreihenfolge von Transaktionen während des Minings, zB in Geth? (Das Gleiche gilt höchstwahrscheinlich für den Parity-Client, obwohl ich mir den Code nicht angesehen habe.)

Hat der Zeitstempel der initiierten Transaktion Einfluss auf die Priorität?

Nein. Wenn sie alle gleichzeitig im Transaktionspool sind, gilt die oben erwähnte Reihenfolge. (Es gibt nichts im Vanilla-Client-Code, das den Zeitstempel berücksichtigt.)