以太坊通過bootnode多節(jié)點(diǎn)連接,包含一個(gè)云主機(jī)

下面將要?jiǎng)?chuàng)建3個(gè)節(jié)點(diǎn)震贵,節(jié)點(diǎn)1和2在本地主機(jī)庶橱,節(jié)點(diǎn)3在云主機(jī)

1.準(zhǔn)備創(chuàng)世區(qū)塊文件

{
  "config": {
    "chainID": 1024,
    "homesteadBlock": 0,
    "eip155Block": 0,
    "eip158Block": 0
  },
  "alloc": {},
  "coinbase": "0x0000000000000000000000000000000000000000",
  "difficulty": "0x0400",
  "extraData": "0x00",
  "gasLimit": "0x2100000",
  "nonce": "0x0000000000000042",
  "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "timestamp": "0x00"
}

1.2 創(chuàng)建創(chuàng)世塊
下面要用上面的genesis.json創(chuàng)建一個(gè)創(chuàng)世塊。運(yùn)行下面的命令分別創(chuàng)建三個(gè)相同創(chuàng)世塊忱详,指定不同目錄拟赊。
本地主機(jī):
geth --datadir "date0" init genesis.json
geth --datadir "date1" init genesis.json
云主機(jī):
geth --datadir "date2" init genesis.json

以后就用上面的數(shù)據(jù)庫文件夾啟動(dòng)節(jié)點(diǎn)。

2.1 啟動(dòng)bootnode
2.1.1 什么是bootnode?
bootnode簡(jiǎn)化了Ethereum客戶端實(shí)現(xiàn)草慧,它只參與網(wǎng)絡(luò)節(jié)點(diǎn)發(fā)現(xiàn)協(xié)議桶蛔,但不運(yùn)行任何高級(jí)應(yīng)用程序協(xié)議。它可以用作輕量級(jí)的引導(dǎo)節(jié)點(diǎn)漫谷,以幫助在私有網(wǎng)絡(luò)中找到對(duì)等點(diǎn)仔雷。
總而言之,就是一個(gè)用于節(jié)點(diǎn)發(fā)現(xiàn)或者說節(jié)點(diǎn)引導(dǎo)的輕量節(jié)點(diǎn)舔示,方便聯(lián)盟鏈的搭建~
bootnode的可執(zhí)行文件和geth處于同一目錄下碟婆,前面配置了系統(tǒng)環(huán)境變量的話就可以全局用bootnode命令了。
2.1.2 啟動(dòng)bootnode
先生成一個(gè)key惕稻,生成之后下次啟動(dòng)bootnode就不用再特意生成key了脑融,直接用已有的key
bootnode --genkey=boot.key
然后指定nodekey來啟動(dòng)bootnode:
bootnode -addr=172.16.5.205:30301 --nodekey=boot.key
上面的命令運(yùn)行完,會(huì)打印出類似下面的log:

enode://6c85f006a00960cc2c2c2dce10a47766ab7bd7fc854c45dd7ff89573dc4b55adf18e323edf0c0d0b2b184af773c7b126df8f8cd5a46e7d1e131003586e2b2a2c@172.16.5.205:0?discport=30301

encode后面的這么一長(zhǎng)串東西缩宜,就是這個(gè)節(jié)點(diǎn)的ID信息,下面啟動(dòng)geth節(jié)點(diǎn)的時(shí)候要指定連接這個(gè)bootnode~

2.2 啟動(dòng)節(jié)點(diǎn) 0

geth --networkid="1024" --identity "zhangsan" --rpc --rpcport "8545" --datadir data0 --port "30303" --rpcaddr 172.16.5.205 --bootnodes "enode://6c85f006a00960cc2c2c2dce10a47766ab7bd7fc854c45dd7ff89573dc4b55adf18e323edf0c0d0b2b184af773c7b126df8f8cd5a46e7d1e131003586e2b2a2c@172.16.5.205:30301" --rpccorsdomain="*" console 2>>zhangsan.log

注意到甥温,我們把bootnode里面的0.0.0.0改成了bootnode所在機(jī)器的IP地址锻煌,如果其他機(jī)子要起節(jié)點(diǎn)的時(shí)候才能找到我們起的bootnode。
上面的命令的主體是geth console姻蚓,這個(gè)命令就啟動(dòng)了一個(gè)節(jié)點(diǎn)并進(jìn)入到它的交互模式宋梧,可以調(diào)用相應(yīng)的API查看這條私鏈上的所有信息。輸入exit命令狰挡,退出且節(jié)點(diǎn)就不再運(yùn)行捂龄。下面嘗試解釋一下其他參數(shù)的含義,具體可以運(yùn)行g(shù)eth --help查看加叁。

選項(xiàng) 解釋
identity 自定義節(jié)點(diǎn)的名字倦沧,方便節(jié)點(diǎn)中互相辨認(rèn)識(shí)別
rpc 啟用HTTP-RPC服務(wù)器
rpcport HTTP-RPC服務(wù)器監(jiān)聽端口(默認(rèn)值:8545)
datadir 數(shù)據(jù)庫目錄
port 網(wǎng)絡(luò)監(jiān)聽端口(默認(rèn)值:30303)
bootnodes 逗號(hào)分隔的enode url,用于P2P發(fā)現(xiàn)引導(dǎo)
networkid 網(wǎng)絡(luò)標(biāo)識(shí)符(整型, 1=Frontier, 2=Morden (棄用), 3=Ropsten, 4=Rinkeby) (默認(rèn): 1)
rpccorsdomain 允許跨域請(qǐng)求的域名列表(逗號(hào)分隔)它匕,這里的*允許所有主機(jī)連接展融,不建議這么寫,可以指定具體例如:http://10.222.49.22:3000, http://10.222.49.22:3001

2.3 加入已有私鏈(組成聯(lián)盟鏈)
如果有已知節(jié)點(diǎn)在跑著了豫柬,我們想加進(jìn)去它所在的網(wǎng)絡(luò)告希,那該怎么辦扑浸?首先明確一點(diǎn):
Connections between nodes are valid only if peers have identical protocol version and network ID. 節(jié)點(diǎn)間要建立有效連接,當(dāng)且僅當(dāng)節(jié)點(diǎn)間有著相同版本的協(xié)議和網(wǎng)絡(luò)ID燕偶。
問題來了喝噪,怎么查看節(jié)點(diǎn)的協(xié)議版本和網(wǎng)絡(luò)ID?在節(jié)點(diǎn)交互模式中, 輸入下面命令:
admin.nodeInfo.protocols

可以看到輸出:

{
  eth: {
    config: {
      chainId: 1024,
      eip150Hash: "0x0000000000000000000000000000000000000000000000000000000000000000",
      eip155Block: 0,
      eip158Block: 0,
      homesteadBlock: 0
    },
    difficulty: 3154880,
    genesis: "0x2a25e92d4ed5cfe7e813c3088612487265f63595dce2443f8b28d6d0988a7f70",
    head: "0xb257b5489876646581da8f97d8fcf79564d77a877003e1f8e79f7e5b95f64513",
    network: 1024
  }
}

其中networkid是我們啟動(dòng)節(jié)點(diǎn)的時(shí)候參數(shù)--networkid=1024指定的指么,那genesis和head怎么指定呢酝惧?答案就是:使用相同的genesis.json文件初始化區(qū)塊鏈!
所以涧尿,要想加入已有私鏈系奉,首先拿到同樣的genesis.json創(chuàng)建創(chuàng)世塊,然后使用相同的networkid啟動(dòng)節(jié)點(diǎn)姑廉。
當(dāng)準(zhǔn)備好相同的創(chuàng)世塊缺亮,就可以申請(qǐng)加入已有網(wǎng)絡(luò)啦。這里列舉兩種方式:

通過指定相同的bootnode 啟動(dòng)節(jié)點(diǎn) 2:

geth --networkid="1024" --identity "lisi" --rpc --rpcport "8546" --datadir data1 --port "30304" --rpcaddr 172.16.5.205 --bootnodes "enode://6c85f006a00960cc2c2c2dce10a47766ab7bd7fc854c45dd7ff89573dc4b55adf18e323edf0c0d0b2b184af773c7b126df8f8cd5a46e7d1e131003586e2b2a2c@172.16.5.205:30301" --rpccorsdomain="*" console 2>>lisi.log

這樣就可以和其他節(jié)點(diǎn)建立連接啦桥言。起來之后萌踱,可以通過命令net.peerCount查看已經(jīng)建立連接的節(jié)點(diǎn)數(shù)。要查看更具體的節(jié)點(diǎn)連接信息号阿,可以輸入:
admin.peers

結(jié)果:

[{
    caps: ["eth/63"],
    enode: "enode://103fbfa6133d7efbec4e8cc3132b16a1f342a51570ed2171a12663b9d3d07675884d8dde7ce71a7a3a3bdfab4f9c79596980800096e4f0dc12390f8db7c07f23@172.16.5.205:59618",
    id: "7d1a2e71e4b570b48c8be2324c25cfea1ae6cff59fe85073b0c117af164fb941",
    name: "Geth/lisi/v1.9.1-unstable-25215091-20190711/linux-amd64/go1.10.3",
    network: {
      inbound: true,
      localAddress: "172.16.5.205:30303",
      remoteAddress: "172.16.5.205:59618",
      static: false,
      trusted: false
    },
    protocols: {
      eth: {
        difficulty: 1024,
        head: "0x2a25e92d4ed5cfe7e813c3088612487265f63595dce2443f8b28d6d0988a7f70",
        version: 63
      }
    }
}]

可以看到打印出一個(gè)長(zhǎng)度為1數(shù)組并鸵,里面是節(jié)點(diǎn)的具體信息。

2.3 云主機(jī)節(jié)點(diǎn)加入有私鏈
通過指定相同的bootnode 啟動(dòng)節(jié)點(diǎn) 3:

geth --networkid="1024" --identity "aliyun" --rpc  --rpcport "8547" --datadir data2 --port "30305" --bootnodes "enode://6c85f006a00960cc2c2c2dce10a47766ab7bd7fc854c45dd7ff89573dc4b55adf18e323edf0c0d0b2b184af773c7b126df8f8cd5a46e7d1e131003586e2b2a2c@127.0.0.1:1112" --rpccorsdomain="*" console 2>>aliyun.log

注:(由于云主機(jī)訪問不通本地扔涧,需要在xshell中設(shè)置轉(zhuǎn)移規(guī)則园担,我設(shè)置的 127.0.0.1:1112 ->172.16.5.205:30301)

我這里啟動(dòng)后admin.peers一直未查到連接信息,暫未找到原因
后面通過手動(dòng)方式添加 成功

手動(dòng)添加節(jié)點(diǎn)
首先枯夜,要得到你準(zhǔn)備要握手的節(jié)點(diǎn)的信息:
admin.nodeInfo.enode

結(jié)果:

"enode://59787b1c750610926c1ea5731e6623d781265c655132fcabe2922d1a0648bce1cd80f8ecd6172725549d8695e75a9bb86e300b6bff4eb0f50c198731bad37205@127.0.0.1:30303"

把127.0.0.1改成對(duì)方的真實(shí)IP弯汰,然后回到我們自己的節(jié)點(diǎn)手動(dòng)添加:

admin.addPeer("enode://59787b1c750610926c1ea5731e6623d781265c655132fcabe2922d1a0648bce1cd80f8ecd6172725549d8695e75a9bb86e300b6bff4eb0f50c198731bad37205@127.0.0.1:1113");

注:(由于云主機(jī)訪問不通本地,需要在xshell中設(shè)置轉(zhuǎn)移規(guī)則湖雹,我設(shè)置的 127.0.0.1:1113 ->172.16.5.205:30303)

再輸入admin.peers確認(rèn)是否添加成功咏闪。
完成后,任意一個(gè)節(jié)點(diǎn)挖礦miner.start(),另一個(gè)節(jié)點(diǎn)都會(huì)同步摔吏「肷可以通過eth.blockNumber查看區(qū)塊鏈上的區(qū)塊數(shù)量。要停止挖礦征讲,miner.stop()据某。
至此,搭建完畢稳诚!

參考:
https://blog.csdn.net/qq_43701231/article/details/84870889
http://www.reibang.com/p/1568a8097d7e

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末哗脖,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌才避,老刑警劉巖橱夭,帶你破解...
    沈念sama閱讀 218,451評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異桑逝,居然都是意外死亡棘劣,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門楞遏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來茬暇,“玉大人,你說我怎么就攤上這事寡喝〔谒祝” “怎么了?”我有些...
    開封第一講書人閱讀 164,782評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵预鬓,是天一觀的道長(zhǎng)巧骚。 經(jīng)常有香客問我,道長(zhǎng)格二,這世上最難降的妖魔是什么劈彪? 我笑而不...
    開封第一講書人閱讀 58,709評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮顶猜,結(jié)果婚禮上沧奴,老公的妹妹穿的比我還像新娘。我一直安慰自己长窄,他們只是感情好滔吠,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,733評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著挠日,像睡著了一般屠凶。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上肆资,一...
    開封第一講書人閱讀 51,578評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音灶芝,去河邊找鬼郑原。 笑死,一個(gè)胖子當(dāng)著我的面吹牛夜涕,可吹牛的內(nèi)容都是我干的犯犁。 我是一名探鬼主播,決...
    沈念sama閱讀 40,320評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼女器,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼酸役!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,241評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤涣澡,失蹤者是張志新(化名)和其女友劉穎贱呐,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體入桂,經(jīng)...
    沈念sama閱讀 45,686評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡奄薇,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,878評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了抗愁。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片馁蒂。...
    茶點(diǎn)故事閱讀 39,992評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖蜘腌,靈堂內(nèi)的尸體忽然破棺而出沫屡,到底是詐尸還是另有隱情,我是刑警寧澤撮珠,帶...
    沈念sama閱讀 35,715評(píng)論 5 346
  • 正文 年R本政府宣布沮脖,位于F島的核電站,受9級(jí)特大地震影響劫瞳,放射性物質(zhì)發(fā)生泄漏倘潜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,336評(píng)論 3 330
  • 文/蒙蒙 一志于、第九天 我趴在偏房一處隱蔽的房頂上張望涮因。 院中可真熱鬧,春花似錦伺绽、人聲如沸养泡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽澜掩。三九已至,卻和暖如春杖挣,著一層夾襖步出監(jiān)牢的瞬間肩榕,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工惩妇, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留株汉,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,173評(píng)論 3 370
  • 正文 我出身青樓歌殃,卻偏偏與公主長(zhǎng)得像乔妈,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子氓皱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,947評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容