宇宙链 宇宙链
Ctrl+D收藏宇宙链
首页 > XRP > 正文

EIP-3855 如何让合约更精简

作者:

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

前言

本文将深入介绍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。

自EIP-1559实行以来,已销毁122.5万枚ETH:12月20日,据ultrasound.money数据,自EIP-1559实行以来,ETH总销毁量达122.5万枚,总价值约48亿美元。截至目前,销毁ETH最多的应用是OpenSea,共销毁超12.8万枚ETH;第二名为ETH转账,销毁超11.9万枚ETH;第三名为UniswapV2,销毁超11万枚ETH。[2021/12/20 7:49:35]

EVM与Opcode概念

在介绍EIP-3855之前,我们先来简单了解Ethereum中最重要的EVM概念!

EVM

我们为了让智能合约在独立且安全的环境中执行,而从Ethereum节点中会切出一块具有储存、执行等功能的运算环境,我们将之称之为EVM虚拟机。

而这个EVM具备执行智能合约所需的堆叠、记忆体、纪录Gas费用及储存下一行指令位址等各种必要元件,以便完成开发人员要求的各种计算。

分叉监控工具计算块哈希的库没有EIP-1559支持,导致其报告的区块哈希值与区块浏览器和节点不同:以太坊开发者Tim Beiko表示,以太坊测试网Ropsten激活伦敦升级后,分叉监控工具报告的区块哈希值与区块浏览器和节点不同,但是所有字段和两组哈希都是一致的。这是一个工具问题而不是共识问题,分叉监控工具计算块哈希的库没有EIP-1559支持,因此计算是不同的。[2021/6/25 0:05:50]

Bytecode与Opcode

我们用Solidity等语言所撰写的智能合约,要先编译成一连串EVMOpcode,这一连串Opcode称为Bytecode。我们接着来进行一段简单的操作就会比较清楚!

有兴趣的读者可以透过EtherVM了解更多关于Opocde的介绍。

首先,我们先在Remix上编译下方这份简易的加法智能合约,编译完成后就可从artifacts资料夹中看到包含此智能合约Bytecode与Opcode的Json资讯档。

EthHub创始人 Sassano:EIP-3074、Altair升级等没有得到足够关注:5月18日消息,EthHub联合创始人Anthony Sassano刚刚在推特表示,以太坊生态系统中让我兴奋但没有得到足够关注的事情:EIP-3074(用户体验的主要利好);以太坊信标链Altair升级;以太坊核心开发学徒计划;DAOs启动资助项目;Aztec L2隐私技术。[2021/5/18 22:14:22]

智能合约在线编译工具Remix

与此同时,这个智能合约也已部署到Goerli测试网中,我们可点选在Etherscan上的钮从Bytecode切换到Opcode观看模式。这时,即可得知一连串Opcode称为Bytecode。

这里就只截取这份合约部份的Opcode。

部份Bytecode与Opcode对照表

现在我们有了EVM、Bytecode、Opcode的概念后,那EIP-3855到底要改进什么问题呢?

聚币Jubi已将2月EIP溢价回购JT全数销毁:据官方消息,聚币Jubi已于2021年2月20日完成一月的EIP回购销毁,总计销毁718,439.1361 JT。其中二级市场回购592,002.8009 JT,EIP预约回购126,436.3352 JT。所有回购JT(共计718,439.1361 JT)已转入官方公示销毁地址(0x0000000000000000000000000000000000000000)并全数销毁。JT月通缩率达0.781%。

未来,持有更多JT且持币时间更久的用户,将有更多机会获得高溢价的JT回购额度。在聚币Jubi全新的EIP回购机制下,JT每月回购价定增35%。3月JT回购价为0.4052USDT(2月JT回购价0.3002USDT*135%)。[2021/3/5 18:19:18]

前面的例子中,我们了解到若想要将一个零的值推到Stack中,这个动作会被编译成「PUSH0x00」(两个Byte,分别是0x60及0x00,其中0x00代表零的值,所以0x6000整整占了2个Byte的Storage空间!

Filecoin研发工程师:在网络测试中,EIP 1559代码“似乎正在发挥作用”:Filecoin研发工程师Jeromy Johnson表示,在正在进行的网络测试中,EIP 1559代码“似乎正在发挥作用”。他补充称,“基本费(base fee)”(即新的网络费用体系结构)曾出现过几次高峰,但消息进入链的时间几乎没有延迟。他个人希望看到EIP 1559在更大规模的网络(如Ropsten)上实现,以查看更大的块是否会出现问题。

此前消息,Jeromy Johnson曾表示,Filecoin的下一次测试网重置后将会实现以太坊改进提案EIP1559的功能,这将会显著增强区块空间拍卖效率,并期待看到在真实压力下的性能如何。据悉,V神曾表示,EIP1559提案可短期缓解gas费价格问题,但真正的解决方案是提高以太坊的可扩展性。(Cointelegraph)[2020/8/27]

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

?

标签:ODECODCODEETHErgoDEXcode币怎样code币怎么挖ethical的中文谐音

XRP热门资讯
BTC、ETH、MATIC等币4月份走势如何?

如果BTC、ETH、MATIC、HBAR和EOS突破各自的上方阻力位,它们可能会回升势头。随着硅谷银行和SignatureBank倒闭,SilvergateBank因严重的财务困境进入清算阶段,市场在3月份见证了一场重大的银行业危机.

1900/1/1 0:00:00
比特币价格与以太坊预测:ETH涨5%,BTC会跟风吗?

比特币作为全球最大的加密货币,自2023年初以来经历了过山车式的走势,一季度飙升超过70%。这一表现超过了实物黄金和美国股票等其他资产.

1900/1/1 0:00:00
比特币:随着市场再次崩盘,BTC 跌至 28,130 美元

在最近的低迷之后,BTC/USD已降至28,130美元。总体而言,比特币价格分析显示看跌趋势。目前,对加密货币的支持为27,607美元。比特币价格分析显示今天的交易日看跌趋势.

1900/1/1 0:00:00
比特币下跌,以太币上涨,狗狗币在Twitter图标更改后暴涨

比特币在亚洲周二早盘涨跌互见的交易中跌破28,000美元大关,而以太币则上涨。这两种代币在过去20天中仍保持收益。在Twitter首席执行官埃隆马斯克将Twitter图标切换为狗狗币图像后,狗狗币在过去24小时内飙升近XNUMX%.

1900/1/1 0:00:00
观点:比特币与科技股的紧密相关性弱化其“避险资产”叙事

金色财经报道,比特币价格3月份上涨23%,原因是多家美国银行破产,加剧了人们对经济衰退的担忧。几位分析师将这一上涨称为避险反弹,价格上涨归因于投资者在银行倒闭期间寻求避险.

1900/1/1 0:00:00
NBLU (NBLU)

一、项目简介? NURITOPIA是一个无边无际的宇宙,把有相似爱好和共同兴趣的人聚集在一起。我们正在开发一个元宇宙,它提供了一种在虚拟环境中真正建立社会联系的方式,并提供了通过参与现实生活和幻想活动来获得奖励的机会.

1900/1/1 0:00:00