Перейти к основному содержимому

Зачем нужны доказательства?

Индексатор сканирует блокчейн PIVX и строит реестр имён. Но почему кто-то должен ему доверять? Что если он:

  • Выдумает регистрацию, которой в блокчейне не было?
  • Возьмёт неверную плату?
  • Зарегистрирует имя дважды?
  • Подделает состояние реестра?

ZK-доказательства снимают эти вопросы. Каждое доказательство — криптографический сертификат того, что регистрация обработана правильно. Проверить его самостоятельно может кто угодно.

Что проверяет каждое доказательство

Генератор доказательств PIVX использует SP1 — виртуальную машину с нулевым разглашением на архитектуре RISC-V. Для каждой транзакции с доменом генератор выполняет внутри zkVM следующие проверки:

  1. Корректность имени — от 1 до 64 символов, строчные буквы, цифры и дефисы, в разрешённой зоне
  2. Корректность адреса — целевой адрес является экранированным адресом PIVX Sapling нужной сети в современной форме bech32
  3. Подпись Ed25519 — подпись под точным подписываемым сообщением действительна и сделана тем ключом, которого требует операция
  4. Инварианты операции — владение, состояние цены и порядок nonce согласуются с выполняемой операцией
  5. Защита от повтора — nonce строго больше предыдущего nonce записи
  6. Переход состояния — доказательство Меркла восстанавливает старый корень, а новый корень следует из применения ровно этого изменения

Если хоть одна проверка не проходит, доказательство создать невозможно.

Что доказательство не проверяет

Здесь точность важнее внушительности:

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

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

Публичные выходные данные

Каждое доказательство фиксирует 3 значения, навсегда с ним связанных:

ВыходОписание
old_rootКорень дерева Меркла до этой регистрации
new_rootКорень дерева Меркла после этой регистрации
end_block_heightПоследний блок PIVX в пакете регистраций

end_block_height привязывает доказательство к конкретному блоку PIVX, как контрольная точка. Любой может просканировать цепочку до этой высоты с опубликованным ключом просмотра и убедиться, что memo и суммы совпадают с тем, что заявлял пакет.