Давайте представим, что у меня есть две почти одинаковые транзакции, разница только в их to
поле. Первая транзакция - A
, has 0x1111....
и вторая - B
, has 0x22222....
в to
поле.
Если я отправлю их одновременно - что произойдет? Я вижу два разных пути:
«Мир» будет разделен на две части: те узлы, которые получили A
сначала, и те, которые получили B
. Так что в зависимости от того, где находится "наш" майнер - A
или B
будет майнить, 50/50.
Узлы Ethereum позволяют заменять транзакции, если они не подтверждены. Итак, если транзакция еще не добыта, а нода получает новую — она заменяет.
И второй вопрос. Давайте установим gasPrice
для в B
два раза больше, чем в A
.
A
B
Есть ли B
шансы победить в этой гонке? Я имею в виду, есть ли такое правило, как: "Если есть транзакция с какого-то адреса в tx pool, но есть другая транзакция с того же адреса и она дороже - первая транзакция должна быть заменена на вторую"
Заранее спасибо!
Если я отправлю их одновременно - что произойдет?
Узел не заменит транзакции одним и тем же одноразовым номером, если только цена газа для новой транзакции не превысит определенное значение ( по умолчанию: 10%, минимум: 1% ). В результате A
или B
будет добыто зависит от того, какую транзакцию майнер получил первой. Обратите внимание, что не добытая транзакция будет удалена, когда узел получит добытый блок.
Есть ли у B какие-либо шансы выиграть эту гонку?
Да. Account Nonce
используется в Ethereum для замены транзакции, которая не добывается. Отправка транзакции с такой же nonce
и более высокой ценой газа заменит старую. В обычном случае nonce
следует увеличивать на 1 каждый раз, когда вы отправляете транзакцию, чтобы учетная запись могла отправлять несколько транзакций одновременно.
Это не то.
Отправленные транзакции попадают в очередь ожидающих транзакций. Да, сетевые узлы обнаруживают ожидающие транзакции в свое время, конечно, не одновременно, но это не имеет значения.
Процесс майнинга устанавливает определенный порядок транзакций, принимаемых в цепочку. Это может быть A, затем B или B, а затем A. В любом случае транзакции будут обрабатываться всеми узлами в одном и том же порядке.
Блок — это упорядоченный набор транзакций. Блокчейн — это упорядоченный набор блоков. В более широком смысле блокчейн — это упорядоченный набор транзакций. На самом деле все будут обрабатывать транзакции в одинаковой последовательности, рано или поздно.
Надеюсь, поможет.
natewelch_
to
иgasPrice
. Это всегда будет A или B, так как они имеют одинаковый одноразовый номер.Роб Хитченс
natewelch_