宇宙链 宇宙链
Ctrl+D收藏宇宙链

Vitalik:值得考虑删除的EVM功能

作者:

时间:1900/1/1 0:00:00

前言:为什么“合并”是我们删掉一些东西的最后机会,以及为什么我们应该这样做

到2020年,我们对如何设计智能合约和区块链协议的理解已经远超2013-15年。因此,如果我们在2021年从头开始搭建以太坊,我们就不会引入很多早期添加的功能了。然而从一条正在运行的、拥有活跃生态的区块链中移除功能,远比在一个新系统中不添加它们要难得多。

有些“缺陷功能”是无害的。有些可以安全而缓慢地移除或改进。还有些已经深深地嵌入到了太多的应用中,以至于根本改不动。另一方面,也有一些功能要么已经被移除,要么已经被改进,要么即将被移除。

但是还有一些中间情况:有些功能过于复杂,对生态的发展造成了中等程度的伤害,我们可以移除它们,但是需要冒一点风险。如果我们移除这些功能,可能会有少量的应用被破坏。但是不移除的话,它们会继续拖累生态。

就跟别的“长痛短痛”抉择情形一样,人们很容易低估短痛带来的长期收益。特别是在我们的情况中,由于解决复杂情况的代码已经写好了,所以感觉保留它们不需要付出任何成本。但实际上有两个重要的成本要考虑:

为协议开发新实现的成本

若要改变功能B,但B会跟没必要存在的复杂功能A交互,可能会产生“交互bug”

Vitalik评美国加密政策:对被定为证券的项目感到遗憾:6月30日消息,以太坊创始人Vitalik Buterin回应如何看待美国的加密货币政策方针时表示,非常遗憾Solana和其他项目以这种方式受到打击。他们不应该受到这样的待遇,如果因此让以太坊最终获胜,那不是一种光荣的胜利,从长远来看可能甚至不是一种胜利。真正的竞争不是其他链,而是正在以我们为代价强加给我们的快速扩张的中心化世界。我希望所有的项目在这整个局面中获得公正的结果。[2023/6/30 22:10:24]

以重新设计状态树为例:若以太坊的状态越是遵循一些简单的恒常性质,那么替换更高效的双层十六进制Patricia树就会越容易。然而在现实情况中,因为SELFDESTRUCT操作码可以在单笔事务中不受限制地删除大量存储插槽,这给改良状态树带来了很大的困难。另一个例子是2300gas津贴机制使gas重新定价变得更复杂。

"合并"可能是我们扯掉一些痛苦绷带的最后机会,这篇文章就是解释这样做的理由。

合并是进行最后一轮不兼容更新的一个非常自然的时间节点,有以下几个理由:

合并后构建的客户端很可能不处理PoW链,而是专门验证PoS信标链。因此,如果在合并时或合并前去除不必要的复杂功能,客户端最容易从中受益,因为它们根本不需要实现这些功能。(从技术上讲,即使是在合并前建立的客户端也可以设计成只处理最近1-2个硬分叉之后的数据,但是“PoS信标链作为一条独立的链而不需要处理PoW链上过于久远的数据”的说法更容易让人接受)

Vitalik Buterin正在抛售部分“shitcoin”:金色财经报道,据链上分析师Lookonchain披露,“V神”Vitalik Buterin正在抛售一些持有的“shitcoin”,目前已经售出500亿枚MOPS获得1.25 ETH(约2000美元)、100亿枚CULT获得58 ETH(约合9.1万美元)、以及500万亿枚SHIK获得380 ETH(约合60万美元)。[2023/3/7 12:46:52]

以太坊已经发生了很大的改变,社区对这将是“以太坊的一次重大升级”达成了共识。特别是“在分片和合并完成之前会出现快速的进化,但合并之后就会趋于稳定”的观点也得到了社区的一致认可。

必要的向后不兼容的改变已经发生了。

这篇文章将介绍一些可以考虑删除的功能的例子。

功能列表

2300gas津贴

这是什么?当一个合约调用另一个合约时,被调用的合约会得到2300gas用于执行非常有限的操作

为何引入?最初是为了让智能合约钱包在收钱时能自动生成一条日志。后来还被用于实现“守卫”功能以防止合约收到ETH。

有何问题?

由于它设置的是固定的gas数量,因此只要gas价格可以调整,人们就没有办法确定这些gas到底能支持什么类型的计算。

流动性激励解决方案Graviton与公链Sei达成合作:金色财经报道,公链Sei Network宣布与流动性激励解决方案Graviton建立战略合作伙伴关系,Graviton将帮助Sei提升开发能力并壮大其生态系统,Graviton团队将会被优先考虑获得Sei Network旗下5000万美元生态系统基金的支持。(福布斯)[2022/11/26 20:46:43]

它并没有很好地满足设计意图,有两个原因。首先,很多用户仍然在使用外部账户,而外部账户并不会生成日志。其次,SELFDESTRUCT操作码绕过了津贴机制。从长远来看,通过账户抽象化,外部账户的作用将被弱化,并且SELFDESTRUCT操作码可能将被移除,但是在这两件事完成之前,它都只是一个不充分的解决方式。

如何移除?有两种可能——要么将2300改成0)要么不限制数量

移除有何副作用?

如果我们移除子执行,那么这将需要在合约调用中添加一个笨拙的二分处置,即0gas解释为0,任何其他数字解释为“发送所有的gas”。它还会破坏反接收守卫功能和日志记录。

如果我们在执行中允许子执行获得全部的gas,那么通过调用发送ETH会变成一个需要信任的操作,恶意合约可能会借此扰乱一些应用。不过,Solidity文档已经建议大家用withdrawal模式代替transfer,这样就不会有任何风险了。

Vitalik:新加坡在加密货币监管方面的善意尝试可能不会奏效:11月21日消息,以太坊创始人 Vitalik Buterin 近日在接受采访时表示,新加坡在加密货币监管方面的善意尝试可能不会奏效,因为新加坡监管机构试图将“区块链使用”和“加密货币”区分开,“如果没有加密货币,那么你拥有的区块链就是假的,没有人会关心这些区块链”。

此外,Vitalik Buterin 表示,监管机构既要支持新技术,又要打击不良参与者,在两者之间取得平衡难度很大,但他也表示新加坡很早就将自己定位为对加密货币友好的司法管辖区,只是最近几个月才开始收紧尽管,监管机构只是试图“阻止加密货币投机”,而不是完全禁止加密货币。(straitstimes.com)[2022/11/21 22:11:32]

如何消除顾虑?

让所有的ETH转账,无论是来自调用还是SELFDESTRUCT,都生成一条日志,这样钱包就不需要生成日志了

增加一条规则,对于提供0gas的调用,可看做是一个“可以生成日志的STATICCALL”。这样就复制了在gas津贴的执行环境里实际做到的功能。

剩余Gas额度可见性

这是什么?GAS操作码允许合约查看当前的执行环境中还剩多少gas可用。CALL允许调用者为子上下文提供固定数量的gas。

区块链公司AMAXG推出NFT交易平台BIZA-UVIT:11月4日消息,区块链公司AMAXG周四表示,它已经进入NFT代币平台业务。AMAXG表示,近期已经开通数字资产NFT交易平台BIZA-UVIT,并与韩国艺术文化组织联合会(FACO)、世界医疗美容交流协会(GMAEA)、韩国区块链企业促进会建立战略合作伙伴关系。FACO计划将艺术品数字化,并通过BIZA-UVIT在全球拍卖和出售。GMAEA将使用AMAXG的双向人工智能教育平台BIZA-Metaversity、BIZA-UVIT和去中心化个人对个人(person-to-person)购物中心BIZA Empire Mall。(The Korea Herald)[2021/11/4 21:25:02]

为何引入?反对让CALL将父环境中剩余的全部gas都交给子环境的最主要原因是避免“不可信任的调用”:即发送者不信任接受者的调用。一个简单的例子是发送ETH给参与方的金融机制。另一个例子是M-of-N外部价格信息的输入机制,通过调用一些合约,在获得所有合约回复后取中位数作为输出。

有何问题?

其实绝大多数不可信任调用的用例都可以通过其他方式绕过去。对于转账,Solidity文档已经建议大家用withdrawal模式代替transfer。M-of-N外部价格信息的输入机制可以很容易地通过为每一个外部输入单独创建一笔交易实现。

这会让gas重定价变得很难做,当操作码的gas消耗量发生变化,固定gas数量的调用可能会不够用。

如何移除?

让CALL可以自动将父环境的所有可用gas额度都交给子环境。GAS操作码只需简单地返回交易的初始gas数量。

移除有何副作用?

我们知道的“不可信任调用的合法用例”主要是第三方赞助调用。第三方发布一笔事务,事务中包含你希望的调用,当调用发生后,可以自动地向你扣费。这对用户没有任何ETH的智能合约钱包、混币者的隐私保护以及其他一些用例都很有用。我们需要一个有限gas数量的调用以确保最终的支付语句真正被调用,而不会因为gas不足而被回退。

如何消除顾虑?

矿工可以直接充当中介,如果交易最终没有付钱给他们,他们就可以直接丢弃事务。参见PhilDaian的工作,他创建了一个由第三方机器人构成的生态,矿工可以自动产生“安全”的批量交易。

在协议内增加一个明确的“第三方付款人”的交易类型。参见EIP2711的例子。

还请注意,如果我们想要走得更远,我们还需要调整63/64规则使得如果子调用失败,父调用也彻底失败。这可能会破坏更多的用例,但它将确保当gas消耗量发生变化时只会引起一种类型的行为变化。

SELFDESTRUCT

请看这篇文章。

Gas退款

这是什么?调用SELFDESTRUCT销毁一个合约,或者将一个存储槽设置为零,会退回15000-25000gas。退款会在事务执行的最后触发,并抵扣发送者需要支付的费用。

为何引入?激励应用开发者践行“良好的状态卫生”,清除不再需要的存储插槽和合约。

有何问题?

在实践中,几乎没有人真正践行良好的状态卫生。这是因为激励不够高,不值得为此增加代码的复杂度甚至带来安全风险。

退费机制使得GasToken兴起。GasToken有利于将低费率时期的gas调配到高费率时期使用,但是它不利于网络,特别是加重了状态规模的膨胀,并使低效的gas使用方法阻塞了区块链。

它加剧了区块大小的波动,使一个区块实际上的理论最大gas消耗量几乎是字面意义上区块Gas上限的两倍。这并不致命,但仍然不可取,特别是考虑到,在EIP-1559实施后,退款机制可以使网络的实际Gas使用量长期维持高水平,阻碍1559机制的运行。

如何移除?只要把退款功能从协议中完全删除。

移除有何副作用?

我们可以相当确信,没有任何应用会因此无法使用,因为退款只在执行结束后触发,所以取消退款并不会改变任何执行的可用gas数量。

GasToken将变得毫无用处

在gas价格反常时,应用失去了降低费用的能力。好在这个功能目前最主要的用户是defi的套利机器人,而套利机器人之间的gas价格竞争是一种零和活动,不过还不清楚移除这个它们用于竞争的武器会造成什么全局性的不利影响。

如何消除顾虑?

Gastoken在他们的网站上已经警告过,未来的协议变更可能会使GasToken无效,所以用户不会觉得惊讶

我们可以提前公布变更时间

其他候选功能

相比上面列举的,我对移除以下功能会带来多少价值缺乏信心,不过还是值得列出一个清单。

RIPEMD160预编译:这是一个非标准的哈希函数,很少有项目使用。我们可以用链上部署的合约进行替换,对于真正需要高效验证的项目,可以直接使用ZK-SNARK。

动态跳转:使用变量作为跳转目标会使代码的分析和操作变得更加困难。去掉动态跳转,只允许相对偏移的静态跳转,并且为子程序提供一些专用的指针方案可以解决这个问题。然而,这将是一个底层的改变,可能会破坏许多自定义的合约,所以其收益/成本比似乎不如这个列表中的其他项目。

MODEXP预编译:对于大整数计算来说,这显然是一个错误的“基本元件”,并且其gas消耗的计算方案也相当复杂。更好的选择是:(i)用预编译的ADD、MUL和MOD作为替代的基本原语,并用这些预编译的指令编写用于替代MODEXP的实现,或者(ii)将EVM384扩展到更多的长度

原文链接:https://hackmd.io/@HWeNw8hNRimMm2m2GH56Cw/evm_feature_removing作者:Vitalik翻译&校对:戡乱&阿剑

标签:GASVIT区块链加密货币GASCHuobi Vitamin Token区块链的几个大局数字货币和加密货币的区别是什么

火币网下载官方app热门资讯
DeFi之道丨了解币安智能链,绝非单纯的以太坊分叉那么简单

那么什么是币安智能链?与以太坊有何不同?CeDeFi是什么一回事?您将在本文中找到这些问题的答案。首先,让我们看看币安智能链是如何诞生的。 币安链 2018年4月,全球最大的加密货币交易所之一币安决定推出自己的区块链币安链.

1900/1/1 0:00:00
2021年热点与区块链支付类项目简析:LTC、BCH、USDC、ACH、BNB等

2020年,以区块链为底层技术的BTC在价值存储领域数字黄金的属性与其灵活的使用特点使其备受有突围意识传统机构的青睐。并得到了时间的逐步验证,相信BTC会进一步得到全球范围的认可.

1900/1/1 0:00:00
技术周刊 | ?中国电子标准院开展区块链系统测试

技术周刊|?中国电子标准院开展区块链系统测试 金色财经LE雷 刚刚 29 金色周刊是金色财经推出的一档每周区块链行业总结栏目,内容涵盖一周重点新闻、技术进展等行业动态。本文是其中的技术周刊,带您一览本周区块链技术大事.

1900/1/1 0:00:00
囤币党如何开始DeFi之旅

一、心态上先转变 囤币是静的,defi是动的,需要接受这种变化。前提:学会以太坊钱包,并熟练操作,理解以太坊钱包的单向特性,收发币操作,gas概念,取消发币操作,发错币的情况下,替代nonce发币,加速发币.

1900/1/1 0:00:00
三个投资建议 教你玩转NFT

自今年1月以来,NFT领域呈现出前所未有的生机和活力,朋友圈、微信群、微博、Twitter、Clubhouse上关于NFT的讨论也与日俱增.

1900/1/1 0:00:00
摩根大通计划推出新产品,为客户提供加密敞口

美国证券交易委员会公开文件显示,华尔街投资银行摩根大通计划推出与比特币相关的一篮子产品:J.P.MorganCryptocurrencyExposureBasket.

1900/1/1 0:00:00