11.1. 概述
什么是跨链?简单理解就是两条或多条链之间进行数据交换,以一个简单易懂的案例来说明,假设有两条链,其中一条链是招行(用户A在该银行中有存款),另外一条链是建行(用户B在该银行中有账户),如果用户A想将自己在招行的存款转账给用户B(建行),那么就需要进行跨链操作。
11.2. 主要流程
为了能够兼容多种异构链,经过多方调研,本跨链方案采用正/逆向操作的合约实现方式,即用户需要提供正向与逆向的具体业务交易。还是以银行转账为例,对于用户A而言,其在整个跨链事务中的操作中对招行链的操作需要提供两个业务交易,
- 第一个就是正常的存款减少交易,
- 第二个则是逆向业务交易,即出现异常时的回滚操作,通常而言对应的是存款的增加。
跨链流程详细描述:
- 业务系统调用跨链SDK发送CrossChainTx(CCTx)至ProxyA(跨链代理);
- ProxyA解析获取ChainA对应Execute交易,并发送至ChainA(TxA request);
- ChainA执行Execute交易(事务合约调用业务合约);
- ChainA上Execute交易(TxA)执行完成后;
- SPV(A)节点会实时同步ChainA的最新交易信息;
- 返回给ProxyA当前交易的执行结果;
- ProxyA将应答转换为TxProof(TxA Proof),并将CCTx及TxProof转发至ProxyB;
- ProxyB调用SPV(A)的交易验证接口;
- SPV(A)对该交易进行过验证,并返回验证应答结果;
- 验证成功,ProxyB将TxA Proof发送到ChainB
- ChainB执行Save存储TxA Proof(调用事务合约)
- 返回给ProxyB SaveProof的执行结果
- ProxyB解析并获取ChainB中对应的Execute交易,并发送至ChainB(TxB request);
- ChainB执行Execute交易(事务合约调用业务合约);
- ChainB上Execute交易(TxB)执行完成后:
- SPV(B)节点会实时同步ChainB的最新交易信息;
- 返回该交易应答至ProxyB;
- ProxyB将应答转换为TxProof(TxB Proof),并将TxProof发送至ProxyA;
- ProxyA接收到TxBProof后调用SPV(B)的交易验证接口;
- SPV(B)对该交易进行验证,并返回验证应答结果;
- 验证成功,ProxyA将TxB Proof发送到ChainA
- ChainA执行Save存储TxB Proof(调用事务合约)
- 返回给ProxyA SaveProof的执行结果
- ProxyA进行Commit调度:
- ProxyA提交ChainA的Commit交易(更新事务合约状态)至ChainA;
- ProxyA同时通知ChainB进行Commit操作;
- ProxyB解析接收到Commit消息,并提交ChainB的Commit交易(更新事务合约状态)至ChainB;
- ProxyA汇总交易的执行情况,生成CCResponse,并返回至业务系统。
为了在一定程度上对跨链事务进行控制,本跨链方案中增加了事务合约的概念,用户的具体业务合约不会直接执行,而是通过事务合约进行调用,对于每一次跨链操作,系统会分配一个唯一的跨链ID,事务合约通过该ID对跨链的流程进行控制,防止重复执行的发生。
11. 跨链方案 — chainmaker-docs v2.2.1 documentation