в архитектуре конфиденциальности Starknet есть концепция, которую легко упустить, но она может быть самой элегантной частью всей системы: нулевые идентификаторы. вот в чем проблема. в конфиденциальном пуле вы держите зашифрованные заметки, которые представляют ваши токены. когда вы тратите заметку, системе нужно предотвратить двойные траты. но ей также нужно скрыть, какую заметку вы тратите. эти две цели находятся в прямом противоречии. решение: когда вы тратите заметку, вы публикуете нулевой идентификатор. уникальное значение, полученное из заметки и вашего приватного ключа просмотра. нулевой идентификатор помечает заметку как потраченную. но никто, кто наблюдает, не может связать нулевой идентификатор с оригинальной заметкой, потому что для его вычисления требуется ваш приватный ключ. поэтому система знает, что что-то было потрачено. она просто не знает, что именно. и человек, который отправил вам заметку, тоже не может сказать, когда вы ее тратите, потому что у него нет вашего ключа просмотра. это тот вид криптографического дизайна, который требует лет, чтобы его правильно реализовать. и он уже работает в спецификации STRK20s, написанной полностью на Cairo, подлежащей аудиту в одной кодовой базе.