# 整体介绍 ## 主子链介绍 ### 产品的背景和意义 目前市场上涌现出不同的区块链底层平台,各企业在各自的生态内以私有化的形式搭建了不同形式的区块链平台。尽管在本生态内信息能互通,但是跨平台跨生态的区块链系统间信息无法互通,从而形成了一片片孤立的“区块链孤岛”。 本主子链技术方案在此背景下应运而生,旨在提供一套链与链间相互协作通讯的技术方案,以串联各区块链生态,形成统一的区块链链网。 ### 角色分工 在主子链系统中,角色主要分为两个,一个是主链运营方,一个是子链运营方,这两个角色的任务分工如下: | 角色 | 部署内容 | | ---------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 主链运营方 | 主链部署、[中继网关部署](./中继网关部署文档.html)、[为接入的跨链网关进行注册并获取跨链网关ID](./子链接入文档.html#跨链网关注册)、[为每一个跨链网关ID生成授权码](./子链接入文档.html#生成授权码) | | 子链运营方 | 子链部署、[跨链网关部署](./子链接入文档.html) | **主链**:指的是在整个链网生态里担当核心角色,一般由具备强信用背书的机构负责运营,为各子链间的通讯协作,提供统一的身份管理和通讯通道。 **子链**:指的是负责处理各具体业务的区块链,一般由某一地域或者某一垂直领域的公司负责运营,但需要和其他地域或者其他生态进行信息交互的时候,可申请与主链进行连接,并通过主链和其他区块链系统进行交互。 ### 常见的应用场景 - 比如一家大型公司在全国乃至全球都有分公司,不同的分公司焦距处理不同的业务。则可以由公司总部部署主链,而其他不同地域、不同业务的分公司部署子链,从而建立主子链网相互协作。 - 国内政府单位在中央会有总局,而在各省市会成立省市自己的分部门。比如国家数据总局,和地方数据局,国家卫健委和地方卫健委等等。则可以由总局搭建主链,而分局搭建子链,当各地方的子链涉及到跨省市的信息交互时,可通过总局主链协商,从而完成相关的信息交互。 ## 架构设计 ### 整体架构 ![](../images/subchain_features.png) **跨链管理合约** 跨链管理合约是主链的内置合约,他主要有以下功能: - 注册跨链网关,生成跨链网关ID,查询跨链网关信息; - 保存整个跨链交易整个生命周期的状态,并产生对应的事件,推动跨链交易的有序执行; - 设置、删除跨链管理员; - 查询跨链交易内容。 **跨链合约** 跨链合约是保存了跨链事件配置的合约,并且提供了跨链触发的方法,能够根据跨链事件配置触发跨链事件。 跨链合约一般在主链和子链上都会安装,主链上的跨链合约会触发主链->子链的跨链交易,子链的跨链合约会触发子链->主链、子链->子链的跨链交易。 **业务合约** 实现特定业务的合约,该合约需要跨合约调用跨链合约,并传递数据,来触发跨链事件。 业务合约会根据业务需求在主链和子链上安装。 **SPV合约** SPV合约用来保存子链的区块头、验证子链的交易的合法性。 SPV合约安装在主链中,每一条子链在主链上都有一个对应的SPV合约。 **中继网关** 中继网关是沟通主链的桥梁,遵循[TCIP跨链协议](./中继跨链协议.md)构建,他主要有以下模块构成: - 链访问模块主要负责整个中继网关与主链的数据交换,包括在主链执行交易、查询主链交易、监听主链事件; - 跨链网关管理模块主要负责跨链网关的验活、跨链过程中的对跨链网关的鉴权以及跨链网关信息的缓存; - 跨链交易调度模块是中继网关的核心模块,通过跨链合约的事件实现交易触发,通过跨链管理合约的事件实现交易执行、交易结果收集、交易提交; - 交易证明模块被用来保存子链的区块头,同时他还在跨链交易调度的时候验证子链交易的合法性; - 跨链事件管理模块会将跨链事件配置保存在跨链合约中; - RPC服务是用来和跨链网关进行数据交互的模块,接口和数据结构按照TCIP跨链协议构建; - 基础模块提供基础服务,包括日志模块、网络模块、存储模块、通用模块。 **跨链网关** 跨链网关是沟通子链的桥梁,同时可以通过中继网关连接到主链上,遵循[TCIP跨链协议](./%E4%B8%AD%E7%BB%A7%E8%B7%A8%E9%93%BE%E5%8D%8F%E8%AE%AE.md)构建,他主要有以下模块构成: - RPC服务是用来和中继网关进行数据交互的模块,接口和数据结构按照TCIP跨链协议构建; - 链访问模块主要负责整个跨链网关与子链的数据交换,包括在子链执行交易、查询子链交易、监听子链事件; - 跨链事件管理模块会将跨链事件配置保存在跨链合约中; - 跨链交易触发模块会通过跨链合约的跨链事件触发跨链交易; - 跨链交易执行模块通过链访问模块执行由中继网关调度过来的交易; - 基础模块提供基础服务,包括日志模块、网络模块、存储模块、通用模块。 **跨链SDK** 跨链SDK实现了中继网关和跨链网关的客户端,业务系统可以集成该跨链SDK完成跨链事件配置初始化和跨链交易查询的功能,同时他在跨链网关中还担任跨链网关调用中继网关的桥梁 **子链ID** 子链ID是每条子链的别名,由子链运营方自定义,同一个跨链网关的子链ID不可重复,在跨链交易中结合跨链网关ID完成子链寻址功能。 **授权码** 授权码是主链运营方部署完中继网关后,为跨链网关颁发的凭证,只有拥有该凭证的跨链网关才允许访问对应的中继网关。 ### 部署架构 ![部署架构](../images/subchain_deploy.png) **主链系统** - 中继网关可以单独部署,也可以分布式部署,不同的中继网关可以连接到不同的主链节点上,不同的中继网关互不相通 - 每个中继网关拥有单独的存储,拥有单独的跨链网关管理、跨链交易调度、交易证明、跨链事件管理模块 - 不同的中继网关通过主链节点间的P2P网络进行通信 - 主链应用可以连接到任意节点上,通过调用业务合约触发跨链 **子链系统** - 子链跨链网关连接到子链节点上,监听子链上的跨链交易,执行中继网关调度来的跨链交易 - 不同的跨链网关可以连接到同一个中继网关,也可以连接到不同的中继网关,不同的跨链网关互不相通,不同的跨链网关之间可以互相执行跨链交易 - 子链应用可以连接到任意节点上,通过调用业务合约触发跨链 ## 跨链示例 下图展示了张三如何将自己的子链A链Aa账户的10个CMT(chainmaker_Token)转移到自己的子链B链Bb账户中 前置条件: - 子链A上都部署了token合约CMT(chainmaker_Token),子链B上部署了合约WCMT - WCMT合约事先授权给B链跨链网关内的链账户,在跨链任务中有权限Mint WCMT - 张三在子链A上有链账户Aa,在子链B上有链账户Ab ![跨链示例](../images/subchain_tx.png) - 跨链触发阶段,张三通过调用A链的CMT合约,锁定10CMT触发了跨链事件,跨链网关A向中继网关发起跨链请求,中继网关经过SPV证明该交易有效,触发跨链执行; - 跨链执行阶段,中继网关将跨链交易调度到跨链网关B上,跨链网关BMint出10个WCMT,中继网关验证该交易有效,触发跨链提交; - 跨链提交阶段,中继网关向跨链网关B发起跨链确认,跨链网关B将10个WCMT打入张三B链的账户中,同时中继网关向跨链网关A也发起跨链确认,并将确认结果写入主链。 ## 技术详细设计方案 更多技术方案的详细设计可参考[ChainBridge-TCIP中继跨链方案](./TCIP中继跨链方案.md) ## 相关代码 | 项目名称 | 描述 | 连接 | | --------------- | ------------------ | -------------------------------------------------------------------------------- | | tcip-samples | 快速部署示例 | https://git.chainmaker.org.cn/chainmaker/tcip-samples/-/tree/chainweaver_v0.1 | | tcip-relayer | 中继网关 | https://git.chainmaker.org.cn/chainmaker/tcip-relayer/-/tree/chainweaver_v0.1 | | tcip-chainmaker | 长安链跨链网关 | https://git.chainmaker.org.cn/chainmaker/tcip-chainmaker/-/tree/chainweaver_v0.1 | | tcip-fabric | fabric跨链网关 | https://git.chainmaker.org.cn/chainmaker/tcip-fabric/-/tree/chainweaver_v0.1 | | tcip-bcos | bcos跨链网关 | https://git.chainmaker.org.cn/chainmaker/tcip-bcos/-/tree/chainweaver_v0.1 | | tcip-go | golang语言tcip协议 | https://git.chainmaker.org.cn/chainmaker/tcip-go/-/tree/chainweaver_v0.1 | | tcip | TCIP协议内容 | https://git.chainmaker.org.cn/chainmaker/tcip/-/tree/chainweaver_v0.1 | | tcip-sdk-go | TCIP golang语言sdk | https://git.chainmaker.org.cn/chainmaker/tcip-sdk-go/-/tree/chainweaver_v0.1 |