Solidity
如果交易失敗,Gas Fee 會退還嗎?
當呼叫者進行交易時,我混淆了支付汽油費的規則。
進行交易時需要 gas 費,我知道 require() 是把所有 gas 費返回給呼叫者的保護函式。
智能合約中功能中的所有操作後是否支付了gas費?
那麼,如果 require() 函式放在函式的開頭,並且程式碼根本沒有操作,那是否意味著不需要 gas 費呢?
如果該 require() 語句中的值是假條件,交易因此失敗怎麼辦?
Gas 費是 100% 退還給呼叫者,還是呼叫者在函式中的某些操作生效後需要支付剩餘的 Gas 費?
可以退還來電者所有的gas嗎?
function burn(uint256 _value) public returns (bool success) { require(balances[msg.sender] >= _value); balances[msg.sender] = balances[msg.sender].sub(_value); totalSupply = totalSupply.sub(_value); Burn(msg.sender, _value); return true; }
如果在程式碼執行後必須支付gas費,如果caller(msg.sender)在require()條件通過後由於呼叫者賬戶沒有餘額而無法支付gas費怎麼辦?
我懷疑我知道的是否正確。
氣體必須與簽署的交易一起提供。除非提供氣體,否則無法呼叫合約函式。沒有辦法透支帳戶。這就像你車裡的燃料。你需要一些開始,如果有足夠的,你會到達目的地。如果不夠,一切都會停止。
原始碼被編譯成彙編程式碼,任何時候發生任何事情,都會使用 OPCODES。使用 OPCODES 時,gas 是收費的,所以即使第一行是 a
require()
和 it’sfalse
,仍然需要大量的 OPCODES 來解包交易數據並評估require()
- 所以一些 gas 被燒掉了。如果gas返回給簽名者,它就是剩餘的gas。這就像給你的油箱加滿油,然後中止你的旅行。您可能在引擎執行時燒毀了一些,但您仍然擁有大部分。
如果在還原所有內容的中止操作之前展開大量處理,則可能大部分氣體已用完。
希望能幫助到你。