С Truffle 3.0, когда я вызываю одну из функций моего контракта, в консоли у меня появляется эта ошибка:
Uncaught (в обещании) Ошибка: неверный адрес
Я нашел этот обходной путь, и в моем коде я безуспешно пытаюсь это сделать.
this.web3Provided.eth.defaultAccount=this.web3Provided.eth.coinbase;
В трюфельном документе они сидели, я могу установить адрес в моей конфигурации, но это тоже не работает.from: '0x8c384d9f226ea92c99f7aa83340714a6f82a3161'
Я также пытаюсь сделать это после того, как импортирую весь файл truffle.config:
TruffleConfig.networks[NODE_ENV].from = this.web3Provided.eth.coinbase;
Помогите мне, пожалуйста.
Благодаря каналу Truffle Gitter я разобрался. Я должен вызвать функцию по умолчанию для абстракции моего трюфельного контракта.
MyContract.defaults({from: …})
https://github.com/trufflesuite/truffle/tree/develop/packages/truffle-contract
buildContracts() {
let contracts = {};
let meta;
this.props.contracts.forEach( _contract => {
let {contract_name = ''} = _contract;
meta = contract(_contract);
meta.setProvider(this.web3Provided.currentProvider);
meta.defaults({from: this.web3Provided.eth.coinbase});
contracts[contract_name] = meta;
});
return contracts;
}
Это сработало для меня. Надеюсь, мой ответ поможет будущим читателям.
Вы должны установить используемый defaultAccount:
web3.eth.defaultAccount = web3.eth.accounts[0];
перед использованием экземпляра web3 .
Кроме того, в моем случае, когда я использую ящик для реакции-трюфеля , неверный адрес можно решить, добавив.
this.state.web3.eth.defaultAccount = this.state.web3.eth.accounts[0];
прежде чем делать что-либо, связанное с web3 .
ПРИМЕЧАНИЕ. Настоятельно не рекомендуется изменять состояния в такой реакции. Попробуйте использовать
this.setState()
для управления дочерним элементом объекта web3. Я мало думал о приложении, которое я разрабатываю, поэтому для меня, если это сработает, я ЗОЛОТОЙ :D
web3.eth.accounts[0];
часть, которая не должна определяться статически.В моем смарт-контракте была функция вывода средств владельцем, которая выдавала следующую ошибку:
Uncaught (в обещании) Ошибка: неверный адрес
В конце концов я понял, что либо Truffle, либо MetaMask ожидают явный from
адрес.
Это было мое первоначальное определение функции:
ownerWithdrawal() {
return this.contractInstance.ownerWithdrawal(); // calls ownerWithdrawal() from Solidity contract
}
Вот мое новое определение функции с from
указанным адресом.
ownerWithdrawal() {
return this.contractInstance.ownerWithdrawal({from: this.web3accounts[0]});
}
использование старой версии web3 для устаревшего учебника web3@0.20.6 и Firefox 100.0.1
это то, что я добавил, чтобы отреагировать, чтобы обойти проблему
web3.eth.defaultAccount = web3.eth.accounts[0]
Прашант Прабхакар Сингх
аутсайдер
Андрей
contract.default({from: ...})
- исправило мою проблему.