Angenommen, ich habe einen Vertrag wie folgt:
contract A {
function passAddress(address[] _addr) {
// do something
}
}
Wie rufe ich diese Funktion in meiner Frontend-Anwendung mit web3 auf. Ich habe versucht, ein Javascript-Array zu verwenden, aber es löst eine Revert-Ausnahme aus.
Irgendwelche Ideen ?
Sie können nur Datentypen übergeben, die der Vertrag erkennt, daher ist die Übergabe eines Javascript-Arrays keine Option.
Wenn Sie ein Array aller Ihrer Adressen haben, können Sie versuchen, sie mit Javascript zu verbinden und die resultierende Zeichenfolge mit web3 zu übergeben. dh,
Wenn Sie haben
array = [0x0,0x0,0x0];
und das hast du gemacht
string = '["0x0","0x0","0x0"]'
und übergeben Sie diese Zeichenfolge als "Array", dann könnte das den Trick machen
Sie können das Array wie folgt übergeben: -
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});
Adoption ist mein intelligenter Vertrag. Auf diese Weise rufe ich die Funktion auf, die ein Array von Adressen als Argument enthält.
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);
});
Benutzer19510
revert
war.)