Tengo un problema al pasar una matriz de web3 a un contrato inteligente. Tengo una matriz declarada como names=[] con datos analizados como int;
Estoy planeando enviar un valor a mi contrato inteligente con la función:
function vote(uint[] memory candID,uint id,uint elid) public { //code here }usando este código en mi interfaz:
await contract.methods.vote([names],BigInt(election),BigInt(electClickedID)).send({ from: accounts[0], gas: 3000000 });Siempre me encuentro con un error, pero cuando paso datos manualmente, como:
await contract.methods.vote([0,1,5],BigInt(election),BigInt(electClickedID)).send({ from: accounts[0], gas: 3000000 });tiene éxito
Sus names de variables son una matriz unidimensional vacía. Al envolverla en la expresión [] adicional, está pasando efectivamente una matriz bidimensional a la función Solidez.
Por ejemplo, si el valor de los names fuera [0,1,5] , estaría pasando [[0,1,5]] - una matriz de un elemento, que [el elemento] es otra matriz de tres elementos.
Lo cual no es válido, ya que la función Solidity acepta una matriz 1D.
Solución : retire el envoltorio de la matriz.
let names = []; await contract.methods.vote( names, // instead of `[names]` BigInt(election), BigInt(electClickedID) ).send({ from: accounts[0], gas: 3000000 });