Solidity
字節記憶體作為函式參數會增加 gas 成本
我有一個用 pragma solidity ^0.4.0 編譯的智能合約;版本和一個函式接收一個字節參數,其中包含一個長字元串。在這些版本中,它不需要將參數設置為“記憶體”。
我創建了一個版本 pragma solidity >=0.4.25 <0.6.0; 的新契約;除非我將字節參數標記為記憶體,否則我無法創建。
bytes memory dBlock
這些使交易的天然氣成本增加了 3 倍以上。我已經用 bytes32 變數測試了 gas 成本幾乎為零。
然而,在這些特殊情況下,我經常收到一個長於 32 個字元的長字元串。如何將長字元串傳遞給智能合約並同時在交易中節省一些氣體?
將您的函式設置為外部(如果僅通過 txs 或其他外部智能合約呼叫)可以在某些情況下節省一些氣體。
function myExternalFunction(bytes calldata mydata) external { // do some stuff }
bytes 將比 bytes32 花費更多,因為長度資訊本身儲存在 32 字節的記憶體槽中。所以無論如何最好使用bytes32,如果你能確保你永遠不必傳輸超過32個字節。還有一點需要注意的是,在以前的solidity 版本中,“memory”關鍵字被隱式包含(當用作函式參數時)。所以基本上當你寫
function myfunc(bytes xyz)
它時它等於function myfunc(bytes memory xyz)