前言
本文將深入介紹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-4337新增簽名聚合,可為rollups降低數據成本:10月3日消息,據以太坊創始人V神(Vitalik Buterin)近日發布的推文,其于2021年9月聯合發起的以太坊賬戶抽象提案EIP-4337近期發布了新版本,添加了包括BLS簽名算法的簽名聚合。簽名聚合功能能夠讓構建者和批次提交者也能聚合簽名(例如BLS、SNARKs),大大減少了鏈上的數據。
V神表示,ERC-4337為賬戶抽象提供了真正有價值和必要的東西,可為使用智能合約錢包的用戶操作提供“去中心化費用市場”。我們正在慢慢精準實現賬戶抽象的實際路徑,本次發布新增的簽名聚合功能可以為rollups降低數據成本,這也將成為采納ERC-4337的動力之一。
據悉,賬戶抽象(Account Abstraction)是通過省略以太坊賬戶體系中不必要細節,來減少復雜性并提高有效性有效地(消除了對EOA的需求和對智能合約錢包的特殊處理)。[2022/10/3 18:38:21]
EVM與Opcode概念
以太坊開發者提出EIP-3382提案以固定區塊gas限制,而不受受礦工制約:以太坊開發者Philippe Castonguay提出EIP-3382提案,提議將區塊Gas限制硬編碼為每區塊12,500,000 gas。更新塊驗證規則,如果Gas限制header字段不等于12,500,000,則區塊無效。Philippe Castonguay表示,對區塊氣Gas限制進行硬編碼,因為它是一個關鍵參數,需要網絡達成共識,并且不受礦工的制約。Philippe Castonguay認為,以太坊的PoW和PoS設計都假設區塊生產商(礦工)在財務上是理性的,但并沒有假設礦工是仁慈的。但是,有一個例外,那就是礦工選擇區塊的Gas限制時,假定礦工關心鏈的長期健康和去中心化。實際上,區塊gas限制是以太坊中唯一不是由節點一致性決定,而是由礦工選擇的參數。這一決定最初是為了在必要時允許緊急改變區塊Gas限制。大幅增加或減少這一參數都可能會產生嚴重的后果,這可能是不希望的。因此,這是一個關鍵參數,需要節點一致性,以避免少數參與者對網絡其余部分施加任何突然的有害變化。[2021/3/16 18:49:37]
在介紹EIP-3855之前,我們先來簡單了解Ethereum中最重要的EVM概念!
少數以太坊礦池正在聯合抵制EIP-1559提案的實施:1月22日消息,一些以太坊礦工組成了一個卡特爾組織,以阻止一項目前存在爭議的提案EIP-1559的實施。他們表示,這一提議不公平地削減了他們的利潤。(CoinDesk)[2021/1/22 16:44:37]
EVM
我們為了讓智能合約在獨立且安全的環境中執行,而從Ethereum節點中會切出一塊具有儲存、執行等功能的運算環境,我們將之稱之為EVM虛擬機。
而這個EVM具備執行智能合約所需的堆疊、記憶體、紀錄Gas費用及儲存下一行指令位址等各種必要元件,以便完成開發人員要求的各種計算。
Bytecode與Opcode
我們用Solidity等語言所撰寫的智能合約,要先編譯成一連串EVMOpcode,這一連串Opcode稱為Bytecode。我們接著來進行一段簡單的操作就會比較清楚!
有興趣的讀者可以透過EtherVM了解更多關于Opocde的介紹。
V神:過去兩月ETH交易費已足以完全抵消EIP 1559后的PoS獎勵:V神發推稱,喜歡看人們一直努力嘗試去詬病以太坊沒有2100萬硬上限,然而過去兩個月,以太坊的交易費用已經高到足以完全抵消EIP 1559之后的PoS獎勵。注:EIP 1559旨在改變以太坊交易費用市場的提案。[2020/8/8]
首先,我們先在Remix上編譯下方這份簡易的加法智能合約,編譯完成后就可從artifacts資料夾中看到包含此智能合約Bytecode與Opcode的Json資訊檔。
智能合約在線編譯工具Remix
與此同時,這個智能合約也已部署到Goerli測試網中,我們可點選在Etherscan上的鈕從Bytecode切換到Opcode觀看模式。這時,即可得知一連串Opcode稱為Bytecode。
這里就只截取這份合約部份的Opcode。
部份Bytecode與Opcode對照表
0x 社區已投票通過ZEIP-79提案,可節約50%的交易成本:0x 社區已經投票通過ZEIP-79提案,該協議執行后可將交易費減少50%,這意味著不僅對于Matcha交易者而且對于任何集成0x協議的交易者都極大節約交易成本。[2020/7/22]
現在我們有了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
?
尊敬的用戶: 火必將于2023年4月10日17:00(GMT8)開放MUSK/USDT的交易對,敬請關注!MUSK充值>>> 祝您交易愉快! 風險提示:數字資產是一種創新產品.
1900/1/1 0:00:00根據加密數據分析和新聞公司TheBlock提供的數據,以太(ETH)看跌期權和看漲期權未平倉合約的比率周二躍升至去年5月以來的最高水平0.47.
1900/1/1 0:00:00金色財經報道,以太坊再質押協議EigenLayer在以太坊Goerli網絡上發布EigenLayer協議第一階段測試網,目前僅支持流動性重質押和原生重質押.
1900/1/1 0:00:00親愛的8V用戶: 復活節是最重要的基督教節日和文化節日之一。節日以各種宗教和文化傳統和習俗慶祝,例如復活節彩蛋、兔子和百合花。對于全世界的基督徒來說,這是慶祝和希望的時刻.
1900/1/1 0:00:00比特幣和以太坊通常非常緊密地結合在一起,并且在圖表上以相似的方式移動。然而,比特幣最近似乎落后了。過去一周,以太坊上漲了5.3%。另一方面,比特幣在同一時間段內下跌了1.8%.
1900/1/1 0:00:00Gate.io上架,其中包括BTC&USDTÐ等不同幣種產品。作為保本理財產品,Gate.io旗下結構化產品為用戶提供最高15%的年化收益.
1900/1/1 0:00:00