Я рассматривал прозрачную модель транзакций Dusk и сначала пропустил одну вещь, которая звучала почти слишком базово: nonce.

Moonlight — это основанная на аккаунтах модель транзакций Dusk. У каждого аккаунта есть публичный ключ, баланс и nonce; при этом nonce выступает счетчиком для транзакций, отправляемых с этого аккаунта.

У этого крошечного счетчика работа гораздо серьезнее, чем кажется на первый взгляд.

В whitepaper явно сказано, что nonce связан с защитой от повторов. Транзакция не просто считается разрешенной, потому что подпись действительна; также должна иметь смысл последовательность транзакций аккаунта.

Это один из тех компонентов инфраструктуры блокчейна, которые пользователи почти никогда не замечают, когда всё работает правильно.

Ты подписываешь транзакцию, сеть ее обрабатывает, твой баланс меняется — и ты идешь дальше.
Но без механизмов, предотвращающих повторное принятие старой действительной транзакции, та же самая авторизация потенциально может превратиться в совершенно другую угрозу безопасности.
То, что мне интересно в Dusk, — что Moonlight и Phoenix решают одни и те же фундаментальные требования к транзакциям через очень разные модели.

Moonlight публично показывает состояние аккаунта, балансы и метаданные транзакций. Phoenix переносит проверку баланса и защиту от двойных трат в ZK-доказательства и nullifiers. И всё же обе модели должны подтвердить владение, предотвратить маллеабельность и остановить двойные траты.

Поэтому реальное проектное решение — не просто «публичное против приватного».

Это то, какую часть перехода состояния сеть может проверять напрямую, а какую нужно доказывать криптографически.
И из-за этого скромный nonce оказывается интереснее, чем звучит.

Видимая транзакция — это только поверхность. Под ней — набор правил, гарантирующих, что одну и ту же авторизацию нельзя просто так повторить.

Сколько «функций» блокчейна на самом деле являются невидимыми предположениями по безопасности, которые пользователи замечают только тогда, когда они не срабатывают?

@Dusk $DUSK #dusk