Solidity

對令牌元數據使用 bytes32 而不是字元串

  • February 3, 2021

我正在為 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飛。事實上,這將是一個聰明的優化。

引用自:https://ethereum.stackexchange.com/questions/93070