Solidity

內部編譯器錯誤:使用動態大小的鍵進行映射的訪問器尚未實現

  • June 4, 2016

我有一個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'

你的實際合約程式碼中一定有什麼事情發生

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