Bitget App
交易“智”变
行情交易合约跟单BOT理财Web3

W3.HitchhikerW3.Hitchhiker2023/10/11 11:21
作者:W3.Hitchhiker

译者:Xiang|W3.Hitchhiker

第二部分:约束

  • 视频教程 (youtube)

  • 幻灯片 (PDF)

在这一部分中,我们将在轨迹a 上创建一组约束。 当且仅当轨迹表示 FibonacciSq 的有效计算时,约束将是轨迹单元格中的多项式(而不是有理函数)表达式。

我们将分三步实现:

  1. 首先指定我们关心的约束(FibonacciSq 约束)。

  2. 将 FibonacciSq 约束转换为多项式约束

  3. 将它们转换为表示多项式的有理函数当且仅当原始约束成立时。

步骤 1 - FibonacciSq 约束

image 0

其计算结果恰好超过 G1,其中 G 是由 g 生成的“小”组。

步骤 2 - 多项式约束

image 1

开始动手

首先,由于这是与第 1 部分不同的笔记,让我们运行以下代码,使此处的所有变量都具有正确的值。请注意,它最多可能需要 30 秒,因为它会重新运行多项式插值。

from channel import Channel from field import FieldElement from merkle import MerkleTree from polynomial import interpolate_poly, X, prod from tutorial_sessions import part1 a, g, G, h, H, eval_domain, f, f_eval, f_merkle, channel = part1() print('Success!')

你将获得三个约束中的每一个作为两个多项式的商,确保余数是零的多项式。

步骤3 - 有理函数 (实际的多项式)

image 2

第一个约束 The First Constraint:

image 3
numer0 = f - 1 denom0 = X - 1

事实上 f(x)-1 有一个根为 1 在意味着它可被 (x-1) 整除。运行以下代码块以说服自己 numer0 模 denom0 的余数为 0,因此除法确实会产生一个多项式:

numer0 % denom0

运行以下代码块以通过将 numer0 除以 denom0 来构造 p0,即表示第一个约束的多项式。

p0 = numer0 / denom0

跑测试:

assert p0(2718) == 2509888982 print('Success!')

第二个约束:

image 4
numer1 = f - 2338775057 denom1 = X - g**1022 p1 = numer1 / denom1

跑测试:

assert p1(5772) == 232961446 print('Success!')

第三个约束:

image 5
lst = [(X - g**i) for i in range(1024)] prod(lst)

有关更多信息,请参阅博客文章 Arithmetization II 。

让我们暂停一下,看一个关于多项式如何组成的简单例子。之后我们将生成第三个约束。

组合多项式 (a detour)

image 6
q = 2*X ** 2 + 1 r = X - 3

把 q r 组合产生一个新的多项式:

image 7

返回到多项式约束

image 8
numer2 = f(g**2 * X) - f(g * X)**2 - f**2 print("Numerator at g^1020 is", numer2(g**1020)) print("Numerator at g^1021 is", numer2(g**1021)) denom2 = (X**1024 - 1) / ((X - g**1021) * (X - g**1022) * (X - g**1023)) p2 = numer2 / denom2

跑测试:

assert p2.degree() == 1023, f'The degree of the third constraint is {p2.degree()} when it should be 1023.' assert p2(31415) == 2090051528 print('Success!')

运行以下代码块观察约束多项式的次数,均小于 1024 。这在下一部分很重要。

print('deg p0 =', p0.degree()) print('deg p1 =', p1.degree()) print('deg p2 =', p2.degree())

步骤4 - 组合多项式

image 9
def get_CP(channel): alpha0 = channel.receive_random_field_element() alpha1 = channel.receive_random_field_element() alpha2 = channel.receive_random_field_element() return alpha0*p0 + alpha1*p1 + alpha2*p2

跑测试:

test_channel = Channel() CP_test = get_CP(test_channel) assert CP_test.degree() == 1023, f'The degree of cp is {CP_test.degree()} when it should be 1023.' assert CP_test(2439804) == 838767343, f'cp(2439804) = {CP_test(2439804)}, when it should be 838767343' print('Success!')

提交组合多项式

最后,我们评估 cp 在评估定义域 (eval_domain) 上,在其上构建一棵 Merkle 树,并通过信道发送其根。 这类似于我们在第 1 部分末尾所做的 LDE 轨迹上的提交。

def CP_: CP = get_CP(channel) return [CP(d) for d in eval_domain]

在评估上构造一个默克尔树,并通过信道发送其根。

channel = Channel() CP_merkle = MerkleTree(CP_) channel.send(CP_merkle.root)

测试代码:

assert CP_merkle.root == 'a8c87ef9764af3fa005a1a2cf3ec8db50e754ccb655be7597ead15ed4a9110f1', 'Merkle tree root is wrong.' print('Success!')
0

免责声明:文章中的所有内容仅代表作者的观点,与本平台无关。用户不应以本文作为投资决策的参考。

PoolX:锁仓获得新代币空投
不要错过热门新币,且APR 高达 10%+
立即参与!

你也可能喜欢

每日动态:XRP重返加密货币前三,Michael Saylor建议微软采用比特币等

XRP与数字资产基础设施公司Ripple密切相关,已超越Tether的USDT和Solana的SOL,成为全球第三大加密货币,市值约为1500亿美元。Michael Saylor敦促微软首席执行官Satya Nadella及其董事会在资产负债表上采用比特币,称其为“你能拥有的最佳资产”。MicroStrategy在11月25日至12月1日期间,以平均价格95,976美元购买了15,400枚BTC,总价约为15亿美元。

The Block2024/12/02 20:12

Coinbase的法币到加密货币通道集成了Apple Pay

简要概述 Coinbase 正在将 Apple Pay 集成到其法币到加密货币的入金解决方案中,该解决方案此前被称为 Coinbase Pay。

The Block2024/12/02 18:34

耐克旗下NFT可穿戴设备初创公司RTFKT正在关闭

简要概述 RTFKT,这家于2021年被耐克收购的数字可穿戴设备NFT初创公司,正在关闭。根据周一的公告,该项目拥有超过二十个系列,在NFT项目收入排名中位列第九,总生命周期收入接近5000万美元。

The Block2024/12/02 18:34

WisdomTree向美国证券交易委员会提交现货XRP ETF申请

简要概述 WisdomTree XRP基金将在Cboe BZX交易所上市。WisdomTree此前于11月25日在特拉华州注册了一个XRP实体

The Block2024/12/02 18:34