1. 搭建单群组FISCO BCOS联盟链 第一步. 安装依赖 开发部署工具 build_chain.sh脚本依赖于openssl, curl,根据您使用的操作系统,使用以下命令安装依赖。
1 sudo yum install -y openssl openssl-devel
第二步. 创建操作目录, 下载安装脚本 1 2 # cd ~ && mkdir -p fisco && cd fisco
1 2 # curl -#LO https://github.com/FISCO-BCOS/FISCO-BCOS/releases/download/v2.11.0/build_chain.sh && chmod u+x build_chain.sh
[!note] 如果因为网络问题导致长时间无法下载build_chain.sh脚本,请尝试 curl -#LO https://gitee.com/FISCO-BCOS/FISCO-BCOS/releases/download/v2.11.0/build_chain.sh && chmod u+x build_chain.sh
第三步. 搭建单群组4节点联盟链 在fisco目录下执行下面的指令,生成一条单群组4节点的FISCO链。 请确保机器的30300~30303,20200~20203,8545~8548端口没有被占用。
1 bash build_chain.sh -l 127.0.0.1:4 -p 30300,20200,8545
命令执行成功会输出All completed。如果执行出错,请检查nodes/build.log文件中的错误信息。
第四步. 启动FISCO BCOS链
1 bash nodes/127.0.0.1/start_all.sh
启动成功会输出类似下面内容的响应。否则请使用netstat -an | grep tcp检查机器的30300~30303,20200~20203,8545~8548端口是否被占用。
第五步. 检查进程
1 ps -ef | grep -v grep | grep fisco-bcos
正常情况会有类似下面的输出; 如果进程数不为4,则进程没有启动(一般是端口被占用导致的)
1 2 3 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
第六步. 检查日志输出
1 tail -f nodes/127.0.0.1/node0/log/log* |
正常情况会不停地输出连接信息,从输出可以看出node0与另外3个节点有连接。
1 2 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
1 tail -f nodes/127.0.0.1/node0/log/log* | grep +++
正常情况会不停输出带有++++Generating seal的日志,即表示共识正常。
1 2 info|2020-12-22 17:24:43.729402|[g:1][CONSENSUS][SEALER]++++++++++++++++ Generating seal on,blkNum=1,tx=0,nodeIdx=1,hash=2e133146... info|2020-12-22 17:24:47.740603|[g:1][CONSENSUS][SEALER]++++++++++++++++ Generating seal on,blkNum=1,tx=0,nodeIdx=1,hash=eb199760...
2. 配置及使用控制台 在控制台链接FISCO BCOS节点,实现查询区块链状态、部署调用合约 等功能,能够快速获取到所需要的信息。
第一步. 准备依赖
1 sudo yum install -y java java-devel
1 cd ~/fisco && curl -LO https://github.com/FISCO-BCOS/console/releases/download/v2.9.2/download_console.sh && bash download_console.sh
[!note] 如果因为网络问题导致长时间无法下载,请尝试 cd ~/fisco && curl -#LO https://gitee.com/FISCO-BCOS/console/raw/master-2.0/tools/download_console.sh && bash download_console.sh
若节点未采用默认端口,请将文件中的20200替换成节点对应的channel端口。
1 2 # 最新版本控制台使用如下命令拷贝配置文件 cp -n console/conf/config-example.toml console/conf/config.toml
1 cp -r nodes/127.0.0.1/sdk/* console/conf/
第二步. 启动并使用控制台
1 cd ~/fisco/console && bash start.sh
输出下述信息表明启动成功 否则请检查conf/config.toml中节点端口配置是否正确
1 2 3 4 5 6 7 8 9 10 11 12 13 14 ============================================================================================= Welcome to FISCO BCOS console(2.6.0)! Type 'help' or 'h' for help. Type 'quit' or 'q' to quit console. ________ ______ ______ ______ ______ _______ ______ ______ ______ | \| \ / \ / \ / \ | \ / \ / \ / \ | $$$$$$$$ \$$$$$$| $$$$$$\| $$$$$$\| $$$$$$\ | $$$$$$$\| $$$$$$\| $$$$$$\| $$$$$$\ | $$__ | $$ | $$___\$$| $$ \$$| $$ | $$ | $$__/ $$| $$ \$$| $$ | $$| $$___\$$ | $$ \ | $$ \$$ \ | $$ | $$ | $$ | $$ $$| $$ | $$ | $$ \$$ \ | $$$$$ | $$ _\$$$$$$\| $$ __ | $$ | $$ | $$$$$$$\| $$ __ | $$ | $$ _\$$$$$$\ | $$ _| $$_ | \__| $$| $$__/ \| $$__/ $$ | $$__/ $$| $$__/ \| $$__/ $$| \__| $$ | $$ | $$ \ \$$ $$ \$$ $$ \$$ $$ | $$ $$ \$$ $$ \$$ $$ \$$ $$ \$$ \$$$$$$ \$$$$$$ \$$$$$$ \$$$$$$ \$$$$$$$ \$$$$$$ \$$$$$$ \$$$$$$ =============================================================================================
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 # 获取客户端版本 [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' } ] [group:1]>
3. 部署及调用HelloWorld合约 第一步. 编写HelloWorld合约 HelloWorld合约提供两个接口,分别是get()和set(),用于获取/设置合约变量name。合约内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 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合约 为了方便用户快速体验,HelloWorld合约已经内置于控制台中,位于控制台目录下contracts/solidity/HelloWorld.sol,参考下面命令部署即可。
1 2 3 4 # 在控制台输入以下指令 部署成功则返回合约地址 [group:1]> deploy HelloWorld transaction hash: 0xd0305411e36d2ca9c1a4df93e761c820f0a464367b8feb9e3fa40b0f68eb23fa contract address:0xb3c223fc0bf6646959f254ac4e4a7e355b50a344
第三步. 调用HelloWorld合约 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 # 查看当前块高 [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