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"