Скажем, у меня есть контракт следующим образом:
contract A {
function passAddress(address[] _addr) {
// do something
}
}
Как мне вызвать эту функцию в моем внешнем приложении, используя web3. Я пытался использовать массив javascript, но он выдает исключение возврата.
Есть идеи ?
Вы можете передавать только те типы данных, которые распознает контракт, поэтому передача массива javascript невозможна.
Если у вас есть массив всех ваших адресов, вы можете попробовать соединить их с помощью javascript и передать полученную строку с помощью web3. т.е.,
если у вас есть
array = [0x0,0x0,0x0];
и ты сделал это
string = '["0x0","0x0","0x0"]'
и передайте эту строку как «массив», тогда это может помочь
Вы можете передать массив следующим образом: -
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});
Усыновление — это мой смарт-контракт. Я использую этот способ для вызова функции, массив адресов которой является аргументом.
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);
});
пользователь19510
revert
был.)