为了将智能合约的状态从前端输入更改为智能合约,需要将字符串数组提交给智能合约、键值对或对象。
是否可以使用字符串数组作为参数?
发布于 2018-11-19 01:34:53
没有实心度不支持字符串数组作为参数。您必须自己在字符串中对其进行序列化和反序列化,才能获得所需的结果,但这样做的成本很高。如果你愿意,你可以在混音上测试一下。然而,在混音时,错误消息说这个函数在experimental ABI encoder
中是受支持的,但我从来没有测试过,或者它与其他库的配合有多好,而且它毕竟是实验性的。
发布于 2019-06-21 04:04:55
从下面的示例中可以看到,我们可以将字节数组发送到构造函数
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
}));
}
}
如果你正在尝试发送特定的字符串/对象数据,那么最好将这些方法分开,分别调用每个方法,或者在每个方法内部调用,因为目前solidity不支持这样做(使用ABIencodere v2是例外,因为它只推荐用于开发目的--根据本答案的撰写日期)。
struct A{
uint date,
B[] b
}
您可以将其分离为
struct A{
uint date
}
struct B{
string goods,
uint quantity
}
现在,对于1A,您可以从您的服务中调用N B。使用映射来绑定两者(如果是依赖的)。
在目前的情况下,最好设计一个不接受批量输入或提供批量输出的契约。然而,合同不是用来存储大量数据的,它是用来存储相关数据的,它满足了各方之间的协议
https://stackoverflow.com/questions/53363355
复制相似问题