作者:VitalikButerin
原文:https://ethresear.ch/t/future-proof-shard-and-history-access-precompiles/9781
当前以太坊设计中的向后兼容性所面临的挑战之一是区块链历史记录的访问需要对Merkle证明进行EVM验证,这还假设区块链将永远使用相同的格式和相同的密码技术。未来的分片设计更是增加了这一点的重要性,因为Rollup的欺诈证明和有效性证明将需要指向分片数据的指针。
Rocket Pool发布为以太坊合并准备的新版智能节点堆栈:金色财经消息,以太坊流动性质押协议Rocket Pool工程师jcrtp发推称,Rocket Pool已发布为以太坊合并准备的新版智能节点(Smartnode)堆栈v1.6.0。旧版本用户需要尽快更新节点,以为合并做好准备。[2022/8/26 12:49:44]
这篇文章提出了一种更加面向未来的方法:我们可以添加执行验证特定类型证明的抽象任务的预编译,而不是要求在EVM中验证历史和分片的证明。如果将来更改格式,预编译逻辑将自动更改。预编译甚至可以具有条件逻辑,用于验证过渡前插槽的一种证明和转换后插槽的另一种证明。
历史区块数据
defverifyHistoricalBlockRoot(slot:uint256,value:bytes32,proof:bytes)
分析师:“波卡或成为以太坊杀手”尚有待观察:Delphi Digital分析师Ashwath Balakrishnan表示,如果ETH 2.0发布,开发者将陷入两难境地。他们将不得不选择留在以太坊2.0或迁移到一个全新的协议——波卡(Polkadot)。Balakrishnan称:“DOT的设计很优雅,很好地解决了可扩展性问题。但还有一些问题。首先,链上治理尚未经证实,经验不足。Decred和Tezos推动链上治理有一段时间了,但并没有像支持者想象的那样成功。第二,波卡的应用层是以太坊的再创造。随着以太坊通过L2和ETH 2.0实现了可扩展性改进,是否有真正的催化剂让构建者完全迁移甚至在波卡上创建其协议的镜像实例,这一点仍有待观察。”(CryptoSlate)[2020/11/10 12:14:03]
这种预编译将尝试以两种方式之一解释该proof:
Vocdoni 认为以太坊和零知识证明等技术可以实现数字投票方案:去中心化治理工具 Vocdoni 撰文认为在经历了 2020 年美国大选期间的投票混乱之后,是时候该考虑基于以太坊、零知识证明(zkSNARK)和 IPFS 等去中心化技术实现安全且匿名的数字投票解决方案。
Vocdoni 认为这不是一个简单的挑战,但是他们设计了一套系统希望能解决投票的问题,将利用以太坊、IPFS 和 Tendermint 等技术。Vocdoni 表示他们的投票协议技术(Vocdoni Open Stack)是完全开源的,已经在欧洲的一些文化组织选举中被证明是成功的,涉及近 20 万投票者。[2020/11/9 12:06:07]
如果这个proof为空,则直接检查该value是否为保存在正确位置的历史区块根。如果slot太旧,它将失败。
动态 | 简体中文已成为以太坊官网支持的第三种语言:据官方消息,以太坊基金会在上个月宣布了一项大规模的官网(ethereum.org)翻译计划,目前除了英文和韩文之外,简体中文已成为官方支持的第三种语言,目前还在继续推进日语、俄语、德语和意大利语的翻译。据上个月以太坊基金会的介绍,最终以太坊官网将被翻译为至少 15 种语言,而且将逐渐扩大范围,纳入文档、指南、博文等重要第三方资源的翻译。[2019/9/20]
如果这个proof是一个Merkle分支,它会根据history_roots中的正确条目将其验证为Merkle分支
defverifyHistoricalStateRoot(slot:uint256,value:bytes32,proof:bytes)
验证状态根,使用与该区块根相同的逻辑。
defverifyHistoricalStateValue(slot:uint256,key:bytes32,value:bytes32,proof:bytes)
验证历史状态中的值。这个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直接对分片数据进行操作。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。