Ethereum 稳固性:将字符串数组、键值对或对象作为参数提交给函数

Ethereum 稳固性:将字符串数组、键值对或对象作为参数提交给函数,ethereum,solidity,web3js,Ethereum,Solidity,Web3js,为了从前端输入更改智能合约的状态,需要将字符串数组提交给智能合约、键值对或对象 是否可以使用字符串数组作为参数?No solidity不支持字符串数组作为参数。您必须自己在字符串中对其进行序列化和反序列化,才能获得所需的结果,但这在稳定度方面会很昂贵。如果你愿意,你可以在混音上测试。然而,在remix上,错误消息说该函数在实验ABI编码器中受支持,但我从未测试过它,也没有测试过它与其他库的配合情况,毕竟它是实验性的。如下面solidity文档中的示例所示,我们可以将字节数组发送给构造函数 con

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


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

No solidity不支持字符串数组作为参数。您必须自己在字符串中对其进行序列化和反序列化,才能获得所需的结果,但这在稳定度方面会很昂贵。如果你愿意,你可以在混音上测试。然而,在remix上,错误消息说该函数在
实验ABI编码器中受支持,但我从未测试过它,也没有测试过它与其他库的配合情况,毕竟它是实验性的。

如下面solidity文档中的示例所示,我们可以将字节数组发送给构造函数

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
        }));
    }
}
你可以把这个分开给我

struct A{
uint date
}
struct B{
string goods,
uint quantity
}
因此,现在对于1A,您可以通过您的服务呼叫NB。使用映射绑定两者(如果相关)


在当前情况下,最好设计一个不接受大量输入或提供大量输出的合同。然而,合同并非用于存储海量数据,而是用于存储相关数据,以满足各方之间的协议

之前曾尝试使用“实验性ABI编码器”,该编码器在混音中运行良好,但正在寻找生产版本库。没有,除了自己序列化和反序列化数组之外,我还没有发现任何可靠的方法。虽然如果您不打算在契约上操作数组,而只是希望将其存储在那里并检索它,但我认为您可以将其字符串化、存储,然后检索并解析它。但是如果你有很多数据要存储,那么这项技术的汽油成本可能会很高。如果您计划存储大量数据,可以查看
IPFS
进行存储,它也与区块链配合得很好。任何与以太坊IPFS一起使用的特定链接或示例都会受到欢迎。这两个链接可能会让您开始:基本思想是,您将数据存储在IPFS上,然后存储在合同上得到的哈希值。除了javascript库之外,IPFS还提供了一个HTTP API,如果您不能使用js包,可以使用该API:
struct A{
uint date
}
struct B{
string goods,
uint quantity
}