區塊鏈 之 搭建以太坊私有鏈
作者:鄒祁峰
郵箱:[email protected]
部落格:http://blog.csdn.net/qifengzou
日期:2018.03.02 13:32
轉載請註明來自”祁峰”的CSDN部落格
1 引言
本人使用的是Ubuntu作業系統,在搭建以太坊私鏈的過程中踩到過不少的坑.希望此文能幫助新學者快速的掌握以太坊的搭建過程.
2 安裝步驟
如果在Ubuntu中直接使用”apt-get install geth”安裝以太坊環境,雖然在終端模式下能夠正常使用geth的相關命令,但是進行智慧合約的部署操作”truffle migrate”時可能會出現如下異常: [原因:由於truffle與geth的版本不匹配
]
Using network ‘development’.
Running migration: 1_initial_migration.js
Deploying Migrations…
… 0x41fc37a37333d251c762c6d1e337e58abe89e941ce94a9655897586e010b0b43
Migrations: 0x4a350b563a48fc1d7e2f85057ae6aabc2b6f3827
Saving successful migration to network…
… 0x1fc8a9c099d743812f0469c83cce6cd3d550d9725fdbe0f59650183d705c4c26
Error encountered, bailing. Network state unknown. Review successful transactions manually.
Error: unknown transaction
at Object.InvalidResponse (/usr/local/lib/node_modules/truffle/build/webpack:/~/web3/lib/web3/errors.js:38:1)
…(此處省略)
因此, 本人強烈推薦
使用原始碼搭建以太坊環境.
2.1 前期準備
以太坊是使用go語言編寫的,因此,首先需要安裝和配置go編譯環境. 具體過程可在網上查詢.
2.2 下載原始碼
可通過如下命令下載官方原始碼:
# go get github.com/ethereum/go-ethereum
待以上操作完成後,以太坊原始碼將會存放在$GOPATH/src/github.com/ethereum/go-ethereum目錄下.[備註: 環境變數$GOPATH是安裝go程式時配置的變數, 關於go的安裝過程請上網查詢]
2.3 編譯原始碼
進入原始碼目錄並執行編譯操作:
# cd $GOPATH/src/github.com/ethereum/go-ethereum
// 切至原始碼目錄
# git checkout release/1.7
// 備註:當master編譯失敗時可以切換到其他版本進行編譯
# make
// 備註:執行編譯
完成以上編譯後, 生成的可執行程式geth就存放在原始碼中的./build/bin/目錄下.只需將geth程式拷貝到$PATH目錄中便可使用以太坊了.
3 搭建私鏈
以太坊節點之間能夠相互連線需滿足以下2個條件:
1.相同的協議版本
2.相同的networkid
搭建私鏈最方便的方法是通過geth命令中的--networkid
選項, 設定一個與主網不同的networkid(主網networkid值為1), 這也是官方推薦的方式.
3.1 創世區塊
序號 | 機器IP | 備註 |
---|---|---|
01 | 10.168.0.1 | 初始節點 |
1.新建目錄
# mkdir private-block
# cd private-block
2.新建配置
在私鏈目錄下新建配置檔案,配置檔名:genesis.json(可以隨便命名)
{
"config": {
"chainId": 15,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"coinbase" : "0x0000000000000000000000000000000000000000",
"difficulty" : "0x40000",
"extraData" : "",
"gasLimit" : "0xffffffff",
"nonce" : "0x0000000000000042",
"mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp" : "0x00",
"alloc": {}
}
3.創世節點
通過如下命令初始化創世節點:
# geth --datadir ./data/00 init genesis.json
4.啟動私鏈
通過如下命令啟動私鏈, 該命令的各選項含義和作用將在後續博文中進行講解.
# geth --datadir ./data/00 --networkid 15 --port 28000 --rpc --rpcaddr 10.168.0.1 --rpcport 8545 --rpcapi 'db,net,eth,web3' --rpccorsdomain '*' --nodiscover console
引數描述:
序號 | 欄位 | 描述 | 備註 |
---|---|---|---|
01 | datadir | 資料載入和儲存目錄 | |
02 | networkid | 網路編號, 主網ID為1,私網ID為其他值 | |
03 | port | 私鏈節點之間的通訊埠 | |
04 | rpc | 是否開啟HTTP-RPC功能 | 預設關閉 |
05 | rpcaddr | 指定HTTP-RPC網絡卡IP | 預設127.0.0.1,導致其他機器無法訪問 |
06 | rpcport | 指定HTTP-RPC通訊埠 | 預設8545 |
07 | rpcapi | 指定提供哪些HTTP-RPC的介面 |
完成以上操作後,私鏈就已搭建完成, 這時可以輸入以太坊的相關命令進行賬戶管理/節點管理/挖礦/轉賬交易等操作了.
5.建立賬號
1.檢視當前節點的賬號列表
> eth.accounts
[]
2.新建賬號
通過personal.newAccount()新建賬號, 該方法的引數為私鑰, 輸出結果為公鑰.私鑰用於資料的加密, 公鑰用於資料的解密, 公鑰也是賬戶的地址.
> personal.newAccount(“123456”)
“0x5b901c2495c077f515ae84fc53206f2eb3bf8296”> eth.accounts // 檢視賬號資訊
[“0x5b901c2495c077f515ae84fc53206f2eb3bf8296”]
3.節點資訊
每個區塊鏈節點的enode是唯一的, 新建節點要加入某鏈, 其需要將該鏈中某節點的enode加入到自己的遠端節點列表中. 可通過以下命令檢視enode值:
>admin.nodeInfo.enode // 檢視enode資訊
“enode://3a5d4f2c15ae0e16bbf1e7c819558373e0b6d4dfcb72a931c3e59ed72f01fc217[email protected][::]:28000?discport=0”
6.挖礦操作
1.開始挖礦
> miner.start()
2.開始挖礦
> miner.stop()
3.賬戶餘額
> eth.getBalance(eth.accounts[0])
635000000000000000000
7.後臺執行
如果要後臺執行以太坊節點, 則可輸入以下指令:
# nohup geth --datadir ./data/00 --networkid 15 --port 28000 --rpc --rpcaddr 10.168.0.1 --rpcport 8545 --rpcapi 'db,net,eth,web3' --rpccorsdomain '*' --unlock '0' &
3.2 新增節點
序號 | 機器IP | 備註 |
---|---|---|
01 | 10.168.0.2 | 新增節點 |
1.初始節點
通過如下命令初始化節點:
# geth --datadir ./data/00 init genesis.json
// 配置資訊與初始節點一直
2.啟動節點
通過如下命令啟動私鏈新節點, 該命令的各選項含義和作用將在後續博文中進行講解.
# geth --datadir ./data/00 --networkid 15 --port 61910 --rpc --rpcaddr 10.168.0.2 --rpcport 8545 --rpcapi 'db,net,eth,web3' --rpccorsdomain '*' --nodiscover console
3.建立賬號
1.檢視當前節點的賬號列表
> eth.accounts
[]
2.新建賬號
通過personal.newAccount()新建賬號, 該方法的引數為私鑰, 輸出結果為公鑰.私鑰用於資料的加密, 公鑰用於資料的解密, 公鑰也是賬戶的地址.
> personal.newAccount(“123456”)
“0x5b901c2495c077f515ae84fc53206f2eb3bf8296”> eth.accounts
[“0x5b901c2495c077f515ae84fc53206f2eb3bf8296”]
4.新增節點
由於此時該節點並未與其他節點建立聯絡, 因此此時該節點還是一個孤立節點. 其要加入剛才的私鏈中, 需要將其他一個或多個節點加入到本地:
>admin.addPeer(“enode://3a5d4f2c15ae0e16bbf1e7c819558373e0b6d4dfcb72a931c3e59ed72f01fc217[email protected]10.168.0.1:28000?discport=0”) // 新增遠端節點
>admin.peers // 檢視遠端節點列表
5.後臺執行
如果要後臺執行以太坊節點, 則可輸入以下指令:
# nohup geth --datadir ./data/00 --networkid 15 --port 28000 --rpc --rpcaddr 10.168.0.2 --rpcport 8545 --rpcapi 'db,net,eth,web3' --rpccorsdomain '*' --unlock '0' &
写评论
很抱歉,必須登入網站才能發佈留言。