Cómo llamar a la función de solidez que tiene una matriz de direcciones como argumento usando web3

Digamos que tengo un contrato de la siguiente manera:

contract A {
  function passAddress(address[] _addr) {
    // do something
  }
}

¿Cómo llamo a esta función en mi aplicación frontend usando web3. Intenté usar una matriz de javascript pero arroja una excepción de reversión.

Algunas ideas ?

Una matriz de JavaScript es la forma correcta de hacer esto a través de web3.js. ¿Puedes compartir tu código? (También comparta el resto del código del contrato para que podamos adivinar dónde estaba revert).

Respuestas (3)

Solo puede pasar los tipos de datos que reconoce el contrato, por lo que pasar una matriz de JavaScript no es una opción.

Si tiene una matriz de todas sus direcciones, puede intentar unirlas usando javascript y pasar la cadena resultante usando web3. es decir,

si usted tiene

array = [0x0,0x0,0x0];

y tu hiciste eso

string = '["0x0","0x0","0x0"]'

y pasar esa cadena como la "matriz", entonces eso podría hacer el truco

Esto es incorrecto para web3.js. Una matriz de JavaScript es la forma correcta de pasar una matriz a un contrato inteligente.
Puedo pasar matrices de cadenas y uint, pero el problema es con la dirección []
¿podría compartir el código javascript que usó para llamar a la función con web3?
¿Qué pasa con web3.py?
Gracias, esto es lo que hizo que funcionara al interactuar con el contrato manualmente en web o remix.

Puede pasar la matriz de la siguiente manera: -

  var contractAbi = eth.contract(AbiOfContract);
  var myContract = contractAbi.at(contractAddress);
  var getData = myContract.passAddress.getData([address1,address2,address3]);
  // var getData = myContract.passAddress.getData(["0x0","0x0","0x0"]);
  web3.eth.sendTransaction({to:Contractaddress, from:Accountaddress, data: getData});
Obtengo TypeError: mycontract.passAddress.getData no es una función
@ ¿Está utilizando algún marco?
myContract.methods.passAddress(parámetros).encodeABI();

La adopción es mi contrato inteligente. Utilizo esta forma de llamar a la función qué conjunto de direcciones como argumento.

App.contracts.Adoption.deployed().then(function(instance) {
  adoptionInstance = instance;
  return adoptionInstance.passAddress("address1, address2,...");
}).then(function(adopters) {
  console.log("function success");
}).catch(function(err) {
  console.log("function error" + err.message);
});