¿Cómo pasa una serie de estructuras de Truffle (javascript) a un contrato inteligente (Solidity)?
Hay algunas preguntas similares (como esta y esta ) cuyas respuestas dicen que no puede pasar una estructura a una función pública en Solidity o que está usando una versión de Solidity anterior a la 4.0.19. Sin embargo, estoy usando ABIEncoderV2, donde esto no es un problema.
Recibo el siguiente error:
Error: invalid solidity type!: tuple[]
Conjunto de pruebas de trufas:
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);
});
Contrato de solidez:
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;
}
}
El problema es que está tratando de pasar una matriz de javascript coords
a una función de solidez loopCoords
. La función de solidez no puede interpretarse coords
como una matriz y la interpreta como un mapeo.
No estoy seguro, pero creo que su problema es cómo pasar una matriz como parámetro de javascript web3 a una función de solidez. Debe pasar un argumento de loopCoords
la siguiente manera:
await coordsContract.loopCoords.getData(coords)
phil.p
soham lawar