Web3js

松露無效地址

  • July 1, 2019

使用 Truffle 3.0,當我呼叫我的合約函式之一時,在控制台中出現此錯誤:

未擷取(承諾中)錯誤:無效地址

我找到 了這個解決方法,在我的程式碼中我嘗試了這個但沒有成功。

this.web3Provided.eth.defaultAccount=this.web3Provided.eth.coinbase;

在他們坐著的松露文件中,我可以在我的配置中設置一個發件人地址,但這也行不通。from: '0x8c384d9f226ea92c99f7aa83340714a6f82a3161'

導入所有 truffle.config 文件後,我也嘗試這樣做:

TruffleConfig.networks[NODE_ENV].from = this.web3Provided.eth.coinbase;

請幫我。

感謝我發現的 Truffle Gitter 頻道。我必須在我的 truffle-contract 的抽像上呼叫 defaults 函式。

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實例之前。

另外,在我使用react-truffle框的情況下,可以通過添加來解決無效地址。

this.state.web3.eth.defaultAccount = this.state.web3.eth.accounts[0];

在做任何與web3相關的事情之前。

**注意:**強烈不建議像這樣更改反應中的狀態。嘗試使用this.setState()來操作 web3 對象的子對象。我沒有考慮太多我正在開發的應用程序,所以如果這可行,我是 GOLDEN :D

引用自:https://ethereum.stackexchange.com/questions/12957