下載並安裝 Geth 客戶端#
下載地址:https://geth.ethereum.org/downloads/*
下載最新版本的 geth (win10 版本 Stable releases)(選擇自己電腦對應的版本)
選第 3 個,下載並安裝 (安裝時選擇一個自己方便操作的路徑即可):
下載完成後打開文件夾:
驗證是否安裝成功:
打開 cmd, 輸入以下指令 (查看幫助文檔):geth -help
出現以下內容即為安裝成功
至此以太坊客戶端已經安裝完畢
測試 geth 同步主網絡 (配置私鏈的話這步不做也可)
直接打開 geth.exe
geth 會自動運行同步,在一開始的提示中也有說明區塊的存儲路徑在哪裡
我的路徑是:C:\Users\Edward\AppData\Roaming\Ethereum (一般為管理員賬戶路徑裡)
注意:要查看 AppData, 需要在查看裡勾選查看隱藏的項目
創世區塊配置文件#
(開始搭建私鏈:注意關閉正在同步主網的 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(寧靜) |
eip155Block | eip 是 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
執行完這條命令後會在 geth 安裝目錄下出現一個 db 文件夾,其中 chaindata 存放區塊數據,keystore 存放賬戶數據
啟動節點#
命令: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:重定向,記錄日誌
啟動成功後如下圖所示:
可以驗證節點信息
命令:admin.nodeInfo
新建賬戶#
輸入 eth.accounts 查看已存在賬號:
[] 說明暫無賬號
輸入以下指令創建賬號:personal.newAccount()
會提示你輸入密碼,需要自己記住,測試不要太複雜
雙引號內是自己的地址
執行成功後會產生賬戶的公鑰(地址),然後在 keystore 文件夾下就會產生相應的賬戶文件:
可以通過以下命令來查看對應賬戶的餘額:
eth.accounts [0] // 查看第一個賬號地址
eth.getBalance(eth.accounts[0])
eth.getBalance ("0x7326bc89fe5a1d593afb5fa02479974be776a081") // 括號內也可以直接填地址
發現賬戶餘額是 0,因此需要通過挖礦獲取以太幣
下載錢包 MetaMask 並導入創建的賬戶#
MetaMask 是一個 chrome 插件
下載完成之後,在右上角會出現一個小狐狸標誌,點開,點擊網絡使其顯示隱藏的網絡 localhost 8545 (並連接)
我們採取向我們本地私鏈導入 metamask 上已創建的賬號
參考:https://blog.csdn.net/weixin_43988498/article/details/108394012
導出私鑰
複製私鑰到本地一個 txt 文件中保存
然後輸入
geth account import + 你的私鑰文件路徑
會提示你輸入密碼,這個密碼是在 geth 控制台使用的密碼
發現生成的賬戶就是在 MetaMask 上的賬戶。
此時查看當前生成密鑰文件位置:
geth account list
找到對應賬戶後面的存儲位置,把文件放到我們創建私鏈項目中的 keystore 文件夾中即可。
在 geth 中輸入 eth.accounts 查看新導入的賬號
挖礦#
挖礦所得的獎勵會進入礦工的賬戶,這個賬戶叫做 coinbase,默認情況下 coinbase 是本地賬戶中的第一個賬戶,如下圖所示:指令:eth.coinbase
可以輸入 miner.setEtherbase (賬號) 設置挖礦賬號
我現在設置剛剛導入的賬號為挖礦地址
查看餘額 eth.getBalance (賬號) :
通過以下命令開啟挖礦,參數是線程數,這裡設置為 1**(提示 null 不必理會)**
miner.start(1)
輸入指令和打開小狐狸都可以看到賬號餘額在增加
通過以下指令停止挖礦 miner.stop ()
到此我們的私鏈搭建就大功告成啦
參考鏈接#
https://blog.csdn.net/cjm083121/article/details/106319518
https://blog.csdn.net/weixin_43988498/article/details/108394012
更新#
- genesis.json 的 chainid 666 那裡還有啟動節點的 --networkid 666 要一致,再檢查下 metamask 中 localhost 網絡設置 id 是否一致,不然無法轉賬
- 本地賬號導入問題
把 keystore 的文件後綴名改成 json,輸入密碼導入,導入後會卡一會,等一會就可以了。
- 之前的創世塊文件已經更改成新的內容