Was ist das Transaktionslimit, das Ethereum-Kunden im Transaktionspool behalten können?
Geth kann gemäß dieser Antwort 64 Transaktionen pro Adresse speichern, aber wie groß ist die maximale Größe der Gesamttransaktionen in txpool?
Es ist durch den Arbeitsspeicher Ihres Computers begrenzt.
Aus meinen grundlegenden Tests in Was passiert, wenn eine Transaktions-Nonce zu hoch ist? , stürzte ich geth
mit 400 x 64 Transaktionen mit einer Datennutzlast von 4.500 Bytes ab, wenn ich in 4 GB RAM lief.
Ich gehe davon aus, dass Ihre Frage lautet, wie viele Transaktionen maximal im Transaktionspool gespeichert werden können. Wenn Sie fragen, was die maximale Größe einer einzelnen Transaktion ist, lautet die Antwort: Gibt es eine Begrenzung für die Transaktionsgröße? .
Es gibt einen Pool für ausstehende Transaktionen und eine Warteschlange für Transaktionen, die noch nicht verarbeitet werden können.
Die Datenstruktur, die den Transaktionspool in Geth darstellt, ist unter go-ethereum - tx_pool.go, Zeilen 54 bis 77 zu sehen :
// TxPool contains all currently known transactions. Transactions
// enter the pool when they are received from the network or submitted
// locally. They exit the pool when they are included in the blockchain.
//
// The pool separates processable transactions (which can be applied to the
// current state) and future transactions. Transactions move between those
// two states over time as they are received and processed.
type TxPool struct {
config *ChainConfig
currentState stateFn // The state function which will allow us to do some pre checks
pendingState *state.ManagedState
gasLimit func() *big.Int // The current gas limit function callback
minGasPrice *big.Int
eventMux *event.TypeMux
events event.Subscription
localTx *txSet
mu sync.RWMutex
pending map[common.Hash]*types.Transaction // processable transactions
queue map[common.Address]map[common.Hash]*types.Transaction
wg sync.WaitGroup // for shutdown sync
homestead bool
}
Von stackoverflow.com - Maximum number of elements in map , die maximale Anzahl von Elementen, die in einer Go-Map-Datenstruktur gespeichert werden können, gilt 2147483647
für 32-Bit-Architektur und 9223372036854775807
für 64-Bit-Architektur.
Ausstehende Transaktionen werden in TxPool.pending
einer map(transaction hash -> pointer to transaction)
. In go-ethereum - tx_pool.go gibt es keine Begrenzungsprüfung für die Anzahl der Transaktionen, wenn Transaktionen zu dieser Datenstruktur hinzugefügt werden.
Die Anzahl der Transaktionen im Pool anstehender Transaktionen wird effektiv durch den Speicher begrenzt.
Transaktionen in der Warteschlange werden in TxPool.queue
einer map(from address -> map(transaction hash -> pointer to transaction))
. In go-ethereum - tx_pool.go wird geprüft, dass die Anzahl der Transaktionen von derselben From
Adresse nicht überschritten wird maxQueued = 64
.
Die Anzahl der Transaktionen in der Transaktionswarteschlange wird effektiv durch den Speicher begrenzt, mit der Einschränkung, dass es nur maximal 64 Transaktionen für Transaktionen mit derselben From
Adresse geben kann.
Ausstehende Transaktionen sind Transaktionen, die verarbeitet und in den Block aufgenommen werden können.
Transaktionen in der Warteschlange sind Transaktionen, bei denen die Transaktions-Nonce nicht der Reihe nach ist. Die Transaktions-Nonce ist eine inkrementierende Zahl für jede Transaktion mit derselben From
Adresse.
Zum Beispiel:
0xaaaa...aaaa
mit Nonce 0 wurde in die Blockchain aufgenommen.0xaaaa...aaaa
mit Nonce 1 wurde in die Blockchain aufgenommen.0xaaaa...aaaa
mit den Nonces 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, die an einen Ethereum-Knoten gesendet wurden. Diese werden in die Transaktionswarteschlange gestellt, da die Transaktion vom Konto 0xaaaa...aaaa
mit Nonce 2 vom Ethereum-Knoten nicht gesehen wurde.0xaaaa...aaaa
mit Nonce 2 zum Transaktionspool hinzugefügt wurde, werden die 10 Transaktionen mit Nonce 3, 4, 5, 6, 7, 8, 9, 10, 11 und 12 aus der Warteschlange in den Pool für ausstehende Transaktionen verschoben und alle 11 Transaktionen sind bereit, verarbeitet und in die Blockchain eingefügt zu werden (vorausgesetzt, es gibt genug Gas).