Contract-Design
什麼類型的操作有負 gas 成本?
我了解某些操作會消耗負 gas,因為它們釋放了區塊鏈上的空間,例如自毀。可以產生負氣體的操作有哪些?這僅僅是因為該操作最終釋放了區塊鏈上的空間,還是有其他原因它有負氣體?
僅有的兩個負 gas 成本的 OPCODE 是 STORAGEKILL(-15000) 和 GSUICIDEREFUND(-24000)。
當儲存值被刪除或聯繫人被自殺時,就會發生這些情況。
這些 OPCODE 授予 gas 退款,因為它們釋放了區塊鏈中的空間。
所有 OPCODE 的價格都可以在 這裡找到
selfdestruct
作為對 Tjaden 回答的實際恭維,在 Solidity 中,當或delete
基於現有數據時會發出 gas 退款:
delete a
將類型的初始值分配給a
。即對於整數,它等價於a
= 0,但它也可以用於數組,其中它分配長度為零的動態數組或相同長度的靜態數組,所有元素都重置。對於結構,它分配一個所有成員都重置的結構。
delete
對整個映射沒有影響(因為映射的鍵可能是任意的並且通常是未知的)。因此,如果您刪除一個結構,它將重置所有不是映射的成員,並且還會遞歸到成員中,除非它們是映射。但是,可以刪除單個鍵及其映射的內容。需要注意的是,它的
delete a
行為實際上類似於對 的賦值a
,即它在 中儲存了一個新對象a
。