编者注:本文为Parity开发者WeiTang写作的,关于如何增强EVM后向兼容性的文章,改进Gas机制的方案堪称大胆。
如果我们有机会可以重新设计EVM、提升其后向兼容性、让它对功能升级更为友好,而且可以完全不必考虑我们现有的历史包袱,我们该怎么做呢?
在这篇文章中,我会探究这个问题,并记录下由此演化出来的技术说明和设计哲学。
目标
Web是没有版本区别的,而且已经存在了几十年。因此我在此假设,我们想做一个同样没有版本区别的EVM。
我们同样希望保证,这种虚拟机具备良好的后向兼容性。也就是说,至少能良好兼容我们现有的合约,而且,也可以轻松加入新功能。
慢雾:利用者通过执行恶意提案控制了Tornado.Cash的治理:金色财经报道,SlowMist发布Tornado.Cash治理漏洞解析。 5月20日,Tornado.Cash遭受了治理攻击,利用者通过执行恶意提案控制了Tornado.Cash的治理。5月13日,利用者发起了20提案,并在提案中说明20提案是对16提案的补充,具有相同的执行逻辑。但实际上,提案合约多了一个自毁逻辑,其创建者是通过create2创建的,具有自毁功能,所以在与提案合约自毁后,利用者仍可以部署不同的以与以前相同的方式将字节码发送到相同的地址。不幸的是,社区没有看到拟议合约中的犯规行为,许多用户投票支持该提案。
在5月18日,利用者通过创建具有多个交易的新地址,反复将0代币锁定在治理中。利用提案合约可以销毁并重新部署新逻辑的特性,利用者在5月20日7:18(UTC)销毁了提案执行合约,并在同一地址部署了一个恶意合约,其逻辑是修改用户在治理中锁定的代币数量。
攻击者修改完提案合约后,于5月20日7:25(UTC)执行恶意提案合约。该提案的执行是通过 Delegatecall 执行的,因此,该提案的执行导致治理合约中由开发者控制的地址的代币锁定量被修改为 10,000。提案执行完成后,攻击者从治理库中解锁了TORN代币。金库中的TORN代币储备已经耗尽,同时利用者控制了治理。[2023/5/21 15:17:00]
无效操作码
拜登政府着手研究是否需要对AI工具进行审查:4月11日消息,拜登政府已经开始研究是否需要对ChatGPT等人工智能工具进行审查,因为人们越来越担心这种技术可能造成歧视或传播有害信息。作为潜在监管的第一步,美国商务部周二正式公开征求意见,就其所谓的问责措施发表意见,包括有潜在风险的新AI模型在发布前是否应该通过认证程序。(华尔街日报)[2023/4/11 13:56:24]
要设计一个永续的EVM,最简单可能也最重要的改动便是为合约部署添加一个验证过程。并非所有的字节序列都是有效的EVM代码,任何无效的操作码都不应该被部署到链上,因为在未来,这些代码可能会被分配以一个新的操作码,有不一样的功能。
数据:通过Frax Finance推出的流动性质押产品质押的以太坊已超8.1万枚:2月1日消息,通过Frax Finance推出的流动性质押产品质押的以太坊已超8.1万枚,当前共发行81,519.8枚frxETH,价值约1.28亿美元。[2023/2/1 11:41:17]
此种检查的技术详述初次成文化是在EIP-1712中。简要来说,在执行合约创建的状态转变函数之前,执行下列检查:
遍历代码的字节码
如果代码是一个PUSH(n)操作码,则跳过接下来n个字节
如果字节码是一个有效的操作码,或者指定了无效指令,继续
否则,捕捉到错误
上述检查有点类似于jumpdestination检查。注意,对于例外情形,我们在这里使用的是“trap”,下文我们会详细解释。
功能调查
如果EVM要消弭掉版本的差别,基于EVM的代码执行应有能力调查出底层环境是否支持一种特定的功能。给定EVM所承担的角色,我们总是希望一个已经定义好的操作码的功能可以保持不变,并且还可以引入新的操作码来添加功能。而一些合约可能在引入某些特定功能之前就已经部署上去了。这些合约可以安排一个备用的子程序,在EVM不支持某功能的时候就运行子程序,而一旦硬分叉激活后就立即开始使用新功能。功能调查组件就像这里要用到的跳转器。因此,我们正式地定义一种新的操作码HAS_FEATURE。
该操作码接收一个堆栈参数。它会检查该参数是否位于0到2^8之间,如果不是,就捕捉错误
如果参数不受支持,就把0x0推回栈中;否则就推入0x1
例外与捕捉
在EVM的运行过程中,可能有很多因素会导致执行失败。单个交易可能因为耗尽Gas而失败;调用栈中的每一层都可能单独失败,而其错误必须被父调用框架明确处理。这些特性给了我们一定的弹性,但对于要运行在区块链上的合约来说,并不必然就是好事。这里,我们想重新定义一下,任何EVM本身发出的异常,都可以有trap行为,作为对fail的替代。也就是说,所有调用框架的所有执行过程中、消耗任意gas的时候、甚至被当前的状态函数回滚变更的时候,都可以有trap。合约接下来就被会鼓励使用返回值,在它们想跟父调用者交流非致命错误的时候。
Gas消耗量
过去的经验已经证明,我们总是想调整Gas消耗量。因为我们要这样做,我们不希望合约开发者对交易的Gas消耗量甚至是任何操作码的Gas消耗量作任何假设。要实现这一点,只需将EVM内所有关于Gas消耗量的公开信息都移除。这样Gas消耗量就成了一个外在于EVM、被隐藏起来的“实现上的细节”,只需在区块层执行中妥善处理。正式地移除0x5a的Gas操作码。此外,重新定义CALL、CALLCODE和DELEGATECALL,不再使用gas栈参数,而是采取现有执行框架中所有可用的Gas。
原文链接:
https://that.world/~essay/nevm/
作者:WeiTang
翻译:阿剑
Staking是前阵子特别火的一个概念,近来很少有人再提了。简单来讲,Staking就是持币用户通过质押代币,直接或间接参与生态治理并获得节点奖励的模式.
1900/1/1 0:00:00尊敬的用户:币钻国际数字交易服务平台已接受HUNG项目方申请,将于近期以聚变交易模式重新开放HUNG/USDT交易市场.
1900/1/1 0:00:00DearBHEXers,BHEXnewwaveinSeptember11!Lock-up30dayswith100%annualizedreturn.What''smore!Totalof10.
1900/1/1 0:00:00上周末,微博在10周年之际,低调的发布了新产品“绿洲”。上架之后,因网友热捧导致一码难求,并且冲上APP社交排行版前三.
1900/1/1 0:00:009月3日,三笔共10亿枚XRP自Ripple托管钱包转至Ripple地址,转账类型被标记为支付。之后有3亿XRP重新锁入托管钱包.
1900/1/1 0:00:00Weiss评级分析师JuanVillaverde发文称,如果将龟兔赛跑的故事应用于加密货币,Cardano将是前者,比特币和以太坊将是后者.
1900/1/1 0:00:00