網上關於如何搭建私鏈的文章很多,但是看來看去都是一樣的,千篇一律,想找點不一樣,新鮮的知識很難,本文總結歸納那些文章的內容,從使用私鏈的角度出發寫了一篇比較全面的博客,內容包含以下幾點:
- 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就行了
節點相關基本操作
- 查看賬戶
這時候是沒有賬戶的
- 創建賬戶
Passphrase是輸入密碼,下面的repeat passphrase是重複密碼,創建的賬戶地址是:
0x8b2bd44cec6caedcc0664f965d895a17db326e0a
這是我們會看到nodedata0文件夾下面的keystore下面會多出個文件,就是保存賬戶信息
再查看賬戶列表,發現有賬戶了
如果你記不清楚personal有哪些方法,可以執行personal命令查看一下,其它的eth,miner也一樣
- 啓動挖礦
miner.start()
看到null,不要慌,因爲你的日誌信息都保存到了geth.log文件裏了,下面這小圖標代表啥自己領會哈
挖了半天,到底挖了幾個區塊了?賺了多少以太幣了?看下面的查詢餘額和查看區塊數
另外說明一點,節點挖礦的以太幣會自動存入到eth.coinbase賬戶裏,默認是eth.accounts裏的第一個,你也可以自己指定coinbase
- 停止挖礦
- 查看賬戶餘額
eth.getBalance
eth.accounts[0]得到的是賬戶地址而已,你可能被這麼大的數值嚇一跳,怎麼這麼多以太幣?一個以太幣等於10的18次方個wei,這裏的數值是wei的個數,顯示以太幣的個數,可以用下面的命令,405個以太幣,如果是真的,簡直不要太爽,以太坊創始人V神以前肯定也在家裏這麼偷偷的挖了不少
- 查看區塊數
81個區塊,一個區塊獎勵5個以太幣
- 指定coinbase賬戶
先創建第二個賬戶,然後把第二個賬戶指定爲coinbase,修改之前和修改之後已經改變
- 轉賬
先創建第三個沒有幣的賬戶,從賬戶1轉5個比特幣到賬戶3裏,有的同學會問,不是有個賬戶2嗎,你怎麼不用呢?因爲轉賬發起了交易,然而發起交易僅僅是發起交易,交易要被確認需要打包進區塊裏,挖礦就是做這個的,挖礦本身的收益會存進coinbase賬戶裏,而現在coinbase賬戶是賬戶2,所以不考慮賬戶2
再查看coinbase賬戶2的餘額,不僅挖礦獎勵,連交易費都收了哦
- 退出
exit
驗證私鏈
寫了這麼多,一頓操作猛如虎,這個私鏈到底能不能用?
我們用remix驗證一樣,連接這個私鏈
賬戶和餘額信息會顯示出來,如果你的工具找不到你的私鏈,請確認啓動節點的參數中,有沒有設置 --rpccorsdomain "*"
單節點就寫到這裏,下面是多節點的內容
2.windows多節點
我們在上面已經創建了一個節點了,下面我們直接創建第二個節點,然後連接兩個節點,第二個節點的創建要滿足下面條件
- 創世區塊的信息得一樣
- 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節點建立連接
網上其它的文章都是先安裝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.祝好運!