搭建geth私有鏈和聯(lián)盟鏈網(wǎng)絡(luò)

一、搭建環(huán)境

操作系統(tǒng):linux或Mac OS
安裝geth執(zhí)行以下命令:
linux:sudo apt-get install ethereum
Mac OS:brew install ethereum

二、創(chuàng)建節(jié)點(diǎn)的目錄

直接創(chuàng)建兩個geth的工作目錄,用于之后的組建聯(lián)盟鏈的使用:
mkdir eth-private1
mkdir eth-private2

三、創(chuàng)建賬號

首先 cd eth-private1 進(jìn)入節(jié)點(diǎn)1的工作目錄該目錄下執(zhí)行下面命令
geth --datadir data --nodiscover console(data是之后geth節(jié)點(diǎn)的數(shù)據(jù)目錄,可自行修改)

image.png

進(jìn)入節(jié)點(diǎn)的控制臺,輸入eth.accounts可以查看節(jié)點(diǎn)內(nèi)的所有的錢包地址
image.png
(因?yàn)槭切陆ǖ墓?jié)點(diǎn),所有沒有地址)
在控制臺中輸入personal.newAccount("123")其中123是該地址的密碼,可自定義,回車生成一個錢包地址,如圖:
image.png

操作完之后輸入exit退出控制臺
節(jié)點(diǎn)2的的創(chuàng)建地址一樣

四、創(chuàng)建創(chuàng)世區(qū)塊

使用geth自帶的工具puppeth用于生成創(chuàng)世區(qū)塊,過程如下:
puppeth
+-----------------------------------------------------------+
| Welcome to puppeth, your Ethereum private network manager |
| |
| This tool lets you create a new Ethereum network down to |
| the genesis block, bootnodes, miners and ethstats servers |
| without the hassle that it would normally entail. |
| |
| Puppeth uses SSH to dial in to remote servers, and builds |
| its network components out of Docker containers using the |
| docker-compose toolset. |
+-----------------------------------------------------------+

Please specify a network name to administer (no spaces, please)

private

輸入私鏈名稱后,會出現(xiàn)二級菜單,現(xiàn)在2:配置一個新的創(chuàng)世快
What would you like to do? (default = stats)

  1. Show network stats
  2. Configure new genesis
  3. Track new remote server
  4. Deploy network components

2

再次出現(xiàn)二級菜單,讓你選擇共識機(jī)制(這里采用poa共識)
Which consensus engine to use? (default = clique)

  1. Ethash - proof-of-work
  2. Clique - proof-of-authority

Ethash - proof-of-work(PoW) :工作量證明,通過算力達(dá)成共識 (以太坊就是使用這種方式)
Clique - proof-of-authority(PoA): 權(quán)威證明、通過預(yù)先設(shè)定的權(quán)威節(jié)點(diǎn)來負(fù)責(zé)達(dá)成共識 (不消耗算力,一般用于私有鏈測試開發(fā))
如果選擇Pow的共識方法,直接輸入1,回車即可。
如果選擇PoA的共識方法,輸入2后會提示讓你選擇處快的間隔時間,一般測試開發(fā)使用可以設(shè)置相對的將處快時間設(shè)置較少5秒即可,然后會讓你選擇哪個賬戶來作為權(quán)威生成區(qū)塊(至少有一個,輸入剛才創(chuàng)建的賬戶,若只是單節(jié)點(diǎn)就輸入那個節(jié)點(diǎn)目錄生成的地址,若想組建聯(lián)盟鏈就填寫生成的兩個地址)

How many seconds should blocks take? (default = 15)

5
Which accounts are allowed to seal? (mandatory at least one)
0x7f940e21731e233a41f164b178fc9fa249f394d4

選擇好共識機(jī)制后會讓你指定給那些賬號初始化ether(至少有一個),輸入我們剛才創(chuàng)建的賬戶地址回車即可。
Which accounts should be pre-funded? (advisable at least one)

0x7f940e21731e233a41f164b178fc9fa249f394d4

選擇輸入私有鏈的網(wǎng)絡(luò)ID,任意數(shù)字即可(不能為1,1是公鏈),也可以不輸入會給定一個隨機(jī)數(shù)作為私有鏈的網(wǎng)絡(luò)ID
Specify your chain/network ID if you want an explicit one (default = random)

1234
輸入以后會回到主菜單,我們重新選擇2
What would you like to do? (default = stats)

  1. Show network stats
  2. Manage existing genesis
  3. Track new remote server
  4. Deploy network components

2

選擇導(dǎo)出創(chuàng)世區(qū)塊配置文件

  1. Modify existing fork rules
  2. Export genesis configuration

2

選擇導(dǎo)出創(chuàng)世區(qū)塊配置文件的保存路徑,可以保存到當(dāng)前目錄,直接按回車即可
Which file to save the genesis into? (default = my-private-chain.json)

INFO [02-09|14:56:33] Exported existing genesis block

這樣就完成了創(chuàng)世區(qū)塊文件的配置了,直接退出puppeth即可。

五、初始化節(jié)點(diǎn)

輸入命令geth --datadir data init private.json 其中data自己制定,private.json就是剛才生成的創(chuàng)世區(qū)塊
若出現(xiàn)如圖錯誤:

image.png

輸入geth removedb --datadir data(data自己指定)
image.png

然后重新輸入geth --datadir data init private.json
image.png

這樣節(jié)點(diǎn)就搭建好了

六、啟動節(jié)點(diǎn)

輸入命令:
geth --datadir data --syncmode full --port 2001 --networkid 1234 --rpc --rpcport "8545" --rpccorsdomain "*" --rpcaddr "0.0.0.0" --rpcapi "db,eth,net,web3,personal,admin,clique" --nodiscover console 進(jìn)入控制臺
--datadir data:節(jié)點(diǎn)的數(shù)據(jù)目錄
--syncmode full:塊同步的方式(若只是單節(jié)點(diǎn)可不填)
--port 2001: 網(wǎng)卡監(jiān)聽端口
--networkid 1234:網(wǎng)絡(luò)標(biāo)識符
--rpc:開啟rpc服務(wù)
--rpcport "8545":rpc服務(wù)的端口
--rpccorsdomain "*":允許跨域請求的域名列表(逗號分隔)(瀏覽器強(qiáng)制)
--rpcaddr "0.0.0.0" :HTTP-RPC服務(wù)器接口地址(默認(rèn)值:“l(fā)ocalhost”)
--rpcapi "db,eth,net,web3,personal,admin,clique":基于HTTP-RPC接口提供的API(私有鏈可以任意開發(fā),公有鏈需要謹(jǐn)慎)
--nodiscover:不允許節(jié)點(diǎn)自動加入

七、搭建聯(lián)盟鏈

若想搭建聯(lián)盟鏈,必須保證創(chuàng)世區(qū)塊一致,進(jìn)入到剛才創(chuàng)建的eth-private2的目錄
將之前生成的創(chuàng)世區(qū)塊拷貝過來,初始化創(chuàng)世區(qū)塊,然后使用啟動命令啟動分別啟動兩個節(jié)點(diǎn),進(jìn)入控制臺,使用admin.nodeInfo命令獲取節(jié)點(diǎn)的信息

image.png

然后保持不要退出,進(jìn)入第二個節(jié)點(diǎn)的控制臺,輸入admin.addPeer()將剛剛查看的節(jié)點(diǎn)信息,放到其中,并修改[::],將其改為節(jié)點(diǎn)1的ip地址,回車控制臺返回true,說明節(jié)點(diǎn)添加成功,
輸入admin.peer回車可以查看添加的節(jié)點(diǎn)的信息

到此,私有鏈搭建結(jié)束。

八、問題及總結(jié)

總結(jié):
兩個服務(wù)器部署兩個節(jié)點(diǎn)是可以聯(lián)通的,但是只能使用兩個節(jié)點(diǎn)對應(yīng)的地址進(jìn)行挖礦,所以只能是兩個節(jié)點(diǎn)對應(yīng)兩個地址進(jìn)行挖礦,使用poa共識,當(dāng)一個節(jié)點(diǎn)掛掉,挖礦停止,因?yàn)閜oa共識挖礦必須超過50%的節(jié)點(diǎn)進(jìn)行錢增,現(xiàn)在只是兩個節(jié)點(diǎn),掛掉一個節(jié)點(diǎn)挖礦就會停止等待另一個節(jié)點(diǎn)的確認(rèn),停掉的節(jié)點(diǎn)可以通過正常運(yùn)作的節(jié)點(diǎn)信息重新連接到網(wǎng)絡(luò)中。
問題:
同步塊有可能報錯情況:
1:Synchronisation failed "retrieved hash chain is invalid" 解決目前找到的方法是removedb 數(shù)據(jù)目錄 ,重新init創(chuàng)世區(qū)塊
2:內(nèi)存溢出初步確認(rèn)為開啟rpc服務(wù)造成的,有可能服務(wù)器惡意被黑,暴力破解密碼,占有內(nèi)存,解決,將服務(wù)器的ip設(shè)置一條防火墻

備注

若存在問題可給本人留言或訪問本人的github:https://github.com/qi-shuo/geth-document 記錄了一些本人搭建使用的命令

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容