Contract-Design
如何設計契約以使用 Gas 退款?
一筆交易可能會有一些gas退款,
但這些退款只能在交易內使用:gas退款不會轉換為ether並退還到發送者的賬戶。如何設計合約以使用 gas 退款,什麼是案例,以及使用 gas 退款的實際編碼合約是什麼?
你的問題有點模棱兩可,但我會嘗試用我自己對“如何設計契約以使用汽油退款”的解釋來回答。答案是他們不能;他們不能,因為退款總是退回給
ORIGIN
(即最初的執行人)。合約無權訪問此退款池,因此使其無用(除了降低執行成本的能力)。gas 退款不會轉換為乙太幣並退還到發件人的帳戶。
退款實際上是轉換成乙太幣(go-ethereum/core/state_transition.go):
sender, _ := self.from() // err already checked remaining := new(big.Int).Mul(self.gas, self.gasPrice) sender.AddBalance(remaining)
狀態轉換期間會發生什麼:
- 儲備
tx.gas
並確保tx.sender
有足夠的資金;- 減少;
tx_fee
_21.000
- 減少執行氣體(執行所需的氣體量);
- 添加退款到
tx.sender
( gas退款R * tx.gasPrice
在哪裡R
)