Go-Ethereum

Geth 的控制台關閉後,智能合約會被刪除嗎?

  • September 2, 2019

有沒有辦法在我的私有鏈上永久部署合約?

我嘗試了歡迎契約並關閉了控制台。再次執行控制台並嘗試呼叫我的 greet 函式後,我收到以下錯誤。

錯誤:未定義“歡迎者”

不會。當Geth 的控制台關閉時,區塊鏈上部署的合約不會被刪除。

重新啟動 Geth Javascript 控制台需要greeter重新初始化變數,例如 ,因為 Javascript 變數僅在記憶體中而不是持久化。

可以幫助的一件事:

Geth 支持通過 –preload 參數將自定義 JavaScript 文件載入到控制台中。這可用於載入常用函式、設置 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控制台之前保存合約的變數,可以在web3js中儲存對應ABI介面和合約地址的變數。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');
});

引用自:https://ethereum.stackexchange.com/questions/12411