FISCO-BCOS環境搭建(一)創世節點配置與啟動
第二章 建立創世節點
創世節點是區塊鏈中的第一個節點,搭建區塊鏈,從建立創世節點開始。
2.1 建立節點環境
假定創世節點目錄為/mydata/nodedata-1/,建立節點環境如下:
#建立目錄結構 mkdir -p /mydata/nodedata-1/ mkdir -p /mydata/nodedata-1/data/ #存放節點的各種檔案 mkdir -p /mydata/nodedata-1/log/ #存放日誌 mkdir -p /mydata/nodedata-1/keystore/ #存放賬戶祕鑰 #拷貝相關檔案 cd /mydata/FISCO-BCOS/ cp genesis.json config.json log.conf start.sh stop.sh /mydata/nodedata-1/
2.2 配置god賬號
god賬號是區塊鏈的最高許可權,在啟動區塊鏈前必須配置。
2.2.1 生成god賬號
cd /mydata/FISCO-BCOS/web3lib cnpm install #安裝nodejs依賴, 在執行nodejs指令碼之前, 該命令在該目錄需要執行一次, 之後不需要再執行。 cd /mydata/FISCO-BCOS/tool #程式碼根目錄下的tool資料夾 cnpm install #安裝nodejs包,僅需執行一次,之後若需要再次在tool目錄下使用nodejs,不需要重複執行此命令 node accountManager.js > godInfo.txt cat godInfo.txt |grep address
可得到生成god賬號的地址如下。godInfo.txt請妥善儲存。
address : 0x27214e01c118576dd5f481648f83bb909619a324
2.2.2 配置god賬號
將上述步驟生成的god的address配置入genesis.json的god欄位:
vim /mydata/nodedata-1/genesis.json
修改後,genesis.json中的god欄位如下:
"god":"0x27214e01c118576dd5f481648f83bb909619a324",
2.3 配置節點身份NodeId
NodeId唯一標識了區塊鏈中的某個節點,在節點啟動前必須進行配置。
2.3.1 配置cryptomod.json檔案
在cryptomod.json檔案中配置NodeId生成路徑:
vim /mydata/FISCO-BCOS/cryptomod.json
通常情況下,只需將rlpcreatepath配置為/mydata/nodedata-1/data/network.rlp即可。配置後的cryptomod.json如下:
{
"cryptomod":"0",
"rlpcreatepath":"/mydata/nodedata-1/data/network.rlp",
"datakeycreatepath":"",
"keycenterurl":"",
"superkey":""
}
cryptomod.json其它欄位說明請參看附錄:11.2 cryptomod.json說明
2.3.2 生成節點身份檔案
用上述修改好的cryptomod.json檔案生成節點身份檔案,生成路徑為cryptomod.json中配置的路徑。
cd /mydata/FISCO-BCOS/ fisco-bcos --gennetworkrlp cryptomod.json #需要一段時間 ls /mydata/nodedata-1/data/
可看到節點身份檔案(network.rlp和network.rlp.pub)生成到了/mydata/nodedata-1/data/下。
其中network.rlp是節點身份的私鑰二進位制檔案。network.rlp.pub是節點身份的NodeId檔案。
network.rlp network.rlp.pub
2.3.3 配置創世節點NodeId
(1)檢視NodeId
cat /mydata/nodedata-1/data/network.rlp.pub
得到如下類似的NodeId
24b98c6532ff05c2e9e637b3362ee4328c228fb4f6262c1c751f51952012cd68da2cbd8655de5072e49b950a503326942297cfaa9ca919b369be4359b4dccd56
(2)修改genesis.json
將NodeId配置入genesis.json的initMinerNodes欄位,即指定此NodeId的節點為創世節點。
vim /mydata/nodedata-1/genesis.json
修改後,genesis.json中的initMinerNodes欄位如下:
"initMinerNodes":["24b98c6532ff05c2e9e637b3362ee4328c228fb4f6262c1c751f51952012cd68da2cbd8655de5072e49b950a503326942297cfaa9ca919b369be4359b4dccd56"]
(3)修改config.json
將NodeId配置入config.json中的NodeextraInfo的Nodeid欄位。
vim /mydata/nodedata-1/config.json
修改後,config.json中的NodeextraInfo欄位如下:
"NodeextraInfo":[
{
"Nodeid":"24b98c6532ff05c2e9e637b3362ee4328c228fb4f6262c1c751f51952012cd68da2cbd8655de5072e49b950a503326942297cfaa9ca919b369be4359b4dccd56",
"Nodedesc": "node1",
"Agencyinfo": "node1",
"Peerip": "0.0.0.0",
"Identitytype": 1,
"Port":30303,
"Idx":0
}
]
2.4 配置證書
區塊鏈節點間的通訊需要證書的認證。在節點執行前,需要為節點配置證書。證書包括:
- ca.crt:根證書公鑰,整條區塊鏈共用。
- ca.key:根證書私鑰,私鑰應保密,僅在生成節點證書公私鑰時使用。
- server.crt:節點證書的公鑰。
- server.key:節點證書的私鑰,私鑰應保密。
2.4.1 生成根證書
將公私鑰生成指令碼拷貝到data目錄,並執行命令生成根證書公私鑰ca.key,ca.crt。
cp /mydata/FISCO-BCOS/genkey.sh /mydata/nodedata-1/data/ cd /mydata/nodedata-1/data/ chmod +x genkey.sh ./genkey.sh ca 365 #生成ca根證書有效期為365天
在data目錄下生成了證書公私鑰ca.key,ca.crt。ca.key應保密,並妥善儲存,以便後續生成更多節點的公私鑰。
2.4.2 生成節點證書
用生成的根證書公私鑰ca.crt和ca.key,生成節點自己的證書。
./genkey.sh server ./ca.key ./ca.crt 365 #注意key和crt前後順序不能錯;此步驟需按照提示輸入一些資訊;生成server證書有效期為365天
生成的server.key、server.crt即為節點證書檔案
ls /mydata/nodedata-1/data/
此時目錄下應存在有下述檔案:
ca.crt network.rlp network.rlp.pub server.crt server.key
2.5 配置相關配置檔案
節點的啟動依賴三個配置檔案:
- 創世塊檔案:genesis.json
- 節點配置檔案:config.json
- 日誌配置檔案:log.conf
2.5.1 配置genesis.json(創世塊檔案)
genesis.json中配置創世塊的資訊,是節點啟動必備的資訊。
vim /mydata/nodedata-1/genesis.json
主要配置god和initMinerNodes欄位,在之前的步驟中已經配置好,配置好的genesis.json如下:
{
"nonce": "0x0",
"difficulty": "0x0",
"mixhash": "0x0",
"coinbase": "0x0",
"timestamp": "0x0",
"parentHash": "0x0",
"extraData": "0x0",
"gasLimit": "0x13880000000000",
"god":"0x27214e01c118576dd5f481648f83bb909619a324",
"alloc": {},
"initMinerNodes":["24b98c6532ff05c2e9e637b3362ee4328c228fb4f6262c1c751f51952012cd68da2cbd8655de5072e49b950a503326942297cfaa9ca919b369be4359b4dccd56"]
}
genesis.json其它欄位說明請參看附錄:11.3 genesis.json說明
2.5.2 配置config.json(節點配置檔案)
config.json中配置節點的各種資訊,包括網路地址,檔案目錄,節點身份等。
vim /mydata/nodedata-1/config.json
配置節點的資訊,主要修改欄位:
- 網路連線相關:listenip、rpcport、p2pport、channelPort
- 目錄相關:wallet、keystoredir、datadir、logconf
- 節點身份相關:NodeextraInfo中的Nodeid、Nodedesc、Agencyinfo、Peerip、Identitytype、Port、Idx(與網路連線相關對應上)
config.json其它欄位說明請參看附錄:11.4 config.json說明
配置好的config.json如下:
{
"sealEngine": "PBFT",
"systemproxyaddress":"0x0",
"listenip":"0.0.0.0",
"cryptomod":"0",
"ssl":"0",
"rpcport": "8545",
"p2pport": "30303",
"channelPort": "30304",
"rpcsslport":"-1",
"wallet":"/mydata/nodedata-1/keys.info",
"keystoredir":"/mydata/nodedata-1/keystore/",
"datadir":"/mydata/nodedata-1/data/",
"vm":"interpreter",
"networkid":"12345",
"logverbosity":"4",
"coverlog":"OFF",
"eventlog":"ON",
"statlog":"OFF",
"logconf":"/mydata/nodedata-1/log.conf",
"params": {
"accountStartNonce": "0x0",
"maximumExtraDataSize": "0x0",
"tieBreakingGas": false,
"blockReward": "0x0",
"networkID" : "0x0"
},
"NodeextraInfo":[
{
"Nodeid":"24b98c6532ff05c2e9e637b3362ee4328c228fb4f6262c1c751f51952012cd68da2cbd8655de5072e49b950a503326942297cfaa9ca919b369be4359b4dccd56",
"Nodedesc": "node1",
"Agencyinfo": "node1",
"Peerip": "0.0.0.0",
"Identitytype": 1,
"Port":30303,
"Idx":0
}
]
}
2.5.3 配置log.conf(日誌配置檔案)
log.conf中配置節點日誌生成的格式和路徑。
vim /mydata/nodedata-1/log.conf
主要配置日誌檔案的生成路徑,配置好的log.conf 如下:
* GLOBAL:
ENABLED = true
TO_FILE = true
TO_STANDARD_OUTPUT = false
FORMAT = "%level|%datetime{%Y-%M-%d %H:%m:%s:%g}|%msg"
FILENAME = "/mydata/nodedata-1/log/log_%datetime{%Y%M%d%H}.log"
MILLISECONDS_WIDTH = 3
PERFORMANCE_TRACKING = false
MAX_LOG_FILE_SIZE = 209715200 ## 200MB - Comment starts with two hashes (##)
LOG_FLUSH_THRESHOLD = 100 ## Flush after every 100 logs
* TRACE:
ENABLED = true
FILENAME = "/mydata/nodedata-1/log/trace_log_%datetime{%Y%M%d%H}.log"
* DEBUG:
ENABLED = true
FILENAME = "/mydata/nodedata-1/log/debug_log_%datetime{%Y%M%d%H}.log"
* FATAL:
ENABLED = true
FILENAME = "/mydata/nodedata-1/log/fatal_log_%datetime{%Y%M%d%H}.log"
* ERROR:
ENABLED = true
FILENAME = "/mydata/nodedata-1/log/error_log_%datetime{%Y%M%d%H}.log"
* WARNING:
ENABLED = true
FILENAME = "/mydata/nodedata-1/log/warn_log_%datetime{%Y%M%d%H}.log"
* INFO:
ENABLED = true
FILENAME = "/mydata/nodedata-1/log/info_log_%datetime{%Y%M%d%H}.log"
* VERBOSE:
ENABLED = true
FILENAME = "/mydata/nodedata-1/log/verbose_log_%datetime{%Y%M%d%H}.log"
log.conf其它欄位說明請參看附錄:11.5 log.conf說明
2.6 啟動創世節點
節點的啟動依賴下列檔案,在啟動前,請確認檔案已經正確的配置:
- 證書檔案(/mydata/nodedata-1/data):ca.crt、server.crt、server.key
- 節點身份檔案(/mydata/nodedata-1/data):network.rlp、network.rlp.pub
- 配置檔案(/mydata/nodedata-1/):genesis.json、config.json、log.conf
啟動節點
cd /mydata/nodedata-1/ chmod +x *.sh ./start.sh #若需要退出節點 #./stop.sh
或手動啟動
cd /mydata/nodedata-1/ fisco-bcos --genesis ./genesis.json --config ./config.json & #啟動區塊鏈節點 tail -f log/info* |grep ++++ #檢視日誌輸出 #若需要退出節點 #ps -ef |grep fisco-bcos #檢視程序號 #kill -9 13432 #13432是檢視到的程序號
幾秒後可看到不斷刷出打包資訊。
INFO|2017-12-12 17:52:16:877|+++++++++++++++++++++++++++ Generating seal ondcae019af78cf04e17ad908ec142ca4e25d8da14791bda50a0eeea782ebf3731#1tx:0,maxtx:1000,tq.num=0time:1513072336877
INFO|2017-12-12 17:52:17:887|+++++++++++++++++++++++++++ Generating seal on3fef9b23b0733ac47fe5385072f80fc036b7517abae0a3e7762739cc66bc7dca#1tx:0,maxtx:1000,tq.num=0time:1513072337887
INFO|2017-12-12 17:52:18:897|+++++++++++++++++++++++++++ Generating seal onb5b38c7a380b13b2e46fecbdca0fac5473f4cbc054190e90b8bd4831faac4521#1tx:0,maxtx:1000,tq.num=0time:1513072338897
INFO|2017-12-12 17:52:19:907|+++++++++++++++++++++++++++ Generating seal on3530ff04adddd30508a4cb7421c8f3ad6421ca6ac3bb5f81fb4880fd72c57a8c#1tx:0,maxtx:1000,tq.num=0time:1513072339907
2.7 驗證節點啟動
2.7.1 驗證程序
ps -ef |grep fisco-bcos
看到程序啟動
app 19390 1 1 17:52 ? 00:00:05 fisco-bcos --genesis /mydata/nodedata-1/genesis.json --config /mydata/nodedata-1/config.json
2.7.2 檢視日誌輸出
執行命令,檢視打包資訊。
tail -f /mydata/nodedata-1/log/info* |grep ++++ #檢視日誌輸出
可看到不斷刷出打包資訊。
INFO|2017-12-12 17:52:16:877|+++++++++++++++++++++++++++ Generating seal ondcae019af78cf04e17ad908ec142ca4e25d8da14791bda50a0eeea782ebf3731#1tx:0,maxtx:1000,tq.num=0time:1513072336877
INFO|2017-12-12 17:52:17:887|+++++++++++++++++++++++++++ Generating seal on3fef9b23b0733ac47fe5385072f80fc036b7517abae0a3e7762739cc66bc7dca#1tx:0,maxtx:1000,tq.num=0time:1513072337887
INFO|2017-12-12 17:52:18:897|+++++++++++++++++++++++++++ Generating seal onb5b38c7a380b13b2e46fecbdca0fac5473f4cbc054190e90b8bd4831faac4521#1tx:0,maxtx:1000,tq.num=0time:1513072338897
INFO|2017-12-12 17:52:19:907|+++++++++++++++++++++++++++ Generating seal on3530ff04adddd30508a4cb7421c8f3ad6421ca6ac3bb5f81fb4880fd72c57a8c#1tx:0,maxtx:1000,tq.num=0time:1513072339907
若上述都正確輸出,則表示創世節點已經正確啟動!