Solidity 有三種數據存儲位置,這些不同的存儲位置會導致不同的 gas 成本。
合約的狀態變數默認存儲在 storage 中,相當於區塊鏈上的永久存儲,因此 gas 成本較高。
函數內的參數和臨時變數通常存儲在 memory 中,這是臨時的內存存儲,gas 成本較低。
類似於 memory,也是存儲在內存中的臨時數據,但與 memory 的不同之處在於 calldata 中的數據是不可修改的,通常用於函數的參數傳遞。
Solidity 有三種變數作用域
存儲在鏈上,可被合約內所有函數訪問,gas 消耗高。
僅在函數執行期間有效,函數退出後失效,存儲在內存中,不上鏈,gas 消耗低。
Solidity 預定義的全局變數,可在函數內直接使用,包括 msg.sender、block.number 等等。