跨链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) 消息结构的主要内容,如果未能解决你的问题,请参考以下文章