前言
-
本文的記錄與總結依照于FISCO BCOS 技術檔案學習聯盟鏈搭建的相關知識,詳細搭建程序見檔案,本文僅作參考
-
本文通過在單機上部署一條4節點的FISCO BCOS聯盟鏈,掌握FISCO BCOS部署流程,
搭建
需要使用已經封裝好的腳本程式build_chain.sh,由于該腳本依賴于openssl, curl
需要先安裝相關依賴openssl, curl
下載腳本(可以新建一個檔案夾管理)
curl -#LO https://github.com/FISCO-BCOS/FISCO-BCOS/releases/download/v2.8.0/build_chain.sh && chmod u+x build_chain.sh
啟動腳本,生成一條單群組4節點的FISCO鏈,注意確保機器埠占用情況
bash build_chain.sh -l 127.0.0.1:4 -p 30300,20200,8545
其中-p選項指定起始埠,分別是p2p_port,channel_port,jsonrpc_port
命令執行成功會輸出All completed
啟動
啟動所有節點
bash nodes/127.0.0.1/start_all.sh
啟動成功會輸出類似下面內容的回應,否則請使用netstat -an | grep tcp檢查機器的30300~30303,20200~20203,8545~8548埠是否被占用,
try to start node0
try to start node1
try to start node2
try to start node3
node1 start successfully
node2 start successfully
node0 start successfully
node3 start successfully
檢測
檢查行程是否啟動
ps -ef | grep -v grep | grep fisco-bcos
正常情況會有類似下面的輸出; 如果行程數不為4,則行程沒有啟動(一般是埠被占用導致的)
fisco 5453 1 1 17:11 pts/0 00:00:02 /home/ubuntu/fisco/nodes/127.0.0.1/node0/../fisco-bcos -c config.ini
fisco 5459 1 1 17:11 pts/0 00:00:02 /home/ubuntu/fisco/nodes/127.0.0.1/node1/../fisco-bcos -c config.ini
fisco 5464 1 1 17:11 pts/0 00:00:02 /home/ubuntu/fisco/nodes/127.0.0.1/node2/../fisco-bcos -c config.ini
fisco 5476 1 1 17:11 pts/0 00:00:02 /home/ubuntu/fisco/nodes/127.0.0.1/node3/../fisco-bcos -c config.ini
如下,查看節點node0鏈接的節點數
tail -f nodes/127.0.0.1/node0/log/log* | grep connected
正常情況會不停地輸出連接資訊,從輸出可以看出node0與另外3個節點有連接,
info|2019-01-21 17:30:58.316769| [P2P][Service] heartBeat,connected count=3
info|2019-01-21 17:31:08.316922| [P2P][Service] heartBeat,connected count=3
info|2019-01-21 17:31:18.317105| [P2P][Service] heartBeat,connected count=3
執行下面指令,檢查是否在共識
tail -f nodes/127.0.0.1/node0/log/log* | grep +++
正常情況會不停輸出++++Generating seal,表示共識正常,
配置及使用控制臺
在控制臺鏈接FISCO BCOS節點,實作查詢區塊鏈狀態、部署呼叫合約等功能,能夠快速獲取到所需要的資訊,
本質上控制臺也是使用命令呼叫的sdk
- 需要依賴
- Java
- 下載控制臺腳本
cd ~/fisco && curl -LO https://github.com/FISCO-BCOS/console/releases/download/v2.8.0/download_console.sh && bash download_console.sh
- 拷貝控制臺組態檔并配置控制臺證書
cp -n console/conf/config-example.toml console/conf/config.toml
cp -r nodes/127.0.0.1/sdk/* console/conf/
- 使用控制臺
cd ~/fisco/console && bash start.sh
# 獲取客戶端版本
[group:1]> getNodeVersion
ClientVersion{
version='2.6.0',
supportedVersion='2.6.0',
chainId='1',
buildTime='20200819 15:47:59',
buildType='Darwin/appleclang/RelWithDebInfo',
gitBranch='HEAD',
gitCommitHash='e4a5ef2ef64d1943fccc4ebc61467a91779fb1c0'
}
# 獲取節點資訊
[group:1]> getPeers
[
PeerInfo{
nodeID='c1bd77e188cd0783256ee06838020f24a697f9af785438403d3620967a4a3612e3abc4bbe986d1e9dddf62d4236bff0b7d19a935a3cd44889f681409d5bf8692',
ipAndPort='127.0.0.1:30302',
agency='agency',
topic=[
],
node='node2'
},
PeerInfo{
nodeID='7f27f5d67f104eacf689790f09313e4343e7887a1a7b79c31cd151be33c7c8dd57c895a66086c3c8e0b54d2fa493407e0d9646b2bd9fc29a94fd3663a5332e6a',
ipAndPort='127.0.0.1:57266',
agency='agency',
topic=[
_block_notify_1
],
node='node1'
},
PeerInfo{
nodeID='862f26d9681ed4c12681bf81a50d0b8c66dd5b6ee7b0b42a4af12bb37b1ad2442f7dcfe8dac4e737ce9fa46aa94d904e8c474659eabf575d6715995553245be5',
ipAndPort='127.0.0.1:30303',
agency='agency',
topic=[
],
node='node3'
}
]
總結
本程序本質上包含兩個部分,搭建一個聯盟鏈和使用聯盟鏈的控制臺,核心自然是下載了其GitHub上的兩個腳本(fisco搭建腳本與fisco控制臺腳本)實作區塊鏈搭建,當然在腳本的bash前需要安裝腳本依賴環境,控制臺在bash前還需要進行一定的配置
補充:部署及呼叫簡單合約
簡單合約撰寫
pragma solidity ^0.4.24;
contract HelloWorld {
string name;
function HelloWorld() {
name = "Hello, World!";
}
function get()constant returns(string) {
return name;
}
function set(string n) {
name = n;
}
}
HelloWorld合約提供兩個介面,分別是get()和set(),用于獲取/設定合約變數name,
部署
為了方便用戶快速體驗,HelloWorld合約已經內置于控制臺中,位于控制臺目錄下contracts/solidity/HelloWorld.sol,參考下面命令部署即可,
# 在控制臺輸入以下指令 部署成功則回傳合約地址
[group:1]> deploy HelloWorld
transaction hash: 0xd0305411e36d2ca9c1a4df93e761c820f0a464367b8feb9e3fa40b0f68eb23fa
contract address:0xb3c223fc0bf6646959f254ac4e4a7e355b50a344
呼叫
# 查看當前塊高
[group:1]> getBlockNumber
1
# 呼叫get介面獲取name變數 此處的合約地址是deploy指令回傳的地址
[group:1]> call HelloWorld 0xb3c223fc0bf6646959f254ac4e4a7e355b50a344 get
---------------------------------------------------------------------------------------------
Return code: 0
description: transaction executed successfully
Return message: Success
---------------------------------------------------------------------------------------------
Return values:
[
"Hello,World!"
]
---------------------------------------------------------------------------------------------
# 查看當前塊高,塊高不變,因為get介面不更改賬本狀態
[group:1]> getBlockNumber
1
# 呼叫set設定name
[group:1]> call HelloWorld 0xb3c223fc0bf6646959f254ac4e4a7e355b50a344 set "Hello, FISCO BCOS"
transaction hash: 0x7e742c44091e0d6e4e1df666d957d123116622ab90b718699ce50f54ed791f6e
---------------------------------------------------------------------------------------------
transaction status: 0x0
description: transaction executed successfully
---------------------------------------------------------------------------------------------
Output
Receipt message: Success
Return message: Success
---------------------------------------------------------------------------------------------
Event logs
Event: {}
# 再次查看當前塊高,塊高增加表示已出塊,賬本狀態已更改
[group:1]> getBlockNumber
2
# 呼叫get介面獲取name變數,檢查設定是否生效
[group:1]> call HelloWorld 0xb3c223fc0bf6646959f254ac4e4a7e355b50a344 get
---------------------------------------------------------------------------------------------
Return code: 0
description: transaction executed successfully
Return message: Success
---------------------------------------------------------------------------------------------
Return values:
[
"Hello,FISCO BCOS"
]
---------------------------------------------------------------------------------------------
# 退出控制臺
[group:1]> quit
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/356816.html
標籤:區塊鏈
上一篇:以太坊NFT二層網路之Immutable X(IMX)
下一篇:中電智谷是做什么的
