Solidity

在 Solidity 中使用字元串作為索引

  • May 4, 2017

我可以在 Solidity 映射中使用字元串作為標識符嗎?

我想要這樣的東西:

contract C {
   mapping(string => mapping(address => uint)) public balances;
   string[] public tokennames; 
   mapping(string => uint) public tokennameIndex;
}

每個字元串將代表不同的代幣餘額。令牌列表將由管理員帳戶維護(添加、編輯、刪除、重組)。一種替代方法是為每個代幣使用不同的合約,但二維映射似乎更容易,因為儲存不會太大。它還消除了對合約地址列表的需要。這樣的索引有意義嗎?謝謝!

目前我認為你不能。來自 solidity docs

映射類型被聲明為映射(_KeyType => _ValueType)。這裡 _KeyType 幾乎可以是任何類型,除了映射、動態大小的數組、合約、列舉和結構。

請注意,字元串是動態大小的數組

例如,您仍然可以通過使用三個字母的令牌程式碼作為 KeyType,而不是完整的令牌名稱來實現相同的目的。

字元串不能用作映射鍵。使用雜湊字元串keccak256()並將結果bytes32用作映射鍵。

至於使用二維數組而不是每個令牌單獨的合約實例的方法,它很好,只要:

  • 你不需要暴露一些標準介面,比如 ERC20,它期望每個代幣都有一個合約實例
  • 你不需要給不同的令牌不同的行為

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