доказательство диапазона в zk-snark
Задача примерно такая. Алиса должна отправить деньги Бобу, но так, чтобы сумма осталась скрытой.
Как это сделать, если в блокчейне хранятся только «скрытые» балансы? Как я могу доказать кому-то, что мой баланс положительный после перевода?
Другими словами, как я могу доказать кому-то, что число х >0, если человек знает только «сокрытие» этого числа, скажем, g^x, где g — образующая некоторой эллиптической кривой. Докажите, не раскрывая х.
Я знаю, как устроены снарки: R1 CS->AP -> weil пары, я знаю, как решалась бы эта проблема, если бы x был известен, а не скрыт.
Например, мы представляем x = sum(u_i*2^i) пишем в R1 CS другой u_i u_i = u_i и таким образом доказываем, что все u_i = 0 или 1
что дальше? какой-то очень простой тупица. если бы x был известен, мы бы написали его просто в r1 cs как публичный ввод и спокойно проверили бы что-то вроде
v2 = u11+u22v3 = v2+u32^2...vn = u_(n-1) + u_n2^(n-1)
и добавил бы публичный ввод vn = x
и так что делать?