前言
本文將深入介紹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。
MetaMask添加了EIP-4361:金色財經報道,MetaMask 增加了與 EIP-4361 或“使用以太坊登錄”的兼容性,該功能使人們能夠安全地使用其加密錢包來驗證網絡服務。旨在為以太坊賬戶持有人提供一種更標準化的方式來驗證自己在鏈下服務上的身份。錢包項目與數字身份和數據提供商 Spruce 就此集成進行了合作。隨著 EIP-4361 的實施,像 MetaMask 這樣的錢包項目的用戶可以簽署一個標準的消息格式來登錄網站。[2023/3/24 13:25:17]
EVM與Opcode概念
在介紹EIP-3855之前,我們先來簡單了解Ethereum中最重要的EVM概念!
EVM
我們為了讓智能合約在獨立且安全的環境中執行,而從Ethereum節點中會切出一塊具有儲存、執行等功能的運算環境,我們將之稱之為EVM虛擬機。
而這個EVM具備執行智能合約所需的堆疊、記憶體、紀錄Gas費用及儲存下一行指令位址等各種必要元件,以便完成開發人員要求的各種計算。
Cobo安全團隊詳解Stargate漏洞:可能導致偽造的交易receipt通過MPT驗證:3月29日消息,Cobo安全團隊撰文對Stargate跨鏈橋底層協議LayerZero的安全漏洞進行分析,稱原始漏洞代碼在進行MPT 驗證時,沒有限制pointer 在proofBytes 長度內,這個漏洞有可能讓攻擊者偽造hashRoot,導致偽造的交易receipt 可以通過MPT 驗證。最終可造成的后果是,在預言機完全可信的前提下,Relayer 仍可以單方面通過偽造receipt 數據的方式來實現對跨鏈協議的攻擊。
值得注意的是,此次爆出漏洞的代碼是LayerZero協議中最核心的MPT交易驗證部分的代碼,是整個LayerZero及上層協議(例如Stargate)正常運作的基石。Cobo安全團隊還表示,LayerZero項目的關鍵合約目前大都還被EOA控制,沒有采用多簽機制或者時間鎖機制。如果這些特權EOA的私鑰一旦泄漏,也可能會導致所有上層協議的資產受到影響。[2022/3/29 14:24:49]
Bytecode與Opcode
Stack Funds首席運營官:以太坊漲勢源自EIP 1559升級引起的興奮:金色財經報道,以太坊在周一早些時候升至創紀錄的3201美元,年初至今的漲幅超過330%。對此,Stack Funds首席運營官Matthew Dibb表示,以太坊的融資率保持平穩,今日早些時候在FTX上達到負數。以太坊的現貨漲勢主要是由于即將到來的EIP 1559升級引起的興奮。[2021/5/4 21:21:23]
我們用Solidity等語言所撰寫的智能合約,要先編譯成一連串EVMOpcode,這一連串Opcode稱為Bytecode。我們接著來進行一段簡單的操作就會比較清楚!
有興趣的讀者可以透過EtherVM了解更多關于Opocde的介紹。
首先,我們先在Remix上編譯下方這份簡易的加法智能合約,編譯完成后就可從artifacts資料夾中看到包含此智能合約Bytecode與Opcode的Json資訊檔。
聚幣Jubi推出全新JT回購模型EIP JT每月回購價定增35%:據官方消息,聚幣Jubi將于2020年12月21日正式施行全新EIP(Ever-Increasing Price)回購模型,每月JT回購價格定增35%,回購JT將全數銷毀。12月JT回購價為1JT=0.1647USDT。聚幣將沿用HRP雙通道回購模型的優勢,每月進行場外回購池預約回購+二級市場掛單回購。
聚幣Jubi自2020年7月推出HRP溢價回購模型起,已累計回購并銷毀5,287,691.9361 JT。在施行全新EIP回購機制后,每月JT回購價格連續增長,2021年7月JT回購價格達1.3459USDT。[2020/12/18 15:42:51]
智能合約在線編譯工具Remix
與此同時,這個智能合約也已部署到Goerli測試網中,我們可點選在Etherscan上的鈕從Bytecode切換到Opcode觀看模式。這時,即可得知一連串Opcode稱為Bytecode。
以太坊利益相關者承諾由EIP:0峰會參與者制定治理計劃:據Coindesk消息,EIP:0峰會的組織者由于只邀請以太坊社區參與峰會遭到批評,組織者于5月9日發布了4項新治理措施聲明。該聲明的簽署者承諾為以太坊創建一個共享價值的聲明,支持創建“收集關鍵信號和指標的開源工具”,另外每個月都將要求進行治理,并且將組織一個更大的EIP:0會議。另外還表示未來峰會將以現有模式為基礎,擴大觀眾的互動機會。目前簽署聲明的完整名單為:L4 Ventures、開發商Lane Rettig、Giveth創始人Griff Green、以太坊基金會成員Hudson Jameson、創業公司Gnosis。另外,Parity Technologies、Aragon 和 the Web3 Foundation等利益相關者已經承諾他們將支持簽署意向聲明。[2018/5/10]
這里就只截取這份合約部份的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
?
Gate.io上架,其中包括BTC&USDTÐ等不同幣種產品。作為保本理財產品,Gate.io旗下結構化產品為用戶提供最高15%的年化收益.
1900/1/1 0:00:00今日早間,以太坊再質押協議?EigenLayer宣布已啟動第一階段測試網,向質押者提供了流動性再質押和原生再質押的測試窗口.
1900/1/1 0:00:00流動性質押代幣也在周三上漲。比特幣穩定在28,000美元上方。以太坊(ETH)是以太坊區塊鏈的原生代幣,在周三的大部分時間里盤旋在1,900美元上方,這是上海硬分叉之前的一周.
1900/1/1 0:00:00比特幣價格重新測試每日FVG從23,951美元擴展至22,184美元。以太坊價格可能下跌10%至1,703美元,但如果看跌勢頭持續,ETH甚至可能跌至1,564美元.
1900/1/1 0:00:00Gate.io新用戶專享USDT鎖倉福利理財已上線,活動期間註冊的新用戶參與理財,年化收益率高達150%!**投資門檻:**低至1USDT**開售時間:**北京時間2023年4月4日—2023年.
1900/1/1 0:00:00金色財經報道,BIS經濟學家對引入零售中央銀行數字貨幣(CBDC)的潛在影響進行了宏觀經濟研究,認為CBDC的最佳水平是發行率為國內生產總值(GDP)的40%.
1900/1/1 0:00:00