教程簡介:
- 本教程描述瞭如何搭建Ethereum私鏈用於在以太坊鏈上進行開發實驗。
創建私鏈的目的:
- 搭建私鏈的目的是方便在鏈上做實驗。在日常區塊鏈開發中當然可以使用公網主鏈,但是這樣會造成不必要的金錢浪費。因爲在以太坊鏈上幹任何事都需要消耗gas。所以對於日常實驗性開發,一般都是在自己的私鏈上做實驗。
環境搭建:
- 本教程開發環境
- 操作系統:Windows10
- 以太坊客戶端:Windows版Geth 1.6.7
一、創建創世配置文件:
首先需要創建一個“創世”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 --datadir "E:\EthDBSpace\PrivChain" init "E:\EthDBSpace\genesis.json"
–datadir 選項用來指定我們私鏈的數據目錄。在我的電腦上是E:\EthDBSpace\PrivChain
init 命令爲創世命令,後面緊跟着我們的創世配置文件路徑。
點擊回車後執行結果如下:
創建賬戶:
爲了在私鏈上做實驗,我們還需要在私鏈上建立自己的賬戶
- Windows命令行鍵入
geth --datadir "E:\EthDBSpace\PrivChain" 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()
點擊回車後會看見客戶端開始挖礦,命令行裏不斷顯示出塊進度
由於是私鏈,目前就一個節點在挖礦不存在競爭。所以開挖若干秒即可停止挖礦,挖得得錢已經可以進行後續實現。
鍵入如下命令停止挖礦
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()
再次查詢,發現轉賬已到位
總結:
到此本節教程結束,此教程我主要介紹瞭如何搭建一個以太坊開發實驗環境,創建私鏈及在私鏈上挖礦轉賬。