Зачем нужны доказательства?
Индексатор сканирует блокчейн PIVX и строит реестр имён. Но почему кто-то должен ему доверять? Что если он:
- Выдумает регистрацию, которой в блокчейне не было?
- Возьмёт неверную плату?
- Зарегистрирует имя дважды?
- Подделает состояние реестра?
ZK-доказательства снимают эти вопросы. Каждое доказательство — криптографический сертификат того, что регистрация обработана правильно. Проверить его самостоятельно может кто угодно.
Что проверяет каждое доказательство
Генератор доказательств PIVX использует SP1 — виртуальную машину с нулевым разглашением на архитектуре RISC-V. Для каждой транзакции с доменом генератор выполняет внутри zkVM следующие проверки:
- Корректность имени — от 1 до 64 символов, строчные буквы, цифры и дефисы, в разрешённой зоне
- Корректность адреса — целевой адрес является экранированным адресом PIVX Sapling нужной сети в современной форме bech32
- Подпись Ed25519 — подпись под точным подписываемым сообщением действительна и сделана тем ключом, которого требует операция
- Инварианты операции — владение, состояние цены и порядок nonce согласуются с выполняемой операцией
- Защита от повтора — nonce строго больше предыдущего nonce записи
- Переход состояния — доказательство Меркла восстанавливает старый корень, а новый корень следует из применения ровно этого изменения
Если хоть одна проверка не проходит, доказательство создать невозможно.
Что доказательство не проверяет
Здесь точность важнее внушительности:
- Платёж внутри схемы не проверяется. Оплатила ли транзакция верную сумму и действительно
ли
BUYперевёл средства — это обеспечивает регистратор вне блокчейна, и проверить это может любой, кто воспроизведёт цепочку с опубликованным ключом просмотра. Доказательство владения нотой внутри zkVM обошлось бы гораздо дороже, чем сегодня стоит весь пакет, и дало бы более слабую гарантию, чем уже даёт воспроизведение: схема видит лишь обязательство ноты, а воспроизводящий индексатор — расшифрованную сумму и memo. - Схема не доказывает, что входные данные взяты из настоящей цепочки. Она доказывает, что при данном пакете переход соответствует правилам. А то, что пакет — это истинный, полный и правильно упорядоченный поток команд, устанавливается воспроизведением, см. Доверие и приватность.
Именно поэтому PiNS делает нарушения очевидными, а не предотвращает их: некорректный пакет вообще невозможно доказать, а пакет, взятый не из настоящей цепочки, будет опровергнут каждым независимым индексатором.
Публичные выходные данные
Каждое доказательство фиксирует 3 значения, навсегда с ним связанных:
| Выход | Описание |
|---|---|
old_root | Корень дерева Меркла до этой регистрации |
new_root | Корень дерева Меркла после этой регистрации |
end_block_height | Последний блок PIVX в пакете регистраций |
end_block_height привязывает доказательство к конкретному блоку PIVX, как контрольная точка. Любой может просканировать цепочку до этой высоты с опубликованным ключом просмотра и убедиться, что memo и суммы совпадают с тем, что заявлял пакет.