Gibt es überhaupt einen Vertrag dauerhaft in meiner privaten Kette bereitzustellen?
Ich habe den Greeter-Vertrag ausprobiert und die Konsole geschlossen. Nachdem ich die Konsole erneut ausgeführt und versucht hatte, meine Begrüßungsfunktion aufzurufen, erhielt ich die folgende Fehlermeldung.
Fehler: 'Begrüßer' ist nicht definiert
Nein. Ein bereitgestellter Vertrag auf einer Blockchain wird nicht gelöscht, wenn die Konsole von Geth geschlossen wird.
Beim Neustart der Geth-JavaScript-Konsole müssen Variablen wie greeter
beispielsweise neu initialisiert werden, da sich die Javascript-Variablen nur im Arbeitsspeicher befinden und nicht gespeichert werden.
Eine Sache, die helfen kann:
Geth unterstützt das Laden benutzerdefinierter JavaScript-Dateien in die Konsole über das Argument --preload. Hiermit können häufig genutzte Funktionen geladen, web3-Vertragsgegenstände eingerichtet oder ...
geth --preload "/my/scripts/folder/utils.js,/my/scripts/folder/contracts.js" console
Weitere Informationen, einschließlich anderer Möglichkeiten zur Verwendung der Geth-Konsole, finden Sie unter: https://github.com/ethereum/go-ethereum/wiki/JavaScript-Console
Tools wie Truffle erleichtern die laufende Vertragsentwicklung, z. B. speichert Truffle Vertragsadressen und ABIs, so dass, wie @Rob erwähnt, eine Neuinitialisierung in Truffle bei Bedarf ein einfacher Vorgang wäre greeter = Greeter.deployed()
.
Es wird nicht gelöscht, aber die Variable dieses Vertrags wird gelöscht. Um die Variable des Vertrags vor dem Verlassen der Geth-Konsole zu erhalten, können Sie die Variable mit der entsprechenden ABI-Schnittstelle und der Adresse des Vertrags in web3js speichern. Beispielcode in node.js:
var http = require('http');
var Web3js = require('web3');
var web3 = new Web3js("ws://localhost:8546");
var server = http.createServer((req,res)=>{
res.statusCode = 200;
res.setHeader('Content-Type','application/json');
// Contract receives ABI interface and address
// Then contract is passed to greeter variable
var greeter = new web3.eth.Contract([
{
"constant": false,
"inputs": [],
"name": "kill",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "greet",
"outputs": [
{
"name": "",
"type": "string"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"name": "_greeting",
"type": "string"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "constructor"
}
], "0x5c6aa1573b32eb75bf516b6d1de1a5a27fadc111"); // <-- this is the address
greeter.methods.greet().call().then((result) => {
console.log(result);
res.end(result);
});
});
server.listen(8080, () => {
console.log('alhamdulillah');
});
SCBürgel
Rob Hitchens