Solidity
天然氣是如何從賬戶中取出的?
假設我們呼叫該函式:
function nice(uint a) public returns(uint256){ k = 100; z = 100; f = 100; require(a == 5); o = 100; s = 100; return 170; }
假設我們通過了
a = 15
. 因此,將發生的事情是由於require
. 現在,前 3 行程式碼(將 100 分配給 k、z、f)的交易成本也需要 81000(這包括交易數據)。好像交易完成後,從我的賬戶中,我的餘額中只提取了 81000*price 的 gas,這是正確的。我很好奇這是怎麼發生的。具體來說,
- 它是否會從我的帳戶中提取我所有的 gaslimit * gas 價格,執行程式碼,並且無論何時完成,它都會檢查是否有剩餘,如果有,它會返回剩餘的值。在上述情況下,這可能會發生,因為由於
require
,它不會讓我們花掉所有的 gas。但如果是這樣,為什麼我看不到餘額減少,然後在掛起的交易和完成的交易狀態之間再次增加?或者
- 我不知道它還能做什麼。任何的想法 ?
第一個選項很接近。
- 在執行之前,交易會
gasLimit * gasPrice
從發件人帳戶中刪除- 交易被執行
unusedGas * gasPrice
退回給發件人usedGas * gasPrice
發送給礦工1、3 和 4 中的狀態變化是不尋常的,因為只涉及一個部分。
有關geth 實現的詳細資訊,請參見此處https://github.com/ethereum/go-ethereum/blob/v1.9.25/core/state_transition.go#L223-L228 。