3、私鏈多節(jié)點網(wǎng)絡

?首先啟動第一個節(jié)點,不明白的可以回到 - 以太坊私鏈網(wǎng)絡節(jié)點創(chuàng)建

geth --datadir /Users/jan/blockchain --networkid 15
啟動后

一、復制創(chuàng)世塊文件

創(chuàng)世區(qū)塊文件要一致,節(jié)點之間才能連通,先新建第二個節(jié)點的目錄

mkdir blockchain2

然后將第一個節(jié)點的genesis.json文件拷貝到 /blockchain2目錄下
初始化區(qū)塊

cd blockchain2
geth --datadir /Users/jan/blockchain2 init genesis.json
初始化完成

二、加入節(jié)點

加入前,首先要知道第一個節(jié)點的地址。新開一個控制臺并打開客戶端

geth attach /Users/jan/blockchain/geth.ipc
admin.nodeInfo
節(jié)點信息

其中enode項就是節(jié)點的地址,[::]表示本機,30303表示端口,有了節(jié)點地址就可以加入了,再新開一個控制臺,使用第一個節(jié)點的地址來啟動第二個節(jié)點

geth --datadir /Users/jan/blockchain2 --networkid 15 //注意網(wǎng)絡id要一致

打開第二個節(jié)點的客戶端

geth --networkid 15 --datadir /Users/jan/blockchain2  --rpcport 8989 --port 3000 --bootnodes "enode://1f81261cc68fbae7c42bc3aa8941dd15c0ae2d0e96e4e0eed124b2750ea82f0d2bdb3cf41eae470ec13526a3008db0c13830755b213716aafb6372235438b772@127.0.0.1:30303"

注意:兩個端口不能和第一個節(jié)點一樣,這里改成8989 和 3000,記得把[::]也改成127.0.0.1

節(jié)點啟動成功

打開第二個節(jié)點的客戶端

geth attach /Users/jan/blockchain2/geth.ipc

如何驗證是否已經(jīng)連通呢?

admin.peers
節(jié)點信息

發(fā)現(xiàn)第一個節(jié)點已經(jīng)連上,30303就是第一個節(jié)點的端口

三、交易

現(xiàn)在我要在兩個節(jié)點的賬戶進行轉(zhuǎn)賬,第一個節(jié)點上一章已經(jīng)創(chuàng)建好賬戶了,我們同樣需要在第二個節(jié)點創(chuàng)建一個

> personal.newAccount("123456") //密碼
"0x73814454b8b3958c8401976d29f2ef6fc632076a" //賬戶地址

為了方便操作,我們?yōu)橘~戶地址起個名字

//第一個節(jié)點控制臺:
> one=eth.accounts[0] //第一個賬戶地址后續(xù)用one代替
"0x6ffa66623115b4ec0a8f879f9ad06bc108585380"
//第二個節(jié)點控制臺:
> two=eth.accounts[0]//第二個賬戶地址后續(xù)用two代替
"0x73814454b8b3958c8401976d29f2ef6fc632076a"

接著看看one有多少幣

//第一個節(jié)點控制臺:
> eth.getBalance(one)
385000000000000000000  //余額,單位wei
//第二個節(jié)點控制臺:
> eth.getBalance(two)
0  //two余額這時候當然是0

我們將one的幣轉(zhuǎn)一個給two

eth.sendTransaction({from:one,to:"0x73814454b8b3958c8401976d29f2ef6fc632076a",value:web3.toWei(1)})
//from:交易發(fā)起人
//to:收款人
//value:金額,web3.toWei(1)表示一個以太幣,直接輸入數(shù)字默認單位為wei
轉(zhuǎn)賬失敗

執(zhí)行后輸出錯誤信息,根據(jù)提示可以知道大概知道賬號通常處于被鎖定狀態(tài),需要我們解鎖才能進行轉(zhuǎn)賬操作。

//第一個節(jié)點控制臺:
> personal.unlockAccount(one) //解鎖one賬戶
//執(zhí)行以上命令會提示輸入密碼
//第一個節(jié)點控制臺:
eth.sendTransaction({from:one,to:"0x73814454b8b3958c8401976d29f2ef6fc632076a",value:web3.toWei(1)})
執(zhí)行交易

輸出一行十六進制字符串,這個是交易的哈希碼,這個交易哈希非常重要,后面文章會介紹,現(xiàn)在只需要知道每一個交易都會有對應的交易哈希就行。

//第二個節(jié)點控制臺:
> eth.getBalance(two)
0

我們現(xiàn)在查詢第二個節(jié)點的余額,發(fā)現(xiàn)還是0,這是因為我們的這個交易沒有被任何礦工打包生成區(qū)塊,目前我們的網(wǎng)絡就兩個節(jié)點,但都沒有啟動挖坑,所以交易就一直處于pending狀態(tài)

//第二個節(jié)點控制臺:
> txpool.status
{
  pending: 1,
  queued: 0
}
//第一個節(jié)點控制臺:
> miner.start()
//為了方便查看,我們使用第一個節(jié)點挖坑
//第二個節(jié)點控制臺:
> eth.getBalance(two)
1000000000000000000

通過挖坑后,發(fā)現(xiàn)two的余額增加了,當然每一筆交易是需要手續(xù)費的,手續(xù)費由交易發(fā)起人付(也就是one)。你可能會問怎么余額數(shù)值這么大,之前說過這里的單位是wei,1e18wei才等于1個以太幣。除了wei,以太坊還有其他幾種單位:


圖片來源以太坊官網(wǎng)

通過這種方式去解鎖你的賬號是會存在風險的,前段時間就爆出黑客通過此漏洞盜取價值2千萬美金的代幣,大致攻擊流程是:全球掃描 8545、8546 端口,不斷重復調(diào)用 eth_sendTransaction,正好碰上賬號解鎖,將代幣轉(zhuǎn)賬到指定賬戶,這也是以太坊賬戶模型的一些缺陷。
能夠直接從節(jié)點解鎖賬戶,需要你的keystore文件存放在節(jié)點的keystore目錄下,這樣做是非常不安全的。通常做法是將你的keystore文件存放在線下,放到U盤或者其他硬件內(nèi),需要做轉(zhuǎn)賬時,提供密鑰對轉(zhuǎn)賬信息進行簽名,再把簽名數(shù)據(jù)發(fā)送到節(jié)點。后面我們會做這樣的一個小demo。

keystore文件目錄
加入節(jié)點其實還有兩種其他的方法:
  • 一種是直接啟動節(jié)點,然后通過 admin.addPeer命令加入
  • 另一種是在節(jié)點/geth目錄下創(chuàng)建一個static-nodes.json文件,這樣好處就是每次啟動自動加入配置的節(jié)點,文件內(nèi)容如下:
["enode://1cded6d08719c46e630a6a9a3d83f146a371326f239fb65c7f2e9081c9880496daf4cc61f9f011281d5708eb4cbcb07535aa16774ccae85c9731eecb75604a23@127.0.0.1:30303"]

最近趕項目比較忙,距離上一篇發(fā)文有段時間了,到目前,我們都只講了以太坊中最簡單的轉(zhuǎn)賬,下一篇將會將以太坊的核心功能:智能合約(smart contract)。

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

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

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