Можно ли реализовать zk-snarks в этом сценарии использования?
Я хочу сделать что-то похожее на децентрализованное приложение для конкурса популярности домашних животных. Насколько я понимаю, это будет включать неинтерактивное доказательство с нулевым разглашением.
Есть приложение со списком питомцев, участвующих в конкурсе популярности. К каждому питомцу прикреплен счетчик популярности.
// Pseudo-code
petList = [Cobra, Elephant, Lion, Vulture]
petList[0].popularityMeasure = 0;
petList[1].popularityMeasure = 0;
petList[2].popularityMeasure = 0;
petList[3].popularityMeasure = 0;
Каждый человек выражает свой выбор, вызывая функцию смарт-контракта, например:
function sayMyChoice(witness) // witness is some sort of proof containing the name of the animal I'm opting for
Затем смарт-контракт проверяет
function sayMyChoice(witness) {
for(int i=0; i<petList.length. i++) {
if(witness == petList[i])
petList[i].popularityMeasure+=1;
}
}
Прилавки должны быть общедоступными, но вы понятия не имеете, кто выбрал какое домашнее животное.
Мой вопрос состоит из нескольких частей:
- Возможно ли это со смарт-контрактами и zk-snarks?
- Если нет, то как я мог это сделать?
- Если да, есть ли какое-либо руководство по реализации чего-то подобного с использованием Solidity и JavaScript?
Я предполагаю, что доказательство должно быть вычислено на стороне клиента, но проверка должна происходить в смарт-контракте.