1. 程式人生 > >如何建立私鏈

如何建立私鏈

教程簡介:
本教程描述瞭如何搭建Ethereum私鏈用於在以太坊鏈上進行開發實驗。
建立私鏈的目的:
搭建私鏈的目的是方便在鏈上做實驗。在日常區塊鏈開發中當然可以使用公網主鏈,但是這樣會造成不必要的金錢浪費。因為在以太坊鏈上幹任何事都需要消耗gas。所以對於日常實驗性開發,一般都是在自己的私鏈上做實驗。
環境搭建:
本教程開發環境 
作業系統:Windows10
以太坊客戶端:Windows版Geth 1.6.7 
可以從這裡下載: 
https://gethstore.blob.core.windows.net/builds/geth-windows-amd64-1.7.0-6c6c7b2a.exe
如何建立私鏈:
建立創世配置檔案:
首先需要建立一個“創世”json配置檔案,此檔案描述了創世區塊的一些引數。下面就是檔案中的內容:

   

 {
       "coinbase": "0x0000000000000000000000000000000000000000",
       "config": {
              "homesteadBlock": 5
        },
       "difficulty": "0x20000",
       "extraData": "0x",
       "gasLimit": "0x2FEFD8",
       "mixhash": "0x00000000000000000000000000000000000000647572616c65787365646c6578",
       "nonce": "0x0",
       "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
       "timestamp": "0x00",
       "alloc": {
              "dbdbdb2cbd23b783741e8d7fcf51e459b497e4a6":
              {
                  "balance":"100000000000000000000000000000"
              }
       }
    }


將上面這段程式碼複製到一個文字檔案裡並起名為genesis.json 


創世!:
為了不和主鏈的資料衝突,這裡建議建立自己的私鏈資料資料夾。在我的電腦上在E盤建了一個EthDBSpace作為以太坊實驗工作區,並在裡面建立了一個PrivChain資料夾作為我的第一個私鏈的資料存放資料夾 
這裡為了方便管理將genesis.json放在了EthDBSpace資料夾下

開啟Windows命令列 

æå¼å½ä»¤è¡

鍵入如下命令
   

​​geth --identity"mydev" --rpc --rpccoradomain "*" datadir "E:\EthDBSpace\PrivChain" --rpcapi "db,eth,net.web3" --network 99 init "E:\EthDBSpace\genesis.json" 



–datadir 選項用來指定我們私鏈的資料目錄。在我的電腦上是E:\EthDBSpace\PrivChain 
init 命令為創世命令,後面緊跟著我們的創世配置檔案路徑。初始化改變network和identity就可以了,直接寫成.bat檔案

點選回車後執行結果如下 

è¿éåå¾çæè¿°

此時創世完成!
建立賬戶:
為了在私鏈上做實驗,我們還需要在私鏈上建立自己的賬戶

Windows命令列鍵入

geth --datadir "E:\EthDBSpace\PrivChain" --port 30303  --identity "mydev"   --rpccorsdomain "*"   --networkid 99  console 



我們由於已經創世成功所以第二次進入客戶端時我們不用再次指定genesis.json檔案路徑,而是直接–datadir 指明私鏈資料路徑即可。 
console命令用來開啟geth的命令列。

點選回車後,客戶端會先經過一陣初始化。在命令提示符出現後,說明已經進入geth console 

è¿éåå¾çæè¿°


在geth命令列中鍵入

        personal.newAccount('Your Password')
personal.newAccount 函式用來建立賬戶,其中引數為賬戶密碼

點選回車後會出現 

è¿éåå¾çæè¿°
賬戶建立成功後會在命令下方以綠色字元列明建立賬戶的地址,也即賬戶的公鑰

我們可以先查下賬戶餘額,在geth命令列中鍵入:

        my=eth.accounts[0]
        eth.getBalance(my)
my=eth.accounts[0],此句的目的是將我們剛建立的賬戶地址賦值給my變數。這樣可以簡化後續賬戶地址輸入。其中eth.accounts記錄了本機上所有賬戶地址。由於我們第一次建立賬戶,所以目前電腦上只有一個賬戶。所以這裡我們用eth.accounts[0]提取第一個賬戶地址。eth.getBalance函式用來獲得賬戶餘額,引數填入賬戶地址。這裡的my變數記錄的就是第一個賬戶的地址。

執行結果如下: 

è¿éåå¾çæè¿°

可以看到此時賬戶裡沒錢。在以太坊上轉賬、釋出合約、執行合約都需要費錢。而錢來自挖礦,下面我們先挖礦賺些錢。
挖礦賺錢:
目前的以太坊使用POW(Proof of Work)共識機制來激勵人們去維護賬本記賬。此機制的核心是系統出一道題,讓全網有意記賬節點來求解,第一個求解出題目答案的節點會獲得新區塊的記賬權並獲得eth作為獎勵。其中有意記賬的節點叫做礦工節點。下面我們在我們的私鏈上挖礦賺一些錢便於我們後續的轉賬實驗。

繼續在geth命令列鍵入如下命令開始挖礦:
        miner.start()
1
點選回車後會看見客戶端開始挖礦,命令列裡不斷顯示出塊進度 

è¿éåå¾çæè¿°

第一次需要初始化時間比較長並且無法stop
由於是私鏈,目前就一個節點在挖礦不存在競爭。所以開挖若干秒即可停止挖礦,挖得得錢已經可以進行後續實現。

鍵入如下命令停止挖礦

        miner.stop()
此時再次檢視我們的賬戶餘額
    eth.getBalance(my)
會看到我們的餘額多了一大筆錢,顯示的餘額以以太坊貨幣單位wei來計算。關於wei到eth的換算表參見http://www.ethdocs.org/en/latest/ether.html

轉賬實驗:
下面我們嘗試下在我們自己建立的私鏈上進行轉賬 
- 先建立第二賬戶,繼續在geth命令列鍵入如下命令

        personal.newAccount('123')
        other=eth.accounts[1]
將第二賬戶地址賦值給other變數,便於後續輸入

在轉賬前需要對轉出賬戶進行解鎖,繼續在geth命令列鍵入如下命令
        personal.unlockAccount(my)
由於目前是my賬戶中有錢,other賬戶沒錢,所以這裡解鎖我們的轉出賬戶my

回車後會提示輸入密碼,我這個賬戶的密碼為123,輸入後回車即可解鎖 

è¿éåå¾çæè¿°
開始轉賬,在geth命令列鍵入

        eth.sendTransaction({from:my, to:other, value:10000})
其中from為轉出賬戶,這裡我們輸入記錄了第一個賬戶地址的my變數 
to為轉入賬戶,這裡我們輸入記錄額第二個賬戶地址的other變數 
value指定了轉出金額,單位為wei,這裡我們轉出10000wei

鍵入後結果如下 

è¿éåå¾çæè¿°
可以看到轉賬請求已經提交

此時我們再次檢視兩個賬戶的餘額

        eth.getBalance(my)
        eth.getBalance(other)
查詢餘額結果如下: 

è¿éåå¾çæè¿°

此時會發現一個奇怪現象,前面的轉賬請求已經提交,為什麼兩個賬戶的餘額沒有發生任何變化?回想剛才我們講到的,以太坊使用POW共識激勵礦工記賬,而由於我們建立的是私鏈目前只有我們一個節點,所以此時並沒有其它節點參與記賬。所以我們需要通過挖礦把這筆轉賬記錄到塊中。

繼續挖礦,在geth 控制檯中鍵入

        miner.start()
等待挖一會後停止挖礦
        miner.stop()
再次查詢,發現轉賬已到位 

è¿éåå¾çæè¿°

以上的也可以通過mist或者Ethereum直接交易