Будет ли удален смарт-контракт после закрытия консоли Geth?

Можно ли как-то развернуть контракт на постоянной основе в моей частной сети?

Я попробовал контракт приветствия и закрыл консоль. После повторного запуска консоли и попытки вызвать функцию приветствия я получил следующую ошибку.

Ошибка: «приветствующий» не определен

Пожалуйста, дайте нам код, который поможет вам отладить дело. Как именно вы пытаетесь вызвать функцию приветствия? Я думаю, через web3.js? Вы указываете правильный адрес и ABI?
Как сказал Себастьян. Если вы не запустили новую цепочку, контракт все еще присутствует. Javascript требует, чтобы вы каждый раз инициализировали интерфейс; ABI и т. д., чтобы он мог найти контракт ... Мы не можем быть уверены, как управлять этим процессом. Например, в трюфеле будет приветствие = Greeter.deployed(). В Geth (родном) было бы несколько шагов.

Ответы (2)

Нет . Контракт, развернутый в блокчейне, не удаляется при закрытии консоли Geth.

Перезапуск консоли Geth Javascript требует greeterповторной инициализации переменных, таких как , поскольку переменные Javascript находятся только в памяти и не сохраняются.

Одна вещь, которая может помочь:

Geth поддерживает загрузку пользовательских файлов JavaScript в консоль с помощью аргумента --preload. Это можно использовать для загрузки часто используемых функций, настройки объектов контракта web3 или ...

geth --preload "/my/scripts/folder/utils.js,/my/scripts/folder/contracts.js" console

Для получения дополнительной информации, включая другие способы использования консоли Geth, см.: https://github.com/ethereum/go-ethereum/wiki/JavaScript-Console .

Такие инструменты, как Truffle, упрощают текущую разработку контрактов, например, Truffle сохраняет адреса контрактов и ABI, так что, как упоминает @Rob, повторная инициализация в Truffle, когда это необходимо, будет простым greeter = Greeter.deployed().

Он не удаляется, но удаляется переменная этого контракта. Чтобы сохранить переменную контракта перед выходом из консоли geth, вы можете сохранить переменную с соответствующим интерфейсом ABI и адресом контракта в web3js. Пример кода в 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');
});