10. 新功能启用配置

此页面将介绍升级后如何开启新功能,若不是升级,则可在创建链时修改配置文件、或者默认启动。

10.1. v2.3.2 ->v3.0.0

10.1.1. 存储启动store-huge

在v3.0.0中,存储引擎支持旧引擎和新存储引擎store-huge(目前是alpha,不建议生产环境使用)。

如果要使用store-huge,必须清空当前node的所有存储数据,包括wal和数据库中的数据。 把使用store-huge的node当做一个新节点来启动。从0开始。

集群中,假设有node1,node2,node3,node4,node5 五个节点/进程。 要启动 store-huge,那么要依次操作,保证前一个启用了store-huge,并且已完全同步完区块后,再操作下一个node。 建议使用store-huge的节点数少于总节点数的一半。

注意不同的node/进程,(如果安装在一台服务器上),则不能用同一个磁盘。

1.开启store-huge 在chainmaker.yml中storage作用域下,选择使用 engine_provider: store-huge 存储引擎。如果不配置engine_provider 字段,则默认使用旧存储引擎。

  # engine provider
  engine_provider: store-huge

2.配置在线文件系统,和冷热分离系统。

engine_provider: store-huge
#block file system
block_file_config:
online_file_system: "/home/node1/hot1,/home/node1/hot2"
archive_file_system: "/home/node1/cold1,/home/node1/cold2"
#store engine version
storage_config_version:
major_version: 1
minor_version: 2

3.删除现有数据,包括文件和db

4.启动新节点

10.1.2. 虚拟机启用Docker Java

在本次v3.0.0的版本升级中,增加docker java虚拟机新特性。

10.1.2.1. Docker Java 的核心配置项:

  common:
    # 与虚拟机引擎grpc通信的最大消息发送大小, 默认100MB
    max_send_msg_size: 100
    # 与虚拟机引擎grpc通信的最大消息接收大小, 默认100MB
    max_recv_msg_size: 100
    # 与虚拟机引擎grpc通信的最大连接超时时间, 默认10s
    dial_timeout: 10

    # 运行时服务器配置 (与合约实例进程交互,进行信息交换)
    runtime_server:
      # 端口号,默认为 32351
      port: 32351
  java:
    # 是否启用Java容器
    enable: true
    # 数据挂载路径, 包括合约、sock文件(uds)
    data_mount_path: ../data/wx-org1.chainmaker.org/java
    # 日志挂载路径
    log_mount_path: ../log/wx-org1.chainmaker.org/java

    # 如果需要自定义高级配置,请将vm.yml文件放入dockervm_config_path中,优先级:chainmaker.yml > vm.yml > 默认配置
    # dockervm_config_path: /config_path/vm.yml
    # 是否在控制台打印日志
    log_in_console: false
    # docker合约引擎的日志级别
    log_level: DEBUG


    # 合约引擎最多启用的原始合约进程数,默认为20(跨合约调用会额外拉起新的进程)
    max_concurrency: 20

    # 合约引擎服务器配置 (与chainmaker交互,进行交易请求、合约请求等交互)
    contract_engine:
      # 合约引擎服务器ip, 默认为 127.0.0.1
      host: 127.0.0.1
      # 端口号,默认为 23351
      port: 23351
      # 与合约引擎服务器的最大连接数
      max_connection: 5

虚拟机的完整配置请参考《启动支持Docker_VM的链》

注:common为Docker Go 和Docker Java共用的配置项,如果单独启用任一虚拟机都需要配置common配置。

10.1.2.2. 启用Docker Java命令

在完成节点的升级和配置变更后,可以通过以下链配置的交易启用Docker Java。注意:需要尽可能保证java虚拟机的相关配置是有效的,以免影响虚拟机的拉起。

# 由于docker java的合约体积较大,需要修改交易参数大小为40M或以上。
./cmc client chainconfig block updatetxparametersize \
--tx-parameter-size 40 \
--sdk-conf-path=./testdata/sdk_config.yml \
--admin-key-file-paths=./testdata/crypto-config/wx-org1.chainmaker.org/user/admin1/admin1.sign.key,./testdata/crypto-config/wx-org2.chainmaker.org/user/admin1/admin1.sign.key,./testdata/crypto-config/wx-org3.chainmaker.org/user/admin1/admin1.sign.key \
--admin-crt-file-paths=./testdata/crypto-config/wx-org1.chainmaker.org/user/admin1/admin1.sign.crt,./testdata/crypto-config/wx-org2.chainmaker.org/user/admin1/admin1.sign.crt,./testdata/crypto-config/wx-org3.chainmaker.org/user/admin1/admin1.sign.crt

# 启用 docker java
./cmc client contract user invoke \
--contract-name=CHAIN_CONFIG \
--method=VM_SUPPORT_LIST_ADD \
--params="{\"vm_type\":\"dockerjava\"}" \
--sdk-conf-path=./testdata/sdk_config.yml \
--sync-result=true \
--result-to-string=true \
--admin-key-file-paths=./testdata/crypto-config/wx-org1.chainmaker.org/user/admin1/admin1.sign.key,./testdata/crypto-config/wx-org2.chainmaker.org/user/admin1/admin1.sign.key,./testdata/crypto-config/wx-org3.chainmaker.org/user/admin1/admin1.sign.key \
--admin-crt-file-paths=./testdata/crypto-config/wx-org1.chainmaker.org/user/admin1/admin1.sign.crt,./testdata/crypto-config/wx-org2.chainmaker.org/user/admin1/admin1.sign.crt,./testdata/crypto-config/wx-org3.chainmaker.org/user/admin1/admin1.sign.crt

以上命令返回的message是OK,则说明启用成功。如果日志中没有相关报错,则节点已经拉起java虚拟机,可以发起docker java合约的安装和调用。

10.2. v2.3.0、v2.3.1->v2.3.2

10.2.1. 交易黑名单

交易黑名单是新的系统合约,在232以前版本没有,故若是升级则需要手动初始化。在升级到v2.3.2版本以后,可以通过以下命令初始化之前版本中没有初始化的系统合约:

./cmc client contract user invoke \
--contract-name=CONTRACT_MANAGE \
--method=INIT_NEW_NATIVE_CONTRACT \
--sdk-conf-path=./testdata/sdk_config.yml \
--sync-result=true \
--result-to-string=true

本命令返回的message是OK,则说明新系统合约初始化成功。其使用详情可见交易黑名单

10.2.2. 开启升级合约的权限支持只有合约创建者可升级

升级合约的权限支持只有合约创建者可升级功能是旧的系统合约(contract manage)中新增逻辑。其开启、关闭是在旧的系统合约(chainconfig manage)中新增2个方法。 在升级到v2.3.2以后,可通过发送交易开启仅创建者升级。详见合约只允许创建者升级

10.3. v2.3.0->v2.3.1

10.3.1. 三段式在线多签

在v2.3.0中,使用的是两段式多签,存在一个gas扣费的问题:会扣除最后一个投票成功人。显得不合理。故在v2.3.1中加入了三段式多签操作。原有发起多签请求和发起投票不变,新增确认投票操作,只能有发起多签请求的人有权限调用。将扣除发起人的gas值。

cmc启用方式

./cmc client chainconfig enable-manual-run \
--multi-sign-enable-manual-run=false \
--sdk-conf-path=./testdata/sdk_config.yml \
--admin-key-file-paths=./testdata/crypto-config/wx-org1.chainmaker.org/user/admin1/admin1.sign.key,./testdata/crypto-config/wx-org2.chainmaker.org/user/admin1/admin1.sign.key,./testdata/crypto-config/wx-org3.chainmaker.org/user/admin1/admin1.sign.key \
--admin-crt-file-paths=./testdata/crypto-config/wx-org1.chainmaker.org/user/admin1/admin1.sign.crt,./testdata/crypto-config/wx-org2.chainmaker.org/user/admin1/admin1.sign.crt,./testdata/crypto-config/wx-org3.chainmaker.org/user/admin1/admin1.sign.crt

配置文件参考

bc.yml

# Virtual machine related settings
vm:
  native:
      multisign:
        enable_manual_run: true

参考链接: cmc在线多签操作

10.3.2. 数据库慢日志

在chainmaker.yml storage下级目录添加slow_log: 0 然后重启节点即可(单节点修改当前节点就生效)

storage:
  # record DB slow log (INFO level,KV DB) when query spend time more than this value (millisecond), 0 means no record
  slow_log: 0

10.4. v2.2.1->v2.3.0

默认gas计费为关闭状态,启用gas计费,CMC参考

./cmc client gas
--sdk-conf-path=./testdata/sdk_config.yml \
--admin-key-file-paths=./testdata/crypto-config/wx-org1.chainmaker.org/user/admin1/admin1.sign.key,./testdata/crypto-config/wx-org2.chainmaker.org/user/admin1/admin1.sign.key,./testdata/crypto-config/wx-org3.chainmaker.org/user/admin1/admin1.sign.key \
--admin-crt-file-paths=./testdata/crypto-config/wx-org1.chainmaker.org/user/admin1/admin1.sign.crt,./testdata/crypto-config/wx-org2.chainmaker.org/user/admin1/admin1.sign.crt,./testdata/crypto-config/wx-org3.chainmaker.org/user/admin1/admin1.sign.crt \
--gas-enable=true

配置文件参考:

bc.yml

# gas account config
account_config:
  enable_gas: false