Я читал, что при гипотетической интеграции zCash/zkSNARK с Ethereum можно было бы скрыть отправителя, получателя и стоимость транзакции.
Мой вопрос заключается в том, можно ли также скрыть другие данные, отправленные в транзакции, например, имя функции, которую вы хотите выполнить, и ее параметры. И в таком случае, как это повлияет на состояние контракта.
zkSNARK доказывает с нулевым разглашением, что определенный аргумент верен.
Нулевое разглашение здесь означает, что он ничего не сообщает об аргументе, кроме того, является ли он истинным. Например, если вы взяли карту из колоды, и я спросил вас, была ли это черва, вы могли бы показать мне, что это правда, не раскрывая никакой другой информации о карте (например, туз, двойка или что-то еще) с помощью показывая мне все карты, которые не являются червями. Это пример доказательства с нулевым разглашением (zkp).
Я думаю, что в ZCash zkSNARK доказывает, что вы владеете суммой ZEC, превышающей или равной сумме, которую вы пытаетесь потратить в данной транзакции.
Я не думаю, что отправки zkp, который вы назвали функцией, было бы достаточно для фактического вызова функции. Может быть, вы могли бы отправить изменение состояния, которое происходит в результате вызова функции, вместе с zkSNARK, доказывающим, что вы вызвали законную функцию законным способом, и это привело к этому изменению состояния?
В этой ситуации вам потребуется доказать что-то более сложное, чем «у меня есть n ZEC и n>k, где k — стоимость транзакции». В результате получается, что любая функция NP может быть доказана с нулевым разглашением, и я вполне уверен, что zkSNARKs достаточно универсальны, чтобы это было / скоро станет возможным. Из ридми libsnark :
Вычисление может быть выражено как оператор NP в следующих формах:
«Программа foo на C при выполнении возвращает код выхода 0, если введена полоса ввода и дополнительный ввод qux».
«Булева схема foo выполнима с помощью некоторого входного qux».
«Арифметическая схема foo принимает частичное присваивание bar, когда расширяется до некоторого полного присваивания qux».
«Набор ограничений foo удовлетворяется полосой частичного присваивания при расширении до некоторого полного присваивания qux».
Вам даже не нужно было бы интегрировать ZCash и Ethereum, просто каким-то образом используйте libsnark и попросите кого-нибудь принять ваш странно сформированный вызов функции. Это может просто занять нетривиальный объем работы;)
эт