跨链Cosmos(11) 消息结构

Posted thefist11

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了跨链Cosmos(11) 消息结构相关的知识,希望对你有一定的参考价值。

1. 普通交易Msg

Cosmos的普通交易和以太坊类似,也是一个帐户模型,有着From,To和Amount关键字段。

type MsgSend struct 
{ 
FromAddress github_com_cosmos_cosmos_sdk_types.AccAddress 
ToAddress github_com_cosmos_cosmos_sdk_types.AccAddress 
Amount github_com_cosmos_cosmos_sdk_types.Coins
 }

2. 跨链交易

2.1 MsgPacket

定义了IBC协议的跨链交易数据包,包含跨链交易、目的链的超时高度和时间戳

/ IBC 数据包

type MsgPacket struct
 { 
Packet 
Proof commitmentexported.Proof 
ProofHeight uint64 
Signer sdk.AccAddress
 }

2.2 跨链数据包

完成上述的一系列握手之后,应用层便可以在Channel上发送自己的数据了。Cosmos规定了发送跨链交易的一些必要字段,如下图:
在这里插入图片描述

// 数据包定义了一种通过IBC跨不同链传输数据的类型
type Packet struct
 {  
  Data []byte // 跨链交易数据
  Sequence uint64 // number对应于发送和接收的顺序,必须按序发送和接收 
  SourcePort string  // 标识来源链上的端口 
  SourceChannel string  // 标识来源链上的通道 
  DestinationPort string // 标识目的链上的端口
 DestinationChannel string // 标识目的链上的通道 
 TimeoutHeight uint64 // 标记数据包超时的区块高度
 TimeoutTimestamp uint64 // 数据包超时的区块时间戳
}

TimeoutHeight和TimeoutTimestamp是Cosmos提供的一种超时机制。如果某个区块高度或者某个时间这笔跨链交易还没有完成的话,用户能够指定将这笔交易回退(比如是跨链转账的话,可以防止资金长时间冻结)。

2.3 MsgAcknowledgement

定义IBC协议的响应数据包,包含跨链交易执行成功或者失败的状态。

来源链通过MsgAcknowledgement数据包,可以判断跨链交易是否执行成功,如果执行失败来源链做出相对的回滚。

// IBC响应数据包
type MsgAcknowledgement struct {
 Packet 
Acknowledgement []byte 
 Proof commitmentexported.Proof 
 ProofHeight uint64 
 Signer sdk.AccAddress
 }

2.4 MsgTimeout

定义IBC协议的超时数据包,包含下一个接收包的序列号。

来源链通过MsgTimeout数据包,可以判断一个跨链交易的数据包是否超时,如果超时来源链做出相对的回滚。

// IBC超时数据包
type MsgTimeout struct 
{ 
 Packet 
 NextSequenceRecv uint64 
 Proof commitmentexported.Proof 
 ProofHeight uint64 
 Signer sdk.AccAddress
 }

2.5 跨链存在性证明

 
struct { 
Proof commitmentexported.Proof  //Merkle Proof
ProofHeight uint64  //区块高度
Signer sdk.AccAddress  //发送者的地址,跨链双方维护对方的轻节点,提供类似SPV证明的机制
}

以上是关于跨链Cosmos(11) 消息结构的主要内容,如果未能解决你的问题,请参考以下文章

跨链Cosmos 网络拓扑

跨链Cosmos(12) Cosmos插件

跨链Cosmos Cosmos系统框架

跨链跨链双雄Cosmos“系统框架”

跨链Cosmos之“跨链交互协议IBC”

跨链Cosmos异构跨链交易流程