Transaktion, Block und Mining

Ich suche nach einer detaillierten Erklärung (Video wäre am besten), wie und wann Transaktionen im Ethereum-Netzwerk (theoretisch) abgebaut werden, seit sie mit erstellt wurden web3.eth.sendTransaction().

Genauer gesagt: Annahmen: Zeit zum Minen des Ethereum-Blocks = 16 Sekunden. Wenn Block Nr. 99 wurde bei t = 0 mit dem Mining begonnen und bei t = 16 beendet, Block 100 begann bei t = 16 und wird immer noch abgebaut, und ich erstelle die Transaktion (t = 17) und sie befindet sich im PendingTransactions-Pool.

  1. Wann wird die Transaktion ausgewählt, die in den Block aufgenommen werden soll? (Ich weiß, dass Gas und GasPrice Schlüsselfaktoren sind, und ich bin mir bewusst, dass es ein Gasblocklimit gibt), aber ich suche nach einer grafischen Erklärung (nehmen wir an, dass GasPrice ziemlich hoch ist und 700 Gwei beträgt). Was sind mögliche Szenarien?
    • Wird die Transaktion in Block 101 aufgenommen?
    • Kann es immer noch in Block 100 aufgenommen werden, wenn einer der Miner nicht mit dem Abbau von Block 100 begonnen hat?
    • Wenn es in Block 101 abgebaut wird, wird der Rest des Netzwerks über die Transaktion in Block 102 Bescheid wissen, sobald sie mindestens einmal bestätigt wurde?

Ich habe nach Antworten auf meine Fragen gesucht und viele verwandte Themen gefunden, über Gas, GasPrice, GHOTS-Protokoll gelesen, aber das scheint mir immer noch nicht ganz klar zu sein.

Danke!

Antworten (1)

Nach meinem Verständnis möchte ich auf einige Dinge hinweisen, die Sie meiner Meinung nach vermissen.

  1. Es gibt keine Garantie dafür, dass das Mining eines Blocks genau alle t Sekunden durchgeführt wird (bei Ihren Annahmen t = 16 Sekunden). Die durch t definierte Zeit ist die durchschnittliche Zeit für das Mining eines Blocks, und das Netzwerkprotokoll behält den Durchschnitt bei, indem es die Schwierigkeit entsprechend ändert, nachdem ein Block geschürft wurde. Das Mining eines Blocks umfasst das Generieren eines Hashs, der der Schwierigkeit (der Anzahl der Nullen vor dem Hash-Wert) zu diesem Zeitpunkt entspricht (das Generieren dieses Hashs ist der Wettbewerb zwischen den Knoten).

  2. Das Generieren von Blöcken wird immer stattfinden, unabhängig davon, ob Transaktionen ausstehen oder nicht, um die Wachstumsrate der Blockchain beizubehalten, wodurch verhindert wird, dass Angreifer eine längere Blockchain generieren, ohne mindestens 51 % der Rechenleistung des Netzwerks zu besitzen.

  3. Eine Transaktion, die ausgewählt wird, um in einen Block aufgenommen zu werden, hängt von dem Gaspreis ab, den Sie zu zahlen bereit sind. Dies liegt daran, dass der Miner Ihre Transaktion nicht berücksichtigt, wenn er eine Transaktion findet, die mehr bezahlen möchte. Verweisen Sie auf die Antwort auf diese Frage (Wenn die Transaktionen jedoch von derselben Kontoadresse stammen, ist die Nonce von Bedeutung, um doppelte Ausgaben zu vermeiden).

In Bezug auf Ihr Szenario kann die Transaktion in jeden Block aufgenommen werden, beginnend mit dem 100. (dh einschließlich dem 100.), abhängig von dem von Ihnen definierten Gasreis und anderen ausstehenden Transaktionen und deren Gaspreisen. Sobald jedoch ein Block abgebaut ist, sendet der Miner-Knoten ihn an das Netzwerk und nach Erhalt der Nachricht, dass der Block abgebaut ist, validieren die anderen Knoten ihn und stoppen das Mining für diesen Block und beginnen mit dem Mining des nächsten Blocks. Daher erfahren die Knoten von den Transaktionen, die im vorherigen Block enthalten sind.

Das Whitepaper von Ethereum erklärt dies gut. Sie können sich auch auf das Bitcoin-Whitepaper beziehen