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 ?
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
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});
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);
});
usuario19510
revert
).