Trüffel ungültige Adresse

Wenn ich mit Truffle 3.0 eine Funktion meines Vertrags aufrufe, erhalte ich in der Konsole diesen Fehler:

Nicht erfasster (versprochener) Fehler: ungültige Adresse

Ich habe diese Problemumgehung gefunden und in meinem Code versuche ich dies ohne Erfolg.

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

In Truffle Doc saßen sie Ich kann eine Absenderadresse in meiner Konfiguration festlegen, aber auch das funktioniert nicht.from: '0x8c384d9f226ea92c99f7aa83340714a6f82a3161'

Ich versuche es auch damit, nachdem ich alle truffle.config-Dateien importiert habe:

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

Bitte hilf mir.

Antworten (4)

Dank des Kanals Truffle Gitter habe ich es herausgefunden. Ich muss die Standardfunktion für die Abstraktion meines Trüffelvertrags aufrufen.

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;
  }
Können Sie eine ausführliche Antwort posten, z. B. wo Sie die Zeile hinzugefügt haben? Ich erhalte auch den gleichen Fehler beim Aufrufen einer Vertragsfunktion mit web3. Ich verwende testrpc. Der Vertrag wurde über Truffle bereitgestellt.
Dies ist meine Build-Vertragsfunktion, eine einfache Funktion, die meine Vertragsliste durchläuft. Für jeden Kontrakt musste ich einen Default mit einer Coinbase setzen. buildContracts() { Verträge lassen = {}; lass 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}); Verträge[Vertragsname] = meta; }); Rückgabeverträge; }
Vielen Dank - Hinzufügen contract.default({from: ...})- mein Problem behoben.

Das hat bei mir funktioniert. Ich hoffe, meine Antwort hilft zukünftigen Lesern.

Sie müssen das zu verwendende Standardkonto festlegen:

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

bevor Sie die web3- Instanz verwenden.

Außerdem kann in meinem Fall, in dem ich die React-Truffle- Box verwende, die ungültige Adresse durch Hinzufügen gelöst werden.

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

bevor Sie irgendetwas tun, das mit web3 zu tun hat .

HINWEIS: Es wird dringend davon abgeraten, den Reaktionszustand so zu ändern. Versuchen Sie this.setState(), das untergeordnete Element des web3-Objekts mit zu manipulieren. Ich habe nicht viel über die App nachgedacht, die ich entwickle, also wenn das funktioniert, bin ich GOLDEN :D

Könnten Sie das bitte näher erläutern? Warum macht Trüffel das nicht standardmäßig?
Ich bin mir nicht sicher, warum Truffle dies nicht standardmäßig tut, aber meine Vermutung ist ein web3.eth.accounts[0];Teil, der nicht statisch definiert werden sollte.

Ich hatte in meinem Smart-Vertrag eine Eigentümer-Entzugsfunktion, die den folgenden Fehler ausgeben würde:

Nicht erfasster (versprochener) Fehler: ungültige Adresse

Irgendwann wurde mir klar, dass entweder Truffle oder MetaMask eine explizite fromAdresse erwartet.

Dies war meine ursprüngliche Funktionsdefinition:

ownerWithdrawal() {
    return this.contractInstance.ownerWithdrawal(); // calls ownerWithdrawal() from Solidity contract
  }

Hier ist meine neue Funktionsdefinition mit fromangegebener Adresse.

ownerWithdrawal() {
    return this.contractInstance.ownerWithdrawal({from: this.web3accounts[0]});
  }

Verwendung einer alten Version von web3 für ein veraltetes Tutorial web3@0.20.6 und Firefox 100.0.1

Dies war, was ich hinzugefügt habe, um zu reagieren, um das Problem zu umgehen

web3.eth.defaultAccount = web3.eth.accounts[0]