1 Geth 是什麼
Go-Ethereum簡稱Geth,用golang語言實現。Geth是以太坊協議的官方實現。
-
Geth可以當客戶端來使用
打開Geth,用戶可以創建自己的以太坊私有鏈、管理賬戶、挖礦、交易、部署執行智能合約等,用戶還可以下載以太坊主鏈、解析主鏈上任意交易數據等。 -
Geth可以當服務器來使用 Geth提供很多服務和豐富的API,用戶可以開發程序通過調用Geth服務,實現自己想要的功能,比如獲取一段時間內以太幣的所有交易賬戶。
2 Geth 搭建及賬戶管理
我目前測試搭建的是基於 mac 操作系統,目標實現一個多節點集羣,並且可以互相發現和互相交易。
- 啓動第一個節點
geth --datadir data0 --rpc --dev console
- --dev 啓用開發者網絡(模式),使用此模式後啓動的node就不會去同步公有鏈上的區塊,公有鏈的數據量幾十個G太大了,共識速度也比較慢。開發者網絡會使用 POA 共識,默認預分配一個開發者賬戶並且會自動開啓挖礦。
- --datadir 後面的參數是區塊數據及祕鑰存放目錄。
- 第一次輸入命令後,它會放在當前目錄下新建一個 data0 目錄來存放數據。
- --rpc 啓用HTTP-RPC服務器
- console 進入控制檯
// 獲取節點實例
admin.nodeInfo.enode
- 賬戶
// 查看賬戶,默認分配了一個開發者賬戶
eth.accounts
// 創建賬戶,‘mumu’是新賬戶的密碼
personal.newAccount('mumu')
// 通過以下命令可以分別查看默認開發賬戶和新創建賬戶的賬戶餘額
eth.getBalance(eth.accounts[0])
eth.getBalance(eth.accounts[1])
可以看到默認開發賬戶分配有很多餘額。
- 轉賬
我們將從默認開發者賬戶中轉入1個以太幣給新賬戶
eth.sendTransaction({from:'0xb479c7bfe4fac4e191c345a3916859730320d3aa', to:'0xdac7beb12af3139f4b07b3727ac1787f1d039b84', value: web3.toWei(1,'ether')})
轉賬成功!
- 解鎖賬戶
在部署合約前需要先解鎖賬戶
personal.unlockAccount(eth.accounts[1])
解鎖成功後,賬戶準備好了,接下來可以編寫合約代碼了。
3. 與 metamask 連接
- metamask 先選擇連接 localhost 8545,連接的前置條件是 Geth 的啓動必須已經開啓的 rpc 連接。
- 創建好賬戶後,點擊賬戶詳情,導出私鑰。
- 將私鑰複製到一個 txt 文件中,例如 slash.txt
- 在 Geth 中輸入命令
geth account import <私鑰文件路徑>
提示輸入密碼,這個密碼是 metamask 上的賬戶密碼。
// 查看 geth 賬戶列表
geth account list
賬戶導入成功!
這種方法同樣適用於任何已知私鑰的外部賬戶導入geth
- 這時候在 metamask 賬戶之間進行交易,在 Geth 中都可以通過命令查看到了,反之亦然。