1. 程式人生 > >搭建基於ethereum以太坊環境的私有鏈

搭建基於ethereum以太坊環境的私有鏈

安裝geth在之前的部落格有提到,所以本篇預設已經安裝成功

geth -h   //能成功顯示輸出幫助,則表示已經成功安裝
  • 1
  • 2

一、創世塊

現在通過配置創世塊來建立私有鏈。同一個網路中,創世塊必須是一樣的,否則無法聯通。

建立一個private的根目錄,新建創世塊json檔案genesis.json, 並把該檔案放置於peivate目錄下。內容如下:

ps: 其中詳細內容可參考:here

{
  "config": {
        "chainId": 10, 
        "homesteadBlock": 0,
        "eip155Block": 0,
        "eip158Block
": 0 }
, "alloc" : {}, "coinbase" : "0x0000000000000000000000000000000000000000", "difficulty" : "0x20000", "extraData" : "", "gasLimit" : "0x2fefd8", "nonce" : "0x0000000000000042", "mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000", "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp" : "0x00" }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

ps: 直接從官網複製,chainId 為 0, 但是會在合約部署出現問題,所以在這裡改為10.

引數解釋:

這裡寫圖片描述

二、 建立

1 、 檢視private存放目錄

輸入:pwd
顯示結果: /Users/pro/private
  • 1
  • 2
  • 3

2 、執行命令,建立私有鏈

geth --datadir "./" init genesis.json
  • 1

3、 結果

目錄結構:

 private
├── chain
│   ├── geth
│   │   └── chaindata
│   │   │    ├── 000055.log
│   │   │    ├── CURRENT
│   │   │    ├── LOCK
│   │   │    ├── LOG
│   │   │    └── MANIFEST-000000
│   │   ├── lightchaindata
│   │   ├── LOCK
│   │   └── nodekey
│   └── keystore
└── genesis.json
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

三、 啟動

geth --datadir "./" --nodiscover console 2>>geth.log
  • 1
  • 2

引數解釋:

--nodiscover 使用這個引數,你的節點就不會被其他人發現,除非手動新增你的節點。否則,就只有一個被無意新增到一個陌生區塊鏈上的機會,那就是跟你有相同的genesis檔案和networkID。

--maxpeers 0 如果你不想有人連上你的測試鏈,就用maxpeers 0。或者,你可以調整引數,當你確切的知道有幾個節點要連線上來的時候。

--rpc 允許RPC操作你的節點。這個引數在Geth上是預設的。

--rpcapi "db,eth,net,web3" 這個命令指示了允許通過RPC訪問的命令。預設情況下,Geth允許web3。

--rpcport "8080"

--rpccorsdomain "http://chriseth.github.io/browser-solidity/"

--datadir "/home/TestChain1" 私有鏈存放路徑(最好跟公有鏈路徑不同)

--port "30303" 網路監聽埠,用來和其他節點手動連線

--identity “TestnetMainNode" 用來標識你的節點的,方便在一大群節點中識別出自己的節點
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

檢視輸出(進入到private目錄):

tail -f geth.log 
  • 1
  • 2

四、使用

1、 檢視區塊資訊

eth
eth.getBlock(0) //檢視創始區塊資訊
  • 1
  • 2
  • 3

2、 檢視節點資訊

admin.nodeInfo //檢視當前節點資訊
  • 1
  • 2
> admin.nodeInfo
{
  enode: "enode://160e220dda023b7307de009791be621a2857195f062a6a1d9002276e95604f074[email protected][::]:30303",
  id: "160e220dda023b7307de009791be621a2857195f062a6a1d9002276e95604f07481fca352a31bb6e1219edb5760ccdec65cad37310be578c2ad503ccd301a762",
  ip: "::",
  listenAddr: "[::]:30303",
  name: "Geth/v1.6.5-stable-cf87713d/darwin-amd64/go1.8.3",
  ports: {
    discovery: 30303,
    listener: 30303
  },
  protocols: {
    eth: {
      difficulty: 17179869184,
      genesis: "0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3",
      head: "0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3",
      network: 1
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

ps: 注意enode節點,這是當前節點的標識。

五、配置第二臺私鏈伺服器

要求: 兩臺電腦網路相通,並且要指定相同的networkid

按照同樣的步驟在B電腦上搭建私鏈。

搭建完成後在B電腦上輸入:

admin.addPeer("節點資訊@A電腦ip地址:30303");

例如: 

admin.addPeer("enode://160e220dda023b7307de009791be621a2857195f062a6a1d9002276e95604f074[email protected]127.0.0.1:30303") 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

驗證是否和其他節點成功建立連線,輸入admin,檢視是否連線上了節點,很多時候回連線不上,這時候就可以從另外一個節點嘗試新增本節點,這樣就會成功了。

參考部落格:here 和 here 和 here