Wie werden Transaktionen von den Minern ausgewählt?

Die Bereitstellung von Transaktionsausführungen ist durch die block gas limitdynamisch veränderlichen begrenzt. Wenn ein Block nur zu einer Transaktion passt, dann ist das Gaslimit pro Transaktion theoretisch dasselbe wie das Blockgaslimit. Ab 2020 liegt diese Grenze bei rund 10 Millionen. Es gibt auch eine Mindestgrundgebühr für jede Transaktion von 21.000 Gas.


Geben Sie hier die Bildbeschreibung ein


Aus der Antwort auf diese Frage Wie werden Transaktionen in einem Block gespeichert? @Richard Horrocks:

Bergleute können Transaktionen jedoch nach Belieben ordnen, solange die Reihenfolge einer Reihe gültiger Zustandsübergänge entspricht.

[F] Daher wird die Transaktionsreihenfolge basierend auf den Minern entschieden, aber wie werden die Transaktionen entschieden, die in Blöcke aufgenommen werden sollen?

Wie ich weiß, wählen Miner die profitabelsten Transaktionen basierend auf aus gasPrice * gasLimit. Werden Ihre Transaktionen durch die Verwendung eines sehr hohen Gaslimits irgendwie langsamer ausgeführt? @iamdefinitelyahuman:

Die Begründung: Miner versuchen, ihren Gewinn innerhalb jedes Blocks zu maximieren. Aufrufe an eth_estimateGaskönnen rechenintensiv sein, sodass Miner normalerweise nicht das tatsächliche Gas bestimmen, das jeder TX verbraucht. Stattdessen berechnen sie gasPrice * gasLimitfür jede gegebene Transaktion und bestimmen daraus die kostengünstigste Gruppe von Transaktionen, die abgebaut werden können.


=> Zum Beispiel sende ich eine Transaktion mit einem sehr hohen Wert gasPricevon 10.000.000 gasLimit. Es wird ausgewählt und einem Block hinzugefügt. Da es den gesamten gasLimitBlock verbraucht, ist keine andere Transaktion enthalten.

Danach, während der Ausführung, verbrauchte meine Transaktion nur 21.000 Gas und der verbleibende Teil wird mir zurückerstattet. Es verbleiben noch 9.979.000 Gas, die auf dem Block verbraucht werden müssen. Kann der Miner dynamisch weitere Transaktionen hinzufügen, nachdem die Ausführung ausgewählter Transaktionen abgeschlossen ist?

oder alle Transaktionen werden statisch entschieden und können nicht aktualisiert werden, nachdem ihre Ausführungen abgeschlossen sind. Wenn dies der Fall ist, neigen Miner dazu, viele kleinere TXs gegenüber einem großen zu priorisieren, und größere werden nie eingesetzt.

=> Gibt es einen gemeinsamen Algorithmus für Miner, um zu entscheiden, welche Transaktionen in einen Block aufgenommen werden sollen? Nehmen wir an, werden alle Kombinationen ausstehender Transaktionen generiert, um die profitabelste mit Brute-Force- oder Greedy-Algorithmus auszuwählen? Da Zeit sehr wichtig ist, um das Rätsel zuerst zu lösen, kann die Entscheidung, welche Transaktionen in den Block aufgenommen werden sollen, zusätzliche Zeit in Anspruch nehmen.

Antworten (1)

Wie wird entschieden, welche Transaktionen in Blöcke aufgenommen werden?

Kurze Antwort

Wie sie wollen.

Es ist nicht deterministisch und wird nicht durch das Protokoll eingeschränkt.

eine Transaktion mit einem sehr hohen gasPrice, der 10.000.000 gasLimit hat.

Allein mit gasLimit zu arbeiten, wäre aufgrund des von Ihnen gegebenen Beispiels ein sehr ineffizienter Miner. Bei der Ausführung verbrauchte die Transaktion nur eine sehr geringe Menge an Gas und zahlte daher nur eine sehr geringe Gebühr.

Aus Sicht des Bergmanns gibt es keinen Unterschied zwischen „tatsächlichen“ Kosten und geschätzten Kosten. Dies liegt daran, dass der Miner tatsächlich die kanonische Transaktionsreihenfolge bestimmt. Falls das etwas kryptisch ist:

  1. Transaktionen können aufgrund unbekannter vorheriger Bedingungen (beim Minen) und bedingter Logik (z. B. mehrmaliges Herumschleifen == mehr Gas) etwas unvorhersehbare Kosten haben. Daher füllen Absender gasLimit oft mit ausreichend Gas auf, um den schlimmsten Fall abzudecken, da sie wissen, dass sie trotzdem eine Rückerstattung erhalten.
  2. Der Miner packt ausstehende Transaktionen in einer bestimmten Reihenfolge in einen vorgeschlagenen Block, damit er die Transaktion proben und genau herausfinden kann, was sie in diesem Zusammenhang kosten wird – also ist verbranntes Gas die bessere Zahl und sie sollten es wahrscheinlich verwenden .

Kann der Miner dynamisch weitere Transaktionen hinzufügen, nachdem die Ausführung ausgewählter Transaktionen abgeschlossen ist

Ja. Das tun sie. Sie spielen Tetris mit ausstehenden Transaktionen und versuchen, den in Blöcken verpackten Gaspreis * zu optimieren. Alles, was sie tun, ist hypothetisch. Sie können die Transaktionen (tatsächliche Gaskosten) proben und den Block packen, aber nichts ist abgeschlossen, bis sie die schwer fassbare Nonce finden und ihren Block senden. Es besteht keine Einschränkung, die Konfiguration neu anzuordnen, wenn neue Transaktionen eintreffen und sich neue Gelegenheiten ergeben.

Intuitiv

Um die Optimierungen und Algorithmen wirklich zu sehen, sollten Sie in den Quellcode der beliebten Miner eintauchen. Ich bin mir nicht sicher, ob sie es so machen, weil "wie sie wollen" viele meiner Bedenken abdeckt. Nachdem ich das gesagt habe ...

Wenn ich mich diesem Problem nähern würde, würde ich, glaube ich, einem Algorithmus wie dem Packen eines Schiffscontainers folgen, in dem ich die maximal mögliche Masse auf begrenztem Raum haben möchte.

Ein möglicherweise naiver, aber einfacher Weg wäre, die Kisten/Transaktionen nach Dichte/Gaspreis zu ordnen und sie in dieser Reihenfolge (absteigend) zu stopfen. Das würde einige Hohlräume hinterlassen.

Ein Block ist ein eindimensionaler Raum, sodass wir uns keine Gedanken über die Form des zusätzlichen Raums machen müssen. Füllen Sie also einfach den höchsten gasPrice (jede Größe / jede Gasverbrennung) in den gesamten verfügbaren Raum und fahren Sie fort, bis kein verbleibendes gasLimit mehr vorhanden ist.

Es würde Gelegenheiten für kleine Transaktionen mit niedrigem Gaspreis geben, die gegen Ende passen, da der Algo nach etwas suchen wird, das klein genug ist, um den letzten verbleibenden Platz zu füllen. Es würde die Transaktion mit dem höchsten tatsächlich passenden gasPrice bevorzugen.

Ich denke, die Realität ist etwas nuancierter, da ein Miner auch die Suche nach der Nonce optimieren muss und möglicherweise nicht zu viel Zeit für die Reorganisation aufwenden sollte, wenn neue Transaktionen eintreffen. Ich habe mich oft gefragt, wie oft sie neu bewerten. Es kann tatsächlich insgesamt effizienter sein, sich hauptsächlich auf die Suche nach der Blockbelohnung zu konzentrieren, anstatt eine Pause einzulegen, um die Transaktionsgebühren vollständig zu optimieren. Auch die Möglichkeit, dass Bergleute unterschiedliche Ansätze verwenden, hat den Effekt, dass die Art und Weise, wie das Netzwerk es insgesamt tut, ausgeglichen wird. Wenn beispielsweise einige Miner große oder kleine Transaktionen ignorieren, wird diese Verzerrung durch andere Algorithmen ausgeglichen, die sich mit anderen Methoden nähern.

Als dApp-Entwickler oder -Benutzer reicht es normalerweise aus zu verstehen, dass Transaktionen von gasPrice ungefähr priorisiert werden, große Transaktionen aufgrund des massiven Blocks, den sie benötigen, einige Zeit dauern können und Miner innerhalb der Protokollbeschränkungen tun dürfen, was sie wollen , blockieren hauptsächlich gasLimit.

Ich hoffe es hilft.

Ich hoffe es hilft.

Wenn also, wie ich verstehe, eine Transaktion mit einem sehr hohen Wert von gasPrice10.000.000 gasLimitausgewählt wird, die nur 21.000 Gas verbraucht, werden später neue Transaktionen aus den ausstehenden Transaktionen zum verbleibenden gasLimit-Betrag hinzugefügt. Dies geht rekursiv weiter (da der Rückerstattungsprozess stattgefunden hat auch für neu ausgewählte Transaktionen) bis eine Gasmenge einer angepassten Transaktion verbraucht wird, die nahe bei 10.000.000 (aktuell gasLimit) liegt.
Sie sprechen einen guten Punkt über eine Subtilität an. Die gezahlten Gebühren beziehen sich auf den Verbrauch / die Nutzung, sodass der Miner auf der Grundlage dessen, was verbrannt wird, einen Anreiz erhält. Wenn ich mich nicht irre, sieht der Block gasLimit so aus, als würde Gas geliefert. Die meisten Brieftaschen warnen davor, Gas über dem Limit zu liefern, da es nicht akzeptiert wird. Es würde einige Experimente erfordern, um zu bestätigen, dass es wirklich verboten ist, falls der txn unter dem Limit laufen kann. Hmmm
Wenn das gelieferte Gas das Verpacken einschränkt, wie ich denke, impliziert dies einen negativen Anreiz, eine Transaktion zu verarbeiten, die viel "Platz" mit überschüssigem geliefertem Gas verbraucht. Der Bergmann würde auswerten, wie viel Gas tatsächlich verbrannt wird, wenn er versucht, so viel Verbrennungspreis wie möglich in einen Block zu packen. Ihre 10-Millionen-Gastransaktion, die nicht viel verbrennt, würde einen Block mit nutzlosem Gas füllen und dabei eine geringe Gebühr zahlen.
"Erwägen Sie, in den Quellcode der beliebten Miner einzudringen" Sind sie Open Source? Kennen Sie welche?
Geth ist. Andere würden eine gute neue Frage stellen ;-)