Ich habe den folgenden einfachen Smart Contract ...
contract SimpleStorage {
uint storedData;
function set(uint x) {
storedData = x;
}
function get() constant returns (uint retVal) {
return storedData;
}
}
Welches ich mit dem folgenden Code in der Geth-Konsole bereitstelle ...
var source = "contract SimpleStorage...[code here]"
var compiled = web3.eth.compile.solidity(source)
var contract = web3.eth.contract(compiled.Coin.info.abiDefinition)
var storage = contract.new({from:web3.eth.accounts[0], data: compiled.SimpleStorage.code, gas: 300000})
Nachdem der Vertrag geschürft wurde, kann ich über das Speicherobjekt auf die Vertragsfunktionen zugreifen. Ich dachte, ich könnte einfach anrufen...
storage.set(10)
...um die Variable savedData zu setzen. Jedes Mal, wenn ich dies versuche, erhalte ich jedoch die Fehlermeldung „Ungültige Adresse“.
Ich bin mir sicher, dass dies daran liegt, dass ich versuche, einen Schreibvorgang für den internen Zustand des Vertrags durchzuführen (Lesevorgänge funktionieren einwandfrei).
Ich muss eine Transaktion einreichen, die den neuen Vertragsstatus nutzt, aber ich kann nicht herausfinden, wie das geht.
Wie kann ich Schreibtransaktionen in Smart Contracts durchführen?
Einstellung versuchen
web3.eth.defaultAccount = eth.accounts[0]
Es hört sich so an, als ob Ihre Transaktion nicht weiß, welches Konto zum Signieren des Anrufs verwendet werden soll. Jeder Aufruf, der den Vertragsstatus ändert (Schreibvorgang), erfordert eine signierte Transaktion.
Ein alternativer Ansatz wäre, ein "Transaktionsobjekt" als letztes Argument an die Contract-Methode zu übergeben:
storage.set(10,{from: accounts[0]});
Bearbeiten 1:
Als ich das „Von“-Konto auswählte, erhielt ich die folgende Fehlermeldung: „Authentifizierung erforderlich: Passwort oder Entsperren“. Also musste ich personal.unlockAccount(eth.accounts[0],"password",15000) ausführen. Sie können darüber unter „Authentifizierung erforderlich: Passwort oder Entsperren“ nachlesen. Fehler beim Versuch, die Smart-Contract-Methode über web3 aufzurufen .
Segelflugzeug
dbryson
web3.accounts
und in einem Array speichern. Greifen Sie dann auf das Array für das spezifische Konto zu. Wenn Sie eine Methode aufrufen, die eine Transaktion ausführt und ein Konto benötigt, übergeben Sie ein Objekt, das Folgendes enthältfrom
:storage.set(10,{from: accounts[1]});
Segelflugzeug
storage.set(a,b,c,d,{from: eth.accounts[0]})
?dbryson
knokte
Mathias
web3.eth.defaultAccount = accounts[0]
sollte seineth.defaultAccount = eth.accounts[0]
Jazzmine