首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >实度:将字符串数组、键值对或对象作为参数提交给函数

实度:将字符串数组、键值对或对象作为参数提交给函数
EN

Stack Overflow用户
提问于 2018-11-19 00:59:48
回答 2查看 948关注 0票数 3

为了将智能合约的状态从前端输入更改为智能合约,需要将字符串数组提交给智能合约、键值对或对象。

是否可以使用字符串数组作为参数?

EN

回答 2

Stack Overflow用户

发布于 2018-11-19 01:34:53

没有实心度不支持字符串数组作为参数。您必须自己在字符串中对其进行序列化和反序列化,才能获得所需的结果,但这样做的成本很高。如果你愿意,你可以在混音上测试一下。然而,在混音时,错误消息说这个函数在experimental ABI encoder中是受支持的,但我从来没有测试过,或者它与其他库的配合有多好,而且它毕竟是实验性的。

票数 1
EN

Stack Overflow用户

发布于 2019-06-21 04:04:55

从下面的示例中可以看到,我们可以将字节数组发送到构造函数

代码语言:javascript
运行
复制
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是例外,因为它只推荐用于开发目的--根据本答案的撰写日期)。

代码语言:javascript
运行
复制
struct A{
uint date,
B[] b
}

您可以将其分离为

代码语言:javascript
运行
复制
struct A{
uint date
}
struct B{
string goods,
uint quantity
}

现在,对于1A,您可以从您的服务中调用N B。使用映射来绑定两者(如果是依赖的)。

在目前的情况下,最好设计一个不接受批量输入或提供批量输出的契约。然而,合同不是用来存储大量数据的,它是用来存储相关数据的,它满足了各方之间的协议

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53363355

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档