3. 中继网关部署文档

温馨提示:跨链使用强依赖于ChainMaker本身,因此请在阅读该跨链使用前先对ChainMaker进行一定程度上的熟悉,否则可能会存在无法部署成功或使用的情况。

3.1. 前置条件

环境 版本号
ChainMaker(主链) v2.3.3+
CMC v2.3.3+
golang v1.20+

3.2. 环境依赖

3.2.1. 硬件要求

配置 最低配置 推荐配置
CPU 1.5GHz 2.4GHz
内存 16GB 64GB
核心 8核 16核
带宽 20Mb 40Mb

3.2.2. 软件要求

名称 版本 描述 是否必须
mysql 8.0.35+ 数据库
redis 7.2+ 缓存数据库
docker 20.10.17+ docker

3.3. 安装部署

3.3.1. 下载代码

git clone -b chainweaver_v0.1 https://git.chainmaker.org.cn/chainmaker/tcip-relayer.git

3.3.2. 在主链上安装跨链合约和示例合约

跨链合约示例合约

# 以cmc为例,跨链合约名称建议为crossChainContract,示例跨链合约写死了跨链合约名称
./cmc client contract user create \
--contract-name=crossChainContract \
--runtime-type=DOCKER_GO \
--byte-code-path=./crossChainContract.7z \
--version=1.0 \
--sdk-conf-path=./sdk_config.yml \
--admin-key-file-paths=./certs/admin1.key \
--sync-result=true \
--params="{}"

./cmc client contract user create \
--contract-name=crossChainSaveQuery \
--runtime-type=DOCKER_GO \
--byte-code-path=./contract/crossChainSaveQuery.7z \
--version=1.0 \
--sdk-conf-path=./sdk_config.yml \
--admin-key-file-paths=./certs/admin1.key \
--sync-result=true \
--params="{}"

3.3.3. 编译

make

3.3.4. 修改配置文件

# 网关基础配置
base:
  gateway_id: MAIN_GATEWAY_ID_1               # 中继网关ID(保持唯一),必须要以MAIN_GATEWAY_ID开头
  gateway_name: relay_gateway                 # 中继网关的名称(尽量保持唯一)
  default_timeout: 10                         # 全局默认超时时间

# WebListener配置,用于监听跨链SDK发送的跨链请求
rpc:
  port: 19999                                   # Web服务监听端口
  restful:
    enable: false                               # 是否开启restful
    max_resp_body_size: 10                      # body最大值,单位M
  tls:
    enable: true                                # 是否开启tls
    ca_file: config/cert/server/ca.crt          # tlsca文件
    cert_file: config/cert/server/server.crt    # tls证书文件
    key_file: config/cert/server/server.key     # tls私钥文件
    server_name: chainmaker.org                 # 证书中的域名
  max_send_msg_size: 10                         # 最大发送数据大小,单位M
  max_recv_msg_size: 10                         # 最大接收数据大小,单位M
  client_key: config/cert/client/client.key     # 客户端私钥,用来访问跨链网关

cross_contract:                                 # 跨链合约
  - crossChainContract

# 中继链配置
relay_chain:
  chainmaker_sdk_config_path: config/sdk_config.yml   # 中继链sdk配置文件

jwt_key: "!@#$abcd%^&*++``123"  # auth code key

# 交易锁定时间
tx_lock_second: 300

# redis
redis:
  enable: true
  db: 0
  addr: 127.0.0.1:6379
  user_name: ""
  password: 123

# 日志配置,用于配置日志的打印
# 模块名称取值为:
#  default:默认的日志配置,未配置日志的模块会使用该配置
#  server:服务日志
#  cli:命令行日志
#  access_control:权限控制日志
#  cross_chain_tx_manager:跨链交易日志
#  gateway_manager:跨链网关管理日志
#  handler:控制器日志
#  prove_manager:交易证明日志
#  relay_chain_manager:中继链管理日志
#  rquest_manager:接口请求日志
#  rpc_server:rpc日志
log:
  - module: default                 # 模块名称(取值为:default/server/cli/access_control/)
    log_level: DEBUG                # 日志打印级别
    file_path: logs/default.log     # 日志文件路径
    max_age: 365                    # 日志最长保存时间,单位:天
    rotation_time: 1                # 日志滚动时间,单位:小时
    log_in_console: false           # 是否展示日志到终端,仅限于调试使用
    show_color: true                # 是否打印颜色日志

  - module: server                  # 模块名称
    log_level: DEBUG                # 日志打印级别
    file_path: logs/server.log      # 日志文件路径
    max_age: 365                    # 日志最长保存时间,单位:天
    rotation_time: 1                # 日志滚动时间,单位:小时
    log_in_console: false           # 是否展示日志到终端,仅限于调试使用
    show_color: true                # 是否打印颜色日志

# 数据库
database:
  dsn: root:123@tcp(127.0.0.1:6446)/tcip_relayer_1?charset=utf8&parseTime=True&loc=Local
  max_idle_conns: 10
  max_open_conns: 100
  time_out: 20

3.3.5. 设置跨链管理员

# 从公钥获取地址示例如下
./cmc address pk-to-addr certs/admin1.pem
# 设置跨链管理员权限(发送该交易需要admin权限)
./cmc client contract user invoke \
--contract-name=RELAY_CROSS \
--method=SET_CROSS_ADMIN \
--sdk-conf-path=./sdk_config.yml \
--params="{\"CROSS_ADMIN_ADDRESS\":\"c3877b61d40c757449ad94eec8297bd8bb72d467\"}" \
--sync-result=true# 设置跨链管理员权限(发送该交易需要admin权限)
./cmc client contract user invoke \
--contract-name=RELAY_CROSS \
--method=SET_CROSS_ADMIN \
--sdk-conf-path=./testdata/sdk_config.yml \
--params="{\"CROSS_ADMIN_ADDRESS\":\"c3877b61d40c757449ad94eec8297bd8bb72d467\"}" \
--sync-result=true
# 查询交易发送者是否拥有管理员权限
./cmc client contract user invoke \
--contract-name=RELAY_CROSS \
--method=IS_CROSS_ADMIN \
--sdk-conf-path=./testdata/sdk_config.yml \
--params="{}" \
--sync-result=true
# 删除跨链管理员(发送该交易需要admin权限)
./cmc client contract user invoke \
--contract-name=RELAY_CROSS \
--method=DELETE_CROSS_ADEMIN \
--sdk-conf-path=./testdata/sdk_config_admin.yml \
--params="{\"CROSS_ADMIN_ADDRESS\":\"c3877b61d40c757449ad94eec8297bd8bb72d467\"}" \
--sync-result=true

3.3.6. 启动中继网关

# 启动中继网关
nohup ./tcip-relayer start -c ./config/tcip_relayer.yml > panic.log 2>&1 &


# docker启动命令,config目录参考镜像相应目录
make docker-build
docker run -d -p 19999:19999 --name tcip-relayer -v $(pwd)/config:/tcip-relayer/config tcip-relayer:chainweaver_v0.1 bash -c "./tcip-relayer start -c ./config/tcip_relayer.yml"