¿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
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 greeter
que 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');
});
SCBuergel
Rob Hitchens