• Fisco Bcos从入门到国一,宝宝版教学


    搭链

    1.配置搭链环境

    1.1配置openssl

    sudo apt install -y openss | curl

    2.拉取搭链脚本build_chain.sh

    curl -#LO https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/FISCO-BCOS/FISCO-BCOS/releases/v2.9.1/build_chain.sh && chmod u+x build_chain.sh

    3.部署联盟链网络

    bash build_chain.sh -l 127.0.0.1:4 -p 30300,20200,8545  -e ./fisco-bcos
    ​
    -l 指定节点ip
    -p 指定起始端口,分别是p2p_port,channel_port,jsonrpc_port
    -e 指定本机已存在的fisco-bcos二进制文件

    输出:命令执行成功会输出All completed。如果执行出错,请检查nodes/build.log文件中的错误信息。

    Checking fisco-bcos binary...
    Binary check passed.
    ==============================================================
    Generating CA key...
    ==============================================================
    Generating keys ...
    Processing IP:127.0.0.1 Total:4 Agency:agency Groups:1      
    ==============================================================
    Generating configurations...
    Processing IP:127.0.0.1 Total:4 Agency:agency Groups:1
    ==============================================================
    [INFO] Execute the download_console.sh script in directory named by IP to get FISCO-BCOS console.
    e.g.  bash /home/ubuntu/fisco/nodes/127.0.0.1/download_console.sh
    ==============================================================
    [INFO] FISCO-BCOS Path   : bin/fisco-bcos
    [INFO] Start Port        : 30300 20200 8545
    [INFO] Server IP         : 127.0.0.1:4
    [INFO] Output Dir        : /home/ubuntu/fisco/nodes
    [INFO] CA Key Path       : /home/ubuntu/fisco/nodes/cert/ca.key
    ==============================================================
    [INFO] All completed. Files in /home/ubuntu/fisco/nodes

    启动脚本之后,就会生成节点目录,目录结构如下:

    (1)cert文件夹下存放链的根证书和机构证书。

    (2)以IP命名的文件夹下存储该服务器所有节点相关配置、fisco-bcos可执行程序、SDK所需的证书文件。

    (3)每个IP文件夹下的node*文件夹下存储节点所需的配置文件。其中config.ini为节点的主配置,conf目录下存储证书文件和群组相关配置。

    ​ 配置文件详情,每个节点中还提供start.sh和stop.sh脚本,用于启动和停止节点。

    (4)每个IP文件夹下(nodes/127.0.0.1( IP ))的提供start_all.sh和stop_all.sh两个脚本用于启动和停止所有节点。

    nodes/
    ├── 127.0.0.1
    │   ├── fisco-bcos # 二进制程序
    │   ├── node0 # 节点0文件夹
    │   │   ├── conf # 配置文件夹
    │   │   │   ├── ca.crt # 链根证书
    │   │   │   ├── group.1.genesis # 群组1初始化配置,该文件不可更改
    │   │   │   ├── group.1.ini # 群组1配置文件
    │   │   │   ├── node.crt # 节点证书
    │   │   │   ├── node.key # 节点私钥
    │   │   │   ├── node.nodeid # 节点id,公钥的16进制表示
    |   |   |   ├── channel_cert # 节点与SDK通信的RSA证书,FISCO-BCOS 2.9.0+支持
    |   |   |       ├── ca.crt
    |   |   |       ├── node.crt
    |   |   |       └── node.key
    │   │   ├── config.ini # 节点主配置文件,配置监听IP、端口等
    │   │   ├── start.sh # 启动脚本,用于启动节点
    │   │   └── stop.sh # 停止脚本,用于停止节点
    │   ├── node1 # 节点1文件夹
    │   │.....
    │   ├── node2 # 节点2文件夹
    │   │.....
    │   ├── node3 # 节点3文件夹
    │   │.....
    │   ├── sdk # SDK与节点SSL连接配置,FISCO-BCOS 2.5及之后的版本,添加了SDK只能连本机构节点的限制,操作时需确认拷贝证书的路径,否则建联报错
    │   │   ├── ca.crt # SSL连接根证书
    │   │   ├── sdk.crt # SSL连接证书
    │   │   └── sdk.key # SSL连接证书私钥
    |   |   ├── gm # SDK与节点国密SSL连接配置,注意:生成国密区块链环境时才会生成该目录,用于节点与SDK的国密SSL连接
    |   |   │   ├── gmca.crt # 国密SSL连接根证书
    |   |   │   ├── gmensdk.crt # 国密SSL连接加密证书
    |   |   │   ├── gmensdk.key # 国密SSL连接加密证书私钥
    |   |   │   ├── gmsdk.crt # 国密SSL连接签名证书
    |   |   │   └── gmsdk.key # 国密SSL连接签名证书私钥
    ├── cert # 证书文件夹
    │   ├── agency # 机构证书文件夹
    │   │   ├── agency.crt # 机构证书
    │   │   ├── agency.key # 机构私钥
    │   │   ├── agency.srl
    │   │   ├── ca-agency.crt
    │   │   ├── ca.crt
    │   │   └── cert.cnf
    |   |   └── channel/ # 节点与SDK通过RSA证书SSL通信的根证书,FISCO-BCOS 2.9.0+支持
    |   |      ├── ca.crt
    |   |      ├── ca.key
    |   |      └── ca.srl
    │   ├── ca.crt # 链证书
    │   ├── ca.key # 链私钥
    │   ├── ca.srl
    │   └── cert.cnf
    ​

    4.启动FISCO BCOS链

    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

    5.检查进程

    • 检查进程是否启动1

    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

    6. 检查日志输出

    • 查看节点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 +++

    正常情况会不conf停输出++++Generating seal,表示共识正常。

    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...

    7、docker部署

    ​ docker部署需要安装docker环境,并且配置docker用户组,开启docker服务

    service docker start

    ​ 建链采用docker (指定build_chain.sh文件-d参数即可)

    bash build_chain.sh -l 127.0.0.1:4 -d -p 30300,20200,5845 -e fisco-bcos

    ​ 开启节点时候,会有节点的显示

    ​ 使用docker命令查看区块链系统状态

    docker ps -a | egrep fiscobcso

    8、多群组部署

    9、并行多组部署

    例 : 四节点两群组饼并行

    • 搭建默认的group1的区块链系统

      ./build_chain.sh -l 127.0.0.1:4 -o multi_nodes -p 20000,20100,7545
    • 启动所有节点

    ./bash start_all.sh
    ​
    检查区块链系统状态
    ps -aux | grep fisco-bcos
    ​
    查看节点共识情况
    tail -f node0/log/* | grep "g:1.*++"
    • 将group2加入区块链 ---- 并行多组区块链每个群组的genesis配置文件几乎相同,只需修改[group].id的

      在每个节点的conf目录下 进行

              —拷贝group1的配置并命名为 group.2.*

    ​ —修改群组id

    ​ sed -i "s/id=1/id=2/g" node0/conf/group.2.genesis

    ​ 查看修改情况

    ​ cat node0/conf/group.2.genesis | grep "id"

    ​ — 将配置拷贝到各个节点

    ​ cp .......

    ​ — 重启各个节点

    • 查看群组共识情况

    查看所有节点与新加入的群组的共识情况
    tail -f node0/log/* | grep "g:2.*++"
    • 配置控制台

      拷贝并配置config.toml文件
      修改控制台连接节点的端口为褡裢指定的channel_chain的端口,后面新建的群组则+1
      ​
      # 获取channel_port
      $ grep "channel_listen_port" multi_nodes/127.0.0.1/node0/config.ini
      multi_nodes/127.0.0.1/node0/config.ini:    channel_listen_port=20100
      ​
      # linux系统使用如下命令:
      $ sed -i 's/127.0.0.1:20200/127.0.0.1:20100/g' ~/fisco/console/conf/config.toml
      $ sed -i 's/127.0.0.1:20201/127.0.0.1:20101/g' ~/fisco/console/conf/config.toml 

    10、单群组多机构不同端口部署

    控制台

    2、配置及使用控制台

    ​ 控制台2.6版本给予Java SDK实现,所以需要安装java并且配置环境

    ​ 链接FISCO-BCOS节点,,查询区块链状态,部署和调用合约

    • 准备依赖
      sudo apt install -y default-jdk 

      ​ 安装默认的java版本

    • 回到fisco目录
      cd ~/fisco
    • 拉取并执行fisco控制台的脚本文件
       cd  curl -#LO https://gitee.com/FISCO-BCOS/console/raw/master-2.0/tools/download_console.sh && bash download_console.sh
    • 拷贝控制台配置文件
      cp -n console/conf/config-example.toml console/conf/config.toml
      ​
      cp source dept 拷贝文件指令 
      -n 如果存在目标文件,则不生效
    • 配置控制台证书

      cp -r nodes/127.0.0.1/sdk/* console/conf/
      ​
      cp -r source dept
      将nodes/127.0.0.1/sdk/* 的所有文件拷贝到 console/conf/下

    3、启动并使用控制台

    • ​ 启动

      cd ~/fisco/console && bash start.sh
      ​
      =============================================================================================
      Welcome to FISCO BCOS console(2.6.0)!
      Type 'help' or 'h' for help. Type 'quit' or 'q' to quit console.
       ________  ______   ______    ______    ______         _______    ______    ______    ______
      |        \|      \ /      \  /      \  /      \       |       \  /      \  /      \  /      \
      | $$$$$$$$ \$$$$$$|  $$$$$$\|  $$$$$$\|  $$$$$$\      | $$$$$$$\|  $$$$$$\|  $$$$$$\|  $$$$$$\
      | $$__      | $$  | $$___\$$| $$   \$$| $$  | $$      | $$__/ $$| $$   \$$| $$  | $$| $$___\$$
      | $$  \     | $$   \$$    \ | $$      | $$  | $$      | $$    $$| $$      | $$  | $$ \$$    \
      | $$$$$     | $$   _\$$$$$$\| $$   __ | $$  | $$      | $$$$$$$\| $$   __ | $$  | $$ _\$$$$$$\
      | $$       _| $$_ |  \__| $$| $$__/  \| $$__/ $$      | $$__/ $$| $$__/  \| $$__/ $$|  \__| $$
      | $$      |   $$ \ \$$    $$ \$$    $$ \$$    $$      | $$    $$ \$$    $$ \$$    $$ \$$    $$
       \$$       \$$$$$$  \$$$$$$   \$$$$$$   \$$$$$$        \$$$$$$$   \$$$$$$   \$$$$$$   \$$$$$$
      ​
      =============================================================================================
      ​
      启动成功

    4、部署

    ​ (开启控制台)将自己写的合约存放在控制台的目录下

    contracts/solidity/*

    ​ 部署合约

    ​ 从默认目录获取文件,默认目录为: contracts/solidity,比如:HelloWorld。

    deploy 合约名
    [group:1]> deploy HelloWorld
    transaction hash: 0xd0305411e36d2ca9c1a4df93e761c820f0a464367b8feb9e3fa40b0f68eb23fa
    contract address:0xb3c223fc0bf6646959f254ac4e4a7e355b50a344

    获取节点信息

    [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'
        }

    调用合约相关函数call 合约名 合约地址 无参函数 | 有参函数 参数列表

    5、创建和使用账户

    • 账户分为用户账户和合约账户。用户账户用来标识和区分每一个独立用户

    • 在公私钥体系的区块链系统中,每一个账户对应着一对公钥和私钥,公钥通过哈希等单向性算法得到账户地址(外部账户地址)

      1、用户的创建

      	获取生成账户脚本			
      
      
      
        curl -#LO https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/FISCO-BCOS/FISCO-BCOS/tools/get_account.sh && chmod u+x get_account.sh && bash get_account.sh -h
    • 生成账户

      bash get_account.sh
      ​
      Usage: ./get_account.sh
          default       generate account and store private key in PEM format file
          -p            generate account and store private key in PKCS12 format file
          -k [FILE]     calculate address of PEM format [FILE]
          -P [FILE]     calculate address of PKCS12 format [FILE]
          -h Help
        
      -default 默认生成pem格式私钥
      -k 指定已有的pem格式的私钥文件来计算账户地址
    • 执行输出

    [INFO] Account Address   : 0xee5fffba2da55a763198e361c7dd627795906ead
    [INFO] Private Key (pem) : accounts/0xee5fffba2da55a763198e361c7dd627795906ead.pem  
    • 指定PEM私钥文件计算账户地址

      bash get_account.sh -k accounts/0xee5fffba2da55a763198e361c7dd627795906ead.pem  
      ​
      输出
      [INFO] Account Address   : 0xee5fffba2da55a763198e361c7dd627795906ead
    • 指定PKSC12私钥格式

    bash get_account.sh -p 
    ​
    Enter Export Password:
    Verifying - Enter Export Password:
    [INFO] Account Address   : 0x02f1b23310ac8e28cb6084763d16b25a2cc7f5e1
    [INFO] Private Key (p12) : accounts/0x02f1b23310ac8e28cb6084763d16b25a2cc7f5e1.p12
    • 生成的账户私钥文件在accounts目录下

      0x52fc6a526ded4562756df2db54ea0076b675f53d.pem         0xae50531e77312ea04fd82fce252847b0bd23e432.pem
      0x52fc6a526ded4562756df2db54ea0076b675f53d.public.pem  0xae50531e77312ea04fd82fce252847b0bd23e432.public.pem
      
      
      
    2、账户的使用

    ​ 控制台加载私钥时需要指定私钥文件。如果不指定私钥文件,则默认使用控制台中account/ency中的账户

    • 控制台启动方式

    ./start.sh
    ./start.sh groupID
    ./start.sh groupID -pem pemName
    ./start.sh groupID -p12 p12Name
    ​
    例 : bash start.sh 1 -pem accounts/0xebb824a1122e587b17701ed2e512d8638dfb9c88.pem

    6、账户权限控制

    基于角色的权限控制
    委员

    ​ 链初始状态,没有任何权限账户记录。都是自由人

    1、委员新增、撤销与查询

    ​ 委员权限:治理投票、增删节点、冻结解冻合约、冻结解冻账号、修改链配置和增删运维账号

    ​ 增,删委员需要所有委员投票,有效票大于阈值才生效。大约0.5的水平.

    使用账户1的账号添加账户1为委员
    [group:1]> grantCommitteeMember 0x61d88abf7ce4a7f8479cff9cc1422bef2dac9b9a
    {
        "code":0,
        "msg":"success"
    }
    ​
    使用账户1(在账户1控制台中)添加账户2为委员
    [group:1]> grantCommitteeMember 0x72fc1fcb85331f62f29d78ad37d20fef8d8fe0d3
    {
        "code":0,
        "msg":"success"
    }
    ​
    [group:1]> listCommitteeMembers 
    ---------------------------------------------------------------------------------------------
    |                   address                   |                 enable_num                  |
    | 0x52fc6a526ded4562756df2db54ea0076b675f53d  |                      1                      |
    | 0x72fc1fcb85331f62f29d78ad37d20fef8d8fe0d3  |                      2                      |
    ---------------------------------------------------------------------------------------------
    ===========================================================================================================
    ​
    撤销账号2的委员权限
    账号1投票撤销账号2的委员权限
    [group:1]> revokeCommitteeMember 0x72fc1fcb85331f62f29d78ad37d20fef8d8fe0d3
    TransactionHash: 0xfb402484d161c6a8ff3f67880896cf804ef26ad3459441f6d4950ed719499e89
    {
        "code":0,
        "msg":"Success"
    }
    ​
    账号2投票撤销账号2的委员权限
    [group:1]> revokeCommitteeMember 0x72fc1fcb85331f62f29d78ad37d20fef8d8fe0d3
    TransactionHash: 0xa69649e8534eb21b75029c74fd828afb3823d3511f9c7da8d5ec4df236221b34
    {
        "code":1,
        "msg":"Success"
    }

    2、委员权重修改

    ​ 就是修改委员一次投票所拥有的有效投票数量 。 需要委员会的投票同意

    updateCommitteeMemberWeight 账户地址 票数
    ​
    [group:1]> updateCommitteeMemberWeight 0x52fc6a526ded4562756df2db54ea0076b675f53d 2
    TransactionHash: 0x0b573cb88b4989a4ec61f09f535ade2343e5eaf6a076d693d31886d6e5d0f982
    {
        "code":0,
        "msg":"Success"
    }

    3、委员投票生效阈值修改

    当前环境 账号1:2票

    ​ 账号3 : 1票即只需要账号1同意账号2为委员即可生效

    [group:1]> grantCommitteeMember 0x72fc1fcb85331f62f29d78ad37d20fef8d8fe0d3
    TransactionHash: 0x4bdcbe5da325efa9f9fb7a0f4fd9816f4a06a7d9e83533ddb29899ed49c35112
    {
        "code":1,
        "msg":"Success"
    }

    修改投票生效阈值

    updateThreshold 阈值
    [group:1]> updateThreshold 75
    TransactionHash: 0x9e4ae5e7441204a706cafaf7aab7fc6abb666cab7be52472b04fff10d9e4a804
    {
        "code":0,
        "msg":"Success"
    }

    运维

    ​ 部署合约、创建表、冻结解冻所部署的合约、使用CNS服务

    1、运维新增、撤销与查询
    新增账号4
    bash get_account.sh
    ​
    委员可单独添加运维账号,不需要投票即可
    ​
    设置账号4为运维账号
    [group:1]> grantOperator 0x283f5b859e34f7fd2cf136c07579dcc72423b1b2
    {
        "code":0,
        "msg":"success"
    }
    ​
    [group:1]> listOperators
    ---------------------------------------------------------------------------------------------
    |                   address                   |                 enable_num                  |
    | 0x283f5b859e34f7fd2cf136c07579dcc72423b1b2  |                     15                      |
    ---------------------------------------------------------------------------------------------
    ​
    撤销账号运维权限
    [group:1]> revokeOperator 0x283f5b859e34f7fd2cf136c07579dcc72423b1b2
    {
        "code":0,
        "msg":"success"
    }
    ​
    [group:1]> listOperators
    Empty set.
    ​
    • ​ 运维账号部署HelloWold

      deploy HelloWold
      ​
      [group:1]> deploy HelloWorld 
      transaction hash: 0xb1d1086a81da1583535972adaba49c688a9117791e1bd812e0008c32710f879f
      contract address: 0x64151bb02928f3cb484e665d242eb21eb8acf949
      currentAccount: 0xbba2725cfd3ccb203933924650716a02bf812392
    • 非运维账号部署HelloWold

      [group:1]> deploy HelloWorld 
      transaction hash: 0xff32c07215526959003fdbc22ad79cc0f17c47a5e6fac9445c0dcb060811480f
      deploy contract for HelloWorld failed!
      return message: Permission denied
      return code:25
      Return values:null

    基于表的权限控制

    7、控制台常用命令

    通过Java SDK于区块链节点建立连接,实现对区块链节点数据的读写访问请求。

    • 获取部署合约的区块信息 getBlockByHash 部署合约返回的交易hash

    • 查看交易回执 getTransactionReceip 交易hash

    • 控制台切换账号 loadAccount 账号地址

    • 设置系统中区块打包最大交易数量

      setSystemConfigByKey tx_count_limit 数量
    • 控制台中查看共识状态

    getConsensusStatus
    
    
    
    • 控制台中查看同步状态

    getSyncStatus
    
    查看当前控制台连接区块链节点的id。以及当前控制台连接的节点的peers列表
    
    
    
    • 查看创世区块

      getBlockByNumber 0
      
      
      
    • 查看区块链节点的网络连接信息

      getPeers
      
      
      

    8、控制台报错

    • 节点加入共识列表报错 ( "nodeId is not in network" )

      • 新加入的节点必须处于运行状态(节点已启动)

      • 新加入的节点与其他共识节点建立网络连接 。 即节点已经启动且 tail -f node/log/log* | grep connected 有输出

    • 控制台启动报错

      • 节点进程未启动 (检查节点进程 ps aux | grep fisco-bcos)

    • 新节点加入共识列表成功后,检查节点共识状态没输出

      • 群组配置文件未拷贝。节点共识时需要根据 群组配置文件

    • Permission denied错误

      • 当前群组内开启了权限控制。控制台当前用来发送交易的账户没有权限

    扩容新节点

    • 共识节点 : 参与共识的节点

    • 观察者节点 : 不参与共识,但能实时同步链上数据的节点

    • 游离节点 : 已启动,待等待加入群组的节点。不能获取链上的数据

    设置节点状态

    addSealer:根据节点NodeID设置对应节点为共识节点
    ​
    addObserver:根据节点NodeID设置对应节点为观察节点
    ​
    removeNode:根据节点NodeID设置对应节点为游离节点
    ​
    getSealerList:查看群组中共识节点列表
    ​
    getObserverList:查看群组中观察节点列表
    ​
    getNodeIDList:查看节点已连接的所有其他节点的NodeID

    扩充节点步骤

    1、为节点生成证书并启动

    ​ 节点间简历链接需要证书来支持 。 所以首先要签发证书

    获取证书生成脚本

    curl -#LO https://gitee.com/FISCO-BCOS/FISCO-BCOS/raw/master-2.0/tools/gen_node_cert.sh

    生成新节点私钥证书

    bash gen_node_cert.sh -c ../cert/agency -o node4
    ​
    -c : 指定机构证书以及私钥所在路径
    -o : 指定输出指定文件夹。其中新节点/conf中有机构agency签发的证书和私钥

    ​ 节点需要有配置文件 启动脚本和停止脚本

    准备节点配置文件

    cp node0/conf/config.ini node0/start.sh node0/stop.sh node4/
    
    
    

    修改配置文件的信息

    修改所有端口号

    修改node4/config.ini。对于[rpc]模块,修改channel_listen_port=20204和jsonrpc_listen_port=8549;对于[p2p]模块,修改listen_port=30304并在node.中增加自身节点信息
    
    
    

    修改其余节点P2P节点连接列表

    在其余节点中的config.ini主配置文件中加入新节点的信息,并重启节点
    
    
    

    拷贝节点的group1.genesis和group1.ini文件到i新节点conf下

    cp node0/conf/group.1.genesis node0/conf/group.1.ini node4/conf/

    检验新节点是否于其他节点建立连接

    tail -f node4/log/log* | grep "connected count"
    
    
    

    2、将节点加入到群组
    **获取新节点的公钥id**
    cat node5/conf/node.nodeid

    使用控制台addSealer

     **在控制台中**
     addSealer 新节点id 

    缩减节点步骤

    节点需要先退出群组在退出网络 。顺序需要用户自己保证

    1、节点退出群组

    ​ 在控制台中使用removeNode node.id,将节点设置为游离节点

    removeNode node.id

    ​ 在控制台中使用getSealerList查询节点是否还在共识列表中

    get SealerList
    
    
    

    2、节点退出网络

    ​ 在节点的config.ini配置文件中,将节点的P2P节点连接列表内容清空,重启节点

    [p2p]
        listen_ip=0.0.0.0
        listen_port=30300
        ; nodes to connect
      #  node.0=127.0.0.1:30300
      #  node.1=127.0.0.1:30301
      #  node.2=127.0.0.1:30302
      #  node.3=127.0.0.1:30303

    在其他节点config.ini配置文件中,将节点从其余节点的P2P列表中移除,并重启

    CA黑白名单

    CA黑名单

    证书拒绝列表

    在节点config文件中[certificate_blacklist]中配置,拒绝此NodeID节点发起的连接

    CA白名单

    证书接收列表

    在节点config文件中[certificate_whitelist]中配置,拒绝除白名单之外的所有节点发起的连接

    所属配置类型

    • 基于作用范围(网络配置/账本配置)维度可划分为网络配置,影响整个网络的节点连接建立过程;

    • 基于是否可改(可改配置/固定配置)维度可划分为可改配置,内容可改,重启后生效;

    • 基于存放位置(本地存储/链上存储)维度可划分为本地存储,内容记录在本地,不存于链上

    • 黑名单:拒绝写在黑名单中的节点连接

    • 白名单:拒绝所有未配置在白名单中的节点连接。白名单为空表示不开启,接受任何连接。

    获取和续期证书

    1、三级证书结构

    ​ 链证书 》机构证书 》节点证书

    多群组架构中

    • 一条链拥有 链证书 和 链私钥 ,链私钥由联盟链委员会管理 (类似于链的集合体,每条链都需要将自己的私钥给其管理)

      联盟链委员会可以使用机构的证书请求文件 agency.csr 签发机构证书 agency.crt

      ca.crt 链证书
      ca.key 链私钥
      
      
      
    • 机构

      机构私钥由机构管理员持有,可以对机构下属节点签发节点证书

    • 节点

      节点证书是节点身份凭证、是与其他持有合法证书的节点建立SSL连接,并进行加密通信的基础

      进行SSL加密通信时,拥有相同链证书ca.crt的节点才可建立连接(在同一条链上的节点)

      节点证书node.crt包含了节点证书和机构证书的信息,节点与其他节点/SDK通信验证时会用自己的私钥node.key对消息进行签名,并发送自己的node.crt至对方验证

    • sdk

      sdk证书是sdk与节点通信的凭证、机构生成sdk证书,运行sdk与节点进行通信

    2、证书生成流程

    • 生成链证书

      联盟链委员会使用openssl命令请求链私钥ca.key , 根据ca.key生成链证书

    • 生成机构证书

      机构使用openssl命令生成机构私钥 agency.key

      机构使用机构私钥agency.key,得到机构证书请求文件agency.csr,将其发送到联盟链委员会

      联盟链委员会使用链私钥ca.key,根据得到的机构证书请求文件生成机构证书并发回

    • 生成节点/SDK证书

      节点生成私钥node.key 和证书请求文件node.csr,机构管理员使用私钥agency.key和证书请求文件node.csr为节点颁发证书,生成sdk证书相同

    3、续期证书

    获取检测证书有效期脚本,在node2/conf/scrpts目录下输入

    curl -#LO https://gitee.com/FISCO-BCOS/generator/raw/master/scripts/check_certificates.sh && chmod u+x check_certificates.sh
    
    
    

    检测证书有效期

    bash check_certificates.sh -t 证书
    ​
    -t 指定证书签发的有效期和当前系统时间对证书进行检测
    成功末尾提示check ca.crt time successful
    ​
    root@test1-virtual-machine:~/fisco/nodes/127.0.0.1/node2/scripts# bash check_certificates.sh -t ../conf/ca.crt 
    check ca.crt time started
    ca.crt valid time is NOT BEFORE Sep 30 03:10:51 2023 GMT and NOT AFTER Sep  6 03:10:51 2123 GMT
    check ca.crt time successful
    ​

    验证证书

    bash check_certificates.sh -v 根证书 节点证书
    ​
    -v 根据用户指定的根证书从而验证节点证书
    成功末尾提示use ../conf/ca.crt verify node.crt successful
    ​
    ​
    root@test1-virtual-machine:~/fisco/nodes/127.0.0.1/node2/scripts# bash check_certificates.sh -v ../conf/ca.crt ../conf/node.crt
    check ca.crt time started
    ca.crt valid time is NOT BEFORE Sep 30 03:10:51 2023 GMT and NOT AFTER Sep  6 03:10:51 2123 GMT
    check ca.crt time successful
    check node.crt time started
    node.crt valid time is NOT BEFORE Sep 30 03:10:52 2023 GMT and NOT AFTER Sep  6 03:10:52 2123 GMT
    check node.crt time successful
    use ../conf/ca.crt verify node.crt successful
    ​

    获取和续期证书 — FISCO BCOS v2 v2.9.0 文档 (fisco-bcos-documentation.readthedocs.io)

    压力测试

    执行HelloWorld 合约测试

    npx caliper benchmark run --caliper-workspace caliper-benchmarks --caliper-benchconfig benchmarks/samples/fisco-bcos/helloworld/config.yaml  --caliper-networkconfig networks/fisco-bcos/4nodes1group/fisco-bcos.json

    执行Solidity版转账合约测试

    npx caliper benchmark run --caliper-workspace caliper-benchmarks --caliper-benchconfig benchmarks/samples/fisco-bcos/transfer/solidity/config.yaml  --caliper-networkconfig networks/fisco-bcos/4nodes1group/fisco-bcos.json

    执行预编译版转账合约测试

    npx caliper benchmark run --caliper-workspace caliper-benchmarks --caliper-benchconfig benchmarks/samples/fisco-bcos/transfer/precompiled/config.yaml  --caliper-networkconfig networks/fisco-bcos/4nodes1group/fisco-bcos.json

    caliper benchmark run

    执行此命令,需要到benchmarks目录下

    user@ubuntu:~/benchmarks$ npx caliper benchmark run --help
    caliper benchmark run --caliper-workspace ~/myCaliperProject --caliper-benchconfig my-app-test-config.yaml --caliper-networkconfig my-sut-config.yaml
    ​
    Options:
      --help                   Show help  [boolean]
      -v, --version            Show version number  [boolean]
      --caliper-benchconfig    Path to the benchmark workload file that describes the test client(s), test rounds and monitor.  
      用于指定测试配置文件 ,测试配置文件中包含测试的具体参数 , 交易发送方式,发送速率控制器类型,性能监视器等
      
      [string]
      --caliper-networkconfig  Path to the blockchain configuration file that contains information required to interact with the SUT
      用于指定网络配置文件 , 网络配置文件中会指定Caliper 与受测系统的连接方式及要部署测试的合约 
      
     [string]
      --caliper-workspace      Workspace directory that contains all configuration information  [string]
        指定caliper-cli的工作目录 ,如果没有绑定工作目录, 可以通过该选项动态指定工作目录

    实战情况

    • 当前存放了caliper-benchmarks的文件夹

    • 执行 npx caliper benchmark run --caliper-workspace 【caliper工作目录】

      • --caliper-workspace caliper-benchmarks

    • 附带 --caliper-networkconfig 【网络配置文件路径,实在caliper工作目录里头的network文件夹】

      • --caliper-networkconfig networks/fisco-bcos/test-nw/fisco-bcos.json

    • 附带 --caliper-benchconfig 【测试配置文件 ,实在 caliper 工作目录里头的benchmarks文件夹】

      • --caliper-benchconfig benchmars/samples/fisco-bcos/合约文件夹/config.yaml

    测试Trace 合约的 newFood方法

    • 首先,查看 caliper工作目录 / benchmarks/samples/fisco-bcos 有没有存放了该合约的测试配置文件夹 (config.yaml 。测试配置文件 ) 。 (测试方法.js 文件) 。如果没有,则拷贝helloworld的进行修改 (config.yaml , get.js (调用读取的方法) , set.js (调用写的方法))

      • config.yaml 文件

       rounds:
          - label: new-food
            description: Test performance of  name
            txNumber:
              - 10
            rateControl:
              - type: fixed-rate
                opts:
                  tps: 1
            callback: benchmarks/samples/fisco-bcos/trace/newFood.js
      ​
      主要修改txNumber 和tps通过率。
      callback指定要测试的合约的方法的js文件路径。从工作目录下的benchmarks开始
    • 修改get.js文件

      • module.exports.run = function () {
            return bc.queryState(contx, 'helloworld', 'v0', null, 'get()');
        };
        ​
        --contx 不变
        --合约名 小写
        -- v0  不变
        -- 形参 
        -- 方法名
    • 修改set.js文件

      • function generateWorkload() {
            let workload = [];
            for (let i = 0; i < txnPerBatch; i++) {
                let w = {
                    'transaction_type': 'set(string)',
                    'name': 'hello! - from ' + process.pid.toString(),
                };
                workload.push(w);
            }
            return workload;
        }
        ​
        --'transaction_type' :指定合约 '方法名(方法形参)'
        设置测试合约的方法的参数
        '方法形参' : "参数值"
        '方法形参' : "参数值"
    • 查看要测试的合约

      • 合约存放路径 : caliper工作路径 /src/fisco-bcos/小写合约名文件夹/合约.sol

    • 复制要测试的合约路径后,配置caliper网络配置文件。指定caliper测试的合约路径

      • vim caliper-benchmarks/networks/fisco-bcos/test-nw/fisco-bcos.json

    ​ id 为 合约文件夹

    ​ path 为 存放合约的路径 (默认 caliper工作目录 / 开始 )

    ​ language 指定两种类型的合约 : solidity合约 | 预编译合约 ,

    ​ -- solidity 合约 :"language" : "solidity"

    ​ -- 预编译合约 : "language" : "precomplied"

    ​ -- 额外i添加字段 "address": "合约地址"

    WeBASE 可视化平台部署

    1、 webase.front

    • 节点前置平台部署

      • 解压安装包 unzip webase-front.zip

      • 拷贝sdk证书文件 。 (在build_chain 生成)

        • 链sdk包含ca.crt , sdk密钥文件

        • 拷贝 : cp -r nodes/${ip}/sdk/* ./conf/

    • 状态检查

    1、检查进程

    ps -ef | grep webase.front

    2、检查进程端口

    netstat -anlp | grep 5002

    3、检查服务日志

    grep "main run success" log/WeBASE-Front.log
    ​
    2020-12-09 15:47:25.383 [main] INFO  Application() - main run success...

    2、一键部署WeBASE

    • 前置条件 mysql 、python3环境、java环境、等

    • 修改配置文件

      • vim common.properties
        若为可视化部署 则修改visual-deploy.properties
        ​
        主要修改数据库配置和链配置
      • 使用已有链/搭建新链

        修改properties配置文件
        if.exist.fisco = no/yes
        ​
        配置已有链
        在properties配置文件中。
        已有链路径 ,start_all.sh脚本所在路径。且路径下存在sdk目录
        fisco.dir=/data/app/nodes/127.0.0.1
    • 状态检查

      • 检查各子系统进程

        ps -ef | grep 服务
        节点进程 ndoe
        节点前置进程 webase.front
        节点管理服务进程 webase.node.mgr
        节点管理平台 webase-web ==》 nginx
        签名服务进程 webase.sign
      • 检查进程端口

        netstat -anlp | grep 服务端口
        节点channel端口 20200
        webase-front 5002
        webase-node-mgr 5001
        webase-web 5000
        webase-sign 5004
        ​
        输出
        tcp        0      0 0.0.0.0:20200           0.0.0.0:*               (状态)LISTEN      (进程id)29069/fisco-bcos

    3、数据库用户设置

    • 创建用户

      create USER 'username'@'ip' IDENTIFIED BY 'password';
      ​
      ip -- localhost 限制此用户只能从本地主机访问
      ip -- % 用户可以从任何主机上访问此数据库

      mysql中创建新的用户,新用户只有USAGE权限(只允许进行基本的连接MYSQL服务器和认证,没有对具体数据库或表的其他权限

    • 查看用户命令

      SHOW GRANTS FOR 'username'@'ip';
    • 赋予用户权限

    GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost';
    赋予用户所有数据库权限
    ​
    GRANT ALL PRIVILEGES ON 'database_name'.* TO 'username'@'localhost';
    赋予用户特定数据库的权限
    ​
    GRANT ALL PRIVILEGES ON 'database_name'.'table_name' TO 'username'@'localhost'
    赋予用户特定数据库特定表的权限
    ​

    • 设置root用户远程访问

    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION
    ​
    *.*  --所有数据库和所有表
    ​
    '用户'@'远程访问此主机数据库的ip' --%表示所有ip          
    • 创建test用户并且授权本地访问

    GRANT ALL PRIVILEGES ON *.* TO 'test'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
    ​
    flush PRIVILEGES;

    4、可视化部署

    是只通过WeBASE管理平台,在多台主机上快速部署FISCO-BCOS底层节点和WeBASE-Front前置

    1、系统环境
    • 可视化部署搭建至少2节点的区块链服务。WeBASE宿主机至少1G空闲内存(节点管理和签名服务)

    • 节点机。一个节点+前置镜像至少1G空闲内存。

    • 查询主机内存情况 Linux命令

      free -mh
    • 释放主机内存Linux命令

      echo [1|2|3] > /proc/sys/vm/drop_caches (释放所有内存)

    2、系统环境

    配置系统依赖分成宿主机(WeBASE管理平台)和节点主机(节点所在机)

    宿主机 : 安装WeBASE-Node_Manager主机,配置Ansible , 配置Ansible 免密登录节点机

    节点主机 : 用于安装节点的主机 ,配置docker 及docker用户组 ,配置Ansible 用户的sudo权限,安装Fisco-Bocs依赖

    宿主机 也需要安装节点时,则需要同时配置

    3、宿主机配置
    • 配置Ansible

      • 安装ansible (仅在宿主机安装节点时,则仅需安装ansible,无需host和免密配置。因为不需使用Ansible来管理远程主机)

      • 配置Ansible host列表

      • 配置Ansible 免密登录到节点主机

    3.1安装Ansible
    apt-get update
    apt-get isntall ansible
    ​
    验证
    ansible --version
    3.2配置Ansible host_key_checking
    vi /etc/ansible/ansible.cfg
    ​
    去掉注释
    host_key_checking = Flase
    3.3免密登录配置
    • 生成秘钥对

      ssh-keygen -t rsa -m PEM
      ​
      直接两次回车即可生成
    • 将公钥文件上传到需要免密登录的主机

      ssh-copy-id -o StrictHostKeyChecking=no -i ~/.ssh/id_rsa.pub root@[IP]
      ​
      ssh-copy-id 复制文件到远程注解上
      -o StriciHostKeyChecking=no  关闭严格主机密钥检查,第一次连接新服务器时,SSH会询问你是否信任该服务器,并将其添加到已知主机文件中,如果选择no,SSH将不会询问你,而是自动接收新的主机
      -i 指定要复制到远程服务器的公钥文件的位置
      ​
      输出结果出现 Number of key(s) added: 1 结果,表示免密登录配置成功
      检查 ssh -o StrictHostKeyChecking=no root@[IP]
    • 配置 Ansible Hosts与免密登录

      在/etc/ansible/hosts 中添加IP组 (节点主机的IP、免密登录账号、数组机私钥路径、SSH端口)
      ​
      vi /etc/ansible/hosts
      [webase]
      {远程主机ip} ansible_ssh_private_key_file={宿主机私钥文件路径} ansible_ssh_user={免密登录账号} ansible_ssh_port={ssh端口}
      • 测试Ansible

        执行Ansible的 --list-hosts命令查看是否已经添加陈功
        ​
        ansible ip组 --list-hosts
        ​
        oot@admin:~/.ssh# ansible webase --list-hosts
          hosts (1):
            192.168.44.154
      • 检测添加到hosts中各个远程主机能否被访问、免密配置是否已生效

        ansible ip组 -m ping
        ​
        192.168.44.154 | SUCCESS => {
            "ansible_facts": {
                "discovered_interpreter_python": "/usr/bin/python"
            },
            "changed": false,
            "ping": "pong"
        }

    4、节点机配置

    配置Docker 需要在每个安装节点的主机上都要执行

    4.1 配置Docker
    • 安装Docker服务

      # 该脚本是 Docker 官方提供的 Linux 自动安装脚本
      bash <(curl -s -L get.docker.com) 
    • 配置docker用户组(docker ps 必须使用sudo才能运行,则需要如下修改)

      • 检测docker ps 命令 
        
        若docker ps 报错 Permisstion Denied 则需要配置docker 用户组
        
        创建docker用户组
        sudo groupadd docker
        将当前用户添加到docker用户组 
        sudo usermod -aG docker &USER
        重启docker服务
        sudo systemctl restart docker
        切换或者退出当前账户,重新登录
        
        
        
    • 拉取docker镜像

    比赛样式环境

    安装ansible

    生成ssh密钥文件

    发送公钥到远程主机上

    配置ansible hosts列表

    修改 visual-deploy.properties 文件

    数据库配置

    修改节点管理服务配置文件 webase-node-mgr/conf/application.yaml 1. 部署方式 : deployType = 1 2. 签名子服务的ip

    5、一键Docker部署

    • webase-deploy文件夹

    1 、docker部署mysql (可选)
    • 若未安装mysql。可以在配置文件进行docker 拉取 mysql镜像 并 实例化一个docker容器的设置 。 (修改common.properties)

    • 配入 :*docker.mysql=1

    不使用Docker启动Mysql ,则配置

    节点管理子系统与当前主机mysql数据库连接信息

    # 节点管理子系统mysql数据库配置
    mysql.ip=127.0.0.1
    mysql.port=3306
    mysql.user=dbUsername
    mysql.password=dbPassword
    mysql.database=webasenodemanager
    
    # 签名服务子系统mysql数据库配置
    sign.mysql.ip=localhost
    sign.mysql.port=3306
    sign.mysql.user=dbUsername
    sign.mysql.password=dbPassword
    sign.mysql.database=webasesign
    
    
    

    2 、部署
    python3 deploy.py installDockerAll
    ​
    ​
    # 一键部署
    部署并启动所有服务        python3 deploy.py installDockerAll
    停止一键部署的所有服务    python3 deploy.py stopDockerAll
    启动一键部署的所有服务    python3 deploy.py startDockerAll
    # 节点的启停
    启动所有FISCO-BCOS节点:      python3 deploy.py startNode
    停止所有FISCO-BCOS节点:      python3 deploy.py stopNode
    # WeBASE服务的启停
    启动所有WeBASE服务:      python3 deploy.py dockerStart
    停止所有WeBASE服务:      python3 deploy.py dockerStop

    3、状态检查
    docker ps | grep 服务容器名
    节点容器 fiscobcos
    节点前置容器 webase-front
    节点管理服务容器 webase-node-manager
    节点平台容器 webase-web
    签名服务容器 webase-sign
    
    
    

    Docker 知识

    • docker ps 检测

      • 若docker ps 报错 Permission Denied 则需要配置docker 用户组

        • 创建docker用户组
          groupadd docker
          将当前登录的用户添加到docker用户组
          usermod -aG docker $USER
          重启docker服务
          serveice docker restart
          
          
          

    Truffle测试

    区块链浏览器

    展示区块链系统的界面

    一键部署

    • 前提条件

    • 依赖要求 : openssl curl wget git nginx dos2unix 等软件

    • 拉取安装脚本

      wget https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/FISCO-BCOS/fisco-bcos-browser/releases/download/v2.2.5/browser-deploy.zip
      ​
      解压安装包
      unzip browser-deploy.zip
      进入目录
      cd browser-deploy
    • 修改配置

      vim common.properties
      ​
      数据库的配置
      数据库IP:sed -i "s/127.0.0.1/${your_db_ip}/g" common.properties
      数据库端口:sed -i "s/3306/${your_db_port}/g" common.properties
      数据库用户名:sed -i "s/dbUsername/${your_db_account}/g" common.properties
      数据库密码:sed -i "s/dbPassword/${your_db_password}/g" common.properties
      数据库名称:sed -i "s/db_browser/${your_db_name}/g" common.properties
      ​
      前端服务端口:sed -i "s/5100/${your_web_port}/g" common.properties
      后端服务端口:sed -i "s/5101/${your_server_port}/g" common.properties
      ​
      例子(将数据库IP由127.0.0.1改为0.0.0.0):sed -i "s/127.0.0.1/0.0.0.0/g" application.yml
    • 部署服务

      python3 deploy.py installAll  部署并启动所有服务
      python3 deploy.py startAll  启动所有服务
      python3 deploy.py stopAll 停止所有服务
    • 状态检查

      检查后端server进程
      ps -ef | grep org.bcos.browser
      ​
      检查前端nginx进程
      ps -ef | grep browser | grep nginx
      ​
      检查进程端口
      netstat -anlp | grep 5101
      netstat -anlp | grep 5100
    • 访问

      https://ip:5100/
      
      
      

    运维部署工具

    功能 : 部署,管理,监控多机构多群组联盟链

    FISCO_BCOS网络搭建

    使用MySQL存储引擎

    • 安装mysql

      sudo apt install -y mysql-server mysql-client libmysqlclient-dev
    • 启动mysql

      service mysql start
      ​
      mysql -uroot -p
      设置root账户密码 (mysql 8.0版本禁止了)
      set password for '用户'@'访问主机' = password('密码');
    • 配置MySQL

      修改MySQL配置文件
      ​
      在/etc/mysql/my.cnf 配置文件中的[mysqld]添加
      [mysqld]
      max_allowed_packet = 1024M
      sql_mode =STRICT_TRANS_TABLES
      ssl=0
      default_authentication_plugin = mysql_native_password
    • 重启MySQL服务

      service mysql restart
    • 登录MySQL客户端验证

      mysql -uroot -p
      #执行下面命令,查看max_allowed_packet的值
      MariaDB [(none)]>  show variables like 'max_allowed_packet%';
      +--------------------+------------+
      | Variable_name      | Value      |
      +--------------------+------------+
      | max_allowed_packet | 1073741824 |
      +--------------------+------------+
      1 row in set (0.00 sec)
      ​
      #执行下面命令,查看sql_mode的值
      MariaDB [(none)]>  show variables like 'sql_mode%';
      +---------------+---------------------+
      | Variable_name | Value               |
      +---------------+---------------------+
      | sql_mode      | STRICT_TRANS_TABLES |
      +---------------+---------------------+
      1 row in set (0.00 sec)
      ​
      # 查看default_authentication_plugin的值
      MariaDB [(none)]> show variables like 'default_authentication_plugin';
      +-------------------------------+-----------------------+
      | Variable_name                 | Value                 |
      +-------------------------------+-----------------------+
      | default_authentication_plugin | mysql_native_password |
      +-------------------------------+-----------------------+
      1 row in set (0.01 sec)
    • 搭建链之后,在(群组配置文件中)修改存储配置为MySQL

      # 修改存储类型为mysql
      sed -i 's/type=rocksdb/type=mysql/g' ~/fisco/nodes/127.0.0.1/node*/conf/group.1.ini
      ​
      # 配置数据库用户名和密码(本教程中,所有节点均以root的用户名连接同一个数据库,root用户密码为123456)
      sed -i 's/db_username=/db_username=root/g' ~/fisco/nodes/127.0.0.1/node*/conf/group.1.ini
      sed -i 's/db_passwd=/db_passwd=123456/g' ~/fisco/nodes/127.0.0.1/node*/conf/group.1.ini
      ​
      # -----配置每个区块链节点在MySQL中创建的库名-----
      # 配置node0的数据库名称为db_node0
      sed -i 's/db_name=/db_name=db_node0/g' ~/fisco/nodes/127.0.0.1/node0/conf/group.1.ini
      ​
      # 配置node1的数据库名称为db_node1
      sed -i 's/db_name=/db_name=db_node1/g' ~/fisco/nodes/127.0.0.1/node1/conf/group.1.ini
      ​
      # 配置node2的数据库名称为db_node2
      sed -i 's/db_name=/db_name=db_node2/g' ~/fisco/nodes/127.0.0.1/node2/conf/group.1.ini
      ​
      # 配置node3的数据库名称为db_node3
      sed -i 's/db_name=/db_name=db_node3/g' ~/fisco/nodes/127.0.0.1/node3/conf/group.1.ini

    docker

  • 相关阅读:
    22年最新金九银十面试必备
    看完不会来揍我 | R包的下载与安装 | 再也没有一个包可以逃出你的手掌心啦
    XML 解析技术:DOM4j
    USB协议学习(二)设备枚举过程分析
    IP代理中的动态轮换住宅代理是什么?有何作用?
    sparksql insertinto 源码解析
    一次性能测试,为啥把我逼疯了?
    职业:需求量最大的6个区块链工作
    typescript---配置类相关内容(十五)
    ubuntu下用pycharm专业版连接AI服务器及其docker环境
  • 原文地址:https://blog.csdn.net/weixin_74163644/article/details/139415567