區塊鏈開發(一)搭建基於以太坊的私人鏈環境__區塊鏈

來源:互聯網
上載者:User

    區塊鏈開發(一)搭建基於以太坊的私人鏈環境

    李赫 2016.07.08

    通過本文所述方法和項目中的指令碼,我們可以快速的搭建好自己的私人鏈進行區塊鏈開發測試,本文基於以太坊技術進行搭建,分兩個部分,一個是Ubuntu下搭建方法,另一個是Windwos下搭建方法,關於以太坊相關的基礎知識,可以看我原先發表的一些文章,地址如下:    http://blog.csdn.net/sportshark

 

一、   Ubuntu下安裝Geth用戶端

    之所以採用Ubuntu,是因為以太坊的官方對Ubuntu支援的很好,是在各個linux系統中安裝最簡單。

    Geth官方安裝指南:

    https://github.com/ethereum/go-ethereum/wiki/Building-Ethereum

    進入ubuntu命令列,執行如下命令

 

sudo apt-get update

sudo apt-get installsoftware-properties-common

sudo add-apt-repository -yppa:ethereum/ethereum

sudo add-apt-repository -yppa:ethereum/ethereum-dev

sudo apt-get update

sudo apt-get install ethereum

 

    系統連網執行後,即完成了安裝以太坊用戶端,其中包括geth,bootnode, evm, disasm, rlpdump,ethtest

    此時如果輸入Geth命令,會出現啟動以太坊啟動的畫面

 

二、       安裝Windows下Geth用戶端

    Windows必須64位系統,從官方網站下載編譯好的win64用戶端,解壓縮即可運行,下載地址如下:

    https://github.com/ethereum/go-ethereum/releases/

    下載後,只有一個Geth.exe的檔案。

    安裝映像化用戶端Mist,依然是從官方地址下載編譯好的用戶端即可,下載地址:

    https://github.com/ethereum/mist/releases/

    下載解壓縮後,Ethereum-Wallet即為以太坊圖形化介面。

 

三、       準備創世塊檔案

    配置自己的創世塊是為了區分公有鏈,同一個網路中,創世塊必須是一樣的,否則無法聯通,此方法在windows和Ubuntu下通用。

    建立檔案piccgenesis.json,輸入如下內容並儲存

{

    "nonce":"0x0000000000000042",

    "mixhash":"0x0000000000000000000000000000000000000000000000000000000000000000",

    "difficulty": "0x4000",

    "alloc": {},

    "coinbase":"0x0000000000000000000000000000000000000000",

    "timestamp": "0x00",

    "parentHash":"0x0000000000000000000000000000000000000000000000000000000000000000",

    "extraData": "PICC GenesisBlock",

    "gasLimit":"0xffffffff"

}

 

    解釋一下各個參數的作用:

 

mixhash

與nonce配合用於挖礦,由上一個區塊的一部分產生的hash。注意他和nonce的設定需要滿足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章節所描述的條件。.

nonce

nonce就是一個64位隨機數,用於挖礦,注意他和mixhash的設定需要滿足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章節所描述的條件。

difficulty

設定當前區塊的難度,如果難度過大,cpu挖礦就很難,這裡設定較小難度

alloc

用來預置帳號以及帳號的以太幣數量,因為私人鏈挖礦比較容易,所以我們不需要預置有幣的帳號,需要的時候自己建立即可以。

coinbase

礦工的帳號,隨便填

timestamp

設定創世塊的時間戳記

parentHash

上一個區塊的hash值,因為是創世塊,所以這個值是0

extraData

附加資訊,隨便填,可以填你的個性資訊

gasLimit

該值設定對GAS的消耗總量限制,用來限制區塊能包含的交易資訊總和,因為我們是私人鏈,所以填最大。

 

四、       啟動私人鏈節點

    啟動Geth即可以啟動以太坊的區塊鏈,為了構建私人鏈 ,需要在Geth啟動時加入一些參數,Geth參數含義如下: 

identity

區塊鏈的標示,隨便填寫,用於標示目前網路的名字

init

指定創世塊檔案的位置,並建立初始塊

datadir

設定當前區塊鏈網路資料存放的位置

port

網路監聽連接埠

rpc

啟動rpc通訊,可以進行智能合約的部署和調試

rpcapi

設定允許串連的rpc的用戶端,一般為db,eth,net,web3

networkid

設定當前區塊鏈的網路ID,用於區分不同的網路,是一個數字

console

啟動命令列模式,可以在Geth中執行命令

 

1、  在Ubuntu啟動區塊鏈節點

    在Ubuntu下,首先切換到打算啟動並執行目錄,目錄下應該有配置好的piccgenesis.json檔案,執行如下命令

basepath=$(cd `dirname $0`; pwd)

擷取當前的目錄

geth  --datadir "$basepath/chain" init piccgenesis.json 

建立資料存放地址並初始化創世塊

geth --identity"PICCetherum"  --rpc  --rpccorsdomain "*" --datadir "$basepath/chain" --port "30303"  --rpcapi "db,eth,net,web3"--networkid 95518 console

    啟動後介面如下,游標停留在最後的命令列上,可以執行以太坊命令。

I0707 00:45:43.680087 ethdb/database.go:82]Alloted 128MB cache and 1024 file handles to /home/lihe/案頭/chain/chaindata

I0707 00:45:43.726008ethdb/database.go:169] closed db:/home/lihe/案頭/chain/chaindata

I0707 00:45:43.728913 ethdb/database.go:82]Alloted 128MB cache and 1024 file handles to /home/lihe/案頭/chain/chaindata

I0707 00:45:43.908795 ethdb/database.go:82]Alloted 16MB cache and 16 file handles to /home/lihe/案頭/chain/dapp

I0707 00:45:43.969506 core/genesis.go:92]Genesis block already in chain. Writing canonical number

I0707 00:45:43.980337 eth/backend.go:274]Successfully wrote custom genesis block:6e92f8b23bcdfdf34dc813cfaf1d84b71beac80530506b5d63a2df10fe23a660

I0707 00:45:43.980618 eth/backend.go:184]Protocol Versions: [63 62], Network Id: 95518

I0707 00:45:43.981567core/blockchain.go:204] Last header: #81 [6193c4b0…] TD=10836704

I0707 00:45:43.981645core/blockchain.go:205] Last block: #81 [6193c4b0…] TD=10836704

I0707 00:45:43.981677core/blockchain.go:206] Fast block: #81 [6193c4b0…] TD=10836704

I0707 00:45:43.985253 p2p/server.go:313]Starting Server

I0707 00:45:45.834488p2p/discover/udp.go:217] Listening,enode://134881790e54c803955715e3661c27f91caaf499be813e29c9f986e2eac62d47e02b13a8e51776c1caea554655614ed26ce0185d84e626da7ac48a83a60113ff@[::]:30303

I0707 00:45:45.835853 node/node.go:366]HTTP endpoint opened: http://localhost:8545

I0707 00:45:45.848008 p2p/server.go:556]Listening on [::]:30303

I0707 00:45:45.849731 node/node.go:296] IPCendpoint opened: /home/lihe/案頭/chain/geth.ipc

Welcome to the Geth JavaScript console!

 

instance:Geth/v1.5.0-unstable/linux/go1.5.1/PICCetherum

coinbase:0x93509a2f4b2b974b07ef0b52e07c3992601f5de1

at block: 81 (Tue, 05 Jul 2016 21:02:25CST)

 datadir: /home/lihe/案頭/chain

 modules: admin:1.0 debug:1.0 eth:1.0 miner:1.0net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0

    可以看到Listening on [::]:30303和Welcome to the Geth JavaScript console!的提示,說明已經啟動成功

    注意:如果想將Ubuntu作為永久區塊鏈節點使用,當使用nohup命令時,Geth啟動參數console必須去掉,否則Geth會自動停止。

 

2、  在windows啟動區塊鏈節點

    進入Windows下Geth的目錄 ,放置配置好的piccgenesis.json檔案,執行如下命令:

geth  --datadir "%cd%\chain" init piccgenesis.json 

建立資料存放地址並初始化創世塊

geth--identity "PICCetherum" --rpc--rpccorsdomain "*" --datadir "%cd%\chain" --port"30303"  --rpcapi"db,eth,net,web3" --networkid 95518 console

    當看到Listening on [::]:30303和Welcome to the Geth JavaScript console!的提示,說明已經啟動成功

 

五、       使用節點建立帳號

    啟動節點成功後,會進入Geth的命令列模式,輸入如下命令

personal.newAccount()

    系統會提示你輸入帳號密碼,並確認,最後會顯示一個新產生的帳號。

 

六、       啟動Windows下私人鏈圖形節點

    首先按上面的步驟啟動Geth並建立了帳號,然後解壓縮Ethereum-Wallet,運行Ethereum-Wallet.exe,即啟動成功,如果區塊鏈正常的話,會在右上方顯示“PRIVATE-NET”,點擊“LAUNCH APPLICATION”進入圖形介面即可。

 

七、       串連其他節點

    首先要知道自己的節點資訊,在Geth命令列介面下輸入命令,注意大小寫

admin.nodeInfo

    系統會顯示

  enode:"enode://1e3c1727cd3bee9f25edeb5dbb3b880e03e41f8eec99566557f3ee0422734a8fcad17c161aa93d61bdbfb28ed152c143c7eb501db58bc63502a104a84b62d742@0.0.0.0:30303“

    其中

enode://1e3c1727cd3bee9f25edeb5dbb3b880e03e41f8eec99566557f3ee0422734a8fcad17c161aa93d61bdbfb28ed152c143c7eb501db58bc63502a104a84b62d742@0.0.0.0:30303

    就是自己節點的資訊,注意要把“0.0.0.0“換成你自己的IP。將這個資訊發送給其他節點,在其他節點的命令列中輸入:

admin.addPeer(‘enode://1e3c1727cd3bee9f25edeb5dbb3b880e03e41f8eec99566557f3ee0422734a8fcad17c161aa93d61bdbfb28ed152c143c7eb501db58bc63502a104a84b62d742@192.168.1.101:30303’)

    如果添加成功,輸入admin.peers會顯示出新添加的節點。

 

八、       使用節點進行挖礦

    在Geth命令列介面下,輸入miner.start()即啟動挖礦,挖礦後,會不停刷屏,輸入miner.stop()即停止,不用管刷屏導致的命令不全,命令會正常執行。

     到這一步,已經組建一個私人鏈的網路,可以像其他區塊鏈一樣不停的擴充這個網路,下一篇文章,我會介紹如何在私人鏈上編寫、調試和部署智能合約。

 參考文章:

1. http://tech.lab.carl.pro/kb/ethereum/testnet_setup

2. http://www.ethdocs.org/en/latest/network/test-networks.html#setting-up-a-local-private-testnet

3. https://github.com/ethereum/go-ethereum/wiki/Connecting-to-the-network

4. https://github.com/ethereum/go-ethereum/wiki/JavaScript-Console

5. https://github.com/ethereum/go-ethereum/wiki/Mining

6. https://github.com/ethereum/go-ethereum/wiki/Managing-your-accounts

7. https://github.com/janx/ethereum-bootstrap

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.