Зачем каждой транзакции нужен свой номер
Допустим, ты подписал перевод и отправил его в сеть.
Что помешает кому-нибудь взять ту же самую подписанную транзакцию и отправить её ещё десять раз?
Если система видит корректную подпись, разве она не должна каждый раз выполнять команду?
Именно здесь появляется маленькое поле под названием nonce.
Если совсем просто, nonce — это последовательный номер операции конкретного аккаунта.
Первая транзакция получает один номер, следующая — следующий и так далее.
Представь обычную чековую книжку.
Ты выписал чек №25 на определённую сумму. Банк видит, что этот чек уже использован. Если кто-то принесёт его ещё раз, система не должна списать деньги повторно.
Примерно ту же проблему решает nonce.
Для аккаунта Ethereum сеть хранит счётчик. Транзакция должна иметь правильный следующий номер. Когда она выполняется, счётчик меняется.
Поэтому одну и ту же старую подписанную команду нельзя бесконечно повторять как новую операцию.
Но nonce делает ещё кое-что важное — создаёт порядок.
Допустим, аккаунт последовательно отправил транзакции №40, №41 и №42.
Сеть не может сначала нормально выполнить №42, забыв про №40 и №41. Состояние аккаунта должно меняться последовательно.
Представь очередь талонов в государственном учреждении.
На табло сейчас номер 40. Человек с талоном 42 уже пришёл и сидит в зале, но сначала система должна разобраться с предыдущими номерами.
Из-за этого иногда возникает странная ситуация: одна зависшая операция способна задержать следующие транзакции того же аккаунта.
Сами следующие операции могут быть вполне корректными. Проблема в том, что перед ними отсутствует нужное звено последовательности.
И здесь становится видно, зачем nonce вообще встроен на уровень аккаунта.
Блокчейн должен решить сразу две задачи:
— не позволять повторно исполнять старую подписанную транзакцию;
— точно понимать порядок изменений одного аккаунта.
Одна маленькая цифра помогает делать и то и другое.
Причём nonce — это хороший пример того, как блокчейн обеспечивает безопасность не одной гигантской системой защиты, а множеством небольших правил.
Подпись отвечает на вопрос:
«Действительно ли владелец ключа разрешил операцию?»
Nonce добавляет второй:
«А действительно ли именно эта операция сейчас следующая?»
Вместе они превращают набор цифровых команд в последовательную историю.
#nonce #транзакции #Ethereum #блокчейн #большаяисториякрипты
Допустим, ты подписал перевод и отправил его в сеть.
Что помешает кому-нибудь взять ту же самую подписанную транзакцию и отправить её ещё десять раз?
Если система видит корректную подпись, разве она не должна каждый раз выполнять команду?
Именно здесь появляется маленькое поле под названием nonce.
Если совсем просто, nonce — это последовательный номер операции конкретного аккаунта.
Первая транзакция получает один номер, следующая — следующий и так далее.
Представь обычную чековую книжку.
Ты выписал чек №25 на определённую сумму. Банк видит, что этот чек уже использован. Если кто-то принесёт его ещё раз, система не должна списать деньги повторно.
Примерно ту же проблему решает nonce.
Для аккаунта Ethereum сеть хранит счётчик. Транзакция должна иметь правильный следующий номер. Когда она выполняется, счётчик меняется.
Поэтому одну и ту же старую подписанную команду нельзя бесконечно повторять как новую операцию.
Но nonce делает ещё кое-что важное — создаёт порядок.
Допустим, аккаунт последовательно отправил транзакции №40, №41 и №42.
Сеть не может сначала нормально выполнить №42, забыв про №40 и №41. Состояние аккаунта должно меняться последовательно.
Представь очередь талонов в государственном учреждении.
На табло сейчас номер 40. Человек с талоном 42 уже пришёл и сидит в зале, но сначала система должна разобраться с предыдущими номерами.
Из-за этого иногда возникает странная ситуация: одна зависшая операция способна задержать следующие транзакции того же аккаунта.
Сами следующие операции могут быть вполне корректными. Проблема в том, что перед ними отсутствует нужное звено последовательности.
И здесь становится видно, зачем nonce вообще встроен на уровень аккаунта.
Блокчейн должен решить сразу две задачи:
— не позволять повторно исполнять старую подписанную транзакцию;
— точно понимать порядок изменений одного аккаунта.
Одна маленькая цифра помогает делать и то и другое.
Причём nonce — это хороший пример того, как блокчейн обеспечивает безопасность не одной гигантской системой защиты, а множеством небольших правил.
Подпись отвечает на вопрос:
«Действительно ли владелец ключа разрешил операцию?»
Nonce добавляет второй:
«А действительно ли именно эта операция сейчас следующая?»
Вместе они превращают набор цифровых команд в последовательную историю.
#nonce #транзакции #Ethereum #блокчейн #большаяисториякрипты