以太坊學習(一):利用Geth搭建私有鏈

在以太坊的多種語言實現的客戶端中,推薦使用go語言版本的,也是使用最廣的一個版本go-ethereum。geth是go-ethereum的縮寫。

本次開發平臺爲Ubuntu 16.04版本64位的虛擬機。

一、安裝Geth

安裝文檔:https://ethereum.github.io/go-ethereum/install/

ubuntu下的安裝:

sudo add-apt-repository -y ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install ethereum
安裝結束可以輸入 geth version 查看版本信息。

本次安裝使用的geth Version: 1.6.7-stable

二、創建一個新目錄和添加創世塊文件genesis.json

利用mkdir 創建一個新的目錄,進入目錄,創建文件genesis.json 。文件內容如下:

   {
        "config": {
            "chainId": 15,
            "homesteadBlock": 0,
            "eip155Block": 0,
            "eip158Block": 0
        },
        "difficulty": "10000",
        "gasLimit": "2100000",
        "alloc": {
            "7df9a875a174b3bc565e6424a0050ebc1b2d1d82": { "balance": "300000" },
            "f41c74c9ae680c1aa78f42e5647a62f353b7bdde": { "balance": "400000" }
        }
    }

這是官方給的一個示例文件。技術更新較快,不知道過多久,這個配置也許就不行了。

三、執行命令,創建創世塊

geth --datadir "./" init genesis.json
geth中的命令較多,只提到部分要使用的參數。其餘請讀者自己查看文檔。

datadir 指定數據存儲的路徑

init 初始化創世節點

此時當前目錄下面會新增出兩個文件夾geth和keystore

geth         中保存的是區塊鏈的相關數據
keystore  中保存的是該鏈條中的用戶信息

@ubuntu:~/share/testchain$ geth --datadir "./" init genesis.json
WARN [09-12|22:28:10] No etherbase set and no accounts found as default 
INFO [09-12|22:28:10] Allocated cache and file handles         database=/home/lqp/share/testchain/geth/chaindata cache=16 handles=16
INFO [09-12|22:28:10] Writing custom genesis block 
INFO [09-12|22:28:10] Successfully wrote genesis state         database=chaindata                             hash=416ae0…aaffbd
INFO [09-12|22:28:10] Allocated cache and file handles         database=/home/lqp/share/testchain/geth/lightchaindata cache=16 handles=16
INFO [09-12|22:28:10] Writing custom genesis block 
INFO [09-12|22:28:10] Successfully wrote genesis state         database=lightchaindata                        hash=416ae0…aaffbd

四、執行命令,創建自己的私有鏈

geth --datadir "./" --nodiscover console 2>>geth.log
該命令是最簡單的生成方式,

nodiscover是指不被其他節點自動發現(可以手動添加節點),

console 是啓動geth 控制檯,不加該選項,geth啓動之後成爲一個後臺進程不會自動結束,

最後把geth中的log信息導入geth.log中,方便了解geth運行的情況。

如果想在同一臺物理機上面生成不同的節點,一起構建一個私有鏈,不同的節點只需在第四步創建私有鏈的時候,不同的節點指定不同的端口:

geth --identity "phoenix"  --rpc  --rpccorsdomain "*" --datadir "./" --port "30303"  --rpcapi "db,eth,net,web3" --networkid 98888 console 2>>geth.log

通過admin.nodeInfo 獲取節點信息,已經通過手動admin.addpeer()添加節點,也可以通過創建靜態節點文件,手動添加。

注意:請勿直接執行 geth 命令,因爲會自動連入生產網絡,會自動同步公有鏈中的幾十萬的節點信息。會顯示的比較凌亂。

在私有鏈運行的時候,會生成一個geth.ipc的文件(停止運行就消失),此文件是以太坊錢包mist鏈接私有鏈時候的接口。


五、新開一個終端,輸出geth.log日誌信息

打開另一個終端,找到geth.log的所在目錄,執行命令 tail -f geth.log 從而持續的輸出以太坊的日誌

六、創建新的賬戶

介紹幾個常用的命令:

eth.accounts 以,爲界限列舉出所有賬戶的地址(公匙);

personal.newAccount("xxx") 新創建一個賬戶,xxx爲密碼,會加密生成一個私匙;

personal.unlockAccount("address")解鎖一個地址,任何涉及貨幣交易的事件都需要先解鎖賬戶,要輸入密碼。

更多命令請參考 geth help 和 web3.js接口

利用personal.newAccount("xxx")生成一個用戶,重複執行可以生成多個賬號對應eth.accounts[0..n]。

七、開始挖礦

在命令行中執行命令 miner.start(), 開始在我們的區塊鏈上進行挖礦(第一次挖礦需要等待幾分鐘)。

只有開始挖礦,才能算正式運行起來,因爲在以太坊中所有的事務都需要礦工挖礦打包確認。

注意:命令默認是使用所有核挖礦,會導致電腦發熱嚴重,和影響流暢,除了第一次執行之外,建議使用miner.start(1),只使用一個核挖礦。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章