要理解以太坊 PrivateNetwork 先要理解以太坊的兩種官方網路,目前以太坊官方提供了兩種網路: 生產環境網路 測試網路 TestNet
下面將分別簡單講解下這兩種網路。 以太坊生產網路
以太坊的生產網路顧名思義,也就是產生真正有價值的 的以太幣的網路。 目前生產網路目前已經產生了300萬以上的區塊,還在持續產生中。挖礦挖出來的每個以台幣在10美金以上。 生產環境下的以太坊狀態時如此的(截圖自2017-02-17)
生產環境網路優點 全球化的,部署在Internet環境上的, 智能合約的代碼,執行,區塊的調用,都可以清晰的查看到。 部署在生產環境上的智能合約,全世界任何應用都可以調用
缺點: 任何合約執行都會消耗真實的以太幣,也就是真實的現金。不適合開發、調試和測試, 所有節點是全球化的,速度較慢 且對於部分商業應用來說,只需要一部分節點,例如分布式部署的10-20台伺服器即可。而不需要遍布全球的網路。
以太坊測試網路 TestNet
以太坊的測試網路也是官方提供的,顧名思義就是專供使用者來開發、調試和測試的。 上面的合約執行不消耗真實的以太幣。也就是不花錢
所以如果開發簡單的智能合約的話,用測試網路也就足夠了,使用者可以把更多的精力集中在智能合約的編寫上。
但因為網路是官方提供的,因此對於以太坊技術的底層實現、Geth的各種參數介面、整個以太坊的技術真實效能的理解就會弱很多。所以從開發的角度來說,一個更好的選擇是Private Network,可以從技術的底層去深入理解以太坊。
測試環境網路優點 合約執行不消耗真實貨幣 全球化的,部署在Internet環境上的, 智能合約的代碼,執行,區塊的調用,都可以清晰的查看到。 部署在測試環境上的智能合約,全世界任何應用都可以調用
缺點: 所有節點是全球化的,速度較慢 測試網路不可能作為商業應用的實際落地環境
以太坊私人網路 PrivateNetwork
以太坊的私人網路,顧名思義就是由使用者自己通過Geth建立的私人網路,是一個非常適合開發、調試和測試的網路
優點 方便開發人員深入理解以太坊的技術底層 因為節點相對較少,速度較快 使用者可以隨時建立,隨時銷毀,隨時重建一個以太坊網路 隨意的增加節點數目,或者刪除節點, 既可以在伺服器上建立,也可以在自己的windows或者Mac機器上建立, 甚至一台機器可以建立多個節點,在一台機器上實現多節點的私人網路。
缺點 因為不是全球化的,只有在私人網路內的節點才能查看智能合約的執行、調用等。 下一章講解:實戰搭建私人網路。
在本章中我們將實戰如何使用Geth,如何搭建以太坊的私人網路。
之前說過Geth是三種實現以太坊協議的工具之一,由於Geth是官方推崇的以及個人精力有限,對於另外兩種工具的搭建私人網路,請參考網上資料。
下面的Geth實戰,在MacBook上實現,對於Windows方面,比較類似。
Step 1: 建立目錄和genesis.json
在命令列模式建立一個目錄,例如tmpPrivate
建立檔案genesis.json, 並填入如下內容。
{ "nonce": "0x0000000000000042", "timestamp": "0x0", "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "extraData": "0x0", "gasLimit": "0x80000000", "difficulty": "0x1", "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000", "coinbase": "0x3333333333333333333333333333333333333333", "alloc": { }}
使用者可以vim,也可以用其他編輯器如sublime等,個人推薦使用Atom
Atom 官網地址: https://atom.io/
Atom 是一個由Google支援發布的文字編輯器, 一個你可以自訂做任何事情的現代編輯器,後面涉及檔案和代碼示範會主要在Atom上執行。
建立完成後,在Atom中,本檔案夾下應該只有一個genesis.json
Step 2: 執行命令,建立創世區塊
切換回命令列,執行命令,製造創世區塊
geth --datadir "./" init genesis.json
執行結果如下:
這時候可以注意一下,此時目前的目錄下面會新增出兩個檔案夾geth和keystore geth中儲存的是區塊鏈的相關資料 keystore中儲存的是該鏈條中的使用者資訊
此時從Atom中看到的目錄結構是這樣的:
Step 3:建立自己的私人鏈條
執行一條最簡單的geth命令,來建立自己的私人鏈條
geth --datadir "./" --nodiscover console 2>>geth.log
geth的參數項目很多,有興趣的可以打geth –help 來獲得詳細資料,我們也會在之後的章節中對關鍵參數項進行說明。 此時的命令列應該是這樣的:
Step 4:在自己的私人鏈條上建立使用者
輸入命令eth.accounts, 我們會發現傳回值為[]
這是因為此時雖然以太坊的私人鏈已經被創造出來,但還沒有任何賬戶。 輸入命令personal.newAccount("xxx"), 該命令將創造一個新的使用者,該使用者的密碼是xxx. 當然使用者也可以將xxx 改為123,或者123456,或者任意密碼 再次輸入命令 eth.accounts, 我們會發現一個新的使用者被建立了出來,這就代表我們已經建立了一個賬戶,重複personal.newAccount() & eth.accounts 我們可以建立若干個賬戶出來
整個命令截圖如下:
Step 5: 輸出區塊鏈的Log
在Step 3中,我們執行的代碼
geth --datadir "./" --nodiscover console 2>>geth.log
其中的代碼 console 2>> geth.log 代表將控制台的一部分輸出,輸出到檔案geth.log上去。 開啟另一個終端,找到geth.log的所在目錄,執行命令 tail -f geth.log 從而持續的輸出以太坊的日誌
整個過程如下圖所示:
Step 6: 最重要的一步來了,開始挖礦。
在命令列中執行命令 miner.start(), 開始在我們的區塊鏈上進行挖礦
此時Geth.log的輸出應該是這樣的
一直等到100%。這個以太坊私人鏈就會正式啟動,並持續不斷的產生出以太坊來。 注意點: 1. 挖礦挖到的ether幣會預設保在第一個賬戶中,即eth.acccounts[0]中。 2. 挖礦是執行智能合約的基礎。如果停止挖礦的話,不僅以太幣會停止產生,所有智能合約的調用也會不起作用。 3. 如果真的要停止挖礦,可以執行命令miner.stop()來停止挖礦 4. 按上面的命令,應該是可以實現以太坊挖礦的。如果不行的話,有可能就是之前有存在的鏈,此時應該刪除之前的資料。在Mac下即刪除~/.ethash檔案夾和裡面的檔案即可 Step 7: 最終當挖礦啟動的時候的日誌是這樣的
Step 8: 挖礦啟動後,查看主賬戶的以太幣數量
acc0 = eth.accounts[0]eth.getBalance(acc0)
結果只要不為0,那就說明挖礦成功。
下一章,將講解geth中的若干概念,以及一些基本命令