Solidity
為“釋放”儲存而返還的 gas 是給予合約、“分配者”還是“刪除者”?
為“釋放”儲存而返還的 gas 是給予合約、“分配者”還是“刪除者”?
假設合約分配了一些儲存空間。這個儲存是由進行分配的交易的發送者支付的,對吧?
現在,當
delete
Solidity 中的操作員“釋放”此儲存空間時,誰會獲得退款以及如何計算退款?是獲得退款的合約,分配交易的發送者(“分配者”),還是刪除交易的發送者(“刪除者”)?特別是,使用什麼 gas 價格來計算退款?
簡而言之,導致儲存位置被釋放(設置為零)的交易的發送者將從用於交易的總氣體量中扣除一定數量(每個釋放的儲存位置淨 10000 氣體)。
在現實中它有點微妙:
- 將位置設置為零的 gas 成本為 5000(黃皮書中的 G_sreset)。
- 15000 gas 被添加到退款計數器中(黃皮書中的 R_sclear)。
- 在成功交易結束時,退款櫃檯中的 gas 量(上限為已用 gas 總量的一半)被添加到未使用的 gas 中並返回給呼叫者(黃皮書中的 Eqn 72)。
上述參考資料為本版本的黃皮書,其中討論了第 6.1 和 6.2 節中的退款櫃檯。
汽油價格是適用於退款發生的整個交易的任何汽油價格。