1. 程式人生 > >go-ethereum 搭建本地測試私有鏈

go-ethereum 搭建本地測試私有鏈

1. 初始化私有鏈

1.1 創世區塊配置檔案

在絕對路徑 /home/vagrant/ 下建立 genesis.json(檔名可換成其他,下面進行操作時,檔名保持一致即可)檔案,內容為:

{
    "config": {
          "chainId": 0,
          "homesteadBlock": 0,
          "eip155Block": 0,
          "eip158Block": 0
      },
    "alloc"      : {},
    "coinbase"  : "0x0000000000000000000000000000000000000000",
    "difficulty" : "0x20000"
, "extraData" : "", "gasLimit" : "0x2fefd8", "nonce" : "0x0000000000000042", "mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000", "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp" : "0x00" }

注意:Windows 系統下,需要注意檔案編碼為 UTF-8,LF 格式換行。
引數簡介:

引數 描述
alloc 用來預置賬號以及賬號的以太幣數量,因為私有鏈挖礦簡單,所以不需要預置有幣的賬號,需要的時候可以自己建立
coinbase 礦工的賬號,隨便填
difficulty 設定當前區塊的難度,值越大,難度越大,越難挖礦,私有鏈可將該值設定小點,容易挖礦
extraData 附加資訊,隨便填
gasLimit GAS 的消耗總量限制,用來限制區塊能包含的交易資訊總和,最大值:0x0000ffff
nonce 一個 64 位隨機數,用於挖礦,注意它和 mixhash 的設定需要滿足以太坊的 Yellow paper,4.3.4. Block Header Validity,(44) 章節所描述的條件
mixhash 與 nonce 配合用於挖礦,由於上一個區塊的一部分生成的 hash
parentHash 上一個區塊的 hash 值,只有創世塊的該值為 0,因為創世塊是第一個區塊
timestamp 設定創世塊的時間戳

1.2 寫入創世區塊

在絕對路徑 /home/vagrant/ 下執行下面命令進行初始化:

geth --datadir /home/vagrant/data0 init genesis.json

引數簡介:

引數 描述
datadir 指定資料目錄,不同節點指定不同目錄,注意所指目錄許可權
init 初始化命令,這裡指定 genesis.json 為配置檔案

2. 啟動一個私有鏈節點

執行下面命令進行私有鏈節點的啟動,開發方式登入:

geth --identity "private ethereum" --rpc --rpccorsdomain "*" --datadir "/home/vagrant/data0/chain" --port "30303" --rpcapi "db,eth,net,web3" --networkid 95518 console --dev

引數簡介:

引數 描述
identity 區塊鏈的標識,用於標識目前網路的名字
rpc 啟動 RPC 通訊,可以進行智慧合約的部署和測試
rpccorsdomain 逗號分隔的域列表,用來接受交叉源請求(瀏覽器強制執行)
datadir 設定當前區塊鏈網路資料存放的位置
port 網路監聽埠
rpcapi 設定允許連線的 RPC 的客戶端,一般為 db, eth,net,web3
networkid 設定當前區塊鏈的網路 ID,用於區分不同的網路
console 啟動命令列模式,方便執行命令

執行後臺服務需要去掉 console,否則會自動停止:

nohup geth --identity "private etherum" --rpc --rpccorsdomain "*" --datadir "/home/vagrant/data0/chain" --port "30303" --rpcapi "db,eth,net,web3" --networkid 95518 --dev &

會在 /home/vagrant/data0/chain 目錄生成 geth.ipc 檔案,可以通過執行下面命令連線 geth:

geth attach ipc:/home/vagrant/data0/chain/geth.ipc

參考 get attach 可以通過下面幾種方式進行連線:

geth attach ipc:/some/costom/path
geth attach http://192.168.1.1:8545
geth attach ws://192.168.1.1:8545

3. console 下的操作

3.1 使用者

3.1.1 使用者列表

eth.accounts

3.1.2 新增使用者

personal.newAccount('密碼')

3.1.3 解鎖使用者

personal.unlockAccount('使用者值', '對應密碼')

補充示例:

user1=eth.accounts[0]
user2=eth.accounts[1]
personal.unlockAccount(user1, '123456')

3.1.4 傳送交易

eth.sendTransaction({from:user1, to:user2, value:web3.toWei(3,"ether")})

補充說明:交易之前,需要解鎖使用者 user1,交易之後,需要執行挖礦操作讓交易有效。

3.1.5 檢視餘額

eth.getBalance(user1)

3.2 挖礦

3.2.1 開始

miner.start()

3.2.2 結束

miner.stop()

3.2.3 檢視區塊數量

eth.blockNumber

3.2.4 獲取區塊資訊

eth.getBlock(1)

3.3 節點

3.3.1 獲取節點資訊

admin.nodeInfo
admin.nodeInfo.enode
admin.nodeInfo.id
admin.nodeInfo.ports.listener