Solidity
內部編譯器錯誤:使用動態大小的鍵進行映射的訪問器尚未實現
我有一個
mapping(string => Person) public map
:struct Person { string name; string description; address primaryAddress; string linkToWebsite; string linkToPicture; address secondaryAddress; uint age; }
,此結構僅由字元串、地址和 uint 組成,但在編譯時出現此錯誤。
Internal compiler error: Accessors for mapping with dynamically-sized keys not yet implemented.
但,
來自Solidity 功能:
字元串作為映射鍵
字元串可以作為映射的鍵。
contract C { mapping (string => uint) counter; function inc(string _s) { counter[_s]++; } }
有什麼幫助嗎?
問題是我的映射是公開的,還沒有為它實現公共訪問器。解決方案就是不將映射聲明為公共的。
字元串允許作為映射中的鍵。例如,這段程式碼在 Pyethereum 中工作得很好:
from ethereum import tester as t code = ''' contract Example { struct Person { string name; } mapping(string => Person) map; function setName(string name, string value) { map[name] = Person({name: value}); } function getName(string key) constant returns (string) { return map[key].name; } } ''' state = t.state() contract = state.abi_contract(code, language='solidity') contract.setName('dave', 'hello') print contract.getName('dave') => 'hello'
你的實際合約程式碼中一定有什麼事情發生