Gas-Refund

乙太坊黃皮書返還gas公式

  • July 1, 2018

礦工執行交易後,向交易者退還剩餘的氣體。乙太坊黃皮書第 6 節對此進行了解釋。在計算退還gas的金額時,使用以下公式。

在此處輸入圖像描述

在上圖中,我如何理解公式 64. 當 g’ 表示交易執行後的剩餘氣體時,等式左側的第二項是什麼意思?

A r是事務子狀態的一部分。它在第 6.1 節中定義:

退款餘額,通過使用 SSTORE 指令增加,以便將合約儲存從某個非零值重置為零。雖然不會立即退還,但允許部分抵消總執行成本。

如您所引用的部分所述,在將其添加到已退還的 gas 之前,它的上限最多為已使用總量的一半。

第二項表示退還的 gas 將等於剩餘的 gas 加上退款計數器所說的最小值與已用 gas 的一半之間的最小值。讓我們看一個例子:

假設您對設置變數 x = 1 且 x 最初為 0 的函式進行事務處理。

您的 gas 成本(簡化)為:

gas limit 100000 gas (for the sake of this example example)
Transaction = 21000 ()
Execution = 20000 (x=1, changes the storage from zero to nonzero)
Total cost = 41000 gas
Refund counter = 0 gas
refunded amount = 59000 gas

現在,如果您這次執行函式使 x = 0,則成本為:

gaslimit 100000 gas (for the sake of this example)
Transaction 21000 gas
setting x = 0, 5000 gas
refund counter = -15000 gas

Total refund = 74000 + minimum(13000, 15000)

其中 13000 是使用氣體的一半 = (100000- 74000)/2,而 15000 是氣體計數器值。

所以你會得到退款 = 74000 + 13000

希望這可以幫助

引用自:https://ethereum.stackexchange.com/questions/45999