R1CS是Rank 1 Constraint System的简称,包含三个矩阵和一个见证(witness)向量。可将任意算术电路转换成R1CS。
例子
考虑下面的算术电路x3+6x+12=out。我们将其转换成R1CS。
首先,我们需要拆分出中间变量和约束:
- xsq=x⋅x
- xcu=xsq⋅x
- out=xcu+6x+12
然后,我们组建见证向量s:
s=[1,out,x,xsq,xcu]T
对于每一个约束,我们可以得到三个向量a,b,o使得<a,s>⋅<b,s>=<o,s>
其中<a,s>表示向量a和s的点乘。
于是我们有:
a1=[0,0,1,0,0],b1=[0,0,1,0,0],o1=[0,0,0,1,0]
a2=[0,0,0,1,0],b2=[0,0,1,0,0],o2=[0,0,0,0,1]
a3=[12,0,6,0,1],b3=[1,0,0,0,0],o3=[0,1,0,0,0]
将ai,bi,oi各自堆叠起来,我们得到了最终的矩阵A,B,O满足:
As∘Bs=Os
其中∘表示逐元素乘法(Hadamard product)。
对于一个证明者,只需提供一个具体的witness向量:s=[1,57,3,9,27]
对于验证者来说,只需验证上述等式As∘Bs=Os成立。