Недавно я увлекся блокчейном и начал изучать Ethereum. Я столкнулся с концепцией nonce в Ethereum.
После исследования я обнаружил, что nonce используется для двух целей.
а. Для поддержания транзакции, связанной со счетом, в порядке. т.е. если есть транзакция с одноразовым номером 3, связанная с какой-либо учетной записью в txpool, и какая-то транзакция получит одноразовый номер 4, то эта транзакция не будет добыта до тех пор, пока транзакция с одноразовым номером 3 не будет добыта.
Я это поняла.
Но у меня есть вопрос, который я не могу найти?
i) значение одноразового номера связано с адресом, верно? Таким образом, два адреса могут иметь один и тот же одноразовый номер одновременно, т. е. учетная запись с адресом A может иметь последний одноразовый номер 2, аналогично учетная запись с адресом B также может иметь последний одноразовый номер 2.
ii) Будут ли все узлы в сети иметь одинаковое последнее значение nonce для всех учетных записей, доступных в сети?
То есть, если есть три аккаунта и 2 майнера, то значение nonce для трех аккаунтов равно 1,2,3 соответственно, тогда оба майнера будут иметь одинаковый nonce.
Предположение: оба майнера синхронизированы
б) как одноразовый номер используется для предотвращения двойной траты?
Что такое одноразовый номер в Ethereum?
Если вы обратитесь к Глоссарию на Github Wiki , в Ethereum используются два типа nonce.
Аккаунт одноразовый: счетчик транзакций в каждом аккаунте. Это предотвращает атаки повторного воспроизведения, когда транзакция, например, отправляется. 20 монет от A до B могут воспроизводиться B снова и снова, чтобы постоянно истощать баланс A.
Proof of work nonce: бессмысленное значение в блоке, которое можно изменить, чтобы попытаться выполнить условие доказательства работы.
Здесь вы имеете в виду одноразовый номер учетной записи, который представляет собой количество транзакций с этой учетной записи.
i) Значение одноразового номера связано с адресом, верно? Таким образом, два адреса могут иметь один и тот же одноразовый номер одновременно, т. е. учетная запись с адресом A может иметь последний одноразовый номер 2, аналогично учетная запись с адресом B также может иметь последний одноразовый номер 2.
Да, как объяснялось выше, это количество транзакций и, следовательно, оно связано с учетной записью. Поскольку это увеличивающееся число, две учетные записи могут иметь один и тот же одноразовый номер одновременно.
ii) Будут ли все узлы в сети иметь одинаковое последнее значение одноразового номера для всех учетных записей, доступных в сети?
Когда узлы синхронизируются с блокчейном, в конечном итоге они это сделают. Поскольку узел принимает самую длинную действительную цепочку, нет проблемы, что все узлы не будут обновляться с последним значением одноразового номера в тот момент, когда транзакция добывается. После синхронизации они будут иметь одинаковое значение одноразового номера для учетной записи. (Это очевидно, потому что в блокчейне все узлы должны иметь одни и те же данные блока. Таким образом, через определенное время вы можете быть практически уверены, что транзакция подтверждена, отсюда и значение nonce)
б) одноразовый номер используется для предотвращения двойной траты как?
Избежать двойной траты означает перестать использовать одну и ту же сумму дважды. Если значение nonce установлено одинаковым, будет майнить только одна из транзакций, и большую часть времени это может быть транзакция с более высокой ценой газа, но, тем не менее, не произойдет двойной траты, так как в конце будет иметь место только одна транзакция в любой из них. кейс.
Другой трюк, которого можно избежать с помощью nonce, заключается в использовании более высоких цен на газ, чтобы транзакция, отправленная позже, была добыта раньше, чем более ранняя транзакция с той же учетной записи.
Рассмотрим ситуацию, когда A отправляет транзакцию X ETH пользователю B в качестве платежа, а на счете A есть только эти X ETH. После того, как транзакция была отправлена для майнинга, А может отправить другую транзакцию на X ETH с более высокой ценой газа на одну из своих учетных записей, позволив первой отправленной транзакции быть добытой позже, получив более высокий приоритет в очереди ожидающих транзакций. Но поскольку Ethereum принимает во внимание одноразовый номер, это недопустимо, поскольку одноразовый номер более поздней транзакции выше, чем у предыдущей.
Вы также можете обратиться к этому вопросу .
Во-первых, это «нонс», а не «объявление».
i) Да, у каждого адреса есть одноразовый номер. Адреса могут иметь один и тот же одноразовый номер, и часто так и есть.
ii) Да, все узлы в одной цепочке блоков записали один и тот же одноразовый номер для каждого адреса, потому что одноразовые номера хранятся внутри цепочки блоков.
б) Nonce — это просто счетчик, который отслеживает количество транзакций, отправленных адресом.
Предположим, адрес A имеет 1 ETH.
Во-первых, он пытается отправить 1 ETH на адрес B. Давайте назовем эту транзакцию A0, потому что она была подписана A, и у нее есть nonce 0. Теперь A пытается удвоить трату этого 1 ETH, отправив другую транзакцию 1 ETH на C: назовем это транзакцией A1. A1 будет немедленно отклонен всеми узлами, потому что каждый узел видит, что A1 должен идти после A0, а после A0 в A недостаточно ETH для отправки A1.
Таким образом, вы не можете дважды тратить с разными одноразовыми номерами.
А может попробовать другую стратегию: дважды потратить один и тот же одноразовый номер. Сначала A отправляет транзакцию A0 в B, а затем другую транзакцию A0 в C. Оба имеют одинаковый одноразовый номер и один и тот же источник, но разные адресаты. Только одна из транзакций A0 будет принята в блокчейн, потому что все узлы могут видеть, что одноразовый номер 0 был использован дважды A, а это недопустимо.
Таким образом, вы также не можете дважды потратить один и тот же одноразовый номер.
Прашант Прабхакар Сингх
судо
джин