Каков лимит транзакций, которые клиенты Ethereum могут хранить в пуле транзакций?
Согласно этому ответу , Geth может хранить 64 транзакции на адрес, но каков максимальный размер общих транзакций в txpool?
Он ограничен памятью вашего компьютера.
Из моего базового тестирования в разделе Что происходит, когда одноразовый номер транзакции слишком высок? , у меня произошел сбой geth
с транзакциями 400 x 64 с полезной нагрузкой данных 4500 байт при работе с 4 ГБ ОЗУ.
Я предполагаю, что ваш вопрос спрашивает, какое максимальное количество транзакций может храниться в пуле транзакций. Если вы спрашиваете, каков максимальный размер одной транзакции, ответ будет «Есть ли ограничение на размер транзакции?». .
Существует пул для отложенных транзакций и очередь для транзакций, которые не готовы к обработке.
Структуру данных, представляющую пул транзакций в geth, можно увидеть на сайте go-ethereum — tx_pool.go, строки с 54 по 77 :
// 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
}
От stackoverflow.com — максимальное количество элементов в карте , максимальное количество элементов, которые могут храниться в структуре данных карты Go, 2147483647
для 32-битной архитектуры и 9223372036854775807
для 64-битной архитектуры.
Ожидающие транзакции хранятся в TxPool.pending
файле map(transaction hash -> pointer to transaction)
. В go-ethereum — tx_pool.go нет проверки лимита на количество транзакций при добавлении транзакций в эту структуру данных.
Количество транзакций в пуле ожидающих транзакций фактически ограничено объемом памяти.
Транзакции в очереди хранятся в TxPool.queue
файле map(from address -> map(transaction hash -> pointer to transaction))
. В go-ethereum — tx_pool.go есть проверка, чтобы количество транзакций с одного From
адреса не превышало maxQueued = 64
.
Количество транзакций в очереди транзакций фактически ограничено памятью с тем ограничением, что может быть не более 64 транзакций для транзакций с одним и тем же From
адресом.
Ожидающие транзакции — это транзакции, готовые к обработке и включению в блок.
Транзакции в очереди — это транзакции, в которых одноразовый номер транзакции не является последовательным. Транзакционный одноразовый номер — это увеличивающийся номер для каждой транзакции с одним и тем же From
адресом.
Например:
0xaaaa...aaaa
с одноразовым номером 0 включена в блокчейн.0xaaaa...aaaa
с одноразовым номером 1 включена в блокчейн.0xaaaa...aaaa
с одноразовыми номерами 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, отправленные на узел Ethereum. Они помещаются в очередь транзакций, поскольку транзакция со счета 0xaaaa...aaaa
с одноразовым номером 2 не была замечена узлом Ethereum.0xaaaa...aaaa
с одноразовым номером 2 будет добавлена в пул транзакций, 10 транзакций с одноразовым номером 3, 4, 5, 6, 7, 8, 9, 10, 11 и 12 будут перемещены из очереди в пул ожидающих транзакций. и все 11 транзакций готовы к обработке и вставке в блокчейн (при условии наличия достаточного количества газа).