Solidity
消息呼叫如何發送gas?
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 來研究它在接近尾聲時的作用。
希望能幫助到你。