shuhai

shuhai

Win10使用Geth客戶端搭建以太坊私有鏈、連接可視化錢包及挖礦

下載並安裝 Geth 客戶端#

下載地址https://geth.ethereum.org/downloads/*

下載最新版本的 geth (win10 版本 Stable releases)(選擇自己電腦對應的版本)
選第 3 個,下載並安裝 (安裝時選擇一個自己方便操作的路徑即可):

1
2

下載完成後打開文件夾:

3

驗證是否安裝成功:

打開 cmd, 輸入以下指令 (查看幫助文檔):geth -help

出現以下內容即為安裝成功

4

至此以太坊客戶端已經安裝完畢

測試 geth 同步主網絡 (配置私鏈的話這步不做也可)

直接打開 geth.exe

geth 會自動運行同步,在一開始的提示中也有說明區塊的存儲路徑在哪裡

我的路徑是:C:\Users\Edward\AppData\Roaming\Ethereum (一般為管理員賬戶路徑裡)

5
6

注意:要查看 AppData, 需要在查看裡勾選查看隱藏的項目
7

創世區塊配置文件#

(開始搭建私鏈:注意關閉正在同步主網的 geth)
新建創世區塊文件

在 geth 安裝目錄下新建genesis.json*(此為文件名)*文件,輸入以下內容(並保存)

{
  "nonce": "0x0000000000000042",
  "difficulty": "0x4",
  "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "coinbase": "0x0000000000000000000000000000000000000000",
  "timestamp": "0x00",
  "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "gasLimit": "0xffffffffffffff",
  "alloc": {},
  "config": {
	"chainId": 666,
    "homesteadBlock": 0,
    "eip150Block": 0,
    "eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "eip155Block": 0,
    "eip158Block": 0,
    "byzantiumBlock": 0,
    "constantinopleBlock": 0,
    "petersburgBlock": 0,
    "istanbulBlock": 0,
    "ethash": {}
   }
}
參數名描述
chainID指定了獨立的區塊鏈網絡 ID。網絡 ID 在連接到其他節點的時候會用到,以太坊公網的網絡 ID 是 1,為了不與公有鏈網絡衝突,運行私有鏈節點的時候要指定自己的網絡 ID。不同 ID 網絡的節點無法相互連接
homesteadBlock取值為 0 表示正在使用 homesteadBlock 版本。以太坊的發展分成了四個階段:1.Frontier(前沿) 2.HomesteadBlock(家園) 3.Metropolis(大都市) 4.Serenity(寧靜)
eip155Blockeip 是 ethereum improvement proposal 的縮寫,你的鏈不會因為這些提議分叉,故設置為 “0” 即可
mixhash一個 256 位的哈希證明,與 nonce 結合使用,證明已經對該塊進行了足夠的計算:工作量證明(PoW)。
nonce一個 64 位的哈希證明,與 mixhash 結合使用,證明在該塊上進行了足夠的計算:工作量證明(PoW)。
difficulty設置當前區塊的難度,如果難度過大,cpu 挖礦就很難,這裡設置較小難度
alloc以太坊賬戶信息,可以留空,等待部署完成後再啟動以太坊創建賬戶;也可以預先配置好以太坊賬戶及其餘額。這裡的賬戶餘額以 wei 為單位。
coinbase礦工的賬號,隨便填
timestamp設置創世塊的時間戳
parentHash上一个區塊的 hash 值,因為是創世塊,所以這個值是 0
extraData附加信息,隨便填,可以填你的個性信息
gasLimit該值設置對 GAS 的消耗總量限制,用來限制區塊能包含的交易信息總和,因為我們是私有鏈,所以填最大。

初始化#

genesis.json文件夾路徑下打開 cmd, 執行命令:geth --datadir .\db init genesis.json
8

執行完這條命令後會在 geth 安裝目錄下出現一個 db 文件夾,其中 chaindata 存放區塊數據,keystore 存放賬戶數據

9
10

啟動節點#

命令:geth --http --http.api db,eth,net,web3,personal --datadir .\db --networkid 666 console 2>> log2020526.log

注意:搭建過程中我的 geth 一直是處於未關閉狀態,networkid 要配置對指定為 chainId(在 genesis.json 配置)
重要參數解釋:

port:指定以太坊網絡監聽端口,默認為 30303

http:開啟 HTTP-RPC 服務,可以進行智能合約的部署和測試

http.api:基於 HTTP-RPC 提供的 API

http.addr:指定 HTTP-RPC 服務監聽地址,默認為 localhost

http.port:指定 HTTP-RPC 服務監聽端口號,默認為 8545

networkid:指定以太坊網絡 id,默認啟動 id 為 1,代表公有鏈,我們搭建的是私有鏈,因此指定為 chainId(在 genesis.json 配置)

console:啟動命令行模式

2>> log2020526.log:重定向,記錄日誌

啟動成功後如下圖所示:
11

可以驗證節點信息
命令:admin.nodeInfo

12

新建賬戶#

輸入 eth.accounts 查看已存在賬號:

13
[] 說明暫無賬號

輸入以下指令創建賬號:personal.newAccount()

會提示你輸入密碼,需要自己記住,測試不要太複雜

14

雙引號內是自己的地址

執行成功後會產生賬戶的公鑰(地址),然後在 keystore 文件夾下就會產生相應的賬戶文件:
15

可以通過以下命令來查看對應賬戶的餘額

eth.accounts [0] // 查看第一個賬號地址

eth.getBalance(eth.accounts[0])

eth.getBalance ("0x7326bc89fe5a1d593afb5fa02479974be776a081") // 括號內也可以直接填地址
16
發現賬戶餘額是 0,因此需要通過挖礦獲取以太幣

下載錢包 MetaMask 並導入創建的賬戶#

MetaMask 是一個 chrome 插件
下載完成之後,在右上角會出現一個小狐狸標誌,點開,點擊網絡使其顯示隱藏的網絡 localhost 8545 (並連接)

17

18

我們採取向我們本地私鏈導入 metamask 上已創建的賬號

參考:https://blog.csdn.net/weixin_43988498/article/details/108394012

19

導出私鑰

20

複製私鑰到本地一個 txt 文件中保存
21

然後輸入

geth account import + 你的私鑰文件路徑

會提示你輸入密碼,這個密碼是在 geth 控制台使用的密碼

發現生成的賬戶就是在 MetaMask 上的賬戶。

此時查看當前生成密鑰文件位置:

geth account list

找到對應賬戶後面的存儲位置,把文件放到我們創建私鏈項目中的 keystore 文件夾中即可。
22
23

在 geth 中輸入 eth.accounts 查看新導入的賬號

24

挖礦#

挖礦所得的獎勵會進入礦工的賬戶,這個賬戶叫做 coinbase,默認情況下 coinbase 是本地賬戶中的第一個賬戶,如下圖所示:指令:eth.coinbase

25

可以輸入 miner.setEtherbase (賬號) 設置挖礦賬號

我現在設置剛剛導入的賬號為挖礦地址
26

查看餘額 eth.getBalance (賬號)
27

通過以下命令開啟挖礦,參數是線程數,這裡設置為 1**(提示 null 不必理會)**
miner.start(1)

28

輸入指令和打開小狐狸都可以看到賬號餘額在增加

29

30

通過以下指令停止挖礦 miner.stop ()

31

到此我們的私鏈搭建就大功告成啦

參考鏈接#

https://blog.csdn.net/cjm083121/article/details/106319518

https://blog.csdn.net/weixin_43988498/article/details/108394012

更新#

  1. genesis.json 的 chainid 666 那裡還有啟動節點的 --networkid 666 要一致,再檢查下 metamask 中 localhost 網絡設置 id 是否一致,不然無法轉賬
    32
  2. 本地賬號導入問題

把 keystore 的文件後綴名改成 json,輸入密碼導入,導入後會卡一會,等一會就可以了。

  1. 之前的創世塊文件已經更改成新的內容
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。