Трюфель неверный адрес

С 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;

Помогите мне, пожалуйста.

Ответы (4)

Благодаря каналу 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;
  }
Можете ли вы опубликовать подробный ответ, например, где вы добавили строку? Я также получаю ту же ошибку при вызове функции контракта с помощью web3. Я использую testrpc. Контракт был развернут через трюфель.
Это моя функция контракта сборки, простая функция, которая зацикливает мой список контрактов. Для каждого контракта мне нужно было установить дефолт с coinbase. buildContracts() { пусть контракты = {}; пусть мета; 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[имя_контракта] = meta; }); контракты на возврат; }
Большое спасибо - добавление contract.default({from: ...})- исправило мою проблему.

Это сработало для меня. Надеюсь, мой ответ поможет будущим читателям.

Вы должны установить используемый 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]