Add standard acknowledgement to channels and apply usage in ibc transfer (#7263)
* gen ack proto type * remove transfer ack * change ics20 ack to use standard type * update commented tests * small typo fix * revert back to module cdc * update docs * fix lint * nit * update ack event emission * Update x/ibc-transfer/spec/01_concepts.md * add comment for onacknowledgement * Update proto/ibc/channel/channel.proto Co-authored-by: Federico Kunze <31522760+fedekunze@users.noreply.github.com> Co-authored-by: Christopher Goes <cwgoes@pluranimity.org>
This commit is contained in:
parent
1755bf3b46
commit
b4f146b62d
|
@ -340,7 +340,9 @@ receive acknowledegments with the IBC modules as byte strings.
|
|||
|
||||
Thus, modules must agree on how to encode/decode acknowledgements. The process of creating an
|
||||
acknowledgement struct along with encoding and decoding it, is very similar to the packet data
|
||||
example above.
|
||||
example above. [ICS 04](https://github.com/cosmos/ics/tree/master/spec/ics-004-channel-and-packet-semantics#acknowledgement-envelope)
|
||||
specifies a recommended format for acknowledgements. This acknowledgement type can be imported from
|
||||
[channel types](https://github.com/cosmos/cosmos-sdk/tree/master/x/ibc/04-channel/types).
|
||||
|
||||
#### Acknowledging Packets
|
||||
|
||||
|
|
|
@ -48,7 +48,7 @@ message MsgChannelOpenConfirm {
|
|||
bytes signer = 5 [(gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.AccAddress"];
|
||||
}
|
||||
|
||||
// MsgChannelOpenConfirm defines a msg sent by a Relayer to Chain A
|
||||
// MsgChannelCloseInit defines a msg sent by a Relayer to Chain A
|
||||
// to close a channel with Chain B.
|
||||
message MsgChannelCloseInit {
|
||||
string port_id = 1 [(gogoproto.moretags) = "yaml:\"port_id\""];
|
||||
|
@ -114,8 +114,8 @@ message Channel {
|
|||
Order ordering = 2;
|
||||
// counterparty channel end
|
||||
Counterparty counterparty = 3 [(gogoproto.nullable) = false];
|
||||
// list of connection identifiers, in order, along which packets sent on this
|
||||
// channel will travel
|
||||
// list of connection identifiers, in order, along which packets sent on
|
||||
// this channel will travel
|
||||
repeated string connection_hops = 4 [(gogoproto.moretags) = "yaml:\"connection_hops\""];
|
||||
// opaque channel version, which is agreed upon during the handshake
|
||||
string version = 5;
|
||||
|
@ -132,8 +132,8 @@ message IdentifiedChannel {
|
|||
Order ordering = 2;
|
||||
// counterparty channel end
|
||||
Counterparty counterparty = 3 [(gogoproto.nullable) = false];
|
||||
// list of connection identifiers, in order, along which packets sent on this
|
||||
// channel will travel
|
||||
// list of connection identifiers, in order, along which packets sent on
|
||||
// this channel will travel
|
||||
repeated string connection_hops = 4 [(gogoproto.moretags) = "yaml:\"connection_hops\""];
|
||||
// opaque channel version, which is agreed upon during the handshake
|
||||
string version = 5;
|
||||
|
@ -189,9 +189,9 @@ message Counterparty {
|
|||
message Packet {
|
||||
option (gogoproto.goproto_getters) = false;
|
||||
|
||||
// number corresponds to the order of sends and receives, where a Packet with
|
||||
// an earlier sequence number must be sent and received before a Packet with a
|
||||
// later sequence number.
|
||||
// number corresponds to the order of sends and receives, where a Packet
|
||||
// with an earlier sequence number must be sent and received before a Packet
|
||||
// with a later sequence number.
|
||||
uint64 sequence = 1;
|
||||
// identifies the port on the sending chain.
|
||||
string source_port = 2 [(gogoproto.moretags) = "yaml:\"source_port\""];
|
||||
|
@ -223,3 +223,18 @@ message PacketAckCommitment {
|
|||
// packet commitment hash.
|
||||
bytes hash = 4;
|
||||
}
|
||||
|
||||
// Acknowledgement is the recommended acknowledgement format to be used by
|
||||
// app-specific protocols.
|
||||
// NOTE: The field numbers 21 and 22 were explicitly chosen to avoid accidental
|
||||
// conflicts with other protobuf message formats used for acknowledgements.
|
||||
// The first byte of any message with this format will be the non-ASCII values
|
||||
// `0xaa` (result) or `0xb2` (error). Implemented as defined by ICS:
|
||||
// https://github.com/cosmos/ics/tree/master/spec/ics-004-channel-and-packet-semantics#acknowledgement-envelope
|
||||
message Acknowledgement {
|
||||
// response contains either a result or an error and must be non-empty
|
||||
oneof response {
|
||||
bytes result = 21;
|
||||
string error = 22;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -43,31 +43,25 @@ message FungibleTokenPacketData {
|
|||
string receiver = 4;
|
||||
}
|
||||
|
||||
// FungibleTokenPacketAcknowledgement contains a boolean success flag and an
|
||||
// optional error msg error msg is empty string on success See spec for
|
||||
// onAcknowledgePacket:
|
||||
// https://github.com/cosmos/ics/tree/master/spec/ics-020-fungible-token-transfer#packet-relay
|
||||
message FungibleTokenPacketAcknowledgement {
|
||||
bool success = 1;
|
||||
string error = 2;
|
||||
}
|
||||
|
||||
// DenomTrace contains the base denomination for ICS20 fungible tokens and the source tracing
|
||||
// information path.
|
||||
// DenomTrace contains the base denomination for ICS20 fungible tokens and the
|
||||
// source tracing information path.
|
||||
message DenomTrace {
|
||||
// path defines the chain of port/channel identifiers used for tracing the source of the fungible
|
||||
// token.
|
||||
// path defines the chain of port/channel identifiers used for tracing the
|
||||
// source of the fungible token.
|
||||
string path = 1;
|
||||
// base denomination of the relayed fungible token.
|
||||
string base_denom = 2;
|
||||
}
|
||||
|
||||
// Params defines the set of IBC transfer parameters.
|
||||
// NOTE: To prevent a single token from being transferred, set the TransfersEnabled parameter to
|
||||
// true and then set the bank module's SendEnabled parameter for the denomination to false.
|
||||
// NOTE: To prevent a single token from being transferred, set the
|
||||
// TransfersEnabled parameter to true and then set the bank module's SendEnabled
|
||||
// parameter for the denomination to false.
|
||||
message Params {
|
||||
// send_enabled enables or disables all cross-chain token transfers from this chain.
|
||||
// send_enabled enables or disables all cross-chain token transfers from this
|
||||
// chain.
|
||||
bool send_enabled = 1 [(gogoproto.moretags) = "yaml:\"send_enabled\""];
|
||||
// receive_enabled enables or disables all cross-chain token transfers to this chain.
|
||||
// receive_enabled enables or disables all cross-chain token transfers to this
|
||||
// chain.
|
||||
bool receive_enabled = 2 [(gogoproto.moretags) = "yaml:\"receive_enabled\""];
|
||||
}
|
||||
|
|
|
@ -48,7 +48,7 @@ func (suite *TransferTestSuite) TestHandleMsgTransfer() {
|
|||
// relay send
|
||||
fungibleTokenPacket := types.NewFungibleTokenPacketData(coinToSendToB.Denom, coinToSendToB.Amount.Uint64(), suite.chainA.SenderAccount.GetAddress().String(), suite.chainB.SenderAccount.GetAddress().String())
|
||||
packet := channeltypes.NewPacket(fungibleTokenPacket.GetBytes(), 1, channelA.PortID, channelA.ID, channelB.PortID, channelB.ID, timeoutHeight, 0)
|
||||
ack := types.FungibleTokenPacketAcknowledgement{Success: true}
|
||||
ack := channeltypes.NewResultAcknowledgement([]byte{byte(1)})
|
||||
err = suite.coordinator.RelayPacket(suite.chainA, suite.chainB, clientA, clientB, packet, ack.GetBytes())
|
||||
suite.Require().NoError(err) // relay committed
|
||||
|
||||
|
|
|
@ -232,11 +232,15 @@ func (k Keeper) OnRecvPacket(ctx sdk.Context, packet channeltypes.Packet, data t
|
|||
// acknowledgement written on the receiving chain. If the acknowledgement
|
||||
// was a success then nothing occurs. If the acknowledgement failed, then
|
||||
// the sender is refunded their tokens using the refundPacketToken function.
|
||||
func (k Keeper) OnAcknowledgementPacket(ctx sdk.Context, packet channeltypes.Packet, data types.FungibleTokenPacketData, ack types.FungibleTokenPacketAcknowledgement) error {
|
||||
if !ack.Success {
|
||||
func (k Keeper) OnAcknowledgementPacket(ctx sdk.Context, packet channeltypes.Packet, data types.FungibleTokenPacketData, ack channeltypes.Acknowledgement) error {
|
||||
switch ack.Response.(type) {
|
||||
case *channeltypes.Acknowledgement_Error:
|
||||
return k.refundPacketToken(ctx, packet, data)
|
||||
default:
|
||||
// the acknowledgement succeeded on the receiving chain so nothing
|
||||
// needs to be executed and no error needs to be returned
|
||||
return nil
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// OnTimeoutPacket refunds the sender since the original packet sent was
|
||||
|
|
|
@ -192,7 +192,7 @@ func (suite *KeeperTestSuite) TestOnRecvPacket() {
|
|||
// relay send packet
|
||||
fungibleTokenPacket := types.NewFungibleTokenPacketData(coinFromBToA, suite.chainB.SenderAccount.GetAddress().String(), suite.chainA.SenderAccount.GetAddress().String())
|
||||
packet := channeltypes.NewPacket(fungibleTokenPacket.GetBytes(), 1, channelB.PortID, channelB.ID, channelA.PortID, channelA.ID, 110, 0)
|
||||
ack := types.FungibleTokenPacketAcknowledgement{Success: true}
|
||||
ack := channeltypes.NewResultAcknowledgement([]byte{byte(1)})
|
||||
err = suite.coordinator.RelayPacket(suite.chainB, suite.chainA, clientB, clientA, packet, ack.GetBytes())
|
||||
suite.Require().NoError(err) // relay committed
|
||||
|
||||
|
@ -229,13 +229,8 @@ func (suite *KeeperTestSuite) TestOnRecvPacket() {
|
|||
// to chainB.
|
||||
func (suite *KeeperTestSuite) TestOnAcknowledgementPacket() {
|
||||
var (
|
||||
successAck = types.FungibleTokenPacketAcknowledgement{
|
||||
Success: true,
|
||||
}
|
||||
failedAck = types.FungibleTokenPacketAcknowledgement{
|
||||
Success: false,
|
||||
Error: "failed packet transfer",
|
||||
}
|
||||
successAck = channeltypes.NewResultAcknowledgement([]byte{byte(1)})
|
||||
failedAck = channeltypes.NewErrorAcknowledgement("failed packet transfer")
|
||||
|
||||
channelA, channelB ibctesting.TestChannel
|
||||
coins sdk.Coins
|
||||
|
@ -243,7 +238,7 @@ func (suite *KeeperTestSuite) TestOnAcknowledgementPacket() {
|
|||
|
||||
testCases := []struct {
|
||||
msg string
|
||||
ack types.FungibleTokenPacketAcknowledgement
|
||||
ack channeltypes.Acknowledgement
|
||||
malleate func()
|
||||
source bool
|
||||
success bool // success of ack
|
||||
|
|
|
@ -305,16 +305,11 @@ func (am AppModule) OnRecvPacket(
|
|||
return nil, nil, sdkerrors.Wrapf(sdkerrors.ErrUnknownRequest, "cannot unmarshal ICS-20 transfer packet data: %s", err.Error())
|
||||
}
|
||||
|
||||
acknowledgement := types.FungibleTokenPacketAcknowledgement{
|
||||
Success: true,
|
||||
Error: "",
|
||||
}
|
||||
acknowledgement := channeltypes.NewResultAcknowledgement([]byte{byte(1)})
|
||||
|
||||
if err := am.keeper.OnRecvPacket(ctx, packet, data); err != nil {
|
||||
acknowledgement = types.FungibleTokenPacketAcknowledgement{
|
||||
Success: false,
|
||||
Error: err.Error(),
|
||||
}
|
||||
err := am.keeper.OnRecvPacket(ctx, packet, data)
|
||||
if err != nil {
|
||||
acknowledgement = channeltypes.NewErrorAcknowledgement(err.Error())
|
||||
}
|
||||
|
||||
ctx.EventManager().EmitEvent(
|
||||
|
@ -324,6 +319,7 @@ func (am AppModule) OnRecvPacket(
|
|||
sdk.NewAttribute(types.AttributeKeyReceiver, data.Receiver),
|
||||
sdk.NewAttribute(types.AttributeKeyDenom, data.Denom),
|
||||
sdk.NewAttribute(types.AttributeKeyAmount, fmt.Sprintf("%d", data.Amount)),
|
||||
sdk.NewAttribute(types.AttributeKeyAckSuccess, fmt.Sprintf("%t", err != nil)),
|
||||
),
|
||||
)
|
||||
|
||||
|
@ -338,7 +334,7 @@ func (am AppModule) OnAcknowledgementPacket(
|
|||
packet channeltypes.Packet,
|
||||
acknowledgement []byte,
|
||||
) (*sdk.Result, error) {
|
||||
var ack types.FungibleTokenPacketAcknowledgement
|
||||
var ack channeltypes.Acknowledgement
|
||||
if err := types.ModuleCdc.UnmarshalJSON(acknowledgement, &ack); err != nil {
|
||||
return nil, sdkerrors.Wrapf(sdkerrors.ErrUnknownRequest, "cannot unmarshal ICS-20 transfer packet acknowledgement: %v", err)
|
||||
}
|
||||
|
@ -358,15 +354,23 @@ func (am AppModule) OnAcknowledgementPacket(
|
|||
sdk.NewAttribute(types.AttributeKeyReceiver, data.Receiver),
|
||||
sdk.NewAttribute(types.AttributeKeyDenom, data.Denom),
|
||||
sdk.NewAttribute(types.AttributeKeyAmount, fmt.Sprintf("%d", data.Amount)),
|
||||
sdk.NewAttribute(types.AttributeKeyAckSuccess, fmt.Sprintf("%t", ack.Success)),
|
||||
sdk.NewAttribute(types.AttributeKeyAck, fmt.Sprintf("%v", ack)),
|
||||
),
|
||||
)
|
||||
|
||||
if !ack.Success {
|
||||
switch resp := ack.Response.(type) {
|
||||
case *channeltypes.Acknowledgement_Result:
|
||||
ctx.EventManager().EmitEvent(
|
||||
sdk.NewEvent(
|
||||
types.EventTypePacket,
|
||||
sdk.NewAttribute(types.AttributeKeyAckError, ack.Error),
|
||||
sdk.NewAttribute(types.AttributeKeyAckSuccess, string(resp.Result)),
|
||||
),
|
||||
)
|
||||
case *channeltypes.Acknowledgement_Error:
|
||||
ctx.EventManager().EmitEvent(
|
||||
sdk.NewEvent(
|
||||
types.EventTypePacket,
|
||||
sdk.NewAttribute(types.AttributeKeyAckError, resp.Error),
|
||||
),
|
||||
)
|
||||
}
|
||||
|
|
|
@ -3,3 +3,13 @@ order: 1
|
|||
-->
|
||||
|
||||
# Concepts
|
||||
|
||||
## Acknowledgements
|
||||
|
||||
ICS20 uses the recommended acknowledgement format as specified by [ICS 04](https://github.com/cosmos/ics/tree/master/spec/ics-004-channel-and-packet-semantics#acknowledgement-envelope).
|
||||
|
||||
A successful receive of a transfer packet will result in a Result Acknowledgement being written
|
||||
with the value `[]byte(byte(1))` in the `Response` field.
|
||||
|
||||
An unsuccessful receive of a transfer packet will result in an Error Acknowledgement being written
|
||||
with the error message in the `Response` field.
|
||||
|
|
|
@ -21,17 +21,18 @@ order: 5
|
|||
| fungible_token_packet | receiver | {receiver} |
|
||||
| fungible_token_packet | denom | {denom} |
|
||||
| fungible_token_packet | amount | {amount} |
|
||||
| fungible_token_packet | success | {ackSuccess} |
|
||||
| denomination_trace | trace_hash | {hex_hash} |
|
||||
|
||||
## OnAcknowledgePacket callback
|
||||
|
||||
| Type | Attribute Key | Attribute Value |
|
||||
|-----------------------|---------------|-----------------|
|
||||
| fungible_token_packet | module | transfer |
|
||||
| fungible_token_packet | receiver | {receiver} |
|
||||
| fungible_token_packet | denom | {denom} |
|
||||
| fungible_token_packet | amount | {amount} |
|
||||
| fungible_token_packet | success | {ackSuccess} |
|
||||
| Type | Attribute Key | Attribute Value |
|
||||
|-----------------------|-----------------|-------------------|
|
||||
| fungible_token_packet | module | transfer |
|
||||
| fungible_token_packet | receiver | {receiver} |
|
||||
| fungible_token_packet | denom | {denom} |
|
||||
| fungible_token_packet | amount | {amount} |
|
||||
| fungible_token_packet | success | error | {ack.Response} |
|
||||
|
||||
## OnTimeoutPacket callback
|
||||
|
||||
|
|
|
@ -15,6 +15,7 @@ const (
|
|||
AttributeKeyRefundDenom = "refund_denom"
|
||||
AttributeKeyRefundAmount = "refund_amount"
|
||||
AttributeKeyAckSuccess = "success"
|
||||
AttributeKeyAck = "acknowledgement"
|
||||
AttributeKeyAckError = "error"
|
||||
AttributeKeyTraceHash = "trace_hash"
|
||||
)
|
||||
|
|
|
@ -52,8 +52,3 @@ func (ftpd FungibleTokenPacketData) ValidateBasic() error {
|
|||
func (ftpd FungibleTokenPacketData) GetBytes() []byte {
|
||||
return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&ftpd))
|
||||
}
|
||||
|
||||
// GetBytes is a helper for serialising
|
||||
func (ack FungibleTokenPacketAcknowledgement) GetBytes() []byte {
|
||||
return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&ack))
|
||||
}
|
||||
|
|
|
@ -205,67 +205,11 @@ func (m *FungibleTokenPacketData) GetReceiver() string {
|
|||
return ""
|
||||
}
|
||||
|
||||
// FungibleTokenPacketAcknowledgement contains a boolean success flag and an
|
||||
// optional error msg error msg is empty string on success See spec for
|
||||
// onAcknowledgePacket:
|
||||
// https://github.com/cosmos/ics/tree/master/spec/ics-020-fungible-token-transfer#packet-relay
|
||||
type FungibleTokenPacketAcknowledgement struct {
|
||||
Success bool `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"`
|
||||
Error string `protobuf:"bytes,2,opt,name=error,proto3" json:"error,omitempty"`
|
||||
}
|
||||
|
||||
func (m *FungibleTokenPacketAcknowledgement) Reset() { *m = FungibleTokenPacketAcknowledgement{} }
|
||||
func (m *FungibleTokenPacketAcknowledgement) String() string { return proto.CompactTextString(m) }
|
||||
func (*FungibleTokenPacketAcknowledgement) ProtoMessage() {}
|
||||
func (*FungibleTokenPacketAcknowledgement) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_08134a70fd29e656, []int{2}
|
||||
}
|
||||
func (m *FungibleTokenPacketAcknowledgement) XXX_Unmarshal(b []byte) error {
|
||||
return m.Unmarshal(b)
|
||||
}
|
||||
func (m *FungibleTokenPacketAcknowledgement) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
||||
if deterministic {
|
||||
return xxx_messageInfo_FungibleTokenPacketAcknowledgement.Marshal(b, m, deterministic)
|
||||
} else {
|
||||
b = b[:cap(b)]
|
||||
n, err := m.MarshalToSizedBuffer(b)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return b[:n], nil
|
||||
}
|
||||
}
|
||||
func (m *FungibleTokenPacketAcknowledgement) XXX_Merge(src proto.Message) {
|
||||
xxx_messageInfo_FungibleTokenPacketAcknowledgement.Merge(m, src)
|
||||
}
|
||||
func (m *FungibleTokenPacketAcknowledgement) XXX_Size() int {
|
||||
return m.Size()
|
||||
}
|
||||
func (m *FungibleTokenPacketAcknowledgement) XXX_DiscardUnknown() {
|
||||
xxx_messageInfo_FungibleTokenPacketAcknowledgement.DiscardUnknown(m)
|
||||
}
|
||||
|
||||
var xxx_messageInfo_FungibleTokenPacketAcknowledgement proto.InternalMessageInfo
|
||||
|
||||
func (m *FungibleTokenPacketAcknowledgement) GetSuccess() bool {
|
||||
if m != nil {
|
||||
return m.Success
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (m *FungibleTokenPacketAcknowledgement) GetError() string {
|
||||
if m != nil {
|
||||
return m.Error
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
// DenomTrace contains the base denomination for ICS20 fungible tokens and the source tracing
|
||||
// information path.
|
||||
// DenomTrace contains the base denomination for ICS20 fungible tokens and the
|
||||
// source tracing information path.
|
||||
type DenomTrace struct {
|
||||
// path defines the chain of port/channel identifiers used for tracing the source of the fungible
|
||||
// token.
|
||||
// path defines the chain of port/channel identifiers used for tracing the
|
||||
// source of the fungible token.
|
||||
Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"`
|
||||
// base denomination of the relayed fungible token.
|
||||
BaseDenom string `protobuf:"bytes,2,opt,name=base_denom,json=baseDenom,proto3" json:"base_denom,omitempty"`
|
||||
|
@ -275,7 +219,7 @@ func (m *DenomTrace) Reset() { *m = DenomTrace{} }
|
|||
func (m *DenomTrace) String() string { return proto.CompactTextString(m) }
|
||||
func (*DenomTrace) ProtoMessage() {}
|
||||
func (*DenomTrace) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_08134a70fd29e656, []int{3}
|
||||
return fileDescriptor_08134a70fd29e656, []int{2}
|
||||
}
|
||||
func (m *DenomTrace) XXX_Unmarshal(b []byte) error {
|
||||
return m.Unmarshal(b)
|
||||
|
@ -319,12 +263,15 @@ func (m *DenomTrace) GetBaseDenom() string {
|
|||
}
|
||||
|
||||
// Params defines the set of IBC transfer parameters.
|
||||
// NOTE: To prevent a single token from being transferred, set the TransfersEnabled parameter to
|
||||
// true and then set the bank module's SendEnabled parameter for the denomination to false.
|
||||
// NOTE: To prevent a single token from being transferred, set the
|
||||
// TransfersEnabled parameter to true and then set the bank module's SendEnabled
|
||||
// parameter for the denomination to false.
|
||||
type Params struct {
|
||||
// send_enabled enables or disables all cross-chain token transfers from this chain.
|
||||
// send_enabled enables or disables all cross-chain token transfers from this
|
||||
// chain.
|
||||
SendEnabled bool `protobuf:"varint,1,opt,name=send_enabled,json=sendEnabled,proto3" json:"send_enabled,omitempty" yaml:"send_enabled"`
|
||||
// receive_enabled enables or disables all cross-chain token transfers to this chain.
|
||||
// receive_enabled enables or disables all cross-chain token transfers to this
|
||||
// chain.
|
||||
ReceiveEnabled bool `protobuf:"varint,2,opt,name=receive_enabled,json=receiveEnabled,proto3" json:"receive_enabled,omitempty" yaml:"receive_enabled"`
|
||||
}
|
||||
|
||||
|
@ -332,7 +279,7 @@ func (m *Params) Reset() { *m = Params{} }
|
|||
func (m *Params) String() string { return proto.CompactTextString(m) }
|
||||
func (*Params) ProtoMessage() {}
|
||||
func (*Params) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_08134a70fd29e656, []int{4}
|
||||
return fileDescriptor_08134a70fd29e656, []int{3}
|
||||
}
|
||||
func (m *Params) XXX_Unmarshal(b []byte) error {
|
||||
return m.Unmarshal(b)
|
||||
|
@ -378,7 +325,6 @@ func (m *Params) GetReceiveEnabled() bool {
|
|||
func init() {
|
||||
proto.RegisterType((*MsgTransfer)(nil), "ibc.transfer.MsgTransfer")
|
||||
proto.RegisterType((*FungibleTokenPacketData)(nil), "ibc.transfer.FungibleTokenPacketData")
|
||||
proto.RegisterType((*FungibleTokenPacketAcknowledgement)(nil), "ibc.transfer.FungibleTokenPacketAcknowledgement")
|
||||
proto.RegisterType((*DenomTrace)(nil), "ibc.transfer.DenomTrace")
|
||||
proto.RegisterType((*Params)(nil), "ibc.transfer.Params")
|
||||
}
|
||||
|
@ -386,47 +332,44 @@ func init() {
|
|||
func init() { proto.RegisterFile("ibc/transfer/transfer.proto", fileDescriptor_08134a70fd29e656) }
|
||||
|
||||
var fileDescriptor_08134a70fd29e656 = []byte{
|
||||
// 629 bytes of a gzipped FileDescriptorProto
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x54, 0x41, 0x4f, 0xdb, 0x4a,
|
||||
0x10, 0x8e, 0x21, 0x04, 0xd8, 0x00, 0xef, 0xbd, 0x7d, 0x3c, 0x30, 0x79, 0x25, 0x8e, 0x7c, 0xca,
|
||||
0x05, 0x5b, 0x69, 0x55, 0x55, 0xe2, 0xd2, 0x62, 0x68, 0x55, 0x54, 0x55, 0x42, 0x56, 0x0e, 0x55,
|
||||
0x2f, 0xd1, 0x7a, 0x3d, 0x75, 0xac, 0xc4, 0xbb, 0xd1, 0xee, 0x86, 0x16, 0xf5, 0x17, 0xf4, 0xd6,
|
||||
0x9f, 0x85, 0xd4, 0x0b, 0xc7, 0x9e, 0xac, 0x0a, 0xfe, 0x41, 0x8e, 0x3d, 0x55, 0xeb, 0x5d, 0x02,
|
||||
0xa9, 0x50, 0x4f, 0xbb, 0xdf, 0x7c, 0xf3, 0x8d, 0xe7, 0x9b, 0x9d, 0x04, 0xfd, 0x9f, 0x27, 0x34,
|
||||
0x54, 0x82, 0x30, 0xf9, 0x01, 0xc4, 0xfc, 0x12, 0x4c, 0x04, 0x57, 0x1c, 0x6f, 0xe4, 0x09, 0x0d,
|
||||
0x6e, 0x63, 0xad, 0xed, 0x8c, 0x67, 0xbc, 0x22, 0x42, 0x7d, 0x33, 0x39, 0xad, 0x36, 0xe5, 0xb2,
|
||||
0xe0, 0x32, 0x4c, 0x88, 0x84, 0xf0, 0xbc, 0x97, 0x80, 0x22, 0xbd, 0x90, 0xf2, 0x9c, 0x59, 0x7e,
|
||||
0x57, 0x7f, 0x80, 0x8e, 0x73, 0x60, 0xca, 0x1e, 0x86, 0xf0, 0xbf, 0x2d, 0xa3, 0xe6, 0x5b, 0x99,
|
||||
0xf5, 0x6d, 0x79, 0xfc, 0x0c, 0x35, 0x25, 0x9f, 0x0a, 0x0a, 0x83, 0x09, 0x17, 0xca, 0x75, 0x3a,
|
||||
0x4e, 0x77, 0x3d, 0xda, 0x99, 0x95, 0x1e, 0xbe, 0x20, 0xc5, 0xf8, 0xd0, 0xbf, 0x47, 0xfa, 0x31,
|
||||
0x32, 0xe8, 0x8c, 0x0b, 0x85, 0x5f, 0xa0, 0x2d, 0xcb, 0xd1, 0x21, 0x61, 0x0c, 0xc6, 0xee, 0x52,
|
||||
0xa5, 0xdd, 0x9b, 0x95, 0xde, 0x7f, 0x0b, 0x5a, 0xcb, 0xfb, 0xf1, 0xa6, 0x09, 0x1c, 0x1b, 0x8c,
|
||||
0x9f, 0xa2, 0x15, 0xc5, 0x47, 0xc0, 0xdc, 0xe5, 0x8e, 0xd3, 0x6d, 0x3e, 0xde, 0x0b, 0x8c, 0xa7,
|
||||
0x40, 0x7b, 0x0a, 0xac, 0xa7, 0xe0, 0x98, 0xe7, 0x2c, 0xaa, 0x5f, 0x96, 0x5e, 0x2d, 0x36, 0xd9,
|
||||
0xf8, 0x14, 0x35, 0x24, 0xb0, 0x14, 0x84, 0x5b, 0xef, 0x38, 0xdd, 0x8d, 0xa8, 0xf7, 0xb3, 0xf4,
|
||||
0x0e, 0xb2, 0x5c, 0x0d, 0xa7, 0x49, 0x40, 0x79, 0x11, 0xda, 0xc9, 0x98, 0xe3, 0x40, 0xa6, 0xa3,
|
||||
0x50, 0x5d, 0x4c, 0x40, 0x06, 0x47, 0x94, 0x1e, 0xa5, 0xa9, 0x00, 0x29, 0x63, 0x5b, 0x00, 0xb7,
|
||||
0xd0, 0x9a, 0x00, 0x0a, 0xf9, 0x39, 0x08, 0x77, 0x45, 0x77, 0x1f, 0xcf, 0x31, 0x7e, 0x87, 0xb6,
|
||||
0x54, 0x5e, 0x00, 0x9f, 0xaa, 0xc1, 0x10, 0xf2, 0x6c, 0xa8, 0xdc, 0x46, 0xd5, 0x26, 0x0e, 0xf4,
|
||||
0xf3, 0xd8, 0x99, 0xbe, 0xae, 0x98, 0x68, 0x5f, 0xf7, 0x77, 0xe7, 0x7b, 0x51, 0xe7, 0xc7, 0x9b,
|
||||
0x36, 0x60, 0xb2, 0xf1, 0x29, 0xfa, 0xe7, 0x36, 0x43, 0x9f, 0x52, 0x91, 0x62, 0xe2, 0xae, 0x76,
|
||||
0x9c, 0x6e, 0x3d, 0x7a, 0x34, 0x2b, 0x3d, 0x77, 0xb1, 0xc8, 0x3c, 0xc5, 0x8f, 0xff, 0xb6, 0xb1,
|
||||
0xfe, 0x3c, 0xf4, 0x19, 0xed, 0xbe, 0x9a, 0xb2, 0x2c, 0x4f, 0xc6, 0xd0, 0xd7, 0xc3, 0x39, 0x23,
|
||||
0x74, 0x04, 0xea, 0x84, 0x28, 0x82, 0xb7, 0xd1, 0x4a, 0x0a, 0x8c, 0x17, 0xe6, 0x49, 0x63, 0x03,
|
||||
0xf0, 0x0e, 0x6a, 0x90, 0x82, 0x4f, 0x99, 0xaa, 0x5e, 0xab, 0x1e, 0x5b, 0xa4, 0xe3, 0x76, 0xa8,
|
||||
0xcb, 0x55, 0xfa, 0x43, 0x13, 0xaa, 0x2f, 0x4e, 0xc8, 0xef, 0x23, 0xff, 0x81, 0x8f, 0x1f, 0xd1,
|
||||
0x11, 0xe3, 0x1f, 0xc7, 0x90, 0x66, 0x50, 0x00, 0x53, 0xd8, 0x45, 0xab, 0x72, 0x4a, 0x29, 0x48,
|
||||
0x59, 0x75, 0xb2, 0x16, 0xdf, 0x42, 0xdd, 0x21, 0x08, 0xc1, 0x85, 0x59, 0x9c, 0xd8, 0x00, 0xff,
|
||||
0x39, 0x42, 0x27, 0xba, 0xd5, 0xbe, 0x20, 0x14, 0x30, 0x46, 0xf5, 0x09, 0x51, 0x43, 0x6b, 0xa2,
|
||||
0xba, 0xe3, 0x7d, 0x84, 0xf4, 0x8a, 0x0c, 0x8c, 0x3d, 0x23, 0x5e, 0xd7, 0x91, 0x4a, 0xe7, 0x7f,
|
||||
0x71, 0x50, 0xe3, 0x8c, 0x08, 0x52, 0x48, 0x7c, 0x88, 0x36, 0xb4, 0x8f, 0x01, 0x30, 0x92, 0x8c,
|
||||
0x21, 0x35, 0x0d, 0x44, 0xbb, 0xb3, 0xd2, 0xfb, 0xd7, 0x6e, 0xe8, 0x3d, 0xd6, 0x8f, 0x9b, 0x1a,
|
||||
0xbe, 0x34, 0x08, 0x1f, 0xa3, 0xbf, 0xac, 0xd3, 0xb9, 0x7c, 0xa9, 0x92, 0xb7, 0x66, 0xa5, 0xb7,
|
||||
0x63, 0xe4, 0xbf, 0x25, 0xf8, 0xf1, 0x96, 0x8d, 0xd8, 0x22, 0xd1, 0x9b, 0xcb, 0xeb, 0xb6, 0x73,
|
||||
0x75, 0xdd, 0x76, 0x7e, 0x5c, 0xb7, 0x9d, 0xaf, 0x37, 0xed, 0xda, 0xd5, 0x4d, 0xbb, 0xf6, 0xfd,
|
||||
0xa6, 0x5d, 0x7b, 0xdf, 0xfb, 0xe3, 0xc6, 0x7e, 0x0a, 0xf3, 0x84, 0x1e, 0xdc, 0xfd, 0x41, 0xe8,
|
||||
0x05, 0x4e, 0x1a, 0xd5, 0x2f, 0xf8, 0xc9, 0xaf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xd2, 0x4b, 0xfa,
|
||||
0xcf, 0x3d, 0x04, 0x00, 0x00,
|
||||
// 587 bytes of a gzipped FileDescriptorProto
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x53, 0x4d, 0x4f, 0x13, 0x41,
|
||||
0x18, 0xee, 0x42, 0xa9, 0x30, 0x05, 0xd4, 0x11, 0x61, 0xa9, 0xb2, 0xdb, 0xec, 0xa9, 0x17, 0x76,
|
||||
0x53, 0x8d, 0x31, 0xe1, 0xa2, 0x2c, 0x68, 0x24, 0xc6, 0x84, 0x4c, 0x7a, 0x30, 0x5e, 0x9a, 0xd9,
|
||||
0xe9, 0xb8, 0xdd, 0xd0, 0x9d, 0x69, 0x66, 0xa6, 0x44, 0xe2, 0x2f, 0xf0, 0xe6, 0xcf, 0x22, 0xf1,
|
||||
0xc2, 0xd1, 0xd3, 0xc6, 0xd0, 0x7f, 0xd0, 0xa3, 0x27, 0x33, 0x1f, 0x14, 0x6a, 0x8c, 0xa7, 0x99,
|
||||
0xf7, 0x79, 0xde, 0xe7, 0x9d, 0xf7, 0x6b, 0xc0, 0x93, 0x22, 0x23, 0x89, 0x12, 0x98, 0xc9, 0xcf,
|
||||
0x54, 0xcc, 0x2f, 0xf1, 0x58, 0x70, 0xc5, 0xe1, 0x7a, 0x91, 0x91, 0xf8, 0x06, 0x6b, 0x6d, 0xe5,
|
||||
0x3c, 0xe7, 0x86, 0x48, 0xf4, 0xcd, 0xfa, 0xb4, 0x02, 0xc2, 0x65, 0xc9, 0x65, 0x92, 0x61, 0x49,
|
||||
0x93, 0xf3, 0x6e, 0x46, 0x15, 0xee, 0x26, 0x84, 0x17, 0xcc, 0xf1, 0x3b, 0xfa, 0x01, 0x32, 0x2a,
|
||||
0x28, 0x53, 0xee, 0xb0, 0x44, 0xf4, 0x63, 0x19, 0x34, 0x3f, 0xc8, 0xbc, 0xe7, 0xc2, 0xc3, 0x97,
|
||||
0xa0, 0x29, 0xf9, 0x44, 0x10, 0xda, 0x1f, 0x73, 0xa1, 0x7c, 0xaf, 0xed, 0x75, 0xd6, 0xd2, 0xed,
|
||||
0x59, 0x15, 0xc2, 0x0b, 0x5c, 0x8e, 0x0e, 0xa2, 0x3b, 0x64, 0x84, 0x80, 0xb5, 0x4e, 0xb9, 0x50,
|
||||
0xf0, 0x35, 0xd8, 0x74, 0x1c, 0x19, 0x62, 0xc6, 0xe8, 0xc8, 0x5f, 0x32, 0xda, 0xdd, 0x59, 0x15,
|
||||
0x3e, 0x5e, 0xd0, 0x3a, 0x3e, 0x42, 0x1b, 0x16, 0x38, 0xb2, 0x36, 0x7c, 0x01, 0x56, 0x14, 0x3f,
|
||||
0xa3, 0xcc, 0x5f, 0x6e, 0x7b, 0x9d, 0xe6, 0xb3, 0xdd, 0xd8, 0xd6, 0x14, 0xeb, 0x9a, 0x62, 0x57,
|
||||
0x53, 0x7c, 0xc4, 0x0b, 0x96, 0xd6, 0x2f, 0xab, 0xb0, 0x86, 0xac, 0x37, 0x3c, 0x01, 0x0d, 0x49,
|
||||
0xd9, 0x80, 0x0a, 0xbf, 0xde, 0xf6, 0x3a, 0xeb, 0x69, 0xf7, 0x77, 0x15, 0xee, 0xe7, 0x85, 0x1a,
|
||||
0x4e, 0xb2, 0x98, 0xf0, 0x32, 0x71, 0x9d, 0xb1, 0xc7, 0xbe, 0x1c, 0x9c, 0x25, 0xea, 0x62, 0x4c,
|
||||
0x65, 0x7c, 0x48, 0xc8, 0xe1, 0x60, 0x20, 0xa8, 0x94, 0xc8, 0x05, 0x80, 0x2d, 0xb0, 0x2a, 0x28,
|
||||
0xa1, 0xc5, 0x39, 0x15, 0xfe, 0x8a, 0xce, 0x1e, 0xcd, 0x6d, 0xf8, 0x11, 0x6c, 0xaa, 0xa2, 0xa4,
|
||||
0x7c, 0xa2, 0xfa, 0x43, 0x5a, 0xe4, 0x43, 0xe5, 0x37, 0x4c, 0x9a, 0x30, 0xd6, 0xe3, 0x71, 0x3d,
|
||||
0x7d, 0x67, 0x98, 0x74, 0x4f, 0xe7, 0x77, 0x5b, 0xf7, 0xa2, 0x2e, 0x42, 0x1b, 0x0e, 0xb0, 0xde,
|
||||
0xf0, 0x04, 0x3c, 0xbc, 0xf1, 0xd0, 0xa7, 0x54, 0xb8, 0x1c, 0xfb, 0xf7, 0xda, 0x5e, 0xa7, 0x9e,
|
||||
0x3e, 0x9d, 0x55, 0xa1, 0xbf, 0x18, 0x64, 0xee, 0x12, 0xa1, 0x07, 0x0e, 0xeb, 0xcd, 0xa1, 0xaf,
|
||||
0x60, 0xe7, 0xed, 0x84, 0xe5, 0x45, 0x36, 0xa2, 0x3d, 0xdd, 0x9c, 0x53, 0x4c, 0xce, 0xa8, 0x3a,
|
||||
0xc6, 0x0a, 0xc3, 0x2d, 0xb0, 0x32, 0xa0, 0x8c, 0x97, 0x76, 0xa4, 0xc8, 0x1a, 0x70, 0x1b, 0x34,
|
||||
0x70, 0xc9, 0x27, 0x4c, 0x99, 0x69, 0xd5, 0x91, 0xb3, 0x34, 0xee, 0x9a, 0xba, 0x6c, 0xdc, 0xff,
|
||||
0xd5, 0xa1, 0xfa, 0x62, 0x87, 0xa2, 0x57, 0x00, 0x1c, 0xeb, 0xa0, 0x3d, 0x81, 0x09, 0x85, 0x10,
|
||||
0xd4, 0xc7, 0x58, 0x0d, 0xdd, 0x73, 0xe6, 0x0e, 0xf7, 0x00, 0xd0, 0xc3, 0xec, 0xdb, 0x44, 0xcc,
|
||||
0x7e, 0xa0, 0x35, 0x8d, 0x18, 0x5d, 0xf4, 0xcd, 0x03, 0x8d, 0x53, 0x2c, 0x70, 0x29, 0xe1, 0x01,
|
||||
0x58, 0xd7, 0x2f, 0xf6, 0x29, 0xc3, 0xd9, 0x88, 0x0e, 0x4c, 0x94, 0xd5, 0x74, 0x67, 0x56, 0x85,
|
||||
0x8f, 0xdc, 0x2e, 0xdd, 0x61, 0x23, 0xd4, 0xd4, 0xe6, 0x1b, 0x6b, 0xc1, 0x23, 0x70, 0xdf, 0xe5,
|
||||
0x34, 0x97, 0x2f, 0x19, 0x79, 0x6b, 0x56, 0x85, 0xdb, 0x56, 0xfe, 0x97, 0x43, 0x84, 0x36, 0x1d,
|
||||
0xe2, 0x82, 0xa4, 0xef, 0x2f, 0xaf, 0x03, 0xef, 0xea, 0x3a, 0xf0, 0x7e, 0x5d, 0x07, 0xde, 0xf7,
|
||||
0x69, 0x50, 0xbb, 0x9a, 0x06, 0xb5, 0x9f, 0xd3, 0xa0, 0xf6, 0xa9, 0xfb, 0xdf, 0xdd, 0xfa, 0x92,
|
||||
0x14, 0x19, 0xd9, 0xbf, 0xfd, 0xca, 0x7a, 0xd5, 0xb2, 0x86, 0xf9, 0x6b, 0xcf, 0xff, 0x04, 0x00,
|
||||
0x00, 0xff, 0xff, 0xf9, 0x9b, 0xd6, 0xb8, 0xe7, 0x03, 0x00, 0x00,
|
||||
}
|
||||
|
||||
func (m *MsgTransfer) Marshal() (dAtA []byte, err error) {
|
||||
|
@ -554,46 +497,6 @@ func (m *FungibleTokenPacketData) MarshalToSizedBuffer(dAtA []byte) (int, error)
|
|||
return len(dAtA) - i, nil
|
||||
}
|
||||
|
||||
func (m *FungibleTokenPacketAcknowledgement) Marshal() (dAtA []byte, err error) {
|
||||
size := m.Size()
|
||||
dAtA = make([]byte, size)
|
||||
n, err := m.MarshalToSizedBuffer(dAtA[:size])
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return dAtA[:n], nil
|
||||
}
|
||||
|
||||
func (m *FungibleTokenPacketAcknowledgement) MarshalTo(dAtA []byte) (int, error) {
|
||||
size := m.Size()
|
||||
return m.MarshalToSizedBuffer(dAtA[:size])
|
||||
}
|
||||
|
||||
func (m *FungibleTokenPacketAcknowledgement) MarshalToSizedBuffer(dAtA []byte) (int, error) {
|
||||
i := len(dAtA)
|
||||
_ = i
|
||||
var l int
|
||||
_ = l
|
||||
if len(m.Error) > 0 {
|
||||
i -= len(m.Error)
|
||||
copy(dAtA[i:], m.Error)
|
||||
i = encodeVarintTransfer(dAtA, i, uint64(len(m.Error)))
|
||||
i--
|
||||
dAtA[i] = 0x12
|
||||
}
|
||||
if m.Success {
|
||||
i--
|
||||
if m.Success {
|
||||
dAtA[i] = 1
|
||||
} else {
|
||||
dAtA[i] = 0
|
||||
}
|
||||
i--
|
||||
dAtA[i] = 0x8
|
||||
}
|
||||
return len(dAtA) - i, nil
|
||||
}
|
||||
|
||||
func (m *DenomTrace) Marshal() (dAtA []byte, err error) {
|
||||
size := m.Size()
|
||||
dAtA = make([]byte, size)
|
||||
|
@ -741,22 +644,6 @@ func (m *FungibleTokenPacketData) Size() (n int) {
|
|||
return n
|
||||
}
|
||||
|
||||
func (m *FungibleTokenPacketAcknowledgement) Size() (n int) {
|
||||
if m == nil {
|
||||
return 0
|
||||
}
|
||||
var l int
|
||||
_ = l
|
||||
if m.Success {
|
||||
n += 2
|
||||
}
|
||||
l = len(m.Error)
|
||||
if l > 0 {
|
||||
n += 1 + l + sovTransfer(uint64(l))
|
||||
}
|
||||
return n
|
||||
}
|
||||
|
||||
func (m *DenomTrace) Size() (n int) {
|
||||
if m == nil {
|
||||
return 0
|
||||
|
@ -1231,111 +1118,6 @@ func (m *FungibleTokenPacketData) Unmarshal(dAtA []byte) error {
|
|||
}
|
||||
return nil
|
||||
}
|
||||
func (m *FungibleTokenPacketAcknowledgement) Unmarshal(dAtA []byte) error {
|
||||
l := len(dAtA)
|
||||
iNdEx := 0
|
||||
for iNdEx < l {
|
||||
preIndex := iNdEx
|
||||
var wire uint64
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowTransfer
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
wire |= uint64(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
fieldNum := int32(wire >> 3)
|
||||
wireType := int(wire & 0x7)
|
||||
if wireType == 4 {
|
||||
return fmt.Errorf("proto: FungibleTokenPacketAcknowledgement: wiretype end group for non-group")
|
||||
}
|
||||
if fieldNum <= 0 {
|
||||
return fmt.Errorf("proto: FungibleTokenPacketAcknowledgement: illegal tag %d (wire type %d)", fieldNum, wire)
|
||||
}
|
||||
switch fieldNum {
|
||||
case 1:
|
||||
if wireType != 0 {
|
||||
return fmt.Errorf("proto: wrong wireType = %d for field Success", wireType)
|
||||
}
|
||||
var v int
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowTransfer
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
v |= int(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
m.Success = bool(v != 0)
|
||||
case 2:
|
||||
if wireType != 2 {
|
||||
return fmt.Errorf("proto: wrong wireType = %d for field Error", wireType)
|
||||
}
|
||||
var stringLen uint64
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowTransfer
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
stringLen |= uint64(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
intStringLen := int(stringLen)
|
||||
if intStringLen < 0 {
|
||||
return ErrInvalidLengthTransfer
|
||||
}
|
||||
postIndex := iNdEx + intStringLen
|
||||
if postIndex < 0 {
|
||||
return ErrInvalidLengthTransfer
|
||||
}
|
||||
if postIndex > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
m.Error = string(dAtA[iNdEx:postIndex])
|
||||
iNdEx = postIndex
|
||||
default:
|
||||
iNdEx = preIndex
|
||||
skippy, err := skipTransfer(dAtA[iNdEx:])
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if skippy < 0 {
|
||||
return ErrInvalidLengthTransfer
|
||||
}
|
||||
if (iNdEx + skippy) < 0 {
|
||||
return ErrInvalidLengthTransfer
|
||||
}
|
||||
if (iNdEx + skippy) > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
iNdEx += skippy
|
||||
}
|
||||
}
|
||||
|
||||
if iNdEx > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
return nil
|
||||
}
|
||||
func (m *DenomTrace) Unmarshal(dAtA []byte) error {
|
||||
l := len(dAtA)
|
||||
iNdEx := 0
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
package types
|
||||
|
||||
import (
|
||||
"strings"
|
||||
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
|
||||
host "github.com/cosmos/cosmos-sdk/x/ibc/24-host"
|
||||
"github.com/cosmos/cosmos-sdk/x/ibc/exported"
|
||||
|
@ -123,3 +126,45 @@ func (ic IdentifiedChannel) ValidateBasic() error {
|
|||
channel := NewChannel(ic.State, ic.Ordering, ic.Counterparty, ic.ConnectionHops, ic.Version)
|
||||
return channel.ValidateBasic()
|
||||
}
|
||||
|
||||
// NewResultAcknowledgement returns a new instance of Acknowledgement using an Acknowledgement_Result
|
||||
// type in the Response field.
|
||||
func NewResultAcknowledgement(result []byte) Acknowledgement {
|
||||
return Acknowledgement{
|
||||
Response: &Acknowledgement_Result{
|
||||
Result: result,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
// NewErrorAcknowledgement returns a new instance of Acknowledgement using an Acknowledgement_Error
|
||||
// type in the Response field.
|
||||
func NewErrorAcknowledgement(err string) Acknowledgement {
|
||||
return Acknowledgement{
|
||||
Response: &Acknowledgement_Error{
|
||||
Error: err,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
// GetBytes is a helper for serialising acknowledgements
|
||||
func (ack Acknowledgement) GetBytes() []byte {
|
||||
return sdk.MustSortJSON(SubModuleCdc.MustMarshalJSON(&ack))
|
||||
}
|
||||
|
||||
// ValidateBasic performs a basic validation of the acknowledgement
|
||||
func (ack Acknowledgement) ValidateBasic() error {
|
||||
switch resp := ack.Response.(type) {
|
||||
case *Acknowledgement_Result:
|
||||
if len(resp.Result) == 0 {
|
||||
return sdkerrors.Wrap(ErrInvalidAcknowledgement, "acknowledgement result cannot be empty")
|
||||
}
|
||||
case *Acknowledgement_Error:
|
||||
if strings.TrimSpace(resp.Error) == "" {
|
||||
return sdkerrors.Wrap(ErrInvalidAcknowledgement, "acknowledgement error cannot be empty")
|
||||
}
|
||||
default:
|
||||
return sdkerrors.Wrapf(ErrInvalidAcknowledgement, "unsupported acknowledgement response field type %T", resp)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
|
|
@ -429,7 +429,7 @@ func (m *MsgChannelOpenConfirm) GetSigner() github_com_cosmos_cosmos_sdk_types.A
|
|||
return nil
|
||||
}
|
||||
|
||||
// MsgChannelOpenConfirm defines a msg sent by a Relayer to Chain A
|
||||
// MsgChannelCloseInit defines a msg sent by a Relayer to Chain A
|
||||
// to close a channel with Chain B.
|
||||
type MsgChannelCloseInit struct {
|
||||
PortId string `protobuf:"bytes,1,opt,name=port_id,json=portId,proto3" json:"port_id,omitempty" yaml:"port_id"`
|
||||
|
@ -887,8 +887,8 @@ type Channel struct {
|
|||
Ordering Order `protobuf:"varint,2,opt,name=ordering,proto3,enum=ibc.channel.Order" json:"ordering,omitempty"`
|
||||
// counterparty channel end
|
||||
Counterparty Counterparty `protobuf:"bytes,3,opt,name=counterparty,proto3" json:"counterparty"`
|
||||
// list of connection identifiers, in order, along which packets sent on this
|
||||
// channel will travel
|
||||
// list of connection identifiers, in order, along which packets sent on
|
||||
// this channel will travel
|
||||
ConnectionHops []string `protobuf:"bytes,4,rep,name=connection_hops,json=connectionHops,proto3" json:"connection_hops,omitempty" yaml:"connection_hops"`
|
||||
// opaque channel version, which is agreed upon during the handshake
|
||||
Version string `protobuf:"bytes,5,opt,name=version,proto3" json:"version,omitempty"`
|
||||
|
@ -936,8 +936,8 @@ type IdentifiedChannel struct {
|
|||
Ordering Order `protobuf:"varint,2,opt,name=ordering,proto3,enum=ibc.channel.Order" json:"ordering,omitempty"`
|
||||
// counterparty channel end
|
||||
Counterparty Counterparty `protobuf:"bytes,3,opt,name=counterparty,proto3" json:"counterparty"`
|
||||
// list of connection identifiers, in order, along which packets sent on this
|
||||
// channel will travel
|
||||
// list of connection identifiers, in order, along which packets sent on
|
||||
// this channel will travel
|
||||
ConnectionHops []string `protobuf:"bytes,4,rep,name=connection_hops,json=connectionHops,proto3" json:"connection_hops,omitempty" yaml:"connection_hops"`
|
||||
// opaque channel version, which is agreed upon during the handshake
|
||||
Version string `protobuf:"bytes,5,opt,name=version,proto3" json:"version,omitempty"`
|
||||
|
@ -1023,9 +1023,9 @@ var xxx_messageInfo_Counterparty proto.InternalMessageInfo
|
|||
|
||||
// Packet defines a type that carries data across different chains through IBC
|
||||
type Packet struct {
|
||||
// number corresponds to the order of sends and receives, where a Packet with
|
||||
// an earlier sequence number must be sent and received before a Packet with a
|
||||
// later sequence number.
|
||||
// number corresponds to the order of sends and receives, where a Packet
|
||||
// with an earlier sequence number must be sent and received before a Packet
|
||||
// with a later sequence number.
|
||||
Sequence uint64 `protobuf:"varint,1,opt,name=sequence,proto3" json:"sequence,omitempty"`
|
||||
// identifies the port on the sending chain.
|
||||
SourcePort string `protobuf:"bytes,2,opt,name=source_port,json=sourcePort,proto3" json:"source_port,omitempty" yaml:"source_port"`
|
||||
|
@ -1122,6 +1122,100 @@ func (m *PacketAckCommitment) XXX_DiscardUnknown() {
|
|||
|
||||
var xxx_messageInfo_PacketAckCommitment proto.InternalMessageInfo
|
||||
|
||||
// Acknowledgement is the recommended acknowledgement format to be used by
|
||||
// app-specifc protocols.
|
||||
// NOTE: The field numbers 21 and 22 were explicitly chosen to avoid accidental
|
||||
// conflicts with other protobuf message formats used for acknowledgements.
|
||||
// The first byte of any message with this format will be the non-ASCII values
|
||||
// `0xaa` (result) or `0xb2` (error). Implemented as defined by ICS:
|
||||
// https://github.com/cosmos/ics/tree/master/spec/ics-004-channel-and-packet-semantics#acknowledgement-envelope
|
||||
type Acknowledgement struct {
|
||||
// response contains either a result or an error and must be non-empty
|
||||
//
|
||||
// Types that are valid to be assigned to Response:
|
||||
// *Acknowledgement_Result
|
||||
// *Acknowledgement_Error
|
||||
Response isAcknowledgement_Response `protobuf_oneof:"response"`
|
||||
}
|
||||
|
||||
func (m *Acknowledgement) Reset() { *m = Acknowledgement{} }
|
||||
func (m *Acknowledgement) String() string { return proto.CompactTextString(m) }
|
||||
func (*Acknowledgement) ProtoMessage() {}
|
||||
func (*Acknowledgement) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_9277922ccfb7f043, []int{15}
|
||||
}
|
||||
func (m *Acknowledgement) XXX_Unmarshal(b []byte) error {
|
||||
return m.Unmarshal(b)
|
||||
}
|
||||
func (m *Acknowledgement) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
||||
if deterministic {
|
||||
return xxx_messageInfo_Acknowledgement.Marshal(b, m, deterministic)
|
||||
} else {
|
||||
b = b[:cap(b)]
|
||||
n, err := m.MarshalToSizedBuffer(b)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return b[:n], nil
|
||||
}
|
||||
}
|
||||
func (m *Acknowledgement) XXX_Merge(src proto.Message) {
|
||||
xxx_messageInfo_Acknowledgement.Merge(m, src)
|
||||
}
|
||||
func (m *Acknowledgement) XXX_Size() int {
|
||||
return m.Size()
|
||||
}
|
||||
func (m *Acknowledgement) XXX_DiscardUnknown() {
|
||||
xxx_messageInfo_Acknowledgement.DiscardUnknown(m)
|
||||
}
|
||||
|
||||
var xxx_messageInfo_Acknowledgement proto.InternalMessageInfo
|
||||
|
||||
type isAcknowledgement_Response interface {
|
||||
isAcknowledgement_Response()
|
||||
MarshalTo([]byte) (int, error)
|
||||
Size() int
|
||||
}
|
||||
|
||||
type Acknowledgement_Result struct {
|
||||
Result []byte `protobuf:"bytes,21,opt,name=result,proto3,oneof" json:"result,omitempty"`
|
||||
}
|
||||
type Acknowledgement_Error struct {
|
||||
Error string `protobuf:"bytes,22,opt,name=error,proto3,oneof" json:"error,omitempty"`
|
||||
}
|
||||
|
||||
func (*Acknowledgement_Result) isAcknowledgement_Response() {}
|
||||
func (*Acknowledgement_Error) isAcknowledgement_Response() {}
|
||||
|
||||
func (m *Acknowledgement) GetResponse() isAcknowledgement_Response {
|
||||
if m != nil {
|
||||
return m.Response
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *Acknowledgement) GetResult() []byte {
|
||||
if x, ok := m.GetResponse().(*Acknowledgement_Result); ok {
|
||||
return x.Result
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *Acknowledgement) GetError() string {
|
||||
if x, ok := m.GetResponse().(*Acknowledgement_Error); ok {
|
||||
return x.Error
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
// XXX_OneofWrappers is for the internal use of the proto package.
|
||||
func (*Acknowledgement) XXX_OneofWrappers() []interface{} {
|
||||
return []interface{}{
|
||||
(*Acknowledgement_Result)(nil),
|
||||
(*Acknowledgement_Error)(nil),
|
||||
}
|
||||
}
|
||||
|
||||
func init() {
|
||||
proto.RegisterEnum("ibc.channel.State", State_name, State_value)
|
||||
proto.RegisterEnum("ibc.channel.Order", Order_name, Order_value)
|
||||
|
@ -1140,96 +1234,99 @@ func init() {
|
|||
proto.RegisterType((*Counterparty)(nil), "ibc.channel.Counterparty")
|
||||
proto.RegisterType((*Packet)(nil), "ibc.channel.Packet")
|
||||
proto.RegisterType((*PacketAckCommitment)(nil), "ibc.channel.PacketAckCommitment")
|
||||
proto.RegisterType((*Acknowledgement)(nil), "ibc.channel.Acknowledgement")
|
||||
}
|
||||
|
||||
func init() { proto.RegisterFile("ibc/channel/channel.proto", fileDescriptor_9277922ccfb7f043) }
|
||||
|
||||
var fileDescriptor_9277922ccfb7f043 = []byte{
|
||||
// 1330 bytes of a gzipped FileDescriptorProto
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x58, 0xcd, 0x6b, 0x1b, 0x47,
|
||||
0x14, 0xd7, 0xea, 0xd3, 0x7a, 0xfe, 0x92, 0xc7, 0x8e, 0x23, 0x2b, 0x89, 0x56, 0x2c, 0x3d, 0x98,
|
||||
0x94, 0xc8, 0xcd, 0x07, 0x2d, 0xe4, 0x54, 0x49, 0x56, 0x88, 0x68, 0x2c, 0x99, 0xb1, 0x52, 0xda,
|
||||
0x5c, 0xc4, 0x7a, 0x35, 0x91, 0x16, 0x59, 0x3b, 0xea, 0xee, 0x38, 0x89, 0x8f, 0xbd, 0x05, 0x43,
|
||||
0xa1, 0x7f, 0x40, 0x0d, 0x85, 0x42, 0x8f, 0xbd, 0xf6, 0x5c, 0x7a, 0xc9, 0xa1, 0xd0, 0x5c, 0x0a,
|
||||
0x3d, 0x2d, 0x25, 0xf9, 0x0f, 0x74, 0x49, 0xe9, 0xa9, 0xec, 0xcc, 0xac, 0xb4, 0x2b, 0x3b, 0x39,
|
||||
0x44, 0xae, 0xf0, 0xa1, 0xa7, 0x9d, 0x79, 0xef, 0x37, 0x33, 0xef, 0xfd, 0xde, 0x9b, 0x37, 0x4f,
|
||||
0x82, 0x0d, 0x73, 0xdf, 0xd8, 0x32, 0xba, 0xba, 0x65, 0x91, 0x03, 0xff, 0x5b, 0x1c, 0xd8, 0x94,
|
||||
0x51, 0x34, 0x6f, 0xee, 0x1b, 0x45, 0x29, 0xca, 0xad, 0x75, 0x68, 0x87, 0x72, 0xf9, 0x96, 0x37,
|
||||
0x12, 0x90, 0xdc, 0x65, 0xbe, 0xfa, 0xc0, 0x24, 0x16, 0x93, 0x1f, 0xa1, 0xd0, 0xfe, 0x56, 0x00,
|
||||
// 1373 bytes of a gzipped FileDescriptorProto
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x58, 0x3b, 0x6f, 0x1b, 0x47,
|
||||
0x10, 0xe6, 0xf1, 0x29, 0x8e, 0x5e, 0xd4, 0xea, 0x61, 0x8a, 0xb6, 0x79, 0xc4, 0x21, 0x85, 0xe0,
|
||||
0xc0, 0x54, 0xfc, 0x40, 0x02, 0xb8, 0x0a, 0x49, 0xd1, 0x10, 0x11, 0x8b, 0x14, 0x56, 0x74, 0x90,
|
||||
0xb8, 0x21, 0x4e, 0xc7, 0x35, 0x79, 0xa0, 0x78, 0xcb, 0xdc, 0xad, 0x6c, 0xab, 0x4c, 0x67, 0x08,
|
||||
0x08, 0x90, 0x1f, 0x10, 0x01, 0x01, 0x02, 0xa4, 0x4c, 0x9b, 0x3a, 0x48, 0xe3, 0x22, 0x40, 0xdc,
|
||||
0x04, 0x48, 0x75, 0x08, 0xec, 0x7f, 0xc0, 0xc6, 0x41, 0xaa, 0xe0, 0x76, 0xf7, 0xc8, 0x3b, 0x4a,
|
||||
0x76, 0x61, 0x2a, 0x82, 0x8a, 0x54, 0x77, 0x33, 0xf3, 0xed, 0xee, 0xcc, 0x37, 0x73, 0xb3, 0x43,
|
||||
0xc2, 0xba, 0xb9, 0x6f, 0x6c, 0x1a, 0x5d, 0xdd, 0xb2, 0xc8, 0x81, 0xff, 0x2c, 0x0e, 0x6c, 0xca,
|
||||
0x28, 0x9a, 0x35, 0xf7, 0x8d, 0xa2, 0x54, 0xe5, 0x56, 0x3a, 0xb4, 0x43, 0xb9, 0x7e, 0xd3, 0x7b,
|
||||
0x13, 0x90, 0xdc, 0x15, 0xbe, 0xfa, 0xc0, 0x24, 0x16, 0x93, 0x0f, 0x61, 0xd0, 0xfe, 0x56, 0x00,
|
||||
0xed, 0x38, 0x9d, 0x8a, 0x58, 0xdd, 0x18, 0x10, 0xab, 0x66, 0x99, 0x0c, 0x7d, 0x08, 0xa9, 0x01,
|
||||
0xb5, 0x59, 0xcb, 0x6c, 0x67, 0x95, 0x82, 0xb2, 0x99, 0x2e, 0xa3, 0xa1, 0xab, 0x2e, 0x1d, 0xe9,
|
||||
0xfd, 0x83, 0xbb, 0x9a, 0x54, 0x68, 0x38, 0xe9, 0x8d, 0x6a, 0x6d, 0x74, 0x07, 0x40, 0x9e, 0xee,
|
||||
0xe1, 0xa3, 0x1c, 0x7f, 0x69, 0xe8, 0xaa, 0x2b, 0x02, 0x3f, 0xd6, 0x69, 0x38, 0x2d, 0x27, 0x7c,
|
||||
0x55, 0x4a, 0x4e, 0xb2, 0xb1, 0x82, 0xb2, 0x39, 0x7f, 0x6b, 0xad, 0x18, 0xf0, 0xa3, 0x28, 0x2d,
|
||||
0x2a, 0xc7, 0x5f, 0xb8, 0x6a, 0x04, 0xfb, 0x50, 0x54, 0x83, 0xa4, 0x63, 0x76, 0x2c, 0x62, 0x67,
|
||||
0xe3, 0x05, 0x65, 0x73, 0xa1, 0x7c, 0xf3, 0x1f, 0x57, 0xbd, 0xd1, 0x31, 0x59, 0xf7, 0x70, 0xbf,
|
||||
0x68, 0xd0, 0xfe, 0x96, 0x41, 0x9d, 0x3e, 0x75, 0xe4, 0xe7, 0x86, 0xd3, 0xee, 0x6d, 0xb1, 0xa3,
|
||||
0x01, 0x71, 0x8a, 0x25, 0xc3, 0x28, 0xb5, 0xdb, 0x36, 0x71, 0x1c, 0x2c, 0x37, 0xd0, 0xfe, 0x88,
|
||||
0xc1, 0x4a, 0xd8, 0xf5, 0xa6, 0x7d, 0x74, 0x71, 0x3d, 0xc7, 0xb0, 0x66, 0xd0, 0x43, 0x8b, 0x11,
|
||||
0x7b, 0xa0, 0xdb, 0xec, 0xa8, 0xf5, 0x84, 0xd8, 0x8e, 0x49, 0x2d, 0xce, 0x43, 0xba, 0xac, 0x0e,
|
||||
0x5d, 0xf5, 0x8a, 0x3c, 0xf5, 0x0c, 0x94, 0x86, 0x57, 0x83, 0xe2, 0xcf, 0x85, 0xd4, 0xb3, 0x7f,
|
||||
0x60, 0x53, 0xfa, 0xb8, 0x65, 0x5a, 0x26, 0xcb, 0x26, 0x38, 0xa3, 0x01, 0xfb, 0xc7, 0x3a, 0x0d,
|
||||
0xa7, 0xf9, 0x84, 0x27, 0x07, 0x86, 0x05, 0xa1, 0xe9, 0x12, 0xb3, 0xd3, 0x65, 0xd9, 0x24, 0x77,
|
||||
0x02, 0x09, 0x27, 0x44, 0x72, 0xdd, 0xe7, 0x9a, 0xf2, 0x15, 0xcf, 0x85, 0xa1, 0xab, 0xae, 0x06,
|
||||
0xf7, 0x13, 0xab, 0x34, 0x3c, 0xcf, 0xa7, 0x02, 0x19, 0x88, 0x6b, 0x6a, 0xda, 0xb8, 0x7e, 0x77,
|
||||
0x2a, 0xae, 0x25, 0xa3, 0x37, 0x8b, 0xb8, 0xbe, 0x2d, 0x42, 0xb1, 0x29, 0x22, 0x74, 0x13, 0x04,
|
||||
0xf1, 0x2d, 0x66, 0x1f, 0xc9, 0x94, 0x5f, 0x1b, 0xba, 0x6a, 0x26, 0x48, 0x28, 0xb3, 0x8f, 0x34,
|
||||
0x3c, 0xc7, 0xc7, 0x5e, 0x06, 0x4f, 0x86, 0x27, 0x71, 0xae, 0xe1, 0x49, 0x4e, 0x1b, 0x9e, 0xdf,
|
||||
0xa2, 0x70, 0x29, 0x1c, 0x9e, 0x0a, 0xb5, 0x1e, 0x9b, 0x76, 0x7f, 0x16, 0x21, 0x1a, 0xd1, 0xa9,
|
||||
0x1b, 0x3d, 0x1e, 0x97, 0x33, 0xe8, 0xd4, 0x8d, 0x9e, 0x4f, 0xa7, 0x97, 0x38, 0x93, 0x74, 0xc6,
|
||||
0xcf, 0x95, 0xce, 0xc4, 0xb4, 0x74, 0xfe, 0xaa, 0xc0, 0xea, 0x98, 0xce, 0xca, 0x01, 0x75, 0xc8,
|
||||
0xac, 0x2a, 0xf8, 0xd8, 0x8b, 0xd8, 0xb4, 0x5e, 0xbc, 0x8c, 0xc2, 0xfa, 0x84, 0x17, 0x33, 0xcc,
|
||||
0x8a, 0x70, 0x19, 0x8c, 0xbd, 0x67, 0x19, 0xbc, 0x60, 0x89, 0xf1, 0x46, 0x81, 0xc5, 0x1d, 0xa7,
|
||||
0x83, 0x89, 0xf1, 0x64, 0x57, 0x37, 0x7a, 0x84, 0xa1, 0x9b, 0x90, 0x1c, 0xf0, 0x11, 0x27, 0x72,
|
||||
0xfe, 0xd6, 0x6a, 0xe8, 0xd9, 0x11, 0x20, 0xf9, 0xea, 0x48, 0x20, 0x5a, 0x83, 0x04, 0x37, 0x8f,
|
||||
0x53, 0xb9, 0x80, 0xc5, 0xe4, 0x94, 0xe7, 0xb1, 0x73, 0xf5, 0x7c, 0xea, 0x87, 0xfd, 0x97, 0x28,
|
||||
0xc0, 0x8e, 0xd3, 0x69, 0x9a, 0x7d, 0x42, 0x0f, 0x2f, 0xb8, 0xdb, 0x9f, 0x01, 0xb2, 0xc8, 0x33,
|
||||
0xd6, 0x72, 0xc8, 0x57, 0x87, 0xc4, 0x32, 0x48, 0xcb, 0x26, 0xc6, 0x13, 0x4e, 0x41, 0xbc, 0x7c,
|
||||
0x6d, 0xe8, 0xaa, 0x1b, 0x62, 0x87, 0xd3, 0x18, 0x0d, 0x67, 0x3c, 0xe1, 0x9e, 0x94, 0x79, 0x61,
|
||||
0x3e, 0xcf, 0xec, 0xf9, 0x5a, 0x3c, 0xa2, 0x92, 0xc3, 0x86, 0xc5, 0xaf, 0xe4, 0xf9, 0x51, 0xf9,
|
||||
0x09, 0x08, 0x16, 0x5a, 0x86, 0xb7, 0xaf, 0xbc, 0x72, 0xeb, 0x43, 0x57, 0x45, 0x41, 0xc6, 0xb8,
|
||||
0x52, 0xc3, 0xe2, 0x72, 0x0a, 0x0b, 0xfe, 0x8b, 0x4b, 0x77, 0x76, 0x0c, 0x12, 0xd3, 0xc6, 0x60,
|
||||
0xea, 0x97, 0xf2, 0xc7, 0x28, 0xef, 0xcd, 0x4b, 0x46, 0xcf, 0xa2, 0x4f, 0x0f, 0x48, 0xbb, 0x43,
|
||||
0xfa, 0xc4, 0x7a, 0xaf, 0x7c, 0xde, 0x84, 0x65, 0x3d, 0xbc, 0x8b, 0x0c, 0xc7, 0xa4, 0x78, 0x1c,
|
||||
0xae, 0xd8, 0xbb, 0x32, 0xff, 0x82, 0x95, 0xba, 0x6f, 0xa2, 0x90, 0x92, 0x4f, 0x07, 0xda, 0x84,
|
||||
0x84, 0xc3, 0x74, 0x46, 0x38, 0x39, 0x4b, 0xbe, 0x8d, 0x92, 0x9c, 0x3d, 0x4f, 0x83, 0x05, 0x00,
|
||||
0x15, 0x61, 0x8e, 0xda, 0x6d, 0x62, 0x9b, 0x56, 0x87, 0xb3, 0x31, 0x09, 0x6e, 0x78, 0x4a, 0x3c,
|
||||
0xc2, 0xa0, 0x0a, 0x2c, 0x04, 0x3b, 0x34, 0x79, 0xfd, 0x37, 0xc2, 0xbd, 0x7b, 0x00, 0x20, 0x63,
|
||||
0x10, 0x5a, 0x84, 0x2a, 0xb0, 0x6c, 0x50, 0xcb, 0x22, 0x06, 0x33, 0xa9, 0xd5, 0xea, 0xd2, 0x81,
|
||||
0x93, 0x8d, 0x17, 0x62, 0x9b, 0xe9, 0x72, 0x6e, 0xe8, 0xaa, 0xeb, 0x7e, 0x7b, 0x18, 0x02, 0x68,
|
||||
0x78, 0x69, 0x2c, 0xb9, 0x4f, 0x07, 0x0e, 0xca, 0x42, 0xca, 0xef, 0x2d, 0x3d, 0xee, 0xd2, 0xd8,
|
||||
0x9f, 0xde, 0x8d, 0x3f, 0xff, 0x5e, 0x8d, 0x68, 0xbf, 0x47, 0x61, 0xa5, 0xd6, 0x26, 0x16, 0x33,
|
||||
0x1f, 0x9b, 0xa4, 0xfd, 0x3f, 0x33, 0x5e, 0x23, 0x7d, 0x79, 0xdc, 0x46, 0x24, 0xb9, 0xc6, 0x6f,
|
||||
0x19, 0xae, 0x85, 0x5a, 0x86, 0x14, 0xd7, 0x8d, 0x7b, 0x03, 0xc9, 0xe8, 0x53, 0x58, 0x08, 0x3a,
|
||||
0x30, 0x83, 0xa6, 0x44, 0x1e, 0xfc, 0x26, 0x06, 0x49, 0xf9, 0x7c, 0xe7, 0x60, 0xce, 0xaf, 0x3e,
|
||||
0xfc, 0xd0, 0x38, 0x1e, 0xcd, 0xbd, 0x7a, 0xea, 0xd0, 0x43, 0xdb, 0x20, 0x2d, 0xef, 0x4c, 0x79,
|
||||
0x46, 0xa0, 0x9e, 0x06, 0x94, 0x1a, 0x06, 0x31, 0xdb, 0xa5, 0x36, 0x43, 0x9f, 0xc2, 0x92, 0xd4,
|
||||
0x05, 0x7f, 0x92, 0xa6, 0xcb, 0x1b, 0x43, 0x57, 0xbd, 0x14, 0x5a, 0x2b, 0xf5, 0x1a, 0x5e, 0x14,
|
||||
0x02, 0x3f, 0xad, 0xee, 0x41, 0xa6, 0x4d, 0x1c, 0x66, 0x5a, 0x3a, 0x8f, 0x0b, 0x3f, 0x5f, 0xfc,
|
||||
0x26, 0xbd, 0x32, 0x74, 0xd5, 0xcb, 0x62, 0x8f, 0x49, 0x84, 0x86, 0x97, 0x03, 0x22, 0x6e, 0x49,
|
||||
0x03, 0x56, 0x83, 0x28, 0xdf, 0x1c, 0x1e, 0xc6, 0x72, 0x7e, 0xe8, 0xaa, 0xb9, 0xd3, 0x5b, 0x8d,
|
||||
0x6c, 0x42, 0x01, 0xa9, 0x6f, 0x18, 0x82, 0x78, 0x5b, 0x67, 0xba, 0xa8, 0xc3, 0x98, 0x8f, 0xd1,
|
||||
0x17, 0xb0, 0xc4, 0xc4, 0x93, 0xe6, 0x97, 0xb2, 0xd4, 0x5b, 0x4b, 0xd9, 0x35, 0x59, 0xca, 0x24,
|
||||
0x0d, 0xe1, 0x75, 0x1a, 0x5e, 0x94, 0x82, 0x51, 0x39, 0x5b, 0xf1, 0x11, 0xde, 0xd7, 0x61, 0x7a,
|
||||
0x7f, 0x90, 0x9d, 0xe3, 0x6f, 0xc8, 0xd5, 0xa1, 0xab, 0x66, 0xc3, 0x9b, 0x8c, 0x20, 0x1a, 0xce,
|
||||
0x48, 0x59, 0xd3, 0x17, 0xc9, 0xc8, 0xff, 0xa4, 0xc0, 0xaa, 0x88, 0x7c, 0xc9, 0xe8, 0x55, 0x68,
|
||||
0xbf, 0x6f, 0x32, 0x5e, 0xa1, 0x67, 0xd0, 0x0f, 0x07, 0x33, 0x2d, 0x36, 0x91, 0x69, 0x08, 0xe2,
|
||||
0x5d, 0xdd, 0xe9, 0x8a, 0x2e, 0x0d, 0xf3, 0xb1, 0x30, 0xf8, 0xfa, 0xcf, 0x0a, 0x24, 0x78, 0x19,
|
||||
0x41, 0x1f, 0x83, 0xba, 0xd7, 0x2c, 0x35, 0xab, 0xad, 0x87, 0xf5, 0x5a, 0xbd, 0xd6, 0xac, 0x95,
|
||||
0x1e, 0xd4, 0x1e, 0x55, 0xb7, 0x5b, 0x0f, 0xeb, 0x7b, 0xbb, 0xd5, 0x4a, 0xed, 0x5e, 0xad, 0xba,
|
||||
0x9d, 0x89, 0xe4, 0x56, 0x8e, 0x4f, 0x0a, 0x8b, 0x21, 0x00, 0xca, 0x02, 0x88, 0x75, 0x9e, 0x30,
|
||||
0xa3, 0xe4, 0xe6, 0x8e, 0x4f, 0x0a, 0x71, 0x6f, 0x8c, 0xf2, 0xb0, 0x28, 0x34, 0x4d, 0xfc, 0x65,
|
||||
0x63, 0xb7, 0x5a, 0xcf, 0x44, 0x73, 0xf3, 0xc7, 0x27, 0x85, 0x94, 0x9c, 0x8e, 0x57, 0x72, 0x65,
|
||||
0x4c, 0xac, 0xe4, 0x9a, 0xab, 0xb0, 0x20, 0x34, 0x95, 0x07, 0x8d, 0xbd, 0xea, 0x76, 0x26, 0x9e,
|
||||
0x83, 0xe3, 0x93, 0x42, 0x52, 0xcc, 0x72, 0xf1, 0xe7, 0x3f, 0xe4, 0x23, 0xd7, 0x9f, 0x42, 0x82,
|
||||
0x97, 0x34, 0xf4, 0x01, 0xac, 0x37, 0xf0, 0x76, 0x15, 0xb7, 0xea, 0x8d, 0x7a, 0x75, 0xc2, 0x5e,
|
||||
0xbe, 0xa5, 0x27, 0x47, 0x1a, 0x2c, 0x0b, 0xd4, 0xc3, 0x3a, 0xff, 0x56, 0xb7, 0x33, 0x4a, 0x6e,
|
||||
0xf1, 0xf8, 0xa4, 0x90, 0x1e, 0x09, 0x3c, 0x83, 0x05, 0xc6, 0x47, 0x48, 0x83, 0xe5, 0x54, 0x1c,
|
||||
0x5c, 0xde, 0x79, 0xf1, 0x2a, 0xaf, 0xbc, 0x7c, 0x95, 0x57, 0xfe, 0x7a, 0x95, 0x57, 0xbe, 0x7d,
|
||||
0x9d, 0x8f, 0xbc, 0x7c, 0x9d, 0x8f, 0xfc, 0xf9, 0x3a, 0x1f, 0x79, 0x74, 0xfb, 0x9d, 0x2f, 0xe1,
|
||||
0xb3, 0x2d, 0x73, 0xdf, 0xd8, 0xfa, 0xe8, 0xce, 0x0d, 0xff, 0x0f, 0x41, 0xfe, 0x34, 0xee, 0x27,
|
||||
0xf9, 0x7f, 0x7a, 0xb7, 0xff, 0x0d, 0x00, 0x00, 0xff, 0xff, 0xb5, 0x07, 0x62, 0x39, 0x2c, 0x14,
|
||||
0x00, 0x00,
|
||||
0xb5, 0x59, 0xcb, 0x6c, 0x67, 0x95, 0x82, 0xb2, 0x91, 0x2e, 0xa3, 0xa1, 0xab, 0x2e, 0x1c, 0xe9,
|
||||
0xfd, 0x83, 0x7b, 0x9a, 0x34, 0x68, 0x38, 0xe9, 0xbd, 0xd5, 0xda, 0xe8, 0x2e, 0x80, 0x3c, 0xdd,
|
||||
0xc3, 0x47, 0x39, 0x7e, 0x75, 0xe8, 0xaa, 0x4b, 0x02, 0x3f, 0xb6, 0x69, 0x38, 0x2d, 0x05, 0xbe,
|
||||
0x2a, 0x25, 0x85, 0x6c, 0xac, 0xa0, 0x6c, 0xcc, 0xde, 0x5e, 0x29, 0x06, 0xe2, 0x28, 0x4a, 0x8f,
|
||||
0xca, 0xf1, 0x17, 0xae, 0x1a, 0xc1, 0x3e, 0x14, 0xd5, 0x20, 0xe9, 0x98, 0x1d, 0x8b, 0xd8, 0xd9,
|
||||
0x78, 0x41, 0xd9, 0x98, 0x2b, 0xdf, 0xfa, 0xc7, 0x55, 0x6f, 0x76, 0x4c, 0xd6, 0x3d, 0xdc, 0x2f,
|
||||
0x1a, 0xb4, 0xbf, 0x69, 0x50, 0xa7, 0x4f, 0x1d, 0xf9, 0xb8, 0xe9, 0xb4, 0x7b, 0x9b, 0xec, 0x68,
|
||||
0x40, 0x9c, 0x62, 0xc9, 0x30, 0x4a, 0xed, 0xb6, 0x4d, 0x1c, 0x07, 0xcb, 0x0d, 0xb4, 0x3f, 0x62,
|
||||
0xb0, 0x14, 0x0e, 0xbd, 0x69, 0x1f, 0x5d, 0xde, 0xc8, 0x31, 0xac, 0x18, 0xf4, 0xd0, 0x62, 0xc4,
|
||||
0x1e, 0xe8, 0x36, 0x3b, 0x6a, 0x3d, 0x21, 0xb6, 0x63, 0x52, 0x8b, 0xf3, 0x90, 0x2e, 0xab, 0x43,
|
||||
0x57, 0xbd, 0x2a, 0x4f, 0x3d, 0x03, 0xa5, 0xe1, 0xe5, 0xa0, 0xfa, 0x73, 0xa1, 0xf5, 0xfc, 0x1f,
|
||||
0xd8, 0x94, 0x3e, 0x6e, 0x99, 0x96, 0xc9, 0xb2, 0x09, 0xce, 0x68, 0xc0, 0xff, 0xb1, 0x4d, 0xc3,
|
||||
0x69, 0x2e, 0xf0, 0xe2, 0xc0, 0x30, 0x27, 0x2c, 0x5d, 0x62, 0x76, 0xba, 0x2c, 0x9b, 0xe4, 0x41,
|
||||
0x20, 0x11, 0x84, 0x28, 0xae, 0x6d, 0x6e, 0x29, 0x5f, 0xf5, 0x42, 0x18, 0xba, 0xea, 0x72, 0x70,
|
||||
0x3f, 0xb1, 0x4a, 0xc3, 0xb3, 0x5c, 0x14, 0xc8, 0x40, 0x5e, 0x53, 0xd3, 0xe6, 0xf5, 0xbb, 0x53,
|
||||
0x79, 0x2d, 0x19, 0xbd, 0x8b, 0xc8, 0xeb, 0xdb, 0x32, 0x14, 0x9b, 0x22, 0x43, 0xb7, 0x40, 0x10,
|
||||
0xdf, 0x62, 0xf6, 0x91, 0x2c, 0xf9, 0x95, 0xa1, 0xab, 0x66, 0x82, 0x84, 0x32, 0xfb, 0x48, 0xc3,
|
||||
0x33, 0xfc, 0xdd, 0xab, 0xe0, 0xc9, 0xf4, 0x24, 0xce, 0x35, 0x3d, 0xc9, 0x69, 0xd3, 0xf3, 0x5b,
|
||||
0x14, 0x56, 0xc3, 0xe9, 0xa9, 0x50, 0xeb, 0xb1, 0x69, 0xf7, 0x2f, 0x22, 0x45, 0x23, 0x3a, 0x75,
|
||||
0xa3, 0xc7, 0xf3, 0x72, 0x06, 0x9d, 0xba, 0xd1, 0xf3, 0xe9, 0xf4, 0x0a, 0x67, 0x92, 0xce, 0xf8,
|
||||
0xb9, 0xd2, 0x99, 0x98, 0x96, 0xce, 0x5f, 0x15, 0x58, 0x1e, 0xd3, 0x59, 0x39, 0xa0, 0x0e, 0xb9,
|
||||
0xa8, 0x0e, 0x3e, 0x8e, 0x22, 0x36, 0x6d, 0x14, 0x2f, 0xa3, 0xb0, 0x36, 0x11, 0xc5, 0x05, 0x56,
|
||||
0x45, 0xb8, 0x0d, 0xc6, 0xde, 0xb3, 0x0d, 0x5e, 0xb2, 0xc2, 0x78, 0xa3, 0xc0, 0xfc, 0x8e, 0xd3,
|
||||
0xc1, 0xc4, 0x78, 0xb2, 0xab, 0x1b, 0x3d, 0xc2, 0xd0, 0x2d, 0x48, 0x0e, 0xf8, 0x1b, 0x27, 0x72,
|
||||
0xf6, 0xf6, 0x72, 0xe8, 0xda, 0x11, 0x20, 0x79, 0xeb, 0x48, 0x20, 0x5a, 0x81, 0x04, 0x77, 0x8f,
|
||||
0x53, 0x39, 0x87, 0x85, 0x70, 0x2a, 0xf2, 0xd8, 0xb9, 0x46, 0x3e, 0xf5, 0xc5, 0xfe, 0x4b, 0x14,
|
||||
0x60, 0xc7, 0xe9, 0x34, 0xcd, 0x3e, 0xa1, 0x87, 0x97, 0x3c, 0xec, 0xcf, 0x00, 0x59, 0xe4, 0x19,
|
||||
0x6b, 0x39, 0xe4, 0xab, 0x43, 0x62, 0x19, 0xa4, 0x65, 0x13, 0xe3, 0x09, 0xa7, 0x20, 0x5e, 0xbe,
|
||||
0x3e, 0x74, 0xd5, 0x75, 0xb1, 0xc3, 0x69, 0x8c, 0x86, 0x33, 0x9e, 0x72, 0x4f, 0xea, 0xbc, 0x34,
|
||||
0x9f, 0x67, 0xf5, 0x7c, 0x2d, 0x2e, 0x51, 0xc9, 0x61, 0xc3, 0xe2, 0x9f, 0xe4, 0xf9, 0x51, 0xf9,
|
||||
0x09, 0x08, 0x16, 0x5a, 0x86, 0xb7, 0xaf, 0xfc, 0xe4, 0xd6, 0x86, 0xae, 0x8a, 0x82, 0x8c, 0x71,
|
||||
0xa3, 0x86, 0xc5, 0xc7, 0x29, 0x3c, 0xf8, 0x2f, 0x3e, 0xba, 0xb3, 0x73, 0x90, 0x98, 0x36, 0x07,
|
||||
0x53, 0xdf, 0x94, 0x3f, 0x46, 0xf9, 0x6c, 0x5e, 0x32, 0x7a, 0x16, 0x7d, 0x7a, 0x40, 0xda, 0x1d,
|
||||
0xd2, 0x27, 0xd6, 0x7b, 0xd5, 0xf3, 0x06, 0x2c, 0xea, 0xe1, 0x5d, 0x64, 0x3a, 0x26, 0xd5, 0xe3,
|
||||
0x74, 0xc5, 0xde, 0x55, 0xf9, 0x97, 0xac, 0xd5, 0x7d, 0x13, 0x85, 0x94, 0xbc, 0x3a, 0xd0, 0x06,
|
||||
0x24, 0x1c, 0xa6, 0x33, 0xc2, 0xc9, 0x59, 0xf0, 0x7d, 0x94, 0xe4, 0xec, 0x79, 0x16, 0x2c, 0x00,
|
||||
0xa8, 0x08, 0x33, 0xd4, 0x6e, 0x13, 0xdb, 0xb4, 0x3a, 0x9c, 0x8d, 0x49, 0x70, 0xc3, 0x33, 0xe2,
|
||||
0x11, 0x06, 0x55, 0x60, 0x2e, 0x38, 0xa1, 0xc9, 0xcf, 0x7f, 0x3d, 0x3c, 0xbb, 0x07, 0x00, 0x32,
|
||||
0x07, 0xa1, 0x45, 0xa8, 0x02, 0x8b, 0x06, 0xb5, 0x2c, 0x62, 0x30, 0x93, 0x5a, 0xad, 0x2e, 0x1d,
|
||||
0x38, 0xd9, 0x78, 0x21, 0xb6, 0x91, 0x2e, 0xe7, 0x86, 0xae, 0xba, 0xe6, 0x8f, 0x87, 0x21, 0x80,
|
||||
0x86, 0x17, 0xc6, 0x9a, 0x6d, 0x3a, 0x70, 0x50, 0x16, 0x52, 0xfe, 0x6c, 0xe9, 0x71, 0x97, 0xc6,
|
||||
0xbe, 0x78, 0x2f, 0xfe, 0xfc, 0x7b, 0x35, 0xa2, 0xfd, 0x1e, 0x85, 0xa5, 0x5a, 0x9b, 0x58, 0xcc,
|
||||
0x7c, 0x6c, 0x92, 0xf6, 0xff, 0xcc, 0x78, 0x83, 0xf4, 0x95, 0xf1, 0x18, 0x91, 0xe4, 0x16, 0x7f,
|
||||
0x64, 0xb8, 0x1e, 0x1a, 0x19, 0x52, 0xdc, 0x36, 0x9e, 0x0d, 0x24, 0xa3, 0x4f, 0x61, 0x2e, 0x18,
|
||||
0xc0, 0x05, 0x0c, 0x25, 0xf2, 0xe0, 0x37, 0x31, 0x48, 0xca, 0xeb, 0x3b, 0x07, 0x33, 0x7e, 0xf7,
|
||||
0xe1, 0x87, 0xc6, 0xf1, 0x48, 0xf6, 0xfa, 0xa9, 0x43, 0x0f, 0x6d, 0x83, 0xb4, 0xbc, 0x33, 0xe5,
|
||||
0x19, 0x81, 0x7e, 0x1a, 0x30, 0x6a, 0x18, 0x84, 0xb4, 0x4b, 0x6d, 0x86, 0x3e, 0x85, 0x05, 0x69,
|
||||
0x0b, 0xfe, 0x24, 0x4d, 0x97, 0xd7, 0x87, 0xae, 0xba, 0x1a, 0x5a, 0x2b, 0xed, 0x1a, 0x9e, 0x17,
|
||||
0x0a, 0xbf, 0xac, 0xee, 0x43, 0xa6, 0x4d, 0x1c, 0x66, 0x5a, 0x3a, 0xcf, 0x0b, 0x3f, 0x5f, 0xfc,
|
||||
0x26, 0xbd, 0x3a, 0x74, 0xd5, 0x2b, 0x62, 0x8f, 0x49, 0x84, 0x86, 0x17, 0x03, 0x2a, 0xee, 0x49,
|
||||
0x03, 0x96, 0x83, 0x28, 0xdf, 0x1d, 0x9e, 0xc6, 0x72, 0x7e, 0xe8, 0xaa, 0xb9, 0xd3, 0x5b, 0x8d,
|
||||
0x7c, 0x42, 0x01, 0xad, 0xef, 0x18, 0x82, 0x78, 0x5b, 0x67, 0xba, 0xe8, 0xc3, 0x98, 0xbf, 0xa3,
|
||||
0x2f, 0x60, 0x81, 0x89, 0x2b, 0xcd, 0x6f, 0x65, 0xa9, 0xb7, 0xb6, 0xb2, 0xeb, 0xb2, 0x95, 0x49,
|
||||
0x1a, 0xc2, 0xeb, 0x34, 0x3c, 0x2f, 0x15, 0xa3, 0x76, 0xb6, 0xe4, 0x23, 0xbc, 0xa7, 0xc3, 0xf4,
|
||||
0xfe, 0x20, 0x3b, 0xc3, 0xef, 0x90, 0x6b, 0x43, 0x57, 0xcd, 0x86, 0x37, 0x19, 0x41, 0x34, 0x9c,
|
||||
0x91, 0xba, 0xa6, 0xaf, 0x92, 0x99, 0xff, 0x49, 0x81, 0x65, 0x91, 0xf9, 0x92, 0xd1, 0xab, 0xd0,
|
||||
0x7e, 0xdf, 0x64, 0xbc, 0x43, 0x5f, 0xc0, 0x3c, 0x1c, 0xac, 0xb4, 0xd8, 0x44, 0xa5, 0x21, 0x88,
|
||||
0x77, 0x75, 0xa7, 0x2b, 0xa6, 0x34, 0xcc, 0xdf, 0xa5, 0xc3, 0x0d, 0x58, 0x9c, 0xbc, 0xaa, 0xb2,
|
||||
0x90, 0xb4, 0x89, 0x73, 0x78, 0xc0, 0xb2, 0xab, 0x1e, 0x7c, 0x3b, 0x82, 0xa5, 0x8c, 0xd6, 0x20,
|
||||
0x41, 0x6c, 0x9b, 0xda, 0xd9, 0x35, 0xcf, 0xa7, 0xed, 0x08, 0x16, 0x62, 0x19, 0x60, 0xc6, 0x26,
|
||||
0xce, 0x80, 0x5a, 0x0e, 0xb9, 0xf1, 0xb3, 0x02, 0x09, 0xde, 0x97, 0xd0, 0xc7, 0xa0, 0xee, 0x35,
|
||||
0x4b, 0xcd, 0x6a, 0xeb, 0x61, 0xbd, 0x56, 0xaf, 0x35, 0x6b, 0xa5, 0x07, 0xb5, 0x47, 0xd5, 0xad,
|
||||
0xd6, 0xc3, 0xfa, 0xde, 0x6e, 0xb5, 0x52, 0xbb, 0x5f, 0xab, 0x6e, 0x65, 0x22, 0xb9, 0xa5, 0xe3,
|
||||
0x93, 0xc2, 0x7c, 0x08, 0x80, 0xb2, 0x00, 0x62, 0x9d, 0xa7, 0xcc, 0x28, 0xb9, 0x99, 0xe3, 0x93,
|
||||
0x42, 0xdc, 0x7b, 0x47, 0x79, 0x98, 0x17, 0x96, 0x26, 0xfe, 0xb2, 0xb1, 0x5b, 0xad, 0x67, 0xa2,
|
||||
0xb9, 0xd9, 0xe3, 0x93, 0x42, 0x4a, 0x8a, 0xe3, 0x95, 0xdc, 0x18, 0x13, 0x2b, 0xb9, 0xe5, 0x1a,
|
||||
0xcc, 0x09, 0x4b, 0xe5, 0x41, 0x63, 0xaf, 0xba, 0x95, 0x89, 0xe7, 0xe0, 0xf8, 0xa4, 0x90, 0x14,
|
||||
0x52, 0x2e, 0xfe, 0xfc, 0x87, 0x7c, 0xe4, 0xc6, 0x53, 0x48, 0xf0, 0x1e, 0x89, 0x3e, 0x80, 0xb5,
|
||||
0x06, 0xde, 0xaa, 0xe2, 0x56, 0xbd, 0x51, 0xaf, 0x4e, 0xf8, 0xcb, 0xb7, 0xf4, 0xf4, 0x48, 0x83,
|
||||
0x45, 0x81, 0x7a, 0x58, 0xe7, 0xcf, 0xea, 0x56, 0x46, 0xc9, 0xcd, 0x1f, 0x9f, 0x14, 0xd2, 0x23,
|
||||
0x85, 0xe7, 0xb0, 0xc0, 0xf8, 0x08, 0xe9, 0xb0, 0x14, 0xc5, 0xc1, 0xe5, 0x9d, 0x17, 0xaf, 0xf2,
|
||||
0xca, 0xcb, 0x57, 0x79, 0xe5, 0xaf, 0x57, 0x79, 0xe5, 0xdb, 0xd7, 0xf9, 0xc8, 0xcb, 0xd7, 0xf9,
|
||||
0xc8, 0x9f, 0xaf, 0xf3, 0x91, 0x47, 0x77, 0xde, 0x79, 0xb5, 0x3e, 0xdb, 0x34, 0xf7, 0x8d, 0xcd,
|
||||
0x8f, 0xee, 0xde, 0xf4, 0xff, 0x61, 0xe4, 0x77, 0xed, 0x7e, 0x92, 0xff, 0x49, 0x78, 0xe7, 0xdf,
|
||||
0x00, 0x00, 0x00, 0xff, 0xff, 0x2a, 0x78, 0x52, 0x52, 0x7d, 0x14, 0x00, 0x00,
|
||||
}
|
||||
|
||||
func (m *MsgChannelOpenInit) Marshal() (dAtA []byte, err error) {
|
||||
|
@ -2146,6 +2243,72 @@ func (m *PacketAckCommitment) MarshalToSizedBuffer(dAtA []byte) (int, error) {
|
|||
return len(dAtA) - i, nil
|
||||
}
|
||||
|
||||
func (m *Acknowledgement) Marshal() (dAtA []byte, err error) {
|
||||
size := m.Size()
|
||||
dAtA = make([]byte, size)
|
||||
n, err := m.MarshalToSizedBuffer(dAtA[:size])
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return dAtA[:n], nil
|
||||
}
|
||||
|
||||
func (m *Acknowledgement) MarshalTo(dAtA []byte) (int, error) {
|
||||
size := m.Size()
|
||||
return m.MarshalToSizedBuffer(dAtA[:size])
|
||||
}
|
||||
|
||||
func (m *Acknowledgement) MarshalToSizedBuffer(dAtA []byte) (int, error) {
|
||||
i := len(dAtA)
|
||||
_ = i
|
||||
var l int
|
||||
_ = l
|
||||
if m.Response != nil {
|
||||
{
|
||||
size := m.Response.Size()
|
||||
i -= size
|
||||
if _, err := m.Response.MarshalTo(dAtA[i:]); err != nil {
|
||||
return 0, err
|
||||
}
|
||||
}
|
||||
}
|
||||
return len(dAtA) - i, nil
|
||||
}
|
||||
|
||||
func (m *Acknowledgement_Result) MarshalTo(dAtA []byte) (int, error) {
|
||||
size := m.Size()
|
||||
return m.MarshalToSizedBuffer(dAtA[:size])
|
||||
}
|
||||
|
||||
func (m *Acknowledgement_Result) MarshalToSizedBuffer(dAtA []byte) (int, error) {
|
||||
i := len(dAtA)
|
||||
if m.Result != nil {
|
||||
i -= len(m.Result)
|
||||
copy(dAtA[i:], m.Result)
|
||||
i = encodeVarintChannel(dAtA, i, uint64(len(m.Result)))
|
||||
i--
|
||||
dAtA[i] = 0x1
|
||||
i--
|
||||
dAtA[i] = 0xaa
|
||||
}
|
||||
return len(dAtA) - i, nil
|
||||
}
|
||||
func (m *Acknowledgement_Error) MarshalTo(dAtA []byte) (int, error) {
|
||||
size := m.Size()
|
||||
return m.MarshalToSizedBuffer(dAtA[:size])
|
||||
}
|
||||
|
||||
func (m *Acknowledgement_Error) MarshalToSizedBuffer(dAtA []byte) (int, error) {
|
||||
i := len(dAtA)
|
||||
i -= len(m.Error)
|
||||
copy(dAtA[i:], m.Error)
|
||||
i = encodeVarintChannel(dAtA, i, uint64(len(m.Error)))
|
||||
i--
|
||||
dAtA[i] = 0x1
|
||||
i--
|
||||
dAtA[i] = 0xb2
|
||||
return len(dAtA) - i, nil
|
||||
}
|
||||
func encodeVarintChannel(dAtA []byte, offset int, v uint64) int {
|
||||
offset -= sovChannel(v)
|
||||
base := offset
|
||||
|
@ -2557,6 +2720,41 @@ func (m *PacketAckCommitment) Size() (n int) {
|
|||
return n
|
||||
}
|
||||
|
||||
func (m *Acknowledgement) Size() (n int) {
|
||||
if m == nil {
|
||||
return 0
|
||||
}
|
||||
var l int
|
||||
_ = l
|
||||
if m.Response != nil {
|
||||
n += m.Response.Size()
|
||||
}
|
||||
return n
|
||||
}
|
||||
|
||||
func (m *Acknowledgement_Result) Size() (n int) {
|
||||
if m == nil {
|
||||
return 0
|
||||
}
|
||||
var l int
|
||||
_ = l
|
||||
if m.Result != nil {
|
||||
l = len(m.Result)
|
||||
n += 2 + l + sovChannel(uint64(l))
|
||||
}
|
||||
return n
|
||||
}
|
||||
func (m *Acknowledgement_Error) Size() (n int) {
|
||||
if m == nil {
|
||||
return 0
|
||||
}
|
||||
var l int
|
||||
_ = l
|
||||
l = len(m.Error)
|
||||
n += 2 + l + sovChannel(uint64(l))
|
||||
return n
|
||||
}
|
||||
|
||||
func sovChannel(x uint64) (n int) {
|
||||
return (math_bits.Len64(x|1) + 6) / 7
|
||||
}
|
||||
|
@ -5734,6 +5932,124 @@ func (m *PacketAckCommitment) Unmarshal(dAtA []byte) error {
|
|||
}
|
||||
return nil
|
||||
}
|
||||
func (m *Acknowledgement) Unmarshal(dAtA []byte) error {
|
||||
l := len(dAtA)
|
||||
iNdEx := 0
|
||||
for iNdEx < l {
|
||||
preIndex := iNdEx
|
||||
var wire uint64
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowChannel
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
wire |= uint64(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
fieldNum := int32(wire >> 3)
|
||||
wireType := int(wire & 0x7)
|
||||
if wireType == 4 {
|
||||
return fmt.Errorf("proto: Acknowledgement: wiretype end group for non-group")
|
||||
}
|
||||
if fieldNum <= 0 {
|
||||
return fmt.Errorf("proto: Acknowledgement: illegal tag %d (wire type %d)", fieldNum, wire)
|
||||
}
|
||||
switch fieldNum {
|
||||
case 21:
|
||||
if wireType != 2 {
|
||||
return fmt.Errorf("proto: wrong wireType = %d for field Result", wireType)
|
||||
}
|
||||
var byteLen int
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowChannel
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
byteLen |= int(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
if byteLen < 0 {
|
||||
return ErrInvalidLengthChannel
|
||||
}
|
||||
postIndex := iNdEx + byteLen
|
||||
if postIndex < 0 {
|
||||
return ErrInvalidLengthChannel
|
||||
}
|
||||
if postIndex > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
v := make([]byte, postIndex-iNdEx)
|
||||
copy(v, dAtA[iNdEx:postIndex])
|
||||
m.Response = &Acknowledgement_Result{v}
|
||||
iNdEx = postIndex
|
||||
case 22:
|
||||
if wireType != 2 {
|
||||
return fmt.Errorf("proto: wrong wireType = %d for field Error", wireType)
|
||||
}
|
||||
var stringLen uint64
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowChannel
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
stringLen |= uint64(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
intStringLen := int(stringLen)
|
||||
if intStringLen < 0 {
|
||||
return ErrInvalidLengthChannel
|
||||
}
|
||||
postIndex := iNdEx + intStringLen
|
||||
if postIndex < 0 {
|
||||
return ErrInvalidLengthChannel
|
||||
}
|
||||
if postIndex > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
m.Response = &Acknowledgement_Error{string(dAtA[iNdEx:postIndex])}
|
||||
iNdEx = postIndex
|
||||
default:
|
||||
iNdEx = preIndex
|
||||
skippy, err := skipChannel(dAtA[iNdEx:])
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if skippy < 0 {
|
||||
return ErrInvalidLengthChannel
|
||||
}
|
||||
if (iNdEx + skippy) < 0 {
|
||||
return ErrInvalidLengthChannel
|
||||
}
|
||||
if (iNdEx + skippy) > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
iNdEx += skippy
|
||||
}
|
||||
}
|
||||
|
||||
if iNdEx > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
return nil
|
||||
}
|
||||
func skipChannel(dAtA []byte) (n int, err error) {
|
||||
l := len(dAtA)
|
||||
iNdEx := 0
|
||||
|
|
|
@ -30,3 +30,63 @@ func TestCounterpartyValidateBasic(t *testing.T) {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
// tests acknowledgement.ValidateBasic and acknowledgement.GetBytes
|
||||
func (suite TypesTestSuite) TestAcknowledgement() {
|
||||
testCases := []struct {
|
||||
name string
|
||||
ack types.Acknowledgement
|
||||
expPass bool
|
||||
}{
|
||||
{
|
||||
"valid successful ack",
|
||||
types.NewResultAcknowledgement([]byte("success")),
|
||||
true,
|
||||
},
|
||||
{
|
||||
"valid failed ack",
|
||||
types.NewErrorAcknowledgement("error"),
|
||||
true,
|
||||
},
|
||||
{
|
||||
"empty successful ack",
|
||||
types.NewResultAcknowledgement([]byte{}),
|
||||
false,
|
||||
},
|
||||
{
|
||||
"empty faied ack",
|
||||
types.NewErrorAcknowledgement(" "),
|
||||
false,
|
||||
},
|
||||
{
|
||||
"nil response",
|
||||
types.Acknowledgement{
|
||||
Response: nil,
|
||||
},
|
||||
false,
|
||||
},
|
||||
}
|
||||
|
||||
for _, tc := range testCases {
|
||||
tc := tc
|
||||
|
||||
suite.Run(tc.name, func() {
|
||||
suite.SetupTest()
|
||||
|
||||
err := tc.ack.ValidateBasic()
|
||||
|
||||
if tc.expPass {
|
||||
suite.Require().NoError(err)
|
||||
} else {
|
||||
suite.Require().Error(err)
|
||||
}
|
||||
|
||||
// expect all acks to be able to be marshaled
|
||||
suite.NotPanics(func() {
|
||||
bz := tc.ack.GetBytes()
|
||||
suite.Require().NotNil(bz)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -67,13 +67,13 @@ var (
|
|||
addr = sdk.AccAddress("testaddr")
|
||||
)
|
||||
|
||||
type MsgTestSuite struct {
|
||||
type TypesTestSuite struct {
|
||||
suite.Suite
|
||||
|
||||
proof []byte
|
||||
}
|
||||
|
||||
func (suite *MsgTestSuite) SetupTest() {
|
||||
func (suite *TypesTestSuite) SetupTest() {
|
||||
app := simapp.Setup(false)
|
||||
db := dbm.NewMemDB()
|
||||
store := rootmulti.NewStore(db)
|
||||
|
@ -99,12 +99,12 @@ func (suite *MsgTestSuite) SetupTest() {
|
|||
suite.proof = proof
|
||||
}
|
||||
|
||||
func TestMsgTestSuite(t *testing.T) {
|
||||
suite.Run(t, new(MsgTestSuite))
|
||||
func TestTypesTestSuite(t *testing.T) {
|
||||
suite.Run(t, new(TypesTestSuite))
|
||||
}
|
||||
|
||||
// TestMsgChannelOpenInit tests ValidateBasic for MsgChannelOpenInit
|
||||
func (suite *MsgTestSuite) TestMsgChannelOpenInit() {
|
||||
func (suite *TypesTestSuite) TestMsgChannelOpenInit() {
|
||||
testMsgs := []*types.MsgChannelOpenInit{
|
||||
types.NewMsgChannelOpenInit("testportid", "testchannel", "1.0", types.ORDERED, connHops, "testcpport", "testcpchannel", addr), // valid msg
|
||||
types.NewMsgChannelOpenInit(invalidShortPort, "testchannel", "1.0", types.ORDERED, connHops, "testcpport", "testcpchannel", addr), // too short port id
|
||||
|
@ -156,7 +156,7 @@ func (suite *MsgTestSuite) TestMsgChannelOpenInit() {
|
|||
}
|
||||
|
||||
// TestMsgChannelOpenTry tests ValidateBasic for MsgChannelOpenTry
|
||||
func (suite *MsgTestSuite) TestMsgChannelOpenTry() {
|
||||
func (suite *TypesTestSuite) TestMsgChannelOpenTry() {
|
||||
testMsgs := []*types.MsgChannelOpenTry{
|
||||
types.NewMsgChannelOpenTry("testportid", "testchannel", "1.0", types.ORDERED, connHops, "testcpport", "testcpchannel", "1.0", suite.proof, height, addr), // valid msg
|
||||
types.NewMsgChannelOpenTry(invalidShortPort, "testchannel", "1.0", types.ORDERED, connHops, "testcpport", "testcpchannel", "1.0", suite.proof, height, addr), // too short port id
|
||||
|
@ -214,7 +214,7 @@ func (suite *MsgTestSuite) TestMsgChannelOpenTry() {
|
|||
}
|
||||
|
||||
// TestMsgChannelOpenAck tests ValidateBasic for MsgChannelOpenAck
|
||||
func (suite *MsgTestSuite) TestMsgChannelOpenAck() {
|
||||
func (suite *TypesTestSuite) TestMsgChannelOpenAck() {
|
||||
testMsgs := []*types.MsgChannelOpenAck{
|
||||
types.NewMsgChannelOpenAck("testportid", "testchannel", "1.0", suite.proof, height, addr), // valid msg
|
||||
types.NewMsgChannelOpenAck(invalidShortPort, "testchannel", "1.0", suite.proof, height, addr), // too short port id
|
||||
|
@ -256,7 +256,7 @@ func (suite *MsgTestSuite) TestMsgChannelOpenAck() {
|
|||
}
|
||||
|
||||
// TestMsgChannelOpenConfirm tests ValidateBasic for MsgChannelOpenConfirm
|
||||
func (suite *MsgTestSuite) TestMsgChannelOpenConfirm() {
|
||||
func (suite *TypesTestSuite) TestMsgChannelOpenConfirm() {
|
||||
testMsgs := []*types.MsgChannelOpenConfirm{
|
||||
types.NewMsgChannelOpenConfirm("testportid", "testchannel", suite.proof, height, addr), // valid msg
|
||||
types.NewMsgChannelOpenConfirm(invalidShortPort, "testchannel", suite.proof, height, addr), // too short port id
|
||||
|
@ -296,7 +296,7 @@ func (suite *MsgTestSuite) TestMsgChannelOpenConfirm() {
|
|||
}
|
||||
|
||||
// TestMsgChannelCloseInit tests ValidateBasic for MsgChannelCloseInit
|
||||
func (suite *MsgTestSuite) TestMsgChannelCloseInit() {
|
||||
func (suite *TypesTestSuite) TestMsgChannelCloseInit() {
|
||||
testMsgs := []*types.MsgChannelCloseInit{
|
||||
types.NewMsgChannelCloseInit("testportid", "testchannel", addr), // valid msg
|
||||
types.NewMsgChannelCloseInit(invalidShortPort, "testchannel", addr), // too short port id
|
||||
|
@ -332,7 +332,7 @@ func (suite *MsgTestSuite) TestMsgChannelCloseInit() {
|
|||
}
|
||||
|
||||
// TestMsgChannelCloseConfirm tests ValidateBasic for MsgChannelCloseConfirm
|
||||
func (suite *MsgTestSuite) TestMsgChannelCloseConfirm() {
|
||||
func (suite *TypesTestSuite) TestMsgChannelCloseConfirm() {
|
||||
testMsgs := []*types.MsgChannelCloseConfirm{
|
||||
types.NewMsgChannelCloseConfirm("testportid", "testchannel", suite.proof, height, addr), // valid msg
|
||||
types.NewMsgChannelCloseConfirm(invalidShortPort, "testchannel", suite.proof, height, addr), // too short port id
|
||||
|
@ -372,14 +372,14 @@ func (suite *MsgTestSuite) TestMsgChannelCloseConfirm() {
|
|||
}
|
||||
|
||||
// TestMsgRecvPacketType tests Type for MsgRecvPacket.
|
||||
func (suite *MsgTestSuite) TestMsgRecvPacketType() {
|
||||
func (suite *TypesTestSuite) TestMsgRecvPacketType() {
|
||||
msg := types.NewMsgRecvPacket(packet, suite.proof, height, addr1)
|
||||
|
||||
suite.Equal("recv_packet", msg.Type())
|
||||
}
|
||||
|
||||
// TestMsgRecvPacketValidation tests ValidateBasic for MsgRecvPacket
|
||||
func (suite *MsgTestSuite) TestMsgRecvPacketValidation() {
|
||||
func (suite *TypesTestSuite) TestMsgRecvPacketValidation() {
|
||||
testMsgs := []*types.MsgRecvPacket{
|
||||
types.NewMsgRecvPacket(packet, suite.proof, height, addr1), // valid msg
|
||||
types.NewMsgRecvPacket(packet, suite.proof, clienttypes.Height{}, addr1), // proof height is zero
|
||||
|
@ -411,7 +411,7 @@ func (suite *MsgTestSuite) TestMsgRecvPacketValidation() {
|
|||
}
|
||||
|
||||
// TestMsgRecvPacketGetSignBytes tests GetSignBytes for MsgRecvPacket
|
||||
func (suite *MsgTestSuite) TestMsgRecvPacketGetSignBytes() {
|
||||
func (suite *TypesTestSuite) TestMsgRecvPacketGetSignBytes() {
|
||||
msg := types.NewMsgRecvPacket(packet, suite.proof, height, addr1)
|
||||
res := msg.GetSignBytes()
|
||||
|
||||
|
@ -423,7 +423,7 @@ func (suite *MsgTestSuite) TestMsgRecvPacketGetSignBytes() {
|
|||
}
|
||||
|
||||
// TestMsgRecvPacketGetSigners tests GetSigners for MsgRecvPacket
|
||||
func (suite *MsgTestSuite) TestMsgRecvPacketGetSigners() {
|
||||
func (suite *TypesTestSuite) TestMsgRecvPacketGetSigners() {
|
||||
msg := types.NewMsgRecvPacket(packet, suite.proof, height, addr1)
|
||||
res := msg.GetSigners()
|
||||
|
||||
|
@ -432,7 +432,7 @@ func (suite *MsgTestSuite) TestMsgRecvPacketGetSigners() {
|
|||
}
|
||||
|
||||
// TestMsgTimeout tests ValidateBasic for MsgTimeout
|
||||
func (suite *MsgTestSuite) TestMsgTimeout() {
|
||||
func (suite *TypesTestSuite) TestMsgTimeout() {
|
||||
testMsgs := []*types.MsgTimeout{
|
||||
types.NewMsgTimeout(packet, 1, suite.proof, height, addr),
|
||||
types.NewMsgTimeout(packet, 1, suite.proof, clienttypes.Height{}, addr),
|
||||
|
@ -464,7 +464,7 @@ func (suite *MsgTestSuite) TestMsgTimeout() {
|
|||
}
|
||||
|
||||
// TestMsgTimeoutOnClose tests ValidateBasic for MsgTimeoutOnClose
|
||||
func (suite *MsgTestSuite) TestMsgTimeoutOnClose() {
|
||||
func (suite *TypesTestSuite) TestMsgTimeoutOnClose() {
|
||||
testCases := []struct {
|
||||
name string
|
||||
msg sdk.Msg
|
||||
|
@ -494,7 +494,7 @@ func (suite *MsgTestSuite) TestMsgTimeoutOnClose() {
|
|||
}
|
||||
|
||||
// TestMsgAcknowledgement tests ValidateBasic for MsgAcknowledgement
|
||||
func (suite *MsgTestSuite) TestMsgAcknowledgement() {
|
||||
func (suite *TypesTestSuite) TestMsgAcknowledgement() {
|
||||
testMsgs := []*types.MsgAcknowledgement{
|
||||
types.NewMsgAcknowledgement(packet, packet.GetData(), suite.proof, height, addr),
|
||||
types.NewMsgAcknowledgement(packet, packet.GetData(), suite.proof, clienttypes.Height{}, addr),
|
||||
|
|
Loading…
Reference in New Issue