Параметр nonce кажется необязательным для транзакций. Его цель — защитить от повторных атак. В таком случае, почему это необязательно и что произойдет, если его не предоставить? Это оставляет конкретную транзакцию подверженной повторным атакам?
Если не указано, то одноразовый номер будет считан из состояния учетной записи в блокчейне (это часть состояния блокчейна).
Однако иногда бывает полезно указать его явно. Это может быть полезно, например, если вам нужно повторно отправить транзакцию с более высокой ценой на газ, если первая не добывается. Если вы отправите его снова с тем же одноразовым номером, он (может) перезаписать первый.
Таким образом, одноразовый номер появляется во всех транзакциях независимо от того, указываете вы его или нет, и он защищает от повторного воспроизведения.
Одноразовый номер не является необязательным. Чтобы быть действительной, транзакция должна предоставить одноразовый номер.
Одноразовый номер, который вам нужно предоставить для следующей транзакции, обычно можно рассчитать, взглянув на блок-цепочку. Большинство кошельков и другого программного обеспечения, которое выполняет транзакции, сделает это за вас за кулисами, поэтому вам не нужно вручную предоставлять одноразовый номер, если только у вас нет неподтвержденных транзакций, о которых используемое вами программное обеспечение не знает.
Планируется разрешить пользователям определять собственные схемы подписания транзакций . Если и когда это будет реализовано, можно будет вообще отказаться от одноразового номера, если вам не нужна защита от повторного воспроизведения, или использовать другую систему, которая лучше соответствует вашим потребностям.
что произойдет, если это не предусмотрено?
Параметр nonce увеличивается каждый раз ((как столбец Identity в SQL), когда происходит транзакция, и его установка не обязательна.
При желании вы также можете установить одноразовый номер для транзакции, и ниже есть бонусный ответ от Reddit .
Чтобы заранее ответить на ваш следующий вопрос.
Что произойдет, если я отправлю транзакцию с одноразовым номером, который уже был транзакцией?
Он будет отклонен сетью. Что произойдет, если я отправлю одноразовый номер выше, чем правильный следующий одноразовый номер для использования?
Транзакция будет сохранена в мемпуле узлов в состоянии ожидания. Он будет оставаться в мемпуле узла до тех пор, пока транзакции со всеми одноразовыми номерами между последним действительным инкрементным одноразовым номером для учетной записи и транзакцией, хранящейся в мемпуле, не будут переданы в сеть, а затем транзакция будет выполняться как обычно. Возможно, узлы в конечном итоге удалят вашу транзакцию из мемпула, если она слишком долго ждала там.
эт