Solidity

天然氣是如何從賬戶中取出的?

  • January 24, 2021

假設我們呼叫該函式:

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。但如果是這樣,為什麼我看不到餘額減少,然後在掛起的交易和完成的交易狀態之間再次增加?

或者

  • 我不知道它還能做什麼。任何的想法 ?

第一個選項很接近。

  1. 在執行之前,交易會gasLimit * gasPrice從發件人帳戶中刪除
  2. 交易被執行
  3. unusedGas * gasPrice退回給發件人
  4. usedGas * gasPrice發送給礦工

1、3 和 4 中的狀態變化是不尋常的,因為只涉及一個部分。

有關geth 實現的詳細資訊,請參見此處https://github.com/ethereum/go-ethereum/blob/v1.9.25/core/state_transition.go#L223-L228 。

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