有几个类似的问题(比如这一个和这一个),它们的答案是不能将结构传递给公共函数,或者在4.0.19之前使用solidity的版本。但是,我使用的是ABIEncoderV2,这里没有问题。
我得到了以下错误:
Error: invalid solidity type!: tuple[]松露测试套件:
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);
});稳固合同:
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;
}
}发布于 2018-09-07 13:29:31
问题是,您正在尝试将javascript数组coords传递给loopCoords巩固函数。Solidity函数不能将coords解释为数组,而是将其解释为映射。
我不确定,但我认为您的问题是如何将数组作为参数从javascript web3 3传递给solidity函数,您需要传递loopCoords的一个论点如下:
await coordsContract.loopCoords.getData(coords)https://ethereum.stackexchange.com/questions/58252
复制相似问题