【COSMOS】跨链协议IBC概述

一.什么是IBC?

IBC是链间通信协议的缩写(Inter-Blockchain Communication Protocol)。通过数据包交换在多个不同的区块链网络之间转移数据和状态信息。最初的用途更多是通过IBC协议实现跨链通证转移。
IBC的目标是在两个独立的七层网络之间传递应用信息,所以需要链外的relay把数据包在链A和链B的网络之间做中继。链B收到链A的数据后必须能独立验证它所包含的证明信息,该证明代表了链A上的某个状态(及其对应操作)的真实性。为了让IBC协议能够工作,必须依赖基础的信任机制,要相信链A和链B里各自的共识算法,也要相信轻客户端验证,通过对区块头信息的验证,证明在区块链上曾经发生过的事情。

二.如何实现IBC?

1.连接的生命周期

1.1 建立连接

在两条链之间首先要建立“连接”,也就是彼此的初始信任关系;在连接建立的那一瞬间两条链要交换基础的信任数据(信任根)-- 对PoS网络来说就是两条链的验证人公钥集,信任根必须是可以由第三方独立验真的

1.2 保持连接

在整个连接期间要持续不断获得对方的新区块头,基于信任根连续的区块头可以从连接建立时对方的区块高度,连续验证后续任意高度区块头的正确性;这些区块头是验证IBC数据包的信任基础。

1.3 断开连接

当出现分叉或安全事件的时候,要及时关闭连接;这可以通过链上治理或自动作弊检测来触发。

2.数据包、回执和超时处理

2.1 数据包

是由元数据(数据头)不透明数据载荷(数据体)组成的报文。数据头包含类型、顺序号、源链ID、目标链ID、超时参数;数据体则包含需要区块链应用层来理解和处理的数据,也就是源链状态变化的证明。

2.2 回执

是“反向”数据包,B链收到并处理完来自A链的数据包后,会给A链发一个对应的回执。

2.3 超时处理

源链在发送数据包时,可以在数据头里指定一个由目标链上的区块高度或时间戳表示的超时参数;目标链对收到的超时数据包将不予处理,而源链如果在发送的数据包超时后还未收到回执,就会对数据包对应的链上状态做回滚操作。

3.严格排序的消息传送

要想让整套系统工作,数据包的传递必须保持严格的全局排序:
· 共识算法确保链上交易的处理遵循单一精准排序。
· IBC协议确保关于链上交易处理状态的消息在跨链传递的过程中遵循单一精准排序。
· IBC用通道机制实现排序控制:每条链为每个连接都维持发送和接收两个通道,每个通道维持一个计数器,发送通道的计数器为流出消息生成顺序号,接收通道的计数器则用于校验流入消息的顺序号。
· 严格的排序保证是对全局状态一致性进行推导的前提条件。

4.共识要求

IBC协议安全需要共识算法的最终性来防止双花,不同共识算法的最终性表现不一样:
· Tendermint和PBFT类共识算法满足即时最终性(最理想)
· 以太坊的Casper FFG共识算法提供快速最终性
· 比特币类共识算法(PoW, Tezos)提供概率最终性,需要应用层选择安全阈值

三.IBC规范和开发进展

围绕IBC协议规范相关活动的关键讨论和交付物:
https://github.com/cosmos/ics
https://github.com/cosmos/ics/tree/master/spec
 
IBC协议的代码实现:
https://github.com/cosmos/cosmos-sdk
 
IBC工作组:
telegram: ibcprotocol

posted @ 2019-07-22 17:55  preminem  阅读(2709)  评论(0编辑  收藏  举报