牢固性将复杂对象保存在合同中

时间:2018-07-02 13:57:18

标签: ethereum solidity

我有一个用例,需要在合同中保留以下示例数据。

{
    Linkage : {"4" : "1", "77" : "59", "5" : "64", "4" : "464", "455" : "364", "25" : "364", "25" : "164", "55" : "8684", "85" : "864"},
    UserId : "Some Id",
}

该词典显然是可扩展的(根和链接)。 我想发送数据并将其作为对象检索(C#和Java样式)。因此,当我从WEB3通信时,我可以传递json。 那可能吗?

这是我被困住的地方...

pragma solidity ^0.4.13;

contract Test{         
  struct UserProfile{       
    string UserId;
  }   

  UserProfile public Profile;

  function setProfile(UserProfile newProfile) public {
    Profile  = newProfile;
  }        
}

2 个答案:

答案 0 :(得分:0)

启动事务时尚未传递对象(尚未)。您只能通过struct函数调用(see Solidity FAQ)传入/返回internal

您必须使用原始类型传递数据并将其添加到内部struct

pragma solidity ^0.4.13;

contract Test { 
  struct UserProfile {
    string userId;
    mapping(uint256 => uint256) linkage;
  }   

  UserProfile public profile;

  function addLinkage(uint256 id, uint256 value) public {
    profile.linkage[id] = value;
  }
}

注意,如果要批量传递链接,可以使用addLinkage(uint256[] ids, uint256[] values)

答案 1 :(得分:0)

您可以将您的对象序列化为字符串,由于以太坊虚拟机的特性,坚固性没有对象原语,并且可能永远不会。