首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ABIEncoderV2将结构数组从truffe传递到收缩

使用ABIEncoderV2将结构数组从truffe传递到收缩
EN

Ethereum用户
提问于 2018-09-07 10:55:24
回答 1查看 1.7K关注 0票数 3

如何将结构数组从Tru显(javascript)传递给智能契约(Solidity)?

有几个类似的问题(比如这一个这一个),它们的答案是不能将结构传递给公共函数,或者在4.0.19之前使用solidity的版本。但是,我使用的是ABIEncoderV2,这里没有问题。

我得到了以下错误:

代码语言:javascript
复制
Error: invalid solidity type!: tuple[]

松露测试套件:

代码语言:javascript
复制
const foo = artifacts.require('./FOO.sol');
it('test', async () => {
    let coordsContract = await foo.new();
    const coord0 = {x: 100, y: 200};
    const coords = [coord0];
    const worked = await coordsContract.loopCoords(coords);
    assert.isTrue(worked);
});

稳固合同:

代码语言:javascript
复制
pragma solidity ^0.4.23;
pragma experimental ABIEncoderV2;

contract FOO {
    struct Coordinates {
        uint256 x;
        uint256 y;
    }

    function loopCoords(Coordinates[] coords) public returns (bool) {
        for (uint i = 0; i < coords.length; i++) {
            //do stuff
        }
        return true;
    }
}
EN

回答 1

Ethereum用户

回答已采纳

发布于 2018-09-07 13:29:31

问题是,您正在尝试将javascript数组coords传递给loopCoords巩固函数。Solidity函数不能将coords解释为数组,而是将其解释为映射。

我不确定,但我认为您的问题是如何将数组作为参数从javascript web3 3传递给solidity函数,您需要传递loopCoords的一个论点如下:

代码语言:javascript
复制
await coordsContract.loopCoords.getData(coords)
票数 3
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/58252

复制
相关文章

相似问题

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