Warum wird bestätigt, dass im Mainnet immer 1 Block voneinander entfernt ist, wenn mehrere Transaktionen gleichzeitig initiiert werden - von web3.py und Infura.io

1. Ich muss in kürzester Zeit mehrere Transaktionen an dieselbe Vertragsadresse initiieren und eine Bestätigung vom Netzwerk erhalten. Bedeutet, dass mehrere Transaktionen im selben Block aufgezeichnet werden.

2. Durch die Verwendung von Web3.py und Infura.io. Auf dem Kovan-Netzwerktest wurde bestanden. Aber auf Mainnet wurde jede gleichzeitig initiierte Transaktion auf dem durch 1 Block getrennten Block bestätigt.

3. Das Gaslimit betrug 1 Million. Der Gaspreis war der sofortige Höchstpreis.

4.Nonce ist keine Frage. Ich erhalte die erste Transaktionsnonce durch getTransactionCount(), dann wird die zweite Transaktion von mir selbst gesetzt (nonce+1), um die Korrektheit der Nonce sicherzustellen, und der Test wird im Kovan-Netzwerk bestanden.

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Antworten (2)

Natürlich gibt es im Hauptnetz viel mehr Transaktionsstaus als in den Testnetzen, die Mempools der Miner sind voll. Während auf den Testnets die Blöcke nicht immer voll sind ( == Gaslimit erreichen), müssen auf dem Mainnet die Transaktionen sorgfältig ausgewählt werden, um dem gewählten Blockgaslimit möglichst genau zu entsprechen.

Könnte auch sein, dass die (Miner-)Clients so konfiguriert sind, dass sie mehr Gleichheit zwischen allen Absendern haben und nur eine Transaktion pro Absender pro Block annehmen (wenn nicht vielleicht einige Bedingungen gegeben sind - es ist nicht völlig unmöglich, mehr als eine Transaktion zu haben pro Absender pro Block, aber diese Gelegenheit ist sehr, sehr selten.)

it's not toally impossible to have more than one transaction per sender per blockDas passiert ständig, ich würde nicht sagen, dass es selten ist. Fast jeder Block hat mehrere Transaktionen von mindestens einer Adresse
Ja, ich habe festgestellt, dass die Vertragsadresse anderer Personen mehrere Transaktionen von derselben Adresse in einem Block hat.

Sie können Ihre Chancen erhöhen, indem Sie den Gaspreis erhöhen, aber es gibt keine Möglichkeit zu garantieren, dass mehrere Transaktionen in denselben Block aufgenommen werden. (abgesehen davon, dass du selbst Miner wirst)

Wenn Sie versuchen, zwischen der ersten und der zweiten Transaktion um etwas zu rennen, beachten Sie, dass Miner Sie „vorantreiben“ können. Sie können Ihre zweite Transaktion absichtlich verzögern und dazwischen ihre eigene ausführen. Wenn es einen wirtschaftlichen Anreiz für sie gibt, werden sie es wahrscheinlich tun.

Wenn Sie zwei Funktionsaufrufe im selben Block haben müssen, können Sie sie kombinieren, indem Sie einen Smart Contract verwenden, der beide Funktionen nacheinander aufruft. Wenn also Transaktion 1 Contract A, Function aufruft foo()und Transaktion 2 Contract B, Function aufruft bar(), dann können Sie einen Contract-Aufruf haben:

contract C {
  function grouped() {
    A.foo();
    B.bar();
  }
}