Solidity
對令牌元數據使用 bytes32 而不是字元串
我正在為 ERC-20 代幣編寫契約,並且一直在嘗試優化 gas(因為目前費用很荒謬)。
我想知道是否可以不使用字元串,而是使用 bytes32 作為令牌元數據,並且它是否仍然能夠在 etherscan 上讀取名稱,以及我的令牌可能在其他任何地方註冊。
我會從這個改變:
string public constant name = "....."; string public constant symbol = "..."; string public version = "1.0";
對此:
bytes32 public constant name = bytes32("....."); bytes32 public constant name = bytes32("..."); bytes32 public version = bytes32("1.0");
我已經測試了這兩個版本,第二個確實節省了很多燃料。只是想知道我以後是否會因此而遇到問題。
謝謝!
bytes32
是的,使用而不是肯定string
會帶來更少的交易成本,因為string
它具有動態大小。我發現它類似於solidity 數組,例如,如果您使用固定大小的數組,它總是比使用動態大小的數組便宜。如果您對節省更多 gas 成本感興趣,可以查看以下文章,我在其中描述並比較了智能合約中其他場景的 gas 成本:https://www.linkedin.com/pulse/solidity-smart-contracts-how-gas-greedy-miroslav-nedelchev/
ERC-20 規範說你需要有一個訪問函式
name()
和symbol()
. 但是,您可以在內部儲存它們bytes32
以節省氣體。訪問者將轉換從bytes32
飛到string
飛。事實上,這將是一個聰明的優化。