# 中继网关部署文档 > 温馨提示:跨链使用强依赖于ChainMaker本身,因此请在阅读该跨链使用前先对ChainMaker进行一定程度上的熟悉,否则可能会存在无法部署成功或使用的情况。 ## 前置条件 | 环境 | 版本号 | | -------------- | ------- | | ChainMaker(主链) | v2.3.3+ | | CMC | v2.3.3+ | | golang | v1.20+ | ## 环境依赖 ### 硬件要求 | 配置 | 最低配置 | 推荐配置 | | --- | ------ | ------ | | CPU | 1.5GHz | 2.4GHz | | 内存 | 16GB | 64GB | | 核心 | 8核 | 16核 | | 带宽 | 20Mb | 40Mb | ### 软件要求 | 名称 | 版本 | 描述 | 是否必须 | | ------ | --------- | ------ | ---- | | mysql | 8.0.35+ | 数据库 | 是 | | redis | 7.2+ | 缓存数据库 | 否 | | docker | 20.10.17+ | docker | 否 | ## 安装部署 ### 下载代码 ```shell git clone -b chainweaver_v0.1 https://git.chainmaker.org.cn/chainmaker/tcip-relayer.git ``` ### 在主链上安装跨链合约和示例合约 [跨链合约](https://git.chainmaker.org.cn/chainmaker/tcip-samples/-/blob/chainweaver_v0.1/cross_demo/chainmaker-go-run/contract/crossChainContract.7z)、[示例合约](https://git.chainmaker.org.cn/chainmaker/tcip-samples/-/blob/chainweaver_v0.1/cross_demo/chainmaker-go-run/contract/crossChainSaveQuery.7z) ```shell # 以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="{}" ``` ### 编译 ```shell make ``` ### 修改配置文件 ```yaml # 网关基础配置 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 ``` ### 设置跨链管理员 ```shell # 从公钥获取地址示例如下 ./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 ``` ### 启动中继网关 ```shell # 启动中继网关 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" ```