Можно ли как-то развернуть контракт на постоянной основе в моей частной сети?
Я попробовал контракт приветствия и закрыл консоль. После повторного запуска консоли и попытки вызвать функцию приветствия я получил следующую ошибку.
Ошибка: «приветствующий» не определен
Нет . Контракт, развернутый в блокчейне, не удаляется при закрытии консоли 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');
});
СКБюргель
Роб Хитченс