本文主要是介绍跨链(8)Cosmos之“跨链交互协议IBC”前言,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1. 跨链流程
A链上的Alice发送10个ATOM代币给B链上的Bob
step1. Tracking
A链上的IBC模块会不断的同步B链上的区块头信息,B链上的IBC同理。通过这种方式,双方能够实现跟踪对方区块链上的验证者集合的变化,本质上来说,就是A链、B链相互维护了一个对方的轻节点。
step2.Bonding
当使用IBC初始化一笔跨链转账之后,A链上的10个ATOM事实上处于锁定的状态。
step3. Proof中继
一份证明A链上已经锁定10ATOM的“证据”会被路由到B链上的IBC模块。
step4. 验证
B链结合A链的轻节点信息,对这份“证据”验证通过之后,B链上会“铸造”10份ATOM Voucher(抵用券),这些Voucher可以进行后续的流通使用。当然这些Voucher也可以通过同样的跨链方式返回到A链,A链上的ATOM代币相应执行解锁的操作。
2. IBC握手流程
IBC协议实现区块链间跨链消息的可信、可靠转发,并有效进行流量控制、多路复用等功能。
IBC也是如此。
- 借鉴了传输层的TCP协议(希望成为区块链领域的“TCP协议”)
- 有连接的、可靠的跨链消息传输
2.1 三种角色
2.1.1 链内客户端
跨链双方需要在链上初始化一个对方链的轻客户端,这个Client实质上是另一个区块链的轻客户端,而且必须满足Cosmos规定的一套Client接口。
需要保证在本链上能够验证来自来源链的跨链交易是能够验证的,否则无法保证在本链上执行该交易的有效性和合法性。
- 轻客户端规定了一套通用的接口,不同类型的区块链通过实现该 Client来达到接入的效果。
- 现阶段支持 Tendermint Client和Solo Client,也就是同构链之间原生支持跨链。
- 不是使用Cosmos构建的区块链想要接入Cosmos Hub进行跨链的话,必须通过一个额外的“转接桥”
2.1.2 Connection和Channel
Connection和Client一起负责跨链交易的“合法性”——包括跨链交易确实在目的链上发生,以及跨链交易只提交了一次。
Connection和Channel在跨链扮演的角色和能不同, Channel用来保证跨链交易的有序性,每笔交易按照 Sequence Number来进行发送。
Connection和Channel的建立过程都如上面所示,只是数据包的名称和内容会有不同,
- 建立Connection的时候发送的便是 ConnOpenInit请求
- 建立的Channel的时候便是ChanOpenInit 请求,之后的请求依次类推。
2.1.3 无序的Channel
采用了有序的模式。
-
有序Channel和TCP类似
-
无序Channel类似于UDP,无序Channel按照UDP来讲的话,在某些不太关注跨链消息包顺序的场景下也是适用的。
-
考虑到Channel的消息发送能力,允许一条Connection上建立多个Channel,在不同的跨链应用场景中,可以使用不同的Channel发送消息,从而隔离不同业务。
2.2 通信原理
2.2.1 握手连接
在轻客户端的基础上建立握手连接,握手连接基本上分别为三个部分。Connection和Channel的建立都如下:
● 启动跨链的用户向链A发起OpenInit请求,等待Relayer 接收到该请求。
● Relayer进行路由跨链消息包的工作,如果收到 OpenInit的请求,Relayer 会构造一个的OpenTry 的请求发送到链B上。
● 链B收到OpenTry请求之后,如果同意的话,会对该消息进行确认(生成OpenACK数据包,并按照之前的方式由 Relayer 转发给链A。
● 链A通过OpenACK数据包判断此次握手是否成功,如果成功,对此次握手发送最后的 OpenConfirm 数据包返回链B。如果握手失败,此次连接也就是建立失败了。
2.2.2 发送跨链数据包
完成握手之后,应用层便可以在Channel上发送自己的数据了。Cosmos跨链交易的如下图:
-
TimeoutHeight和TimeoutTimestamp 超时机制
如果某个区块高度或者某个时间这笔跨链交易还没有完成的话,用户能够指定将这笔交易回退(比如是跨链转账的话,可以防止资金长时间冻结)。
-
Data字段
留给用户进行自定义,以应对可能的各种复杂的跨链场景。
这篇关于跨链(8)Cosmos之“跨链交互协议IBC”前言的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!