为了从前端输入更改智能合约的状态,希望将字符串数组提交给智能合约,键值对或对象。
是否可以使用字符串数组作为参数?
答案 0 :(得分:1)
没有坚固性不支持将字符串数组作为参数。您必须自己对字符串进行序列化和反序列化才能获得所需的结果,但是要实现这种效果将非常昂贵。您可以根据需要在混音上进行测试。但是,在重新混音时,错误消息表明experimental ABI encoder
支持此功能,但我从未测试过该功能,或与其他库配合使用的效果如何,并且毕竟是试验性的。
答案 1 :(得分:0)
从下面的示例中可以看到,我们可以将字节数组发送给构造函数
constructor(bytes32[] memory proposalNames) public {
chairperson = msg.sender;
voters[chairperson].weight = 1;
// For each of the provided proposal names,
// create a new proposal object and add it
// to the end of the array.
for (uint i = 0; i < proposalNames.length; i++) {
// `Proposal({...})` creates a temporary
// Proposal object and `proposals.push(...)`
// appends it to the end of `proposals`.
proposals.push(Proposal({
name: proposalNames[i],
voteCount: 0
}));
}
}
如果您尝试专门发送字符串/对象数据,则最好分离出方法并分别或在彼此之间调用每个方法,因为当前的坚固性不支持该方法(使用ABIencodere v2是例外,因为仅建议将其用于开发目的-根据撰写此答案之日的信息
struct A{
uint date,
B[] b
}
您可以将其分离为
struct A{
uint date
}
struct B{
string goods,
uint quantity
}
因此,对于1 A,您现在可以通过服务呼叫NB。使用映射将两者绑定(如果有的话)。
在当前情况下,最好设计一个不接受大量投入或不提供大量产出的合同。但是,合同不是为了存储海量数据,而是为了存储满足双方协议的相关数据