我有一个用例,需要在合同中保留以下示例数据。
{
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;
}
}
答案 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)
您可以将您的对象序列化为字符串,由于以太坊虚拟机的特性,坚固性没有对象原语,并且可能永远不会。