书接上回,第6,7,8种函数,其实和零知识证明密切相关,大家可以翻看我之前的关于零知识证明的一个系列,这里不再重复,我们简单看一下以太坊在不同群上运用椭圆曲线,来使用零知识证明创建预编译合约的。
公式1首先定义一个域,其群定义为公式3,这个群的操作为公式5,加法和乘法,所有运算的结果都对P取模,其中P是一个很大的质数。然后定义一个集合,这个集合定义为公式10,这个集合是有一个2元组组成,是一个二维平面的曲线的点坐标,2元组的数据取值范围都在公式1定义的域内,其中公式7表示这个集合的点是椭圆曲线上的点,公式8表示将0点包含在内。
上图是对集合内的加法的定义,公式11表示,公式11,12,13分别表示在不同情况下加法的运算定义,公式14,15是对参数的定义。
公式16定义了集合上的一个乘法操作。在定义了集合上的乘法操作与加法操作之后,我们选择公式17的点为起始点,定义一个循环群公式18,这个循环群是集合C1的一个子集,是通过加法运算得到一个循环群,公式19表示这个循环群的阶是q,这里应该是q*P1=P1的意思,公式20定义了以P1为底的P对数运算的,即寻找满足满足乘法n*p1=P最小的自然数n的值。因此根据这个定义,公式21的最大值是q-1,因为q是循环群G的阶,那么群里所有元素的相对于P1的对数的最大值为q-1。到目前为止的解释都是为了定义一个循环群G1,其中的p和q的值如下所示,第一个p指的是域Fp中的p值,第二个q指的G1的阶q。
根据前面的原理,同样生成一个复数域的新的循环群G2,其定义如下
新的循环群G2是在集合C2上产生,C2上的加法操作与乘法操作,与C1集合一样,关于其阶的定义也一样,只是点的坐标值使用的新的域如公式24所示,G2是以P2为基础点,满足加法运算和乘法运算的循环群,P2的定义如下:
以P2为基点通过加法运算产生的循环群G2是C2上唯一的一个循环群。
有了G1,和G2这2个群之后,我们可以定义第三个群,这个群的定义Gt如下:
公式1表示这个群是在一个12次复数域上,这个12次复数域的数值取值范围最大是q,其12次复数定义为公式3,我们知道公式2是一个复数i的定义。这个新的群与前面两个群存在一个双线性映射函数e,如公式4和9所定义。对于这个域的基础点Pt其定义也是根据P1和P2通过映射函数e得来。存在一个K值,使得对于一个G1上的子集a,其长度是k,对于一个G2上的子集b,其长度也是k使他们满足公式7和8。公式7表示对数的乘积然后做累加和,公式8表示所有a和b子集的元素映射到Gt群之后,其所有结果的乘积等于G1的创建初始点P1与G2的创建初始点P2的映射结果。需要提醒的是公式11这个取模操作的含义是,公式左边的运算结果对取模的结果是1.
关于这1节讲到的知识,我在之前的零知识证明部分也讲解过,但是没有具体到根据p,q的值以及他们的具体映射关系和检验函数。我会再找个专门的时间来学习和讲解这一节涉及到的内容。在了解了以上内容之后,那就可以通过这个逻辑关系来进行以太坊消息调用的状态迁移函数的定义了。