Solidity

消息呼叫如何發送gas?

  • May 8, 2018
contract Sample{

   event Data(uint test) ; 

   function test2() {
       Data(msg.gas) ;
   }
}


contract Sample2{
   function try(address addr){
      Sample(addr).test2() ;
      addr.call(bytes4(keccak256("test2()"))) ;
   }
}

方法呼叫如何發送gas?如果所有剩餘的氣體都被發送到目標,當我使用call還是僅使用 Sample(address).test2() 時?

氣體與簽名交易一起發送。它到達一個函式,比如說Sample2(addressSample2).try()

由於您沒有指定您的氣體量call,所有剩餘氣體都被發送到Sample(addressSample).test2(). 完成後,控制權Sample2(addressSample2).try()連同任何未用完/剩餘的氣體一起返回。沒有氣體殘留Sample(addressSample)

由於Sample2(addressSample2).try()也完成了,剩餘的氣體返回給發送者。兩個契約中都沒有剩餘的天然氣,這也很好,因為他們目前無法支付自己的天然氣。

Sample(address).test2()在那一刻用剩餘的氣體發出一個事件,但處理將如上所述繼續。因此,在交易完成之前會消耗一些額外的氣體。

萬一不清楚,仍然需要執行程序集級操作碼,然後才能按照上面總結的方式完成所有操作。知道仍然需要處理家務可能就足夠了,因為該功能還沒有(技術上)完成。如果您願意,可以跨過 Remix 中的 OPCODES 來研究它在接近尾聲時的作用。

希望能幫助到你。

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