區塊鏈技術--Geth 搭建私有網絡

Step 1: 建立目錄和genesis.json

  • 在命令行模式創建一個目錄,例如tmpPrivate

區塊鏈技術--Geth 搭建私有網絡

  • 創建文件genesis.json, 並填入如下內容。

    { "nonce": "0x0000000000000042", "timestamp": "0x0", "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "extraData": "0x0", "gasLimit": "0x80000000", "difficulty": "0x1", "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000", "coinbase": "0x3333333333333333333333333333333333333333", "alloc": { }}

    Atom 官網地址: https://atom.io/

創建完成後,在Atom中,本文件夾下應該只有一個genesis.json

區塊鏈技術--Geth 搭建私有網絡

Step 2: 執行命令,創建創世區塊

  • 切換回命令行,執行命令,製造創世區塊

    geth --datadir "./" init genesis.json

執行結果如下:

區塊鏈技術--Geth 搭建私有網絡

  • 這時候可以注意一下,此時當前目錄下面會新增出兩個文件夾geth和keystore

geth中保存的是區塊鏈的相關數據

keystore中保存的是該鏈條中的用戶信息

此時從Atom中看到的目錄結構是這樣的:

區塊鏈技術--Geth 搭建私有網絡

Step 3:創建自己的私有鏈條

  • 執行一條最簡單的geth命令,來創建自己的私有鏈條

    geth --datadir "./" --nodiscover console 2>>geth.log

    geth的參數項目很多,有興趣的可以打geth –help 來獲得詳細信息,我們也會在之後的章節中對關鍵參數項進行說明。

  • 此時的命令行應該是這樣的:

區塊鏈技術--Geth 搭建私有網絡

Step 4:在自己的私有鏈條上創建用戶

  • 輸入命令eth.accounts, 我們會發現返回值為[]

這是因為此時雖然以太坊的私有鏈已經被創造出來,但還沒有任何賬戶。

  • 輸入命令personal.newAccount("xxx"), 該命令將創造一個新的用戶,該用戶的密碼是xxx. 當然用戶也可以將xxx 改為123,或者123456,或者任意密碼

  • 再次輸入命令 eth.accounts, 我們會發現一個新的用戶被創建了出來,這就代表我們已經創建了一個賬戶,重複personal.newAccount() &eth.accounts 我們可以創建若干個賬戶出來

整個命令截圖如下:

區塊鏈技術--Geth 搭建私有網絡

Step 5: 輸出區塊鏈的Log

  • 在Step 3中,我們執行的代碼

    geth --datadir "./" --nodiscover console 2>>geth.log

    其中的代碼 console 2>> geth.log 代表將控制檯的一部分輸出,輸出到文件geth.log上去。

  • 打開另一個終端,找到geth.log的所在目錄,執行命令

    tail -f geth.log 從而持續的輸出以太坊的日誌

整個過程如下圖所示:

區塊鏈技術--Geth 搭建私有網絡

Step 6: 最重要的一步來了,開始挖礦!

  • 在命令行中執行命令 miner.start(), 開始在我們的區塊鏈上進行挖礦

區塊鏈技術--Geth 搭建私有網絡

  • 此時Geth.log的輸出應該是這樣的

區塊鏈技術--Geth 搭建私有網絡

一直等到100%。這個以太坊私有鏈就會正式啟動,並持續不斷的生成出以太坊來。

注意點:

1. 挖礦挖到的ether幣會默認保在第一個賬戶中,即eth.acccounts[0]中。

2. 挖礦是執行智能合約的基礎。如果停止挖礦的話,不僅以太幣會停止生成,所有智能合約的調用也會不起作用。

3. 如果真的要停止挖礦,可以執行命令miner.stop()來停止挖礦

4. 按上面的命令,應該是可以實現以太坊挖礦的。如果不行的話,有可能就是之前有存在的鏈,此時應該刪除之前的數據。在Mac下即刪除~/.ethash文件夾和裡面的文件即可

Step 7: 最終當挖礦啟動的時候的日誌是這樣的

區塊鏈技術--Geth 搭建私有網絡

Step 8: 挖礦啟動後,查看主賬戶的以太幣數量

acc0 = eth.accounts[0]eth.getBalance(acc0)

結果只要不為0,那就說明挖礦成功!

區塊鏈技術--Geth 搭建私有網絡

geth --datadir "./" --nodiscover console 2>>geth.log

進入命令行模式,其中參數

  • –datadir 代表文件夾地址,

  • –nodiscover 代表該鏈條不希望被其他節點發現,

  • console >> geth.log 代表將控制檯輸出到文件geth.log中去

當然從命令行模式退出,也很簡單,只要打入exit, 即可退出

Geth命令行中的Eth.accounts

我們在命令行輸入 eth.accounts 可以看到當前該區塊鏈中共有幾個賬號,以及每個賬號的公鑰地址。

區塊鏈技術--Geth 搭建私有網絡

這裡就要說到以太坊的賬戶體系了,

在以太坊系統中,狀態是由被稱為“賬戶”(每個賬戶由一個20字節的地址)的對象和在兩個賬戶之間轉移價值和信息的狀態轉換構成的。以太坊的賬戶包含四個部分:

  • 隨機數,用於確定每筆交易只能被處理一次的計數器

  • 賬戶目前的以太幣餘額

  • 賬戶的合約代碼,如果有的話

  • 賬戶的存儲(默認為空)

簡單地說,每一個以太坊賬戶都有一對公鑰和私鑰組成。

  • 公鑰我們可以理解為就是賬戶地址,任何其他賬戶都可以訪問該地址

  • 私鑰可以理解為一段加密過的密碼,這一對公鑰和私鑰共同組成一個唯一標示的以太坊賬戶。

例如在上節我們建立的第一個以太坊賬戶 eth.accounts[0] 中,地址 0xbcf5b841303bc08026ce2d3b8f83498ffe42c12f 就是公鑰,而對密碼加密而成的,就是私鑰。

如何新增賬戶

我們可以輸入命令 personal.newAccount("123") 來新建一個賬戶,(注意123可以修改為任何別的密碼)

區塊鏈技術--Geth 搭建私有網絡

這個時候我們可以看到除了第一個賬戶0xbcf5b841303bc08026ce2d3b8f83498ffe42c12f之外,還新增了另一個賬戶0xb8b12a801b610176935a15321f77b48dd5c0c448, 此時輸入eth.accounts, 就可以很輕鬆的看到有兩個賬戶的公鑰地址。

如何獲取賬戶的以太幣餘額

在上一章中我們說過,當以太坊的私鏈在挖礦時候,所挖到的以太幣都會存入第一個以太坊賬戶中,即eth.accounts[0] 中,而eth.accounts[1]默認是不會有以太幣的。這個時候我們可以用下面的命令來查看eth.accounts[0] 中的以太幣餘額。

eth.getBalance("0xbcf5b841303bc08026ce2d3b8f83498ffe42c12f")eth.getBalance("0xb8b12a801b610176935a15321f77b48dd5c0c448")
  • 其中0xbcf5b841303bc08026ce2d3b8f83498ffe42c12f是第一個賬戶的地址,

  • 0xb8b12a801b610176935a15321f77b48dd5c0c448 是第二個賬戶的地址 結果如下:

    區塊鏈技術--Geth 搭建私有網絡

從上我們可以看得很清楚,挖礦得來的以太幣都進了第一個賬戶,同時每個賬戶的公鑰是該賬戶的核心。通過公鑰我麼可以對該賬戶的以太幣進行增刪改查各種操作

如何在兩個賬戶之間進行以太幣轉換

前面說過每個賬戶的公鑰(地址)是一切以太坊賬戶操作的核心,但地址字符串太長,我們用acc0/acc1 分別代表accounts[0]和[1],另外設置要轉移0.01個以太幣

> acc0 = eth.accounts[0]"0xbcf5b841303bc08026ce2d3b8f83498ffe42c12f"> acc1 = eth.accounts[1]"0xb8b12a801b610176935a15321f77b48dd5c0c448"> amount = web3.toWei(0.01)"10000000000000000"

這個時候我們可以使用eth.sendTransaction來將0.01個以太幣從acc0轉移到acc1中。

> eth.sendTransaction({from: acc0, to: acc1, value: amount})

結果如下:

區塊鏈技術--Geth 搭建私有網絡

這個是以太坊的一個保護機制,每隔一段時間賬戶就會自動鎖定,這個時候任何以太幣在賬戶之間的轉換都會被拒絕,除非把該賬戶解鎖.

這個時候我們就需要執行 personal.unlockAccount(acc0) 並輸入密碼來解鎖acc0才可。

> personal.unlockAccount(acc0)Unlock account 0xbcf5b841303bc08026ce2d3b8f83498ffe42c12fPassphrase:true>

這個時候我們重新執行命令eth.sendTransaction({from: acc0, to: acc1, value: amount}), 結果如下:

> eth.sendTransaction({from: acc0, to: acc1, value: amount})"0xeea74dd5ff3f1287614d52ebb674edb93e8c5e51e4296835044d3d858d3d9f10"> eth.getBalance(acc1)10000000000000000>

我們可以看到這個時候acc1有了數值10000000000000000, 而不再是之前的0了。但我們明明要給0.01ether幣的,為何數值會如此大呢? 其實是對的,我們只要輸入命令web3.fromWei(10000000000000000,"ether") 就可以知道了。

> web3.fromWei(10000000000000000,"ether")"0.01"


分享到:


相關文章: