¿Se eliminará un contrato inteligente una vez que se cierre la consola de Geth?

¿Hay alguna forma de implementar un contrato de forma permanente en mi cadena privada?

Probé el contrato de bienvenida y cerré la consola. Después de volver a ejecutar la consola e intentar invocar mi función de saludo, recibí el siguiente error.

Error: 'saludador' no está definido

Danos un código para ayudarte a depurar el caso. ¿Cómo intentas invocar exactamente una función de saludo? Supongo que a través de web3.js? ¿Especificas la dirección y el ABI correctos?
Como dijo Sebastián. A menos que haya iniciado una nueva cadena, el contrato sigue presente. Javascript requiere que inicialices la interfaz cada vez; el ABI, etc. para que pueda encontrar el contrato... No podemos estar seguros de cómo guiar ese proceso. Por ejemplo, en trufa, sería saludador = Saludador.deployed(). En Geth (nativo) habría varios pasos.

Respuestas (2)

No. Un contrato implementado en una cadena de bloques no se elimina cuando se cierra la consola de Geth.

Reiniciar la consola Geth Javascript requiere greeterque se reinicialicen variables, como , porque las variables de Javascript están solo en la memoria y no se conservan.

Una cosa que puede ayudar:

Geth tiene soporte para cargar archivos JavaScript personalizados en la consola a través del argumento --preload. Esto se puede usar para cargar funciones de uso frecuente, configurar objetos de contrato web3 o ...

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

Para obtener más información, incluidas otras formas de usar la consola de Geth, consulte: https://github.com/ethereum/go-ethereum/wiki/JavaScript-Console

Herramientas como Truffle facilitan el desarrollo continuo de contratos, por ejemplo, Truffle guarda direcciones de contrato y ABI, de modo que, como menciona @Rob, reinicializar en Truffle, cuando sea necesario, sería un simple greeter = Greeter.deployed().

No se elimina, pero se elimina la variable de ese contrato. Para conservar la variable del contrato antes de salir de la consola geth, puede almacenar la variable con la interfaz ABI correspondiente y la dirección del contrato en web3js. Código de ejemplo en 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');
});