1. 程式人生 > >[區塊鏈]1.Ubuntu Geth 搭建以太坊私有鏈環境

[區塊鏈]1.Ubuntu Geth 搭建以太坊私有鏈環境

 

前言

  • 1.1 本文基於Ubuntu 作業系統。
  • 1.2 geth的全稱是go-ethereum,是一個以太坊客戶端,用go語言編寫,應該是目前最常用的客戶geth。
  • 1.3 ubuntu預設root用不啟用的,終端下輸入sudo passwd root(即修改root的密碼)回車啟用root。

準備工作

  • 2.1 修改ubuntu的hostname
    • #hostname ethserver --改變host名
    • #hostname 檢視修改後的名稱
    • 退出shell,重新進入就可以了
  • 2.2 建立一個eth的根目錄,命令: mkdir -p /root/data/eth

安裝Geth

3.1 下載安裝Geth,本文采用Geth的官方安裝指令,我們採用從PPA中安裝  

sudo apt-get update
     更新源列表
     
 sudo apt-get install software-properties-common python-software-properties 
     安裝包管理工具
     
sudo add-apt-repository -y ppa:ethereum/ethereum   --[說明1]
     這個源將安裝ethereum最新的穩定版本
     
 sudo add-apt-repository -y ppa:ethereum/ethereum-dev -[可選開發版本]
     安裝最新的開發版本,可能是不穩定版本,不建議使用
     
sudo apt-get update
     更新源列表
     
sudo apt-get install ethereum
  • 上述6條命令,第二條安裝必要的工具包, 第三、四條是新增以太坊的源, 第六條 安裝go-ethereum。
  • 說明[1] 如果報Ubuntu的add-apt-repository: command not found 執行如下
    sudo apt-get install software-properties-common python-software-properties
     
     這個命令是安裝包管理工具

 3.2 測試geth

 

  • 本文是搭建私有鏈,這裡就不進行同步公有鏈。若是你不小心打了這條命令,你可以關閉 終端,刪除/home/ubuntu/.ethereum目錄

搭建私有鏈

  • 4.1 安裝 Geth成功後。接下來你需要一下四步就可以搭建私有鏈

    • 定製創世檔案
    • 定製資料目錄
    • 定製網路ID
    • (建議)禁用節點發現
  • 4.2 創世塊

    • 創世區塊是整個區塊鏈的開端——第一個區塊,編號是0,也是唯一一個沒有前驅指向的區塊。協議必須確保沒有其他節點會認同你的區塊鏈版本,除非他們擁有同樣的創世區塊。因此你可以創造出任意多的私有測試網路。
    • 首先建立私有網路的創世狀態,這種狀態是所有節點得認同的,這是由一個小小的JSON檔案組成的.
    • 現在通過配置創世塊來建立私有鏈。同一個網路中,創世塊必須是一樣的,否則無法聯通。
    • 在eth根目錄下新建創世塊json檔案piccgenesis.json - 命令# touch piccgenesis.json 內容如下
      • { "config": { "chainId": 15, "homesteadBlock": 0, "eip155Block": 0, "eip158Block": 0 }, "coinbase" : "0x0000000000000000000000000000000000000000", "difficulty" : "0x100", "extraData" : "", "gasLimit" : "0xffffffff", "nonce" : "0x0000000000000042", "mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000", "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp" : "0x00", "alloc": { } }

        PS 這裡最好將難度設小一點,要是普通PC機的話,一兩百就好。因為這樣產生區塊的時間短。

  •  

4.3 用上述創世檔案初始化每一個Geth節點

  • 進入 /root/data/eth目錄下
  • 初始化命令# geth --datadir /root/.ethereum init piccgenesis.json 
  • 初始化成功後,會在/root 下生成.ethereum資料夾,包含 geth和keystore兩個資料夾,其中geth/chaindata中存放的是區塊資料)。

4.4 啟動一個私有鏈節點

  • 命令方式啟動一個geth節點
  • geth --networkid 15 --dev --rpc --rpcapi "db,eth,net,web3,miner,personal" console 2>>log
  • 命令說明
    
      --networkid 設定區塊鏈的網路ID,用來標識不同的網路
     
      --dev.period value  Block period to use in developer mode (0 = mine only if transaction pending) (default: 0)
      
      --dev  使用POA共識網路,預設預分配一個開發者賬戶並且會自動開啟挖礦
      console是啟動一個互動式JavaScript環境,可以在Geth中執行命令
      
      上述命令不會自動挖礦,如需自動挖礦按照下面命令
      geth --networkid 15 --dev --dev.period 1 --rpc --rpcapi "db,eth,net,web3,miner,personal"   console 2>>log

     自動挖礦命令 geth --networkid 15 --dev --dev.period 1 --rpc --rpcapi "db,eth,net,web3,miner,personal" console 2>>log

  • 啟動後log如下 

  • 啟動成功,看到Welcome to the Geth JavaScript console!的提示,說明啟動成功。

       自此私有鏈搭建完成,下一節講如何建立賬戶,如何挖礦等。

 

  • 啟動命令詳解

    • identity :區塊鏈的標示,隨便填寫,用於標示目前網路的名字
    • init :指定創世塊檔案的位置,並建立初始塊
    • datadir :設定當前區塊鏈網路資料存放的位置
    • port:網路監聽埠,預設是8080
    • rpc:啟動rpc通訊,可以進行智慧合約的部署和除錯。它在geth中被預設啟用。
    • rpcapi: 設定允許連線的rpc的客戶端,一般為db,eth,net,web3。
      • 這個命令可以決定允許什麼API通過RPC進入。在預設情況下,geth可以在RPC啟用web3介面。請注意在RPC/IPC介面提供API,會使每個可以進入這個介面(例如dapp’s)的人都有許可權訪問這個API。注意你啟用的是哪個API。Geth會預設啟用IPC介面上所有的API,以及RPC介面上的db,eth,net和web3 API。
    • networkid: 設定當前區塊鏈的網路ID,用於區分不同的網路,是一個數字
    • console:啟動命令列模式,可以在Geth中執行命令
    • nodiscover : 使用這個命令可以確保你的節點不會被非手動新增你的人發現。否則,你的節點可能被陌生人的區塊鏈無意新增,如果他和你有相同的初始檔案和網路ID。
    • maxpeers : 如果你不希望其他人連線到你的測試鏈,可以使用maxpeers 0。反之,如果你確切知道希望多少人連線到你的節點可以通過調整數字來實現。
    • rpccorsdomain : 這個可以指示什麼URL能連線到你的節點來執行RPC定製端任務。務必謹慎,輸入一個特定的URL而不是wildcard ( * ),後者會使所有的URL都能連線到你的RPC例項