Solidity
在 Solidity 中使用字元串作為索引
我可以在 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,它期望每個代幣都有一個合約實例
- 你不需要給不同的令牌不同的行為