區塊鏈--Ubuntu上搭建以太坊私有鏈


1、搭建私鏈所需環境

操作系統:ubuntu16.04,開虛擬機的話要至少4G,否則會影響測試挖礦時的速度

軟件:

  geth客戶端

  Mist和Ethereum Wallet:https://github.com/ethereum/mist/releases/

2、安裝geth客戶端

sudo apt-get update
sudo apt-get install software-properties-common
sudo add-apt-repository -y ppa:ethereum/ethereum
sudo add-apt-repository -y ppa:ethereum/ethereum-dev
sudo apt-get update
sudo apt-get install ethereum

安裝完成后,輸入geth -h,如果有列出信息則說明安裝成功,可查看列出信息,方便后續的操作

image

3、創建創始塊

(1)創建以太坊初始區塊文件 genesis.json

作為區塊鏈,鏈子總要有個頭,所以需要創建一個創世塊作為頭部,才好往下添加,創世文件名稱命名為genesis.json,數據目錄存放在/home/cll/privateDemo/data1,genesis.json存放在/home/cll/ privateDemo/:

cat > genesis.json

輸入:

{
    "config": {
        "chainId": 411,
        "homesteadBlock": 0,
        "eip155Block": 0,
        "eip158Block": 0
    },
    "nonce": "0x0000000000000033",
    "timestamp": "0x0",
    "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "gasLimit": "0x8000000",
    "difficulty": "0x100",
    "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "coinbase":"0x0000000000000000000000000000000000000000",
    "alloc": {
        "0x1C83C95473e1e93A2C8560c73976dAFA9C3f0a79":
        {"balance":"1000000"}
    }
}

查看:

cat genesis.json

部分字段解釋:

chainId : 以太坊區塊鏈網絡Id,ethereum主鏈是1,私有鏈只用不要與主鏈沖突即可。

alloc : 預留賬戶,如下

coinbase: 曠工賬戶

difficulty: 挖礦難度

extraData:相當於備注

gasLimit:最小消耗gas

nonce : 64位隨機數,用於挖礦,注意他和mixhash的設置需要滿足以太坊黃皮書中的要求

parentHash : 上一個區塊的Hash值,因為是創世塊,沒有在它前面的,所以是0

timestamp : 時間戳

(2)初始化區塊節點

geth --datadir data1 init genesis.json

(3)啟動geth客戶端節點

geth --identity "data1" --rpc --rpcport 8000 --rpccorsdomain "*" --datadir "data1" --port 30303 --rpcapi "db,eth,net,web3" --networkid 999 console 2>>data1/geth.log

geth常用屬性:

--Identity : 節點身份標識,起個名字

--datadir : 指定節點存在位置,“data1”

--rpc : 啟用http-rpc服務器

--rpcapi : 基於http-rpc提供的api接口。eth,net,web3,db...

--rpcaddr : http-rpc服務器接口地址:默認“127.0.0.1”

--rpcport : http-rpc 端口(多節點時,不要重復)

--port : 節點端口號(多節點時,不要重復)

--networkid : 網絡標識符 隨便指定一個id(確保多節點是統一網絡,保持一致)

clip_image004

(4)geth常用命令

#創建賬戶
personal.newAccount("123456")

#獲取賬戶數組
eth.accounts

#解鎖賬戶,轉賬時可使用
personal.unlockAccount(eth.accounts[0], "123456")

#節點主賬戶
eth.coinbase

#查看賬戶余額
eth.getBalance(eth.accounts[0])

#啟動,結束挖礦,寫區塊
miner.start(), miner.stop()

#查看區塊數量
eth.blockNumber

 

4、配置多節點服務

(1)再初始化一個節點(與上一個節點使用同一個genesis.json)

(privateDemo目錄)

geth --datadir data2 init genesis.json

(2)啟動新節點

(privateDemo目錄)

geth --identity "data2" --rpc --rpcport 8001 --rpccorsdomain "*" --datadir "data2" --port 30306 --rpcapi "db,eth,net,web3" --networkid 999 console 2>>data2/geth.log

注:如果在同一台電腦上這兩個端口號與之前的節點不能相同

(3)查看:新節點enode信息

admin.nodeInfo.enode

(4)主節點添加新節點,使兩節點連在同一個私有鏈上

在data1終端下輸入新節點data2的enode信息

例如:

admin.addpeer("enode://d4f64272de882d2e2ccefc6466c6580ddecd253f5c9d87f977ac3881cbea7b141c07681ea605c53af5815cbfc25b5138b9ddb07be61b757850a55b7197939ba4@127.0.0.1:30306")

(5)檢查兩節點是否已連接

首先使用命令admin.nodeInfo,查看結果是否為空[],或者net.peerCount,查看是否為0(這里有點問題,有時候由於某些原因,可能網絡不穩定,添加完后是[]和0,有時候又顯示有同伴);另外在其中一個節點啟動挖礦命令 miner.start(),看另一個節點是否也同步,可以使用命令行跟蹤(data1目錄):tail -f geth.log。

clip_image006

clip_image008

4、Mist連接私鏈

(1)以rpc方式打開訪問ipc接口方式打開mist錢包

“(mist應用所在路徑)” –rpc “(節點geth.ipc所在目錄)”

例如:

“/home/cll/ethereum/mist/mist” –rpc “/home/cll/privateDemo/data1/geth.ipc”

(2)只讀的http方式打開錢包。不能轉賬,不能部署合約

“/home/cll/ethereum/mist/mist” –rpc http://127.0.0.1:8000

5、在Mist上部署智能合約

點擊CONTRACTS->點擊DEPLOY NEW CONTRACT->選擇賬戶,編寫合約內容->最底下點擊DEPLOY。成功提交后,等待挖礦確認,確認的合約會顯示在CONTRACTS頁面,點擊合約即可進行相關操作。

clip_image010


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM