安装

    本节以搭建单群组FISCO BCOS链为例操作。使用脚本在本地搭建一条4 节点的FISCO BCOS链,以Ubuntu 16.04 64bit系统为例操作。

    注解

    • 若需在已有区块链上进行升级,请转至 章节。
    • 搭建多群组的链操作类似, 参考这里
    • 本节使用预编译的静态`fisco-bcos`二进制文件,在CentOS 7和Ubuntu 16.04 64bit上经过测试。
    • 安装依赖

    开发部署工具 build_chain.sh脚本依赖于openssl, curl,使用下面的指令安装。 若为CentOS,将下面命令中的apt替换为yum执行即可。macOS执行brew install openssl curl即可。

    • 创建操作目录
    1. cd ~ && mkdir -p fisco && cd fisco
    • 下载build_chain.sh脚本
    1. curl -LO https://github.com/FISCO-BCOS/FISCO-BCOS/releases/download/v2.5.0/build_chain.sh && chmod u+x build_chain.sh

    注解

    • 如果因为网络问题导致长时间无法下载build_chain.sh脚本,请尝试 curl -LO && 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 -v 2.5.0

    注解

    • 其中-p选项指定起始端口,分别是p2p_port,channel_port,jsonrpc_port
    • 出于安全性和易用性考虑,v2.3.0版本最新配置将listen_ip拆分成jsonrpc_listen_ip和channel_listen_ip,但仍保留对listen_ip的解析功能,详细请参考 这里
    • 为便于开发和体验,channel_listen_ip参考配置是 0.0.0.0 ,出于安全考虑,请根据实际业务网络情况,修改为安全的监听地址,如:内网IP或特定的外网IP
    1. Checking fisco-bcos binary...
    2. Binary check passed.
    3. ==============================================================
    4. Generating CA key...
    5. ==============================================================
    6. Generating keys ...
    7. Processing IP:127.0.0.1 Total:4 Agency:agency Groups:1
    8. ==============================================================
    9. Generating configurations...
    10. Processing IP:127.0.0.1 Total:4 Agency:agency Groups:1
    11. ==============================================================
    12. [INFO] Execute the download_console.sh script in directory named by IP to get FISCO-BCOS console.
    13. e.g. bash /home/ubuntu/fisco/nodes/127.0.0.1/download_console.sh
    14. ==============================================================
    15. [INFO] FISCO-BCOS Path : bin/fisco-bcos
    16. [INFO] Start Port : 30300 20200 8545
    17. [INFO] Server IP : 127.0.0.1:4
    18. [INFO] Output Dir : /home/ubuntu/fisco/nodes
    19. [INFO] CA Key Path : /home/ubuntu/fisco/nodes/cert/ca.key
    20. ==============================================================
    21. [INFO] All completed. Files in /home/ubuntu/fisco/nodes

    启动FISCO BCOS链

    1. bash nodes/127.0.0.1/start_all.sh

    启动成功会输出类似下面内容的响应。否则请使用netstat -an | grep tcp检查机器的30300~30303,20200~20203,8545~8548端口是否被占用。

    1. try to start node0
    2. try to start node1
    3. try to start node2
    4. try to start node3
    5. node1 start successfully
    6. node2 start successfully
    7. node3 start successfully
    • 检查进程是否启动

    正常情况会有类似下面的输出; 如果进程数不为4,则进程没有启动(一般是端口被占用导致的)

    1. 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
    2. 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
    3. 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
    4. 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链接的节点数
    1. tail -f nodes/127.0.0.1/node0/log/log* | grep connected

    正常情况会不停地输出链接信息,从输出可以看出node0与另外3个节点有链接。

    1. info|2019-01-21 17:30:58.316769| [P2P][Service] heartBeat,connected count=3
    2. info|2019-01-21 17:31:08.316922| [P2P][Service] heartBeat,connected count=3
    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. info|2019-01-21 17:23:32.576197| [g:1][p:264][CONSENSUS][SEALER]++++++++++++++++Generating seal on,blkNum=1,tx=0,myIdx=2,hash=13dcd2da...
    2. info|2019-01-21 17:23:36.592280| [g:1][p:264][CONSENSUS][SEALER]++++++++++++++++Generating seal on,blkNum=1,tx=0,myIdx=2,hash=31d21ab7...
    3. info|2019-01-21 17:23:40.612241| [g:1][p:264][CONSENSUS][SEALER]++++++++++++++++Generating seal on,blkNum=1,tx=0,myIdx=2,hash=49d0e830...

    在控制台通过Web3SDK链接FISCO BCOS节点,实现查询区块链状态、部署调用合约等功能,能够快速获取到所需要的信息。 控制台指令详细介绍。

    准备依赖

    • Java环境配置

    参考Java环境要求

    • 获取控制台并回到fisco目录
    1. cd ~/fisco && curl -LO https://github.com/FISCO-BCOS/console/releases/download/v1.0.10/download_console.sh && bash download_console.sh
    • 如果因为网络问题导致长时间无法下载,请尝试 cd ~/fisco && curl -LO

    • 拷贝控制台配置文件

    若节点未采用默认端口,请将文件中的20200替换成节点对应的channle端口。

    • 配置控制台证书
    1. cp nodes/127.0.0.1/sdk/* console/conf/
    • 启动
    1. cd ~/fisco/console && bash start.sh

    输出下述信息表明启动成功 否则请检查conf/applicationContext.xml中节点端口配置是否正确

    1. =============================================================================================
    2. Welcome to FISCO BCOS console(1.0.3)!
    3. Type 'help' or 'h' for help. Type 'quit' or 'q' to quit console.
    4. ________ ______ ______ ______ ______ _______ ______ ______ ______
    5. | \| \ / \ / \ / \ | \ / \ / \ / \
    6. | $$$$$$$$ \$$$$$$| $$$$$$\| $$$$$$\| $$$$$$\ | $$$$$$$\| $$$$$$\| $$$$$$\| $$$$$$\
    7. | $$__ | $$ | $$___\$$| $$ \$$| $$ | $$ | $$__/ $$| $$ \$$| $$ | $$| $$___\$$
    8. | $$ \ | $$ \$$ \ | $$ | $$ | $$ | $$ $$| $$ | $$ | $$ \$$ \
    9. | $$$$$ | $$ _\$$$$$$\| $$ __ | $$ | $$ | $$$$$$$\| $$ __ | $$ | $$ _\$$$$$$\
    10. | $$ _| $$_ | \__| $$| $$__/ \| $$__/ $$ | $$__/ $$| $$__/ \| $$__/ $$| \__| $$
    11. | $$ | $$ \ \$$ $$ \$$ $$ \$$ $$ | $$ $$ \$$ $$ \$$ $$ \$$ $$
    12. \$$ \$$$$$$ \$$$$$$ \$$$$$$ \$$$$$$ \$$$$$$$ \$$$$$$ \$$$$$$ \$$$$$$
    13. =============================================================================================

    控制台启动失败,参考 附录:JavaSDK启动失败场景

    使用控制台获取信息

    1. # 获取客户端版本
    2. {
    3. "Build Time":"20200619 06:32:10",
    4. "Build Type":"Linux/clang/Release",
    5. "Chain Id":"1",
    6. "FISCO-BCOS Version":"2.5.0",
    7. "Git Branch":"HEAD",
    8. "Git Commit Hash":"72c6d770e5cf0f4197162d0e26005ec03d30fcfe",
    9. "Supported Version":"2.5.0"
    10. }
    11. # 获取节点链接信息
    12. [
    13. {
    14. "IPAndPort":"127.0.0.1:49948",
    15. "NodeID":"b5872eff0569903d71330ab7bc85c5a8be03e80b70746ec33cafe27cc4f6f8a71f8c84fd8af9d7912cb5ba068901fe4131ef69b74cc773cdfb318ab11968e41f",
    16. "Topic":[]
    17. },
    18. {
    19. "IPAndPort":"127.0.0.1:49940",
    20. "NodeID":"912126291183b673c537153cf19bf5512d5355d8edea7864496c257630d01103d89ae26d17740daebdd20cbc645c9a96d23c9fd4c31d16bccf1037313f74bb1d",
    21. "Topic":[]
    22. },
    23. {
    24. "IPAndPort":"127.0.0.1:49932",
    25. "NodeID":"db75ab16ed7afa966447c403ca2587853237b0d9f942ba6fa551dc67ed6822d88da01a1e4da9b51aedafb8c64e9d208d9d3e271f8421f4813dcbc96a07d6a603",
    26. "Topic":[]
    27. }
    28. ]

    HelloWorld合约

    HelloWorld合约提供两个接口,分别是get()set(),用于获取/设置合约变量name。合约内容如下:

    1. pragma solidity ^0.4.24;
    2. contract HelloWorld {
    3. string name;
    4. function HelloWorld() {
    5. name = "Hello, World!";
    6. }
    7. function get()constant returns(string) {
    8. return name;
    9. }
    10. function set(string n) {
    11. name = n;
    12. }
    13. }
    1. # 在控制台输入以下指令 部署成功则返回合约地址
    2. [group:1]> deploy HelloWorld
    3. contract address:0xb3c223fc0bf6646959f254ac4e4a7e355b50a344

    调用HelloWorld合约

    注:

    1. 调用合约通过callByCNS命令,使用方式。