Solidity
查看/純氣體使用情況 - 如果由另一個函式在內部呼叫,成本氣體?
我知道以前有人問過類似的問題,但是我找不到以下問題的很好解釋,
在其中一個教程中它說:
如果從合約外部呼叫 Pure 和 View 函式,呼叫它們不會花費任何 gas。但是,如果由另一個函式在內部呼叫,它們確實會消耗氣體。
- 如果他們不更新任何東西,為什麼他們需要gas?
- 閱讀如何花費汽油?
- 它不是從我的本地區塊鏈中讀取的嗎?
我認為,
如果從外部呼叫 Pure 和 View 函式,則呼叫它們不會花費任何氣體
在這種情況下,不會啟動任何交易,因為這就像只是在區塊鏈中查詢其目前狀態,並且什麼都不會改變。
但是,如果由另一個函式在內部呼叫,它們確實會消耗氣體。
這意味著已經有一個交易可以改變區塊鏈的狀態,而改變狀態的過程需要使用那個純函式,比如計算。交易的 Gas 成本取決於在完成交易時執行的 EVM 操作碼的數量,因此執行該純函式也在該操作碼集中。這就是為什麼它說它需要汽油。
考慮以下契約:
pragma solidity ^0.4.24; contract PureFunctionTest { uint state; function addNumbers(uint a, uint b) public pure returns (uint) { return a +b ; } function updateState(uint a, uint b) public { uint c = addNumbers(a,b); state = c; } function addThreeNumbers(uint a, uint b, uint c) public pure returns (uint) { uint temp = addNumbers(a,b); uint num = addNumbers(temp,c); return num; } }
只是打電話
addNumbers
不會花任何錢。但是通話updateState
費用也包括費用在內addNumbers(a,b)
。addThreeNumbers
即使在內部呼叫,呼叫也不會花費 gas,addNumbers
因為在整個函式呼叫過程中不需要任何事務。