我需要你帮我用佐克拉底语构造数据。
我有两个数据,比如Attr(公共)和Res(私有)。
Res数据是这样的(不是固定的,键可以变化,但将与Attr相同)。
{
age: "21",
income: "1000",
gender: "male"
...
}Attr也有类似的键和一些比较数据,比如小于、大于或等于。例如,年龄大于18岁,但小于25岁(18500)。
构建Attr的最佳方式是什么,这样我就可以将它们与Res.进行比较。这两个数据将以zokrate脚本的私有和公共输入方式传递。
项目简介。
基本上,我试图生成两个数据公开(Attr)和私有(Res)的ZKP证明。如果将公共数据与私有数据进行比较,如果私有数据满足公共数据的要求,则应生成ZKP证据。谢谢!
请检查以下结构,以zokrate表示。
struct PrivateData {
u8 age;
field monthlySpends;
field userGender;
}
//Contains values which will be compared with private data using the equals operator
struct Eq {
u8 age;
field monthlySpends;
field userGender;
}
//Contains values which will be compared with private data using less than operator
struct Lt{
u8 age;
field monthlySpends;
}
//Contains values which will be compared with private data using greater than operator
struct Gt{
u8 age;
field monthlySpends;
}
struct PublicData {
Lt lessThan;
Eq equalsTo;
Gt greaterThan;
}现在我想相应地比较它的值,静态代码看起来像这样(它不正确,但它可能有助于清除我想要实现的目标)。
def main(PrivateData x, PublicData y) {
log("Checkin if privateData age is {}, is greater than required template data age is {}", x.age, y.greaterThan.age);
assert(x.age > y.greaterThan.age);
log("Checkin if privateData monthlySpends is {}, is greater than required template data monthlySpends is {}", x.monthlySpends, y.greaterThan.monthlySpends);
assert(x.monthlySpends > y.greaterThan.monthlySpends);
log("Checkin if privateData age is {}, is less than required template data age is {}", x.age, y.lessThan.age);
assert(x.age < y.lessThan.age);
log("Checkin if privateData monthlySpends is {}, is less than required template data monthlySpends is {}", x.monthlySpends, y.lessThan.monthlySpends);
assert(x.monthlySpends < y.lessThan.monthlySpends);
log("Checkin if privateData age is {}, is equals to required template data age is {}", x.age, y.equalsTo.age);
assert(x.age == y.equalsTo.age);
log("Checkin if privateData monthlySpends is {}, is equals to required template data monthlySpends is {}", x.monthlySpends, y.equalsTo.monthlySpends);
assert(x.monthlySpends == y.equalsTo.monthlySpends);
log("Checking if privateData gender {}, is equals to required template data gender {}", x.userGender, y.equalsTo.userGender);
assert(x.userGender == y.equalsTo.userGender);
return;
}您能指导正确和最优的方法来构造和比较这种类型的代码吗?Struct属性可能有多达25个值,因此需要一个动态解决方案。如果您甚至可以提供一个提示,比如我应该使用哪种数据结构,就像某种树一样?Struct数据是固定的,但是有些属性可能是空的,所以我们也需要检查它,目前使用"0“来表示空值,因为无法找到在zokrate中使用null的方法。
这是输入的JSON
[
{
"age":"26",
"monthlySpends":"0",
"userGender":"0"
},
{
"lessThan":{
"age": "25",
"monthlySpends": "0"
},
"equalsTo":{
"age": "0",
"monthlySpends": "0",
"userGender": "0"
},
"greaterThan":{
"age":"0",
"monthlySpends":"0"
}
}
]发布于 2022-12-05 10:57:56
构建它们的最佳方法是主观的--无论是哪种方式,您都必须迭代至少一个数据文件,以确定它们共享哪些参数。
如果这是为了简单起见,那么在时隙0,1,2...etc上构造可比较的参数,并使用两者中的较短作为比较基。
对于ZKP来说,这违背了知识(包含的数据)必须被共享以进行比较的整个前提。
如果您想使用相同的结构,可以对参数进行散列(没有它们的值),以确保结构本身是相同的,但是没有数据的连续性,在本例中ZKP的前提是不可获得的。
https://ethereum.stackexchange.com/questions/140603
复制相似问题