前言
本文将深入介绍EthereumOpcode的最新成员:PUSH0
在过去,我们只能使用PUSH10x00来达成将数值0存入EVM的Stack中,而上海升级中包含诸多EIP之一的EIP-3855提案则引入了PUSH0这项新的Opcode来达成相同的效果。透过节省1Byte的指令空间,减少了智能合约编译后的Bytecode大小,进一步降低智能合约部署的成本。
而本文将会快速地带到EVM、Bytecode与Opcode的基本概念,并一步一步地带你了解PUSH0的核心意义和对现有合约的影响。
文章会从EVM、Opcode到PUSH0详细说明,若您为区块链开发人员,我们可用一句话函盖整篇文章:
EIP-3855引入新Opcode:PUSH0来取代PUSH10x00,因减少1Byte指令空间,所以减少了部署智能合约的200Gas,所有合约加总一年大约可省1,362.23ETH。
OP Labs:EIP-4844将大幅降低Rollup费用,使以太坊能够在保持去中心化的情况下扩容:7月30日消息,OP Labs推特发文称,EIP-4844将大幅降低Rollup费用,使以太坊能够在不牺牲去中心化的情况下扩容。近期来自OP Labs、Coinbase和ConsenSys的研究人员和开发人员参与了社区第二次会议,讨论了公共开发网络、收费市场设计和同步架构等话题。今年3月,以太坊创始人V神(Vitalik Buterin)在推特上分享了关于其和几位开发者共同提出的EIP-4844提案,该提案建议用proto-danksharding代替扩容解决方案Danksharding。该提案致力于在尚未实际实施任何分片的情况下,部署构成完整Danksharding规范的大部分逻辑和交易格式及验证规则。Proto-danksharding引入的主要特性是新的交易类型,称之为携带blob的交易。携带blob的交易引入一种新的交易格式,其中包含大量数据,EVM执行无法访问,但其提交可以访问。提案提议每30天自动删除blob数据,以防止网络对数据和内存存储的要求过大。Proto-danksharding部署后,所有验证者和用户仍须直接验证完整数据的可用性。[2022/7/31 2:49:01]
EVM与Opcode概念
MetaMask移动版本V3.6.0添加支持显示EIP 1155 NFT:11月5日消息,官方消息,MetaMask移动版本V3.6.0添加支持显示EIP 1155 NFT,可以降低gas价格并支持更复杂的合约。[2021/11/5 6:32:46]
在介绍EIP-3855之前,我们先来简单了解Ethereum中最重要的EVM概念!
EVM
我们为了让智能合约在独立且安全的环境中执行,而从Ethereum节点中会切出一块具有储存、执行等功能的运算环境,我们将之称之为EVM虚拟机。
而这个EVM具备执行智能合约所需的堆叠、记忆体、纪录Gas费用及储存下一行指令位址等各种必要元件,以便完成开发人员要求的各种计算。
Bytecode与Opcode
我们用Solidity等语言所撰写的智能合约,要先编译成一连串EVMOpcode,这一连串Opcode称为Bytecode。我们接着来进行一段简单的操作就会比较清楚!
V神等人提出EIP-4488,旨在降低以太坊二层扩容解决方案的Gas费:11月27日消息,以太坊创始人Vitalik Buterin和以太坊开发者Ansgar Dietrichs本周共同撰写以太坊改进方案EIP-4488,旨在降低以太坊第二层扩容解决方案的Gas费。该提案旨在更直接地解决高Gas成本问题,同时开发出更稳健的解决方案。
EIP-4488试图通过两种方式进一步降低第二层Gas费:降低交易调用数据(calldata)成本(这是Optimistic Rollups和ZK-Rollups的主要机制),以及增加一个区块中的交易调用数据总量上限。根据Vitalik Buterin的说法,增加可用于Rollups的数据空间量在今天是可行的,因为区块大小远不及威胁网络稳定性的大小。
虽然数据分片可能被视为解决Rollups不完善问题的长期解决方案,但根据zkSync团队发布的推文,该提案试图在非常短的时间内降低Gas费,可能在今年圣诞节之前。(CryptoBriefing)[2021/11/27 12:35:33]
有兴趣的读者可以透过EtherVM了解更多关于Opocde的介绍。
数据:部署EIP-1559的测试网已经销毁大约700ETH:以太坊客户端OpenEthereum开发者创建了一个可视化ETH费用销毁的门户网站,以监控EIP-1559被部署后,每个区块总共销毁多少ETH。数据显示,测试网已经销毁大约700 ETH。
据悉,当EIP-1559被部署时,如果存在交易,ETH将在每个区块中被烧毁。
此前消息,对于以太坊测试网进行伦敦升级的时间,Ropsten定于区块高度10399301(6月9日),Goerli定于区块高度4979794(6月16日),Rinkeby定于区块高度8813188(6月23日),主网仍定于7月14日进行升级,在第一个测试网成功分叉后,再确定主网客户端升级区块。[2021/6/16 23:41:13]
首先,我们先在Remix上编译下方这份简易的加法智能合约,编译完成后就可从artifacts资料夹中看到包含此智能合约Bytecode与Opcode的Json资讯档。
以太坊开发者:EIP-1559没有很好解释其重要性:1月22日,以太坊开发者Tim Beiko称,本周对EIP-1559的一个比较好的批评是,EIP本身并没有很好地解释为什么它很重要,希望能在网站对此作出反馈。如果人们发现这有用,我可以打开一份针对EIP的PR页面来链接它。[2021/1/23 16:49:43]
智能合约在线编译工具Remix
与此同时,这个智能合约也已部署到Goerli测试网中,我们可点选在Etherscan上的钮从Bytecode切换到Opcode观看模式。这时,即可得知一连串Opcode称为Bytecode。
这里就只截取这份合约部份的Opcode。
部份Bytecode与Opcode对照表
现在我们有了EVM、Bytecode、Opcode的概念后,那EIP-3855到底要改进什么问题呢?
前面的例子中,我们了解到若想要将一个零的值推到Stack中,这个动作会被编译成「PUSH0x00」(两个Byte,分别是0x60及0x00,其中0x00代表零的值,所以0x6000整整占了2个Byte的Storage空间!
1ByteBytecode空间需要支付200Gas的费用。
另外,执行1个PUSH1的操作需支付3Gas,而PUSH0也是,所以PUSH0主要是减少编译后的程序码大小,但实际上执行时的Gas消耗和PUSH1是一样的。
我们来看一下以下关于Push10x00指令在2020年的统计数据:
Push10x00指令占了2020年全年度智能合约Bytecode的4.57%之多,它被如此常用,以致于几乎所有的智能合约中都可看到它的身影!
这时,如果我们新增一个Opcode来做和PUSH10x00完全一样的事,是否就可以再减少1个200Gas的空间消耗?
答案是可以的!EIP-3855即将会在这一次的上海升级中在Opcode中引入一条PUSH0新指令,而这个新指令的编号是0x5F!
会选择0x5F做为PUSH0的原因,除了0x5F在上海升级前没有被使用外,而且它也刚好是在PUSH1指令的前一个编号!是一个连续且有意义的指令空间。
0x5F及0x60的Opcode指令编号,图片来源:https://ethervm.io/
EIP-3855带来的改变
将0x6000指令瘦身至0x5F有一个最重要的改变,就是部署合约时的Gas费用变便宜了!程式码中每个使用到PUSH10x00的地方都可以因为这个改变而省下200Gas!
那我们一样以2020全年度使用340,557,331次0x6000指令来计算,大约需耗费340,557,331x200Gas=68,111,466,200Gas。接着若以1Gas需支付20GWei来计算,也就是可以为整个网路省下整整约1,362.23ETH,而且各个Ethereum节点也可省下不少储存空间。
此外,对于开发人员来说,也可减少使用一些特殊优化手段来减少PUSH10x00的200Gas开销,例如使用DUP指令等。使用0x5F代表着可减少开发人员进行各种优化成本与风险,也利于估算智能合约的Gas费用。
结论
带来的改变有以下两点。
EIP-3855将减少部署智能合约时的Bytecode大小此外,EIP-3855也可减少过去开发人员在进行各种优化上的成本与风险本文介绍了Ethereum的EVM及Opcode的概念,并且深入探讨了EIP-3855改进的重要意义与影响。一旦这次的上海升级完成,就可减少开发人员部署合约时所需的储存空间费用,而EIP-3855提案和新的特性,也将吸引更多的开发者加入到以太坊的生态中。感谢您阅读本文!
参考资料
中文以太坊虛擬機https://ethereum.org/zh/developers/docs/evm/英文EIP-3855提案https://eips.ethereum.org/EIPS/eip-3855EIP-3855英文討論區https://ethereum-magicians.org/t/eip-3855-push0-instruction/7014EVMCodes列表https://www.evm.codes/EthereumVirtualMachineOpcodeshttps://ethervm.io/PDF-ethereum-evm-illustratedhttps://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf关于EIP-3855常见问题
1、EIP-3855提案通过后是否可提升TPS?
TPS增长量不大,因为实际在主网上部署合约的交易并不多,假设在一个区块内有10笔部署合约交易的状况,若每个合约部署只「一次性」省约25个PUSH0,所以TPS可提升的有限。
2、一般Solidity开发人员如何应用此EIP-3855提案?
一般Solidity开发人员要等到上海升级完成才能享受到程式码大小变小的好处,EIP-3855主要是让Solidity编译器将所有PUSH10x00改为PUSH0,以节省空间、减少gas等好处。
2020年「PUSH」系列指令數量統計表
此表格参考EIP-3855中作者之一HugoDelacruz所統計的2020全年度EthereumOpcode数量表格,并进行延伸计算。
表格链接:https://mirror.xyz/0x347c9872A2a1dE370D798f9FE96341A9A0E05af8/mmOWhqg5WUkVD54iS210GPcX728x1kz2XZp94mOMtcE
?
以太坊的价格在过去24小时内上涨了5%以上。大多数市场指标和指标都支持进一步增长的可能性。投资者在4月5日从好消息中醒来,因为加密货币市场变得相当看涨,允许多种加密货币推高其价格.
1900/1/1 0:00:00社交媒体推特的Logo在4日突然变成狗狗币的柴犬迷因图、并获马斯克的推波助澜。不过就在今晨,Twitter已重新换回蓝鸟标志,DOGE一度跳水近10%.
1900/1/1 0:00:00原文作者:Cookie,律动BlockBeats不久前的3月29日,Gem宣布新通过了50000份GemV2测试申请.
1900/1/1 0:00:00退出局,我们俗称的项目跑路。又被形象地称为“拉地毯”,是Web3.0领域的一种犯罪手段。RugPull的常见做法是在创建一个看似合法的DeFi项目之后,制造虚假的交易量和用户数量来提高项目.
1900/1/1 0:00:00DearKuCoinFuturesUsers,KuCoinFutureshaslaunchedJOE(JOE)USDT-marginedperpetualcontract.
1900/1/1 0:00:00GMX团队近期发布了V2有关提案,预示着备受期待的GMX合成资产版本终于到了上线前夕,本文将为你带来全方位的GMXV2解读,一窥此衍生品赛道龙头的未来.
1900/1/1 0:00:00