一.什么是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

【COSMOS】跨链协议IBC概述的更多相关文章

  1. BlockChain 的跨链技术的重要性和必要性

    本期我们将从跨链技术的重要性和必要性.畅想区块链未来世界.什么是跨链.目前四种跨链技术的对比.构建EOS同构跨链体系群.EOCS跨链技术介绍.跨链通道.中继等几个层面带大家走进EOS跨链和EOCS的世 ...

  2. web3.js支持SimpleChain跨链调用

    SimpleChain的跨链协议已经对外开放很久了,很多应用也已经慢慢支持Simplechain的跨链.最近社区开发者web3.js中集成了Simplechain的跨链接口,开发者只需用npm安装包文 ...

  3. Bystack跨链技术源码解读

    Bystack是由比原链团队提出的一主多侧链架构的BaaS平台.其将区块链应用分为三层架构:底层账本层,侧链扩展层,业务适配层.底层账本层为Layer1,即为目前比较成熟的采用POW共识的Bytom公 ...

  4. EOCS跨链核心技术内幕

    EOCS跨链技术的核心就是ICP模块,ICP即Inter Chain Protocol(跨链交互协议),下面着重介绍ICP工作原理和实现细节. Inter Chain Protocol(ICP) IC ...

  5. 基于SimpleChain Beta的跨链交互与持续稳态思考

    1. 区块链扩展性迷局 比特币作为第一个区块链应用与运行到目前为止最被信任的公链,其扩展性问题却持续被作为焦点贯穿着整个链的发展周期.事实上,在2009年1月4日比特币出现的那一天到2010年10月1 ...

  6. ES Bridge跨链桥服务升级,新增BSC跨链网络

    3月15日,Equal Sign Bridge(ES Bridge)跨链桥宣布新增BSC跨链网络,方便更多用户参与到ES Bridge的建设与发展,未来还将持续拓展更多的主流跨链币种,提升各链间的互操 ...

  7. ThinkPHP实现跨模块调用操作方法概述

    ThinkPHP实现跨模块调用操作方法概述 投稿:shichen2014 字体:[增加 减小] 类型:转载   使用 $this 可以调用当前模块内的方法,但是很多情况下经常会在当前模块中调用其他模块 ...

  8. SmartRaiden 和 Lighting Network 进行去中心化跨链原子资产交换

    作者介绍 虫洞社区·签约作者 steven bai 前言 如果能够进行以太坊和比特币跨链原子资产交换,是不是一件很酷的事情? 目前链下的扩容方式有很多,最广为人知的就是比特币的闪电网络和以太坊的雷电网 ...

  9. PalletOne调色板跨链的BTC实现

    之前已经讲到了PalletOne调色板跨链以太坊ETH和ERC20的技术原理,接下来我们来讲解PalletOne跨链比特币BTC的技术原理. 一.BTC充币 假如用户A持有一定数量的比特币BTC,他希 ...

随机推荐

  1. Codeforces 960F Pathwalks ( LIS && 树状数组 )

    题意 : 给出若干个边,每条边按照给出的顺序编号,问你找到一条最长的边权以及边的编号同时严格升序的一条路径,要使得这条路径包含的边尽可能多,最后输出边的条数 分析 :  这题和 LIS 很相似,不同的 ...

  2. JUnit——assertThat(acture,matcher)

    使用hamcrest之前需要引入相关的jar包,包括hamcrest-core.1.3.jar和hamcrest-library-1.3.jar. 具体引入的方法为:右击JUnit工程——build ...

  3. 2018百度之星B轮 degree

    degree Accepts: 1581 Submissions: 3494 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/1 ...

  4. Card Game Cheater

    Card Game Cheater Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

  5. 【错误记录】windows python 路径中的一个转义错误:'rawunicodeescape' codec can't decode bytes in position 112-113: truncated \uXXXX

    ur"D:\work\结构化\CSV\useful\内容.csv" 报错 编码错误原因,当路径中有\u这种字串时,即使是包含在r"" 中也会进行转义,然后转义出 ...

  6. vue树形菜单

    vue树形菜单 由于项目原因,没有使用ui框架上的树形菜单,所以自己动手并参考大佬的代码写了一个树形菜单的组件,话不多说,直接上代码.html代码js代码直接调用api 把请求到的数据直接赋值给per ...

  7. iOS 自定义一对UI表现相反的按钮

    假如有一对按钮[重置][提交],要让他们的默认UI和点击的UI表现刚好相反 [提交]按钮,默认橙色,点击边框是橙色,字体是橙色,背景变白色 [重置]按钮,默认白色橙色,边框是橙色,点击字体是白色,背景 ...

  8. 一、基础篇--1.1Java基础-final, finally, finalize 的区别

    final, finally, finalize 首先,这三个关键字没什么关联,只是放在一起比较像,用法用处完全不同. final: final关键字可以用来修饰类.方法.变量(成员变量和局部变量), ...

  9. robot framework 接口自动化之登录

    网络不便,好久没更了,颓废好久,惭愧 目录 1.安装必须的库 2.固定格式介绍 3.完成一个登录 1.安装必须的库 requestsLibrary.requests安装 1.pip install r ...

  10. 类Enum

    int compareTo(E o) 比较此枚举与指定对象的顺序. String name() 返回此枚举常量的名称,在其枚举声明中对其进行声明. int ordinal() 返回枚举常量的序数(它在 ...