本頁面使用機器翻譯自英語,可能包含錯誤或不清楚的語言。如需最準確的信息,請參閱英文原文。由於更新頻繁,部分內容可 能與英文原文有出入。請加入我們在 Crowdin 上的努力,幫助我們改進本頁面的翻譯。 (Crowdin translation page, Contributing guide)
執行氣體
氣體是 "內在氣體 "和 "執行氣體 "的總和。 在這裡,我們將重點討論如何計算 "執行氣體"。
備註
執行氣體相關硬分叉更改可在本頁底部找到。 轉到 Hardfork Changes。
概述
在三種不同的情況下,執行合同時會收取執行費。 有時,某些政策可能會被省略。
- 第一種也是最常見的一種是 "constantGas"。 這是計算操作的固有費用。
- 其次,氣體可被扣除,以形成從屬報文調用或合同創建的付款;這 構成 "CREATE"、"CALL "和 "CALLCODE "付款的一部分。
- 最後,由於內存使用量增加,可能會收取氣體費用。
在一個賬戶的執行過程中,應支付的內存使用費總額與 32 字節的最小倍數成正比,而 32 字節的最小倍數是包括所有內存索引(無論是讀取還是寫入)的範圍。 這筆費用是按時支付的;因此,如果引用的內存區域至少比先前索引的內存區域大 32 字節,就會產生額外的內存使用費。 由於這筆費用,地址超過 32 位界限的可能性很小。 儘管如此,實施方案必須能夠管理這種可能發生的情況。
存儲費的行為略有細微差別。 為了鼓勵最大限度地減少存儲空間的使用(這與所有節點上都有一個更大的狀態數據庫直接對應),從存儲空間中清除條目的操作的執行費用不僅可以免除,而且還可以獲得合格的退款;事實上,這種退款實際上是提前支付的,因為初始使用存儲位置的成本要比正常使用高得多。
操作碼氣體時間表
費用表 G
是由 37 個標量值組成的元組,這些標量值與交易可能產生的若干抽象操作的相對費用(以瓦斯為單位)相對應。 此外,還有氣體項目,用於計算由 CALL_*
操作碼調用的預編譯合約的氣體。
代表操作碼 "常數氣體 "的標量值
名稱 | 價值 | 代碼中的名稱 | 操作碼 |
---|---|---|---|
G_base | 2 | GasQuickStep | ADDRESS , ORIGIN , CALLER , CALLVALUE , CALLDATASIZE , CODESIZE , GASPRICE , COINBASE , TIMESTAMP , NUMBER , PREVRANDAO (originally it was DIFFICULTY ), GASLIMIT , RETURNDATASIZE , POP , PC , MSIZE , GAS , CHAINID , BASEFEE , PUSH0 , BLOBBASEFEE |
G_verylow | 3 | GasFastestStep | ADD , SUB , LT , GT , SLT , SGT , EQ , ISZERO , AND , OR , XOR , NOT , BYTE , CALLDATALOAD , MLOAD , MSTORE , MSTORE8 , PUSH , DUP , SWAP , BLOBHASH , MCOPY |
G_low | 5 | GasFastStep | MUL , DIV , SDIV , MOD , SMOD , SIGNEXTEND , SELFBALANCE |
G_mid | 8 | GasMidStep | ADDMOD , MULMOD , JUMP |
G_high | 10 | GasSlowStep | JUMPI |
G_selfdestruct | 5000 | SelfdestructGas | SELFDESTRUCT |
G_warmStorageReadCost | 100 | WarmStorageReadCostEIP2929 | EXTCODECOPY , EXTCODESIZE , EXTCODEHASH , BALANCE , CALL , CALLCODE , STATICCALL , DELEGATECALL , TSTORE , TLOAD |
G_blockhash | 20 | GasExtStep | BLOCKHASH |
G_jumpdest | 1 | JumpdestGas | JUMPDEST |
G_sha3 | 30 | Sha3Gas | SHA3 |
G_create | 32000 | CreateGas | CREATE , CREATE2 |