作者:VitalikButerin
原文:https://ethresear.ch/t/future-proof-shard-and-history-access-precompiles/9781
当前以太坊设计中的向后兼容性所面临的挑战之一是区块链历史记录的访问需要对Merkle证明进行EVM验证,这还假设区块链将永远使用相同的格式和相同的密码技术。未来的分片设计更是增加了这一点的重要性,因为Rollup的欺诈证明和有效性证明将需要指向分片数据的指针。
声音 | 彭博社前记者:DeFi成为以太坊主要用例是因为传统经济价值运转存在很多障碍:彭博社前记者Camila Russo近期在一次播客中表示,去中心化金融(DeFi)已成为以太坊主要用例的原因是,这是非区块链传统经济中的一个主要方面,传统经济是如此古老且已经到了可以被破坏的程度。我们仍然依赖许多中介机构,我们仍然必须支付如此高的费用,我们仍然局限于出生地获得的金融服务。价值和金钱如何运转存在许多障碍。(AMBCrypto )[2020/2/10]
这篇文章提出了一种更加面向未来的方法:我们可以添加执行验证特定类型证明的抽象任务的预编译,而不是要求在EVM中验证历史和分片的证明。如果将来更改格式,预编译逻辑将自动更改。预编译甚至可以具有条件逻辑,用于验证过渡前插槽的一种证明和转换后插槽的另一种证明。
声音 | 江卓尔:分片提升容量难度大时间长 故而Vitalik提出使用BCH或者ETC作为以太坊数据层:7月25日消息,莱比特矿池CEO江卓尔表示,分布式系统(去中心化系统)有一个不可能三角,称为分布式系统CAP定理,指的是在一个分布式系统中,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可兼得。Vitalik提出用分片方法提升容量,但分片方法的难点是一致性,也就是CAP中的C,Consistency(一致性),这个是一个要挑战不可能三角的开发,所以开发难度很大,时间长,所以Vitalik才提出使用BCH或者ETC作为以太坊数据层的短期方案,来解决ETH的燃眉之急。[2019/7/25]
历史区块数据
动态 | 斯坦福大学和Visa为以太坊智能合约开发隐私机制:据cointelegraph报道,根据2月20日在斯坦福大学应用密码学组网站上发表的文章,斯坦福大学和Visa Research的研究人员为以太坊(ETH)智能合约开发了一种隐私机制。根据该报告,研究人员创建了一种称为“Zether”的“完全去中心化的、保密的支付机制,可与以太坊和其他智能合约平台匹配。可以单独执行或通过其他智能合约执行,可保持帐户余额的加密,并通过经过加密的证明实现资金的存入、转移和提取。[2019/2/23]
defverifyHistoricalBlockRoot(slot:uint256,value:bytes32,proof:bytes)
这种预编译将尝试以两种方式之一解释该proof:
阿里参谋长:不认为以太坊已经成功:阿里巴巴集团参谋长曾鸣今日在“三点钟无眠区块链”群发表了自己对区块链的看法。他表示,如果有一个新应用足够大(比如达到千万用户),其不但会推出自己的交易所,而且会推自己的基础设施平台,甚至自己的币,这是生态的标准打法;因此正是在这个意义上,判断区块链处于哪个发展阶段是非常重要的。他认同比特币是区块链第一个成功应用,而且由于其货币属性,可能会非常成功。然而他并不认为以太坊已经成功,因为其还不是真正的生态,只能算是一种平台。如果一个大应用成功了,肯定会推出自己的智能合约平台,如果这件事在未来三年左右发生,对以太坊的打击可能是巨大的。基于这个判断,他认为区块链生态目前更类似上世纪的90年,而不是98年。[2018/2/25]
如果这个proof为空,则直接检查该value是否为保存在正确位置的历史区块根。如果slot太旧,它将失败。
如果这个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直接对分片数据进行操作。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。