搭建以太坊私鏈(單節點,多節點,windows,linux)

網上關於如何搭建私鏈的文章很多,但是看來看去都是一樣的,千篇一律,想找點不一樣,新鮮的知識很難,本文總結歸納那些文章的內容,從使用私鏈的角度出發寫了一篇比較全面的博客,內容包含以下幾點:

  • windows單節點
  • windows多節點
  • linux創建節點並,windows遠程使用linux節點
  • linux節點和Windows節點建立連接(網絡原因,提供思路)

1.windows單節點

安裝geth

下載地址:https://geth.ethereum.org/downloads/,下載之後是個 .exe文件,然後安裝就好了,安裝之後把geth的安裝目錄加入到系統環境變量的path裏。驗證是否安裝成功,打開cmd窗口,輸入 geth version 如果出來下面的內容,表示安裝好了。(如果不加任何任何參數直接運行 geth ,會自動連接到以太坊公網,此時會開始同步區塊


初始化創世區塊

新建個空文件夾,比如


然後在裏面創建個first.json文件,文件名隨意自己定吧,裏面的內容如下:

{
  "config": {
        "chainId": 10, 
        "homesteadBlock": 0,
        "eip155Block": 0,
        "eip158Block": 0
    },
  "alloc"      : {},
  "coinbase"   : "0x0000000000000000000000000000000000000000",
  "difficulty" : "0x20000",
  "extraData"  : "",
  "gasLimit"   : "0x2fefd8",
  "nonce"      : "0x0000000000000042",
  "mixhash"    : "0x0000000000000000000000000000000000000000000000000000000000000000",
  "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
  "timestamp"  : "0x00"
}

然後打開cmd窗口,跳轉到當前目錄下執行命令:

geth --datadir .\nodedata0 init first.json

上面的命令的主體是 geth init,表示初始化區塊鏈,命令可以帶有選項和參數,其中–datadir選項後面跟一個目錄名,這裏爲nodedata0,表示指定數據存放目錄爲 nodedata0, first.json是init命令的參數,就是剛纔創建的json文件


出現Successfully表示初始化成功了(把這行命令保存爲一個.cmd命令備用),這時候你會發現,你的目錄下面自動生成了一個nodedata0的文件夾,目錄如下:


其中geth/chaindata中存放的是區塊數據,keystore中存放的是賬戶數據。

啓動節點

執行命令:

geth --rpc --nodiscover --datadir  "./nodedata0"  --port 30303 --rpcapi "db,eth,net,web3" --rpccorsdomain "*" --networkid 1001 --ipcdisable console 2>>geth.log
參數說明
--nodiscover 關閉p2p網絡的自動發現,需要手動添加節點,這樣有利於我們隱藏私有網絡
--rpc 啓用ipc服務,默認端口號8545
--datadir 區塊鏈數據存儲目錄
--port 網絡監聽端口,默認30303
--rpcapi 表示可以通過ipc調用的對象
--rpccorsdomain 指定可以訪問APi的domain地址,設置爲“*”則任何地址都可以訪問,這樣做不安全
--networkid 網絡標識,私有鏈取一個大於4的隨意的值
console 打開一個可交互的javascript環境
2>>geth.log 把geth中的log信息導入geth.log,也可以不加這個,把信息直接輸出在console裏,這樣直觀
更多參數:https://github.com/ethereum/go-ethereum/wiki/Command-Line-Options
http://www.yaozihao.cn/2017/07/07/geth%E5%91%BD%E4%BB%A4%E9%80%89%E9%A1%B9%E4%BB%8B%E7%BB%8D/


出現javascript console說明節點啓動成功了,geth.log文件也生成了


把這啓動命令也保存start0.cmd命令,以後再啓動這個節點直接雙擊這個cmd就行了

節點相關基本操作

  • 查看賬戶

這時候是沒有賬戶的

  • 創建賬戶
personal.newAccount()


Passphrase是輸入密碼,下面的repeat passphrase是重複密碼,創建的賬戶地址是:

0x8b2bd44cec6caedcc0664f965d895a17db326e0a

這是我們會看到nodedata0文件夾下面的keystore下面會多出個文件,就是保存賬戶信息


再查看賬戶列表,發現有賬戶了


如果你記不清楚personal有哪些方法,可以執行personal命令查看一下,其它的eth,miner也一樣


  • 啓動挖礦

miner.start()


看到null,不要慌,因爲你的日誌信息都保存到了geth.log文件裏了,下面這小圖標代表啥自己領會哈


挖了半天,到底挖了幾個區塊了?賺了多少以太幣了?看下面的查詢餘額和查看區塊數

另外說明一點,節點挖礦的以太幣會自動存入到eth.coinbase賬戶裏,默認是eth.accounts裏的第一個,你也可以自己指定coinbase

  • 停止挖礦
miner.stop()

  • 查看賬戶餘額

eth.getBalance

eth.accounts[0]得到的是賬戶地址而已,你可能被這麼大的數值嚇一跳,怎麼這麼多以太幣?一個以太幣等於10的18次方個wei,這裏的數值是wei的個數,顯示以太幣的個數,可以用下面的命令,405個以太幣,如果是真的,簡直不要太爽,以太坊創始人V神以前肯定也在家裏這麼偷偷的挖了不少


  • 查看區塊數
eth.blockNumber

81個區塊,一個區塊獎勵5個以太幣

  • 指定coinbase賬戶

先創建第二個賬戶,然後把第二個賬戶指定爲coinbase,修改之前和修改之後已經改變


  • 轉賬

先創建第三個沒有幣的賬戶,從賬戶1轉5個比特幣到賬戶3裏,有的同學會問,不是有個賬戶2嗎,你怎麼不用呢?因爲轉賬發起了交易,然而發起交易僅僅是發起交易,交易要被確認需要打包進區塊裏,挖礦就是做這個的,挖礦本身的收益會存進coinbase賬戶裏,而現在coinbase賬戶是賬戶2,所以不考慮賬戶2


再查看coinbase賬戶2的餘額,不僅挖礦獎勵,連交易費都收了哦


  • 退出

exit


驗證私鏈

寫了這麼多,一頓操作猛如虎,這個私鏈到底能不能用?

我們用remix驗證一樣,連接這個私鏈





賬戶和餘額信息會顯示出來,如果你的工具找不到你的私鏈,請確認啓動節點的參數中,有沒有設置 --rpccorsdomain "*" 

單節點就寫到這裏,下面是多節點的內容

2.windows多節點

我們在上面已經創建了一個節點了,下面我們直接創建第二個節點,然後連接兩個節點,第二個節點的創建要滿足下面條件

  • 創世區塊的信息得一樣
就是要用一樣的.json配置文件初始化,因爲區塊鏈的本質就是所有節點記錄的賬本都是一樣的,所以第一個區塊的數據也得一致
  • rpcport 和 port參數必須和第一個不同

節點1 啓動的命令沒有這個參數rpcport,默認的值是8545,我們就用9545吧,port用30306

初始化創世區塊

geth --datadir .\nodedata1 init first.json

自動創建了存放節點數據的文件夾nodedata1



啓動節點

geth --rpc --rpcport 9545 --nodiscover --datadir  "./nodedata1"  --port 30306 --rpcapi "db,eth,net,web3" --rpccorsdomain "*" --networkid 1001 --ipcdisable console


nodiscover,ipcdisable,這兩個參數很關鍵,windows沒有ipcdisable參數,第二個節點啓動會報錯的。nodiscover讓節點2不會被節點1自動掃描到。

節點1和節點2建立連接

我們用節點2主動添加節點1,兩個節點只要一方主動建立連接就可以了,另一方會自動獲得這個連接關係的,效果一樣的

先查看節點1的enode信息,作爲節點2 admin.addPeer()方法的參數

節點1的console:


節點2的console:


再看節點1的console:



再用remix連接一下我們的節點2吧



windows多個節點的私鏈就是這樣了

3.linux創建節點並和windows節點建立連接

下載文件並上傳服務器解壓:https://geth.ethereum.org/downloads/
注意你的linux是多少位的就下載多少位的二進制文件,我的是32位的,我就下載32位的


然後把geth複製到/usr/bin目錄下面,我們就可以使用geth命令了,geth help,出現下的界面,表示成功。

網上其它的文章都是先安裝go語言,再下載geth源碼編譯安裝,最終的效果都是一樣的。



然後執行初始化區塊的命令:

geth --datadir nodedata2 init first.json
命令跟在windows差不多,自動生成的nodedata2文件夾也是一樣的


啓動節點,步驟跟在windous一樣

geth --rpc --rpcport 8545 --rpcaddr 65.49.132.28 --nodiscover --datadir  "/root/privatechain/nodedata2"  --port 30303 --rpcapi "db,eth,net,web3" --rpccorsdomain "*" --networkid 1001 --ipcdisable console

命令多了一個:

--rpcaddr 65.49.132.28

這個ip是linux服務器的地址,如果我們在windows本地想要訪問服務器的私鏈,這個參數得加上

已經啓動,我們可以在命令行窗口執行一些geth的命令


windows電腦上的remix訪問一下linux的私鏈:



一個賬戶,地址也是一樣的,it works。

額外操作:把啓動命令保存爲linux可運行文件,方便以後啓動



linux的私鏈運行成功了,接下來我們讓window的節點和linux的節點連接起來(因爲網絡原因沒實現,只有思路)

windows上已經有兩個節點了,現在我們的linux要訪問這兩個節點,所以這兩個節點的啓動命令得加上--rpcaddr這個參數,但是這部分實現不了了,因爲自己電腦連接的是路由器,直接用公網ip+端口號訪問不到自己的電腦,要在路由器上做端口映射才能讓服務器訪問到自己的電腦,我沒有路由器的登錄權限,所以做不了了

1.端口映射方法:http://service.tp-link.com.cn/detail_article_2441.html

2.節點建立連接方法應該跟windous連接點相連方法是一樣的,關鍵是節點啓動的時候加上--rpcaddr參數

3.祝好運!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章