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.
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;
}
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
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 from
Adresse erwartet.
Dies war meine ursprüngliche Funktionsdefinition:
ownerWithdrawal() {
return this.contractInstance.ownerWithdrawal(); // calls ownerWithdrawal() from Solidity contract
}
Hier ist meine neue Funktionsdefinition mit from
angegebener 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]
Prashant Prabhakar Singh
Außenseiter
Andrej
contract.default({from: ...})
- mein Problem behoben.