以太坊Geth私有鏈條(單節點多節點)


原文:https://blog.csdn.net/yinanmo5569/article/details/80339031

以太坊官方網絡(Official Network)

以太坊官方網絡有兩種:

  • 生產環境網絡(又稱主網絡)
  • 測試網絡TestNet

主網絡是產生真正有價值的以太幣的網絡,是全球化,部署在Internet環境上的.智能合約的代碼,執行,區塊的調用,都可以清晰地查看到.而所有節點都是全球化的,速度較慢. 
TestNet是專供用戶來開發,調試和測試的.如果開發簡單的智能合約的話,用測試網絡就足夠了,用戶可以把更多的精力集中在智能合約的編寫.但是由於網路是官方提供的,因此對於以太坊技術的底層實現,Geth的各種參數接口,整個以太坊技術真是性能的理解就會弱很多.所以從開發者的角度來說,一個更好的選擇是Private Network,可以從技術的底層去深入理解以太坊.

以太坊私有網絡(Private Network)

以太坊私有網絡,就是由用戶自己通過Geth創建的私有網絡,是一個非常適合開發,調試和測試的網路.私有網路可以方便開發者深入理解以太坊的技術底層.

㈠安裝虛擬機

Root密碼:123456
Root密碼:123456

Admin密碼:1234
Admin密碼:1234

㈡虛擬機聯網

vmware netword adapter vmnet8主機ipv4的IP地址為:192.168.2.3
vmware netword adapter vmnet8主機ipv4的IP地址為:192.168.2.3

虛擬機ip地址為:192.168.2.12
虛擬機ip地址為:192.168.2.12

㈢安裝Go語言環境

1.10.3

由於后面會出現版本兼容問題,因此此處需要將golong版本更改采用新版的:官網地址
比如2018.6.18我下載1.10.3:1.10.3
1、下載復制放到:opt/ethfan目錄:

1.1
1.2
如果之前安裝過就刪除無效的go
1.3
2、解壓 tar -xvf
文件名: tar -xvf go1.10.3.linux-amd64.tar.gz
2.1 解壓
3、配置環境:gedit /etc/profile
3.1
4、查看版本
版本

1.8.1

舊版參照1.8.1安裝:訪問go官網下載
下載復制放到:opt/ethfan目錄

下載
解壓 tar -xvf 文件名
解壓
配置GOPATH環境變量
①
②
③
④

㈣配置yum

如果沒有配置yum就要先配置yum

㈤下載和編譯Geth

安裝C的編譯器,但是:centos7中沒有這個apt-get install -y build-essential
 我安裝的是:yum -y install gcc

①
 克隆Github項目
git clone https://github.com/ethereum/go-ethereum.git
②
 進入到文件目錄,源碼安裝
cd go-ethereum make geth 
錯誤說明

錯誤說明我的版本是:1.8.1 不符合,應當改成至少是1.9
解決方法:要么更改golong版本,要么更改geth版本
更改golong版本為1.10.3:就好啦

③

 檢驗是否安裝成功

查看命令:build/bin/geth –help 檢查版本:build/bin/geth version
④
 配置geth環境
⑤
source /etc/profile
⑥ 查看geth version
⑥ 查看geth version

Geth搭建私有網絡

Step1:定義私有genesis state

[admin@localhost ~]$ cd Code/blockchain
[admin@localhost blockchain]$ mkdir go-ethereum

[admin@localhost blockchain]$ gedit genesis.json

[admin@localhost blockchain]$ mkdir privateNetwork

創建一個新的文件夾privateNetwork,用來存儲genesis.json文件和之后的私有鏈

將下面的內容復制到genesis.json中:

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

或者內容為:
{
  "config": { "chainId": 22, "homesteadBlock": 0, "eip155Block": 0, "eip158Block": 0 }, "alloc" : {}, "coinbase" : "0x0000000000000000000000000000000000000000", "difficulty" : "0x400", "extraData" : "", "gasLimit" : "0x2fefd8", "nonce" : "0x0000000000000032", "mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000", "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp" : "0x00" }

官方文檔中的chainId為0,應該修改為非0的值,不然會導致 insufficient funds for gas * price + value 
difficulty表示挖礦的難度值,官方文檔中為0x20000,由於測試機器配置低,修改為0x05000。

Step2:建立創世區塊

運行如下指令:

[admin@localhost blockchain]$ geth --datadir "./privateNetwork" init go-ethereum/genesis.json

結果如下:

然后在privateNetwork中能發現geth和keystore兩個新文件.

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

Step3:創建自己的私有鏈條

運行如下命令:

[admin@localhost privateNetwork]$ geth --networkid 14 --nodiscover --datadir "data/chain0" --rpc --rpcapi net,eth,web3,personal --rpcaddr localhostconsole 2>>geth.log

nodiscover的意思是不被其他節點自動發現(可以手動添加節點) 
或者命令類似為:geth --identity "TestNode" --rpc --rpcport "8545" --datadir /opt/ethfan/path/to/datadir --port "30303" --nodiscover console

console是啟動geth控制台,不加該選項,geth啟動之后成為一個后台進程不會自動結束 
最后把geth中的log信息導入geth.log中,方便了解geth運行的情況。 
注意路徑要加引號,不然會出問題.

--nodiscover 關閉p2p網絡的自動發現,需要手動添加節點,這樣有利於我們隱藏私有網絡
--datadir 區塊鏈數據存儲目錄
--networkid 網絡標識,私有鏈取一個大於4的隨意的值
--rpc 啟用ipc服務,默認端口號8545
--rpcapi 表示可以通過ipc調用的對象
--rpcaddr ipc監聽地址,默認為127.0.0.1,只能本地訪問
console 打開一個可交互的javascript環境
更多參數:https://github.com/ethereum/go-ethereum/wiki/Command-Line-Options

運行后面的再進入是這樣的:

進入geth

創建賬號:語法這里采用的是javascript輸入兩次密碼123456,顯示生成的賬號

創建新用戶,密碼是”ycx”,地址是"0x41b80248049bfa17e30beaa16c9f0e6b0e98fa6e"

>personal.newAccount("ycx")

Step4:在自己的私有鏈條上創建用戶

查看私有鏈已有賬戶,已經有賬戶(我創建過兩次).

>eth.accounts

查看賬戶余額

Step5:嘗試挖礦

繼續在console中輸入:

>miner.start()

開始挖礦,查看終端geth.log,如下:

過了一段時間之后,再停止挖礦,查看賬戶,只要不為0則挖礦成功

 

Geth搭建多節點私有鏈條

搭建0號節點

參照:上文

搭建1號節點

[root@localhost admin]# cd Code/blockchain/
[admin@localhost blockchain]$ mkdir data

 

創建步驟與之前是一樣的,要保證兩個節點在同一個區塊鏈上工作的話首先要保證genesis創世區塊鏈是一樣的,所以注意使用同樣的genesis.json文件來創建.用兩個端口分別創建

[root@localhost blockchain]$ geth --datadir "data/chain0" init go-ethereum/genesis.json
[root@localhost blockchain]$ geth --datadir "data/chain1" init go-ethereum/genesis.json
如果報錯:

啟動0號,1號節點

為了使兩個節點同時啟動,注意使用不同的port和rpc port.

啟動0號節點:

geth --networkid 14 --nodiscover --datadir "data/chain0" --rpc --rpcapi net,eth,web3,personal --rpcaddr localhost console 2>>geth0.log

如果報錯:可以查看端口https://www.cnblogs.com/chinas/p/4553179.html

geth --networkid 14 --nodiscover --datadir "data/chain0" --port 30303--rpc --rpcapi net,eth,web3,personal --rpcport 8545--rpcaddr localhost console 2>>geth0.log

啟動1號節點:

geth --networkid 14 --nodiscover --datadir "data/chain1" --port 55554 --rpc --rpcapi net,eth,web3,personal --rpcport 8101 --rpcaddr localhost console 2>>geth1.log

參數解釋:

--nodiscover 關閉p2p網絡的自動發現,需要手動添加節點,這樣有利於我們隱藏私有網絡
--datadir 區塊鏈數據存儲目錄
--port  網絡監聽端口,默認30303
--networkid 網絡標識,私有鏈取一個大於4的隨意的值
--rpc 啟用ipc服務
--rpcport ipc服務端口,默認端口號8545
--rpcapi 表示可以通過ipc調用的對象
--rpcaddr ipc監聽地址,默認為127.0.0.1,只能本地訪問
console 打開一個可交互的javascript環境

添加節點

通過addPeer來添加節點.關於Geth JavaScript console的具體api可以在查詢官方文檔:https://github.com/ethereum/go-ethereum/wiki/Management-APIs

首先查看1號節點的enode

在0號節點的console,添加1號節點

查看是否添加成功

查看連接的節點數量和連接的節點列表:

net.peerCount
admin.peers

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM