Незавершенные транзакции «отбрасываются» и «восстанавливаются»?

Я попробовал простой перевод эфира между двумя аккаунтами с помощью geth, но установил довольно низкую цену на газ (2 gwei). Через два часа транзакция все еще отображалась в geth under eth.pendingTransactions— я предположил, что это связано с отсутствием спроса на майнинг по такой цене на газ.

Однако в этот момент я проверил обе учетные записи на Etherscan , чтобы установить, не транслировалась ли транзакция с моей локальной машины. Транзакция отображалась как ожидающая, но с возрастом всего 40 минут . Примерно через десять минут я обновился, и транзакция исчезла с обеих страниц Etherscan, но все еще отображалась в geth. Через несколько минут транзакция снова появилась на Etherscan, но возраст был сброшен до 2 минут . С этого момента я периодически проверял, пока транзакция в конечном итоге не завершилась (через четыре часа после отправки), без повторного сброса Etherscan.

Поскольку я был обеспокоен в течение короткого времени, когда транзакция исчезла, я хотел бы немного лучше понять основной процесс. Мое понимание будет примерно таким:

  1. Транзакция отправлена
  2. Первые показы ожидаются в geth
  3. Распространяется на остальную часть сети - в конечном итоге становится видимым как ожидающее на всех актуальных узлах
  4. «Выбранный» для майнинга (несколько майнеров или только один?) как часть определенного блока
  5. После завершения блока обновленный статус транзакции распространяется на остальную часть сети.
  6. Когда моя локальная копия geth синхронизируется с этим блоком, изменения баланса счета показывают

Однако мой сегодняшний опыт показывает, что это может быть не так просто, поскольку моя ожидающая транзакция исчезла, а затем снова появилась в Etherscan (один узел?). Какая была бы более точная последовательность событий?

Ответы (1)

Насколько я понимаю, ваше понимание правильное, за исключением того, что вы упускаете одно конкретное свойство программного обеспечения узла Ethereum. А именно, как часть #3, транзакция хранится в пуле транзакций узла (см. мемпул Биткойн). Обычно транзакции живут там до тех пор, пока не будут добыты, но поскольку компьютеры имеют конечную память и вычислительную мощность, пул транзакций по необходимости также имеет конечный размер. Транзакции, которые не были добыты, могут быть вытеснены из памяти, если пул транзакций заполнен (я предполагаю, что порядок зависит от реализации - предположительно сохраняются транзакции с более высокой стоимостью). Таким образом, ваша транзакция, вероятно, была исключена из пула транзакций Etherscan, но была «рециркулирована» другим узлом после того, как пул транзакций Etherscan освободил часть памяти.

Разве не прекрасно наблюдать, как рынок реагирует на основные принципы спроса и предложения? Полностью люблю деньги с открытым исходным кодом.
Моя проблема с точностью до наоборот, я хочу, чтобы моя ожидающая транзакция была окончательно сброшена, но сейчас прошло более 24 часов, а она все еще находится в ожидании. Что, если мемпул никогда не заканчивается, это означает, что пока в мемпуле есть место, моя ожидающая транзакция будет там вечно?? Я просто хочу, чтобы его бросили, но боюсь, что он останется там навсегда. И это действительно большая проблема, потому что я не могу ничего делать со своим контрактом aave, пока с ним что-нибудь не случится. А именно, мои деньги застряли в контракте aave до тех пор, пока эта транзакция не будет успешной или не будет удалена.
@MoisésBriseñoEstrello Кажется, у вас другой вопрос. Однако я думаю, что ethereum.stackexchange.com/questions/25866/… может помочь. См. «транзакция репоста».