跨链(8)Cosmos之“跨链交互协议IBC”前言

2024-03-28 09:18

本文主要是介绍跨链(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”前言的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/855179

相关文章

Python与Java交互出现乱码的问题解决

《Python与Java交互出现乱码的问题解决》在现代软件开发中,跨语言系统的集成已经成为日常工作的一部分,特别是当Python和Java之间进行交互时,编码问题往往会成为导致数据传输错误、乱码以及难... 目录背景:为什么会出现乱码问题产生的场景解决方案:确保统一的UTF-8编码完整代码示例总结在现代软件

SpringMVC 通过ajax 前后端数据交互的实现方法

《SpringMVC通过ajax前后端数据交互的实现方法》:本文主要介绍SpringMVC通过ajax前后端数据交互的实现方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价... 在前端的开发过程中,经常在html页面通过AJAX进行前后端数据的交互,SpringMVC的controll

Nginx中配置HTTP/2协议的详细指南

《Nginx中配置HTTP/2协议的详细指南》HTTP/2是HTTP协议的下一代版本,旨在提高性能、减少延迟并优化现代网络环境中的通信效率,本文将为大家介绍Nginx配置HTTP/2协议想详细步骤,需... 目录一、HTTP/2 协议概述1.HTTP/22. HTTP/2 的核心特性3. HTTP/2 的优

关于WebSocket协议状态码解析

《关于WebSocket协议状态码解析》:本文主要介绍关于WebSocket协议状态码的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录WebSocket协议状态码解析1. 引言2. WebSocket协议状态码概述3. WebSocket协议状态码详解3

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

Qt 中集成mqtt协议的使用方法

《Qt中集成mqtt协议的使用方法》文章介绍了如何在工程中引入qmqtt库,并通过声明一个单例类来暴露订阅到的主题数据,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一,引入qmqtt 库二,使用一,引入qmqtt 库我是将整个头文件/源文件都添加到了工程中进行编译,这样 跨平台

基于WinForm+Halcon实现图像缩放与交互功能

《基于WinForm+Halcon实现图像缩放与交互功能》本文主要讲述在WinForm中结合Halcon实现图像缩放、平移及实时显示灰度值等交互功能,包括初始化窗口的不同方式,以及通过特定事件添加相应... 目录前言初始化窗口添加图像缩放功能添加图像平移功能添加实时显示灰度值功能示例代码总结最后前言本文将

Java如何接收并解析HL7协议数据

《Java如何接收并解析HL7协议数据》文章主要介绍了HL7协议及其在医疗行业中的应用,详细描述了如何配置环境、接收和解析数据,以及与前端进行交互的实现方法,文章还分享了使用7Edit工具进行调试的经... 目录一、前言二、正文1、环境配置2、数据接收:HL7Monitor3、数据解析:HL7Busines

【Linux】应用层http协议

一、HTTP协议 1.1 简要介绍一下HTTP        我们在网络的应用层中可以自己定义协议,但是,已经有大佬定义了一些现成的,非常好用的应用层协议,供我们直接使用,HTTP(超文本传输协议)就是其中之一。        在互联网世界中,HTTP(超文本传输协议)是一个至关重要的协议,他定义了客户端(如浏览器)与服务器之间如何进行通信,以交换或者传输超文本(比如HTML文档)。

【Go】go连接clickhouse使用TCP协议

离开你是傻是对是错 是看破是软弱 这结果是爱是恨或者是什么 如果是种解脱 怎么会还有眷恋在我心窝 那么爱你为什么                      🎵 黄品源/莫文蔚《那么爱你为什么》 package mainimport ("context""fmt""log""time""github.com/ClickHouse/clickhouse-go/v2")func main(