Go-Ethereum
Geth 的控制台關閉後,智能合約會被刪除嗎?
有沒有辦法在我的私有鏈上永久部署合約?
我嘗試了歡迎契約並關閉了控制台。再次執行控制台並嘗試呼叫我的 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'); });