作者:SinaMahmoodi
翻译&校对:IANLIU&阿剑
来源:以太坊爱好者
摘要:区块中每发生一次合约调用,无状态客户端都需要完整的合约代码作为区块见证的一部分,而传输合约代码占用无状态客户端带宽的比例,高居其带宽开销的第二位。
人们认为,代码默克尔化方法能够优化带宽开销。本文解释了如何将代码拆分为“块”,默克尔化这些chunk,并只在交易需要的情况下传递这些chunk。实验证明,基于目前的主网情况,我们能看到合约代码传输的开销节省了40%~60%。
巨大的无状态区块
代码默克尔化的概念已经被提出好一阵子了,一开始主要用于代码去重,但其他用途还未被很好地探索。现在它重新进入大众视线,却是因为另一个目的——用于降低无状态客户端所需要的带宽开销。如果你想知道无状态客户端为什么出现,我推荐这篇总结,或是AlexeyAkhunov的推文,里面还附上了他的实验数据。为求简短扼要,我不会深入整个无状态客户端模型的细节,仅提供相关细节的简要总结。
在无状态模式下,节点可以依赖其他节点来取得区块内容并使用相关默克尔证明加以验证,而不必自己存储所有区块状态——这会给网络带宽带来巨大的性能提升。AlexeyAkhunov和turbo-geth团队一直在研究,希望能确定已经产出的主网区块的区块见证大小。下图是对最近50000个区块的测量结果:红线追踪每个无状态区块需要发送的合约代码量。如果以太坊从当前的hexary字典树结构转为二进制trie,则见证数据所包含的哈希值数据大小约能减小3倍,这时候合约代码量就成为构成见证大小的第一大头了。
观点:我相信它、相信这项技术,不认为是一时的狂热。:据Cryptoglobe消息,近日美国说唱歌手和媒体名人史努比·道格(Snoop Dogg)最近在接受《名利场》采访时分享了他对比特币和NFT的看法。认为NFT改变着艺术家开展业务并与粉丝建立联系的方式。并表示相信比特币和这项技术所创造的全球性的连接,不认为这只是一种暂时性的流行。[2021/4/4 19:45:04]
-图表显示最近50000个主网区块的无状态区块见证大小变化,经过窗口=128个区块的移动平均计算-
不要发送整段代码
我们假设,其实每笔交易只会调用部分的合约代码,所以我们的目标就是拆分这些代码块,每次交易只发送需要的chunk的区块见证。如果这种假设合理,而且每笔交易真的只用到一小部分字节码,那么区块见证的合约代码部分就能大大的减小。
为了更好地理解,想象我们正在部署一份新的合约,我们需要传递代码和并确定basicblock有两种特性:
律师观点:针对SEC诉Ripple一案,双方达成和解是最有可能的结果:美国奥兰多Hogan & Hogan律师事务所的律师Jeremy Hogan在一段YouTube视频中讲述了美国SEC起诉Ripple一案最有可能出现的情况。他就表示,根据美国法律,XRP作为一种证券的评估永远不会有一个笼统的“决定”。这位律师认为,这正是我们在销售XRP时看到的情况。随着XRP的用例越来越多,XRP分类账也越来越去中心化,XRP成为证券的可能性也越来越小。
和前SEC委员Joseph Grundfest一样,Hogan也质疑SEC对Ripple采取行动的“真正动机”。他同意Ripple首席执行官Brad Garlinghouse的观点,认为这起诉讼背后可能会对整个加密行业造成“攻击”。此外,Hogan乐观地认为XRP不会被列为证券。美国SEC“没有要求法院声明XRP是一种“证券”,尽管他们可以这样做。此外,正如SEC之前的诉讼所显示的那样,Ripple与SEC达成和解是最有可能的结果。(Crypto News Flash)[2021/1/24 13:21:37]
观点:区块链将赋能电力新业态、新模式及新服务:2020电力区块链技术应用论坛16日在京举行。与会人士表示,依托其去中心化的特征与优势,区块链有望在电力行业新业态、新模式、新服务中发挥重要作用。中国电力发展促进会常务副会长兼秘书长游敏表示,区块链技术与电力行业的融合应用,是能源革命与数字革命融合发展的重要内容。目前我国把区块链作为核心技术自主创新的重要突破口,加快推动区块链技术和产业创新发展。当前,广大电力企业正积极探索区块链技术在电力行业市场化改革、数字化转型中的应用落地。未来,区块链技术将在电力行业新业态、新模式、新服务的探索与建设中,为落实能源安全新战略、实现电力行业高质量发展起到积极的促进作用。(新华财经)[2020/9/17]
-字节码的basicblocks-
Basicblock要么从索引0开始,要么从?JUMPDEST?开始——这么做能保证每个无状态客户端都能安全地进行JUMPDEST分析。
每个basicblock都无法更改控制流。因此,我们可以确定一旦开始执行代码,只会存在两种情况:正确执行结束,或是gas耗尽。虽然还没有和其他方案进行比较,我们先假设这么执行是相对更有效率的。
出于效率考量,我们合并相邻块,直到每个代码块都至少有128字节为止。接着以第一个字节作为key,将这些合并后的代码块插进Trie。最后,客户端将此Trie的根作为该合约账户的新记录存储下来。如下图所示,记录代码的Trie会成为状态树的子树。
观点:美国经济复苏或使人们对BTC等避险资产的需求下降:随着美国8月失业率降至8.4%,比特币价格也开始下跌,这可能表明,比特币已经获得了对冲通胀风险的名声。根据就业数据,经济明显复苏,因此对避险资产的需求可能已经下降。(Beincrypto)[2020/9/7]
-代码默克尔化之后,会成为状态树的子树。为了简化,上图我用了二进制树,同时树的路径也不准确,不能完整表示真实的key-
为了测试部署的合约,我们试着发起一笔调用该合约的交易。矿工会执行这笔交易,并标记执行过程中触及的每个chunk。当要发布区块的时候,矿工会将合约状态的证明,以及触及哪些代码chunk的turboproof证明,一起打包在区块内。
观点:俄罗斯政府访问央行数据计划或将人们推向加密货币:4月30日消息,俄罗斯内政部长已向该国中央银行提出了一项建议,以允许该部门访问央行的机密会计记录,借此加强政府和银行之间的合作帮助逃税执法。但央行对此持怀疑态度,并称此举可能会影响公众对银行系统的信心。加拿大皇家银行也表示,许多人认为,如果该举动成功,将人们导致对数字货币的需求增加。俄罗斯媒体也表示,人们希望保护自己数据的隐私性,因此他们将求助于将储蓄资金从法定货币转换为加密货币。(Cryptocurrency News )[2020/4/30]
-交易所触及的所有chunk和验证codeRoot所需的哈希值,都会以turboproof证明的形式发送出去-
收到这个区块后,无状态客户端就能验证合约是否属于区块状态的一部分,也能验证合约的余额、nonce、状态根、codeRoot等其他参数。这些信息足以让客户端从chunk中重构部分字节码,同时清空其他不需要的chunk。因为chunk算法的设计,所以客户端知道所有的chunk都是从?JUMPDEST?开始,因此能够安全地进行jump操作。
-我们可以通过turboproof重构字节码;对于交易不需要的chunk则设为0-
实验
为了验证,我们编写了一份测试原型,该原型可以从Geth客户端的RPC端口获取主网的区块和过去的状态,然后模拟执行交易。每当执行过程中遇到新的合约,就将合约拆分为多个chunk,并标记执行交易时触及的chunk。当区块中的交易全部执行完毕后,会为所触及的chunk生成证明——turboproof。
接着重置状态,用turboproof重构出来的代码,替换掉原本的合约代码,然后再次执行刚才的交易。为了检查执行的正确性,我们比较前后两次消耗的gas量和区块的bloom过滤器。
对最近的50个区块执行此过程,我们可以看到合约代码量减少了40%~60%。
提醒:上图的数据结果似乎令人充满希望,但请记住,我们还需要成千上万个区块中的数据,才能得出令人信服的实验结论;目前原型处于早期阶段,一切结论都还为时尚早!
后续发展
你应该还记得,每个代码块的最小长度是可设置的参数,修改这个参数会在截然不同的两个方面影响见证的大小。假设我们将参数设为32字节,则chunk的粒度变得更小,要传递的代码量也就变得更少。但是这样一来,Trie的深度就必须增加;换句话说,为了生成chunks的证明,我们需要进行更多次哈希运算。
所以下一步,我们将会深入分析——究竟要将区块最小长度设为多少,才能获得最优解。当然不论如何,只要将hexary字典树结构二进制Trie,我们就能减少3/4的哈希运算,从而降低见证数据的大小。
在测试原型中,我们将合约代码拆分为basicblock;而可选的代码拆分算法当然有很多,有的简单有的复杂。最简单的一种就是拆分为固定大小的chunk,从目前来看,这种方法只会有push和jumpdest分析的问题。
更进一步地说,如果我们任意设置字节码的最小值,则客户端在收到chunk之后,可能会因为?PUSH?操作或任何多字节码的操作,而碰上?JUMPDEST(0x5b)?报错的情况。如下图所示,有完整代码的客户端会发现这里的jump操作是非法的,因为?0x5b?属于?PUSH1?的操作数,执行到这里应该终止。但如果客户端只收到chunks#6和#8,而没有收到#7,则他会跳到位置41继续执行,就产生了对同一份合约代码的不同解释。后面我们会扼要地说明怎么在任意设置字节码的情况下,避免这种错误。
为了解决这个问题,MartinHolstSwende建议向每个chunk添加一个元数据,该元数据记录了有多少个chunk的首字节是push操作;然后,验证者就能在jumpdest分析过程中跳过那些字节。Alexey正在探索的另一种方法是“不允许在EVM中进行动态跳转操作”,这使我们只需在部署合约时做一次静态的跳转分析,而不需要在每次执行代码时进行。AlexBeregszaszi建议使用合约控制流程图,以更好地规范默克尔化流程;与之类似,ChristianReitweissner提出了一种执行证明方法,从合约的控制流程图创建默克尔DAG。我不会在本文中评价这些想法,希望之后能披露更多信息。
最终结果可能表明,不同的chunk拆分算法之间的效率提升可以忽略不计,这么一来选择的算法就越简单越好。而好消息是,基于早期数据实验,我们至少有一种算法可以显著减少无状态区块中需要传输的代码量。
本文着重讨论如何默克尔化EVM字节码,但总体思路并不局限于EVM。实际上,Ewasm团队的其他成员也在尝试默克尔化Wasm代码,也遇到了相应的挑战。这些挑战主要是因为Wasm代码由多个部分组成,并且在执行之前需要经过严格的验证——这意味着重构的字节码也必须通过验证。
敬请期待后续更多信息!
原文链接:?https://medium.com/ewasm/evm-bytecode-merklization-2a8366ab0c90
企业为什么需要新型顾客忠诚生态企业会员顾客忠诚计划面临增长困境忠诚度奖励计划的投资正在井喷式发展。目前,超过90%的公司都多少会采用某种形式来提升和黏合客户参与度以及推广顾客忠诚度项目.
1900/1/1 0:00:00文|澄子审?|照生出品|01区块链行业速览政策导向1.央行:坚定不移推动金融领域密码应用2.全国区块链和分布式记账技术标准化技术委员会组建公示3.渝中出台“区块链”16条.
1900/1/1 0:00:00清水无忧,皆因随性,落叶无憾,只因心空。走过的路,才知道有短有长,经过了震荡才知道破位可贵,什么都可以舍弃,但不可舍弃心情,什么都可以输掉,但不可输掉微笑.
1900/1/1 0:00:00一、资产数字化随着央行DECP的试运行,资产数字化这个词好像又开始重新被媒体提起了,因为央行的DECP本质上是货币的数字化,除了货币的数字化之外,未来我们还会有证券的数字化、积分的数字化等等.
1900/1/1 0:00:00作者:XiuMu来源:比推bitpush.newsLibra协会副主席DanteDisparte认为,Libra项目的核心是区块链而非加密货币.
1900/1/1 0:00:00视频:https://www.iqiyi.com/v_19rwfooezs.html哈喽大家好,我是小K君.
1900/1/1 0:00:00