Wird ein Smart Contract gelöscht, sobald die Konsole von Geth geschlossen wird?

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

Bitte geben Sie uns einen Code, der Ihnen beim Debuggen des Falls hilft. Wie genau versuchen Sie, eine Greeter-Funktion aufzurufen? Ich denke über web3.js? Geben Sie die richtige Adresse und ABI an?
Wie Sebastian schon sagte. Sofern Sie keine neue Kette gestartet haben, ist der Vertrag noch vorhanden. Javascript erfordert, dass Sie die Schnittstelle jedes Mal initialisieren; das ABI usw., damit es den Vertrag finden kann ... Wir können nicht sicher sein, wie wir diesen Prozess steuern sollen. Bei truffle wäre es beispielsweisegreeter = Greeter.deployed(). In Geth (nativ) gäbe es mehrere Schritte.

Antworten (2)

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 greeterbeispielsweise 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');
});