以太幣交易所 以太幣交易所
Ctrl+D 以太幣交易所
ads

EIP-3855 如何讓合約更精簡_ODE

Author:

Time: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。

去中心化圖片網絡Numbers Protocol提交EIP-7053:7月3日消息,去中心化圖片網絡 Numbers Protocol 近日提交以太坊改進提案 EIP-7053,該 EIP 提出了一種可互操作的索引策略,旨在增強跨多個智能合約和 EVM 兼容區塊鏈的數字媒體信息的組織和檢索。該系統增強了跨合約和跨鏈數據的可追溯性和驗證性,有助于更有效地發現存儲位置和與媒體資產相關的關鍵信息。主要目的是在區塊鏈上培育一個集成的數字媒體環境。[2023/7/3 22:15:27]

EVM與Opcode概念

在介紹EIP-3855之前,我們先來簡單了解Ethereum中最重要的EVM概念!

EVM

我們為了讓智能合約在獨立且安全的環境中執行,而從Ethereum節點中會切出一塊具有儲存、執行等功能的運算環境,我們將之稱之為EVM虛擬機。

而這個EVM具備執行智能合約所需的堆疊、記憶體、紀錄Gas費用及儲存下一行指令位址等各種必要元件,以便完成開發人員要求的各種計算。

Tim Beiko:錢包應針對EIP-1559帶來的Gas費用政策改變來改善用戶體驗:9月18日消息,以太坊核心開發者會議協調人Tim Beiko在推特上表示,MetaMask的UI/UX開發者Jake Lee Haugen在Trenton Van Epps組織的EIP-1559復盤會上稱,目前80%的MetaMask用戶從未進入過“編輯 Gas”的界面。Tim Beiko表示,目前錢包在用戶體驗設計上最大的挑戰在于從之前針對不同交易速度需求來設置Gas費用轉換為現在平時的“支付當前所需費用”,以及網絡擁堵時“等待高峰期結束”、“設置全網最高的交易費”一類的需求。而目前很多錢包團隊已經意識到了這個問題并正在朝這個方向進行開發。[2021/9/18 23:35:17]

Bytecode與Opcode

我們用Solidity等語言所撰寫的智能合約,要先編譯成一連串EVMOpcode,這一連串Opcode稱為Bytecode。我們接著來進行一段簡單的操作就會比較清楚!

以太坊開發人員:用戶嘗鮮等五大原因綜合導致EIP-1559升級后的Gas價格上漲:8月6日消息,以太坊基金會生態建設協調人Trenton Van Epps發推解釋,或共有五大原因綜合導致EIP-1559升級后的Gas價格上漲,具體為:1. 有一些大規模的NFT空投正在進行中,導致了網絡的擁堵;2. 很多服務方(如交易所)在網絡升級期間禁用了一些功能(充值提現),一旦升級完成網絡穩定,這種被壓抑的需求就會集中釋放;3. 一些礦工將Gas Limit設置低于3000萬,使得每個區塊只使用了大約1350萬Gas,加劇了擁堵; 4. ETH二級市場波動上漲;5. 用戶正發送大量交易嘗試EIP-1559功能。

此外針對 Priority Fee (小費)為何高于2Gwei,Trenton Van Epps認為原因主要有兩點:1. 各個錢包接口(API)仍在陸續推出,因此大多數用戶甚至還沒有發送新的交易類型,導致無法調整 Priority Fee;2.Gas API將需要時間來調整算法以建議合適的Priority Fee,因此現在許多人仍在觀察并進行調整。[2021/8/6 1:39:00]

有興趣的讀者可以透過EtherVM了解更多關于Opocde的介紹。

EIP-1559已在以太坊Nethermind客戶端合并至master:1月17日消息,以太坊客戶端Nethermind官方發推稱,EIP-1559已在Nethermind節點上合并至master。期待與BeSu和Geth客戶端團隊在本周進行進一步測試。[2021/1/17 16:22:18]

首先,我們先在Remix上編譯下方這份簡易的加法智能合約,編譯完成后就可從artifacts資料夾中看到包含此智能合約Bytecode與Opcode的Json資訊檔。

智能合約在線編譯工具Remix

與此同時,這個智能合約也已部署到Goerli測試網中,我們可點選在Etherscan上的鈕從Bytecode切換到Opcode觀看模式。這時,即可得知一連串Opcode稱為Bytecode。

這里就只截取這份合約部份的Opcode。

部份Bytecode與Opcode對照表

V神:過去兩月ETH交易費已足以完全抵消EIP 1559后的PoS獎勵:V神發推稱,喜歡看人們一直努力嘗試去詬病以太坊沒有2100萬硬上限,然而過去兩個月,以太坊的交易費用已經高到足以完全抵消EIP 1559之后的PoS獎勵。注:EIP 1559旨在改變以太坊交易費用市場的提案。[2020/8/8]

現在我們有了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

?

Tags:ODECODECODPUSHPNODE價格CODEX幣COD價格PUSH幣

POL幣最新價格
盤點即將首發上線的8個熱門項目(4月第二彈)_HTT

最近一周,部分山寨匯率開始走高,市場對于新項目的參與熱情持續上升。本周,Odaily星球日報甄選了近期即將在多個平臺首發的8項目名單,并分別做簡要介紹.

1900/1/1 0:00:00
都尚未發幣,zkSync Era這些生態項目值得交互_SYNC

zkSyncEra主網于2023年3月24日正式向公眾開放,?3天內單一地址數便突破10萬個,?1.8萬枚ETH跨鏈進入zkSyncEra.

1900/1/1 0:00:00
XRP 價格分析:未來會下跌_XRP

瑞波幣(XRP)的價格在過去24小時內下跌了2.18%,交易價格為0.4989美元。截至發稿時,XRP的價格低于關鍵的上漲價格通道.

1900/1/1 0:00:00
Gate.io 結構化理財 5 款產品上架,現在認購,即刻賺取最高 15 % 年化_GATE

Gate.io上架,其中包括BTC&USDT&ETH等不同幣種產品。作為保本理財產品,Gate.io旗下結構化產品為用戶提供最高15%的年化收益.

1900/1/1 0:00:00
Smart Link Solution (SLS)_SMA

一、項目簡介? SLS是一家區塊鏈公司,為企業提供Web3服務,構建連接企業Web3的區塊鏈系統,形成SLS生態.

1900/1/1 0:00:00
Otherside宣布啟動Koda NFT拆分及Vessel NFT Claim活動_THE

4月6日消息,YugaLabs旗下元宇宙項目Otherside在社交媒體發文表示,KodaNFT拆分和VesselClaim已經開始,只有擁有Koda的Otherdeeds才能拆分.

1900/1/1 0:00:00
ads