前言
本文將深入介紹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。
Relation協議提出EIP-6239語義SBT規范通用數據模型:3月15日消息,Web3社交圖譜協議Relation提出EIP-6239語義SBT規范通用數據模型,詳細說明了Relation如何基于RDF(資源描述框架),構建出創新型的去中心化社交圖譜協議——Relation Protocol,為社交互動和數據共享提供可信、開放和可互操作的基礎設施,能夠高效處理海量級復雜社交數據,使數據分析效率提升近千倍,同時減少數據摩擦。
Relation Protocol通過鏈上原生的智能合約生態、通用靈活的圖數據模型、基于Lit Protocol隱私配置和Arweave上的數據永久存儲,為開發者提供了鏈上原生、隱私保護和永久存儲的數據層。[2023/3/15 13:05:42]
EVM與Opcode概念
在介紹EIP-3855之前,我們先來簡單了解Ethereum中最重要的EVM概念!
EVM
以太坊開發人員:提議將EIP-4758納入以太坊上海:金色財經報道,以太坊開發人員MariusVanDerWijden在其社交平臺表示,我想提議將EIP-4758納入以太坊上海。它改變了SELFDESTRUCT操作碼的語義,并將其變成一個SENDALL,將合同的余額發送給一個接收者。這個EIP是Verkle的先決條件(還有其他一些變化)。它非常容易實現,而且不難測試,所以我很想在上海看到它。
據悉,通過將SELFDESTRUCT改為SENDALL來停用,這樣做可以將所有資金收回到調用者手中,但不會刪除任何代碼或存儲。[2022/9/26 22:30:01]
我們為了讓智能合約在獨立且安全的環境中執行,而從Ethereum節點中會切出一塊具有儲存、執行等功能的運算環境,我們將之稱之為EVM虛擬機。
而這個EVM具備執行智能合約所需的堆疊、記憶體、紀錄Gas費用及儲存下一行指令位址等各種必要元件,以便完成開發人員要求的各種計算。
以太坊JavaScript庫Ethers.js發布v5.4.0 添加EIP-1559支持:官方消息,以太坊JavaScript庫Ethers.js發布v5.4.0,添加EIP-1559支持。TransactionResponse.gasPrice現在可以為空,因此某些應用程序可能需要添加空檢查。
據悉,以太坊兩個最常用JavaScript庫是Ethers.js和Web3.js。[2021/6/27 0:09:59]
Bytecode與Opcode
我們用Solidity等語言所撰寫的智能合約,要先編譯成一連串EVMOpcode,這一連串Opcode稱為Bytecode。我們接著來進行一段簡單的操作就會比較清楚!
有興趣的讀者可以透過EtherVM了解更多關于Opocde的介紹。
首先,我們先在Remix上編譯下方這份簡易的加法智能合約,編譯完成后就可從artifacts資料夾中看到包含此智能合約Bytecode與Opcode的Json資訊檔。
TimBeiko正式將EIP-1559加入以太坊倫敦升級,暫定今年7月或8月執行:以太坊開發者、EIP-1559貢獻者TimBeiko提交一份提案,該提案主張將EIP-1559加入到以太坊倫敦升級中,并暫定于2021年7月或8月執行。TimBeiko認為,該EIP提案沒有什么問題,已經準備好通過正常的網絡升級測試流程。下一步是讓開發人員和其他網絡參與者(即礦工)就此提案達成共識。注:EIP-1559是一個對以太坊交易機制進行優化的機制,旨在使以太坊網絡上的交易費用更加可預測,解決當前“按需付費”的收費模式問題。其目標是創建一個更有效的收費市場,并簡化客戶端和應用程序軟件的gas費付款流程。此前消息,絕大多數以太坊應用表示支持實施EIP-1559。[2021/2/26 17:54:54]
智能合約在線編譯工具Remix
與此同時,這個智能合約也已部署到Goerli測試網中,我們可點選在Etherscan上的鈕從Bytecode切換到Opcode觀看模式。這時,即可得知一連串Opcode稱為Bytecode。
分析:以太坊競價升級算法EIP-2593提案是以用戶為主導的策略:加密貨幣研究員hasufl和gakonst聯合發布了對EIP-2593 區塊空間市場提案的分析,分析稱,EIP-2593 更廣為人知名字是競價升級算法或者簡稱為自動扶梯,被稱為改進以太坊交易費機制的 EIP-1559 提案的替代品,因為在設計目標上有很大的重疊。在自動扶梯方案中,用戶繼續參與區塊空間的第一價格拍賣。不過每一筆交易都可以選擇為逐步提高的出價提供參數,從而為區塊生產者創建一個基于時間的拍賣,以便納入這筆交易。EIP-2593 引入了用戶必須指定的參數,包括用戶愿意為交易支付的最低價格、交易有效的第一個區塊、發送方為處理此交易愿意支付的最大價格、用戶愿意等待處理交易的最后一個區塊。EIP-2593 機制向交易中附加一個不斷升級的出價,以緩慢地測試最佳出價。從較低的費用開始,有助于避免支付過高的價格,因為礦工應以他們愿意接受的最低價格進行交易。不斷升級的價格確保了一筆交易最終被包括在內,前提是交易價格高于網絡 gas 費,有助于防止支付不足。不過自動扶梯算法比 EIP-1559 小得多,并且設計范圍不同。EIP-1559 拍賣范圍也相對較小,即使在目標重疊的地方,結果也很難比較。這兩個提案是相輔相成的,盡管不一定是在基礎層,但都應該贊同。現在自動扶梯算法已經被使用了,無論是用戶手動操作,還是在以太坊進行大量交易的專業服務公司的內部使用。這證明了自動扶梯是用戶的主導策略。因此,應該關注的不是自動扶梯算法是否有用,而是它們是否應該在協議內部或外部實現。[2020/6/25]
這里就只截取這份合約部份的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
?
Tags:ODECODCODEPUSHAgricoin Masternodecode幣怎么挖CODEX幣PUSH幣最新價格
ForesightNews消息,比特幣礦企MarathonDigital在3月份共產出825BTC,環比增加21%,一季度產出2195枚比特幣,環比增加41%.
1900/1/1 0:00:00尊敬的XT.COM用戶:XT.COM即將上線LILFLOKI,並在主板區開放LILFLOKI/USDT交易對.
1900/1/1 0:00:00金色財經報道,AnimocaBrands官方宣布其子公司TheSandbox發布2023年大中華區發展策略.
1900/1/1 0:00:00各位朋友,歡迎來到?SignalPlus?每日晨報。SignalPlus?晨報每天為各位更新宏觀市場信息,并分享我們對宏觀趨勢的觀察和看法。歡迎追蹤訂閱,與我們一起關注最新的市場動態.
1900/1/1 0:00:00比特幣(BTC)突破2.8萬美元700阻力位帶來的拋售浪潮使價格達到2.8萬美元,BTC進展如何?BTC突破28,250美元的阻力區域,也超過了其月度開盤價,買家也超過了它.
1900/1/1 0:00:00尊敬的用戶: 為了更好的回饋火必理財用戶,火必理財特推出NEAR、ZIL、DOT、ONE、ADA、WAVES定期/活期理財產品,享高達15%年化收益。平臺福利補貼不斷,用戶每日收息不停.
1900/1/1 0:00:00