Я пытаюсь понять доказательство с нулевым разглашением и его приложения, мой первый инстинкт — это блокчейн (для простоты я буду использовать биткойн-подобный).
Я пытаюсь осмыслить это, описывая логические шаги для публичной транзакции в блокчейне. Все, что я читал, говорит о передаче значений другим путем обмена сообщениями с другой стороной (интерактивный zkp), но я не нашел ничего, чтобы проверить, действительны ли значения или нет в общедоступном пространстве (не интерактивный zkp), чтобы избежать двойного расходования или даже хранения данные надежно. Моя интуиция такова, что он также требует гомоморфных оценок значений, чтобы только получатель мог фактически знать, какое значение хранится, но также позволял сравнивать зашифрованные значения. Пока это то, что у меня есть (в логических шагах)
A и B являются парами ключей, каждая со следующими свойствами;
A(pub): открытый ключ
A (приват): закрытый ключ
A(env): Открытый (оценочный) ключ
V — валидатор
A хочет перевести 12 монет B и имеет 15 монет в своем кошельке, исходя из его последнего добавленного UTxI.
A шифрует значения UTxI и UTxO (12 и 3) Tx с помощью (B)env, поэтому теперь это H(i) и H(o)
A создает доказательство для каждого зашифрованного значения (H) как PH(i) и PH(o) и отправляет транзакцию.
Tx = H, UTxI => H(i), UTxO => H(o), In => A(pub), Out => B(pub), Proof of In => PH(i), Proof of Out = > РН(о),
V хочет знать, достаточно ли монет у A, чтобы отправить Tx B.
V использует гомоморфную оценку для добавления всех UTxO (H(o)) TX и сравнивает со всеми входами на A(pub), которые также зашифрованы.
V должен сделать то же самое с UTxI + UTxO, чтобы проверить, равны ли они балансу в A (pub)
V проверяет доказательства PH(i) и PH(o), если они действительны, продолжает принимать Tx.
B получает Tx и должен иметь возможность расшифровать все UTxI и UTxO, чтобы узнать, сколько монет он получил, используя (B)priv
и B(env) для обращения гомоморфного вычисления.
У него также есть доказательства каждого из них для третьих лиц, чтобы подтвердить, что у него есть именно эта сумма.
В этом примере используется какая-то биткойн-подобная система UTx, где количество монет в кошельке рассчитывается путем добавления входных данных неизрасходованных транзакций к этому адресу (извините, если в нем есть некоторые ошибки в логике), но выше я пытаюсь понять, как бы Блокчейн необходимо обновить, чтобы разрешить полностью частные транзакции и по-прежнему проверяться третьими сторонами.
Верна ли описанная логика или я что-то упускаю?
Спасибо за время!