#dusk $DUSK
Решения двойной траты появились в двух разных разделах одних и тех же протокольных документов, и я продолжал относиться к ним как к одной и той же идее, пока не внимательно не изучил оба.

Лунный nonce: простой счётчик. У вашей учётной записи есть текущий nonce. Каждая транзакция должна включать ровно current_nonce + 1. Сеть отклоняет всё остальное. Видимо, последовательно, публично проверяемо.

Фениксовский nullifier: криптографическое значение, получаемое из секретного ключа заметки. Когда вы тратите заметку, вы отправляете nullifier. Сеть добавляет его в список nullifier. Никто не может повторно отправить тот же nullifier — двойная трата блокируется. Nullifier не раскрывает ничего о заметке или сумме.

В основной сети (mainnet) транзакции завершаются менее чем за 10 секунд. Оба механизма работают в этом окне — какую бы модель вы ни использовали, проверка на двойную трату разрешается до следующего блока.

Nonce «Лунного света» прозрачен по замыслу: он позволяет любому проверить, что транзакция действительно новая. Nullifier «Феникса» приватен по замыслу: он доказывает уникальность, не раскрывая, какую именно заметку потратили.

Сравнение оказывается интереснее, чем звучит: одинаковая базовая гарантия — это перевод новый и не подлежит повторению — обеспечивается совершенно разными способами раскрытия информации. Один публикует счётчик. Другой доказывает это, не показывая ничего.

Какой подход лучше масштабируется при высокой нагрузке транзакций — видимое последовательное состояние или приватные наборы nullifier? @Dusk

$DUSK #dusk