Каков максимальный размер транзакций, которые такие клиенты, как geth, могут хранить в txpool?

Каков лимит транзакций, которые клиенты Ethereum могут хранить в пуле транзакций?

Согласно этому ответу , Geth может хранить 64 транзакции на адрес, но каков максимальный размер общих транзакций в txpool?

Ответы (1)

Резюме

Он ограничен памятью вашего компьютера.

Из моего базового тестирования в разделе Что происходит, когда одноразовый номер транзакции слишком высок? , у меня произошел сбой 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 включена в блокчейн.
  • 10 транзакций со счета 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 транзакций готовы к обработке и вставке в блокчейн (при условии наличия достаточного количества газа).