为分片采用扫清障碍 V神提出新的以太坊向后兼容方法_ROO:UIN

当前以太坊设计中的向后兼容性所面临的挑战之一是区块链历史记录的访问需要对Merkle证明进行EVM验证,这还假设区块链将永远使用相同的格式和相同的密码技术。未来的分片设计更是增加了这一点的重要性,因为Rollup的欺诈证明和有效性证明将需要指向分片数据的指针。

这篇文章提出了一种更加面向未来的方法:我们可以添加执行验证特定类型证明的抽象任务的预编译,而不是要求在EVM中验证历史和分片的证明。如果将来更改格式,预编译逻辑将自动更改。预编译甚至可以具有条件逻辑,用于验证过渡前插槽的一种证明和转换后插槽的另一种证明。

历史区块数据

defverifyHistoricalBlockRoot(slot:uint256,??value:bytes32,??proof:bytes)

分析:大型机构持有者和大量鲸鱼地址连续一年抛售比特币:金色财经报道,据Santiment的分析文章,比特币价格仅在今年就下跌了58%,并且大型机构持有者和大量鲸鱼地址已连续一年抛售比特币。

此外,以太坊主要的鲸鱼地址并没有在交易所大量保存其供应,自合并以来也没有显示出太多积累的迹象。据观察,大型稳定币的市值在今年5月一直在增长,但当美联储加息和对经济衰退的担忧开始真正影响投资者的决策时,大型机构持有者就更难证明自己有理由持有大量加密货币,这可能会使大型机构和“鲸鱼”将资金投向美国和世界各国的国债。[2022/10/28 11:52:06]

这种预编译将尝试以两种方式之一解释该proof:

如果这个proof为空,则直接检查该value是否为保存在正确位置的历史区块根。如果slot太旧,它将失败。

分析:人们对银行缺乏信任催生了DeFi等另类金融服务的需求:在经历2008年金融危机的12年后,人们似乎仍然对银行保持警惕。根据美国联邦存款保险公司的一项家庭调查,除了高额费用和最低存款余额,受访者指出,在与银行打交道时缺乏信任和隐私,是他们没有支票账户或储蓄账户的原因。综合来看,缺乏信任(16.1%)和缺乏隐私(7.1%)几乎占了受访用户未设银行账户主要原因的四分之一(23.2%)。

人们对银行缺乏信任,催生了对另类金融服务的需求,也为DeFi带来了巨大机遇,因为它有能力为大多数人提供金融服务。根据行业网站DeFi Pulse的数据,在过去一年里,DeFi平台锁定的总价值增加了约120亿美元。在各国央行大幅降息、基准利率接近于零之际,投资者正在寻找新的回报,并已经准备好探索DeFi领域。据统计,该行业筹集的风险投资资金已经超过5亿美元。虽然该行业仍处于早期阶段,但DeFi项目已经通过增加金融包容性、增加流动性和降低成本来解决当前体系中的低效率问题。自2020年第三季度开始,“加密货币爱好者存入DeFi项目的存款已从20亿美元增至100亿美元以上。”(Cointelegraph)[2020/11/29 22:31:02]

如果这个proof是一个Merkle分支,它会根据history_roots中的正确条目将其验证为Merkle分支

分析:比特币链上指标表明市场过度看跌:AMBcrypto发布分析文章称,比特币链上指标表明市场过度看跌,2020年的大部分时间都是如此。从链上交易量来看,当前的链上交易量高于2018年和2019年初。而目前价格超过1万,并连续4个月维持在该水平。与2018年不同,交易量并不构成严峻的形势。此外,根据CoinMarketCap的数据,目前超过83%的比特币持有者盈利。[2020/9/26]

defverifyHistoricalStateRoot(??slot:uint256,??value:bytes32,??proof:bytes)

验证状态根,使用与该区块根相同的逻辑。

defverifyHistoricalStateValue(??slot:uint256,??key:bytes32,??value:bytes32,??proof:bytes)

分析:比特币的网络增长现已达到自2017年以来最高值:区块链分析公司Glassnode的数据显示,本周比特币的网络健康状况和流动性均有所提高,比特币的网络增长现已达到自2017年以来的最高值。这是一个积极的迹象,表明投资者活动增加。Glassnode还指出,尽管上述两个指标表现出积极的局面,但在昨天的减半之前的几天内,投资者情绪急剧下降,这严重影响了整个BTC网络的健康状况。即便如此,比特币的“总体网络健康状况依然良好”。(NewsBTC)[2020/5/13]

验证历史状态中的值。这个proof包括三个要素:

状态根

表明状态根正确性的证明

Patricia或Verkle或其他证明该value实际上位于状态树中的位置key中的证明

defverifyHistoricalTransaction(??slot:uint256,??txindex:uint256,??tx:bytes,??proof:bytes)

验证tx实际上是否在给定slot的区块的txindex中。证明内容如下:

区块根

表明区块根正确性的证明

证明给定的tx实际上是给定位置的交易

defverifyHistoricalReceipt(??slot:uint256,??txindex:uint256,??receipt:bytes,??proof:bytes)

验证receipt实际上是给定slot的txindex处的交易接收。证明内容如下:

区块根

证明区块根正确性的证明

证明给定收据实际上是给定位置的receipt

分片数据

defverifyShardBlockBody(??slot:uint256,??shard:uint256,??startChunk:uint256,??chunks:uint256,??data:bytes,??proof:bytes)

验证data=body,其中body是给定slot中给定分片的主体。该证明将包括:

证明区块子集的Kate证明

如果slot太旧,则在slot+96处的区块根的Merkle证明,然后是从该slot到分片承诺数组中的位置的Merkle证明,显示一个最终性承诺

当我们使用BLS-12-381Kate承诺时,预编译还将验证数据是32字节chunk的列表,其中每个chunk都小于曲线子组顺序。如果没有在给定位置保存分片区块,则预编译就像在该位置保存了对零长度数据的承诺一样。如果给定位置的value未确认,则预编译总是失败。

defverifyShardPolynomialEvaluation(??slot:uint256,??shard:uint256,??x:uint256,??y:uint256,??proof:bytes)

如果我们将给定(slot,shard)处的分片区块视为多项式P,其中字节i*32...i*32+31是w**i处的评估,这将验证P(x)=y。该proof与数据子集proof相同,除了Kate证明正在证明某个点的评估而不是在证明一个位置子集的数据。

如果我们将来不再使用BLS-12-381,则预编译会将SNARK作为输入,验证数据完全由小于该曲线阶数的值组成,并验证对当前字段数据的评估。

这种预编译对于等价协议的跨多项式承诺方案证明?很有用,可用于允许ZKRollup直接对分片数据进行操作。

作者:VitalikButerin

原文:https://ethresear.ch/t/future-proof-shard-and-history-access-precompiles/9781

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

金宝趣谈

[0:31ms0-7:947ms