From 2b443d8283b04463a67361c55bb067c17f3e494a Mon Sep 17 00:00:00 2001 From: Colin Axner Date: Tue, 8 Sep 2020 11:40:39 +0200 Subject: [PATCH 01/13] gen ack proto type --- proto/ibc/channel/channel.proto | 62 ++-- x/ibc/04-channel/types/channel.pb.go | 483 ++++++++++++++++++++++----- 2 files changed, 437 insertions(+), 108 deletions(-) diff --git a/proto/ibc/channel/channel.proto b/proto/ibc/channel/channel.proto index bf2d339c8769..bcbff0b24575 100644 --- a/proto/ibc/channel/channel.proto +++ b/proto/ibc/channel/channel.proto @@ -24,12 +24,12 @@ message MsgChannelOpenTry { Channel channel = 3 [(gogoproto.nullable) = false]; string counterparty_version = 4 [(gogoproto.moretags) = "yaml:\"counterparty_version\""]; - bytes proof_init = 5 [(gogoproto.moretags) = "yaml:\"proof_init\""]; + bytes proof_init = 5 [(gogoproto.moretags) = "yaml:\"proof_init\""]; ibc.client.Height proof_height = 6 [ (gogoproto.moretags) = "yaml:\"proof_height\"", (gogoproto.nullable) = false ]; - bytes signer = 7 + bytes signer = 7 [(gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.AccAddress"]; } @@ -40,26 +40,26 @@ message MsgChannelOpenAck { string channel_id = 2 [(gogoproto.moretags) = "yaml:\"channel_id\""]; string counterparty_version = 3 [(gogoproto.moretags) = "yaml:\"counterparty_version\""]; - bytes proof_try = 4 [(gogoproto.moretags) = "yaml:\"proof_try\""]; + bytes proof_try = 4 [(gogoproto.moretags) = "yaml:\"proof_try\""]; ibc.client.Height proof_height = 5 [ (gogoproto.moretags) = "yaml:\"proof_height\"", (gogoproto.nullable) = false ]; - bytes signer = 6 + bytes signer = 6 [(gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.AccAddress"]; } // MsgChannelOpenConfirm defines a msg sent by a Relayer to Chain B to // acknowledge the change of channel state to OPEN on Chain A. message MsgChannelOpenConfirm { - string port_id = 1 [(gogoproto.moretags) = "yaml:\"port_id\""]; - string channel_id = 2 [(gogoproto.moretags) = "yaml:\"channel_id\""]; - bytes proof_ack = 3 [(gogoproto.moretags) = "yaml:\"proof_ack\""]; + string port_id = 1 [(gogoproto.moretags) = "yaml:\"port_id\""]; + string channel_id = 2 [(gogoproto.moretags) = "yaml:\"channel_id\""]; + bytes proof_ack = 3 [(gogoproto.moretags) = "yaml:\"proof_ack\""]; ibc.client.Height proof_height = 4 [ (gogoproto.moretags) = "yaml:\"proof_height\"", (gogoproto.nullable) = false ]; - bytes signer = 5 + bytes signer = 5 [(gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.AccAddress"]; } @@ -75,33 +75,33 @@ message MsgChannelCloseInit { // MsgChannelCloseConfirm defines a msg sent by a Relayer to Chain B // to acknowledge the change of channel state to CLOSED on Chain A. message MsgChannelCloseConfirm { - string port_id = 1 [(gogoproto.moretags) = "yaml:\"port_id\""]; - string channel_id = 2 [(gogoproto.moretags) = "yaml:\"channel_id\""]; - bytes proof_init = 3 [(gogoproto.moretags) = "yaml:\"proof_init\""]; + string port_id = 1 [(gogoproto.moretags) = "yaml:\"port_id\""]; + string channel_id = 2 [(gogoproto.moretags) = "yaml:\"channel_id\""]; + bytes proof_init = 3 [(gogoproto.moretags) = "yaml:\"proof_init\""]; ibc.client.Height proof_height = 4 [ (gogoproto.moretags) = "yaml:\"proof_height\"", (gogoproto.nullable) = false ]; - bytes signer = 5 + bytes signer = 5 [(gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.AccAddress"]; } // MsgRecvPacket receives incoming IBC packet message MsgRecvPacket { - Packet packet = 1 [(gogoproto.nullable) = false]; - bytes proof = 2; + Packet packet = 1 [(gogoproto.nullable) = false]; + bytes proof = 2; ibc.client.Height proof_height = 3 [ (gogoproto.moretags) = "yaml:\"proof_height\"", (gogoproto.nullable) = false ]; - bytes signer = 4 + bytes signer = 4 [(gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.AccAddress"]; } // MsgTimeout receives timed-out packet message MsgTimeout { - Packet packet = 1 [(gogoproto.nullable) = false]; - bytes proof = 2; + Packet packet = 1 [(gogoproto.nullable) = false]; + bytes proof = 2; ibc.client.Height proof_height = 3 [ (gogoproto.moretags) = "yaml:\"proof_height\"", (gogoproto.nullable) = false @@ -114,9 +114,9 @@ message MsgTimeout { // MsgTimeoutOnClose timed-out packet upon counterparty channel closure. message MsgTimeoutOnClose { - Packet packet = 1 [(gogoproto.nullable) = false]; - bytes proof = 2; - bytes proof_close = 3 [(gogoproto.moretags) = "yaml:\"proof_close\""]; + Packet packet = 1 [(gogoproto.nullable) = false]; + bytes proof = 2; + bytes proof_close = 3 [(gogoproto.moretags) = "yaml:\"proof_close\""]; ibc.client.Height proof_height = 4 [ (gogoproto.moretags) = "yaml:\"proof_height\"", (gogoproto.nullable) = false @@ -129,14 +129,14 @@ message MsgTimeoutOnClose { // MsgAcknowledgement receives incoming IBC acknowledgement message MsgAcknowledgement { - Packet packet = 1 [(gogoproto.nullable) = false]; - bytes acknowledgement = 2; - bytes proof = 3; + Packet packet = 1 [(gogoproto.nullable) = false]; + bytes acknowledgement = 2; + bytes proof = 3; ibc.client.Height proof_height = 4 [ (gogoproto.moretags) = "yaml:\"proof_height\"", (gogoproto.nullable) = false ]; - bytes signer = 5 + bytes signer = 5 [(gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.AccAddress"]; } @@ -270,3 +270,17 @@ message PacketAckCommitment { // packet commitment hash. bytes hash = 4; } + +// 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). +message Acknowledgement { + // response contains either a result or an error and must be non-empty + oneof response { + bytes result = 21; + string error = 22; + } +} diff --git a/x/ibc/04-channel/types/channel.pb.go b/x/ibc/04-channel/types/channel.pb.go index 9b5be470e971..da5d88d1a6a9 100644 --- a/x/ibc/04-channel/types/channel.pb.go +++ b/x/ibc/04-channel/types/channel.pb.go @@ -1122,6 +1122,99 @@ 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). +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 +1233,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 +2242,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 +2719,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 +5931,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 From 6fa65b222907331c44f915795be94a16759133f7 Mon Sep 17 00:00:00 2001 From: Colin Axner Date: Tue, 8 Sep 2020 11:50:56 +0200 Subject: [PATCH 02/13] remove transfer ack --- proto/ibc/channel/channel.proto | 3 +- proto/ibc/transfer/transfer.proto | 42 ++-- x/ibc-transfer/types/transfer.pb.go | 320 +++++---------------------- x/ibc/04-channel/types/channel.pb.go | 3 +- 4 files changed, 72 insertions(+), 296 deletions(-) diff --git a/proto/ibc/channel/channel.proto b/proto/ibc/channel/channel.proto index bcbff0b24575..88f716a3f9a3 100644 --- a/proto/ibc/channel/channel.proto +++ b/proto/ibc/channel/channel.proto @@ -276,7 +276,8 @@ message PacketAckCommitment { // 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). +// `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 { diff --git a/proto/ibc/transfer/transfer.proto b/proto/ibc/transfer/transfer.proto index f17cd09bd68b..ea6a7bd4443e 100644 --- a/proto/ibc/transfer/transfer.proto +++ b/proto/ibc/transfer/transfer.proto @@ -18,7 +18,8 @@ message MsgTransfer { // the tokens to be transferred cosmos.base.v1beta1.Coin token = 3 [(gogoproto.nullable) = false]; // the sender address - bytes sender = 4 [(gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.AccAddress"]; + bytes sender = 4 + [(gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.AccAddress"]; // the recipient address on the destination chain string receiver = 5; // Timeout height relative to the current block height. @@ -29,7 +30,8 @@ message MsgTransfer { ]; // Timeout timestamp (in nanoseconds) relative to the current block timestamp. // The timeout is disabled when set to 0. - uint64 timeout_timestamp = 7 [(gogoproto.moretags) = "yaml:\"timeout_timestamp\""]; + uint64 timeout_timestamp = 7 + [(gogoproto.moretags) = "yaml:\"timeout_timestamp\""]; } // FungibleTokenPacketData defines a struct for the packet payload @@ -46,35 +48,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. - bool send_enabled = 1 [ - (gogoproto.moretags) = "yaml:\"send_enabled\"" - ]; - // receive_enabled enables or disables all cross-chain token transfers to this chain. - bool receive_enabled = 2 [ - (gogoproto.moretags) = "yaml:\"receive_enabled\"" - ]; + // 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. + bool receive_enabled = 2 [(gogoproto.moretags) = "yaml:\"receive_enabled\""]; } diff --git a/x/ibc-transfer/types/transfer.pb.go b/x/ibc-transfer/types/transfer.pb.go index b5a85391bbd9..0a38b92f3067 100644 --- a/x/ibc-transfer/types/transfer.pb.go +++ b/x/ibc-transfer/types/transfer.pb.go @@ -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 diff --git a/x/ibc/04-channel/types/channel.pb.go b/x/ibc/04-channel/types/channel.pb.go index da5d88d1a6a9..83946d3a4249 100644 --- a/x/ibc/04-channel/types/channel.pb.go +++ b/x/ibc/04-channel/types/channel.pb.go @@ -1127,7 +1127,8 @@ var xxx_messageInfo_PacketAckCommitment proto.InternalMessageInfo // 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). +// `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 // From 5302fcc76ed7bed24db8d272e1c7f8c9a904ead2 Mon Sep 17 00:00:00 2001 From: Colin Axner Date: Tue, 8 Sep 2020 14:51:43 +0200 Subject: [PATCH 03/13] change ics20 ack to use standard type --- x/ibc-transfer/handler_test.go | 2 +- x/ibc-transfer/keeper/relay.go | 8 ++-- x/ibc-transfer/module.go | 29 ++++--------- x/ibc-transfer/spec/05_events.md | 15 ++++--- x/ibc-transfer/types/events.go | 1 + x/ibc-transfer/types/packet.go | 5 --- x/ibc/04-channel/types/channel.go | 45 +++++++++++++++++++ x/ibc/04-channel/types/channel_test.go | 60 ++++++++++++++++++++++++++ x/ibc/04-channel/types/msgs_test.go | 34 +++++++-------- 9 files changed, 145 insertions(+), 54 deletions(-) diff --git a/x/ibc-transfer/handler_test.go b/x/ibc-transfer/handler_test.go index 97f5f4d7513d..070393d8fd72 100644 --- a/x/ibc-transfer/handler_test.go +++ b/x/ibc-transfer/handler_test.go @@ -48,7 +48,7 @@ func (suite *HandlerTestSuite) 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 diff --git a/x/ibc-transfer/keeper/relay.go b/x/ibc-transfer/keeper/relay.go index 43a27f6a1bd5..0f559fcab02f 100644 --- a/x/ibc-transfer/keeper/relay.go +++ b/x/ibc-transfer/keeper/relay.go @@ -232,11 +232,13 @@ 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: + return nil } - return nil } // OnTimeoutPacket refunds the sender since the original packet sent was diff --git a/x/ibc-transfer/module.go b/x/ibc-transfer/module.go index d98462cf150f..ed7a452d77b0 100644 --- a/x/ibc-transfer/module.go +++ b/x/ibc-transfer/module.go @@ -303,16 +303,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( @@ -322,6 +317,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)), ), ) @@ -336,8 +332,8 @@ func (am AppModule) OnAcknowledgementPacket( packet channeltypes.Packet, acknowledgement []byte, ) (*sdk.Result, error) { - var ack types.FungibleTokenPacketAcknowledgement - if err := types.ModuleCdc.UnmarshalJSON(acknowledgement, &ack); err != nil { + var ack channeltypes.Acknowledgement + if err := channeltypes.SubModuleCdc.UnmarshalJSON(acknowledgement, &ack); err != nil { return nil, sdkerrors.Wrapf(sdkerrors.ErrUnknownRequest, "cannot unmarshal ICS-20 transfer packet acknowledgement: %v", err) } var data types.FungibleTokenPacketData @@ -356,19 +352,10 @@ 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 { - ctx.EventManager().EmitEvent( - sdk.NewEvent( - types.EventTypePacket, - sdk.NewAttribute(types.AttributeKeyAckError, ack.Error), - ), - ) - } - return &sdk.Result{ Events: ctx.EventManager().Events().ToABCIEvents(), }, nil diff --git a/x/ibc-transfer/spec/05_events.md b/x/ibc-transfer/spec/05_events.md index 626a98a4f1a8..0d8bf0fdc328 100644 --- a/x/ibc-transfer/spec/05_events.md +++ b/x/ibc-transfer/spec/05_events.md @@ -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 | acknowledgement | {acknowledgement} | ## OnTimeoutPacket callback diff --git a/x/ibc-transfer/types/events.go b/x/ibc-transfer/types/events.go index 68832f937ded..a3ed5b413c73 100644 --- a/x/ibc-transfer/types/events.go +++ b/x/ibc-transfer/types/events.go @@ -15,6 +15,7 @@ const ( AttributeKeyRefundDenom = "refund_denom" AttributeKeyRefundAmount = "refund_amount" AttributeKeyAckSuccess = "success" + AttributeKeyAck = "acknowledgement" AttributeKeyAckError = "error" AttributeKeyTraceHash = "trace_hash" ) diff --git a/x/ibc-transfer/types/packet.go b/x/ibc-transfer/types/packet.go index 4acbacce7e85..c9d37d267441 100644 --- a/x/ibc-transfer/types/packet.go +++ b/x/ibc-transfer/types/packet.go @@ -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)) -} diff --git a/x/ibc/04-channel/types/channel.go b/x/ibc/04-channel/types/channel.go index 7fdb6f4e0c2f..2b915fe882fa 100644 --- a/x/ibc/04-channel/types/channel.go +++ b/x/ibc/04-channel/types/channel.go @@ -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 ack.Response.(type) { + case *Acknowledgement_Result: + if len(ack.Response.(*Acknowledgement_Result).Result) == 0 { + return sdkerrors.Wrap(ErrInvalidAcknowledgement, "acknowledgement result cannot be empty") + } + case *Acknowledgement_Error: + if strings.TrimSpace(ack.Response.(*Acknowledgement_Error).Error) == "" { + return sdkerrors.Wrap(ErrInvalidAcknowledgement, "acknowledgement error cannot be nil") + } + default: + return sdkerrors.Wrap(ErrInvalidAcknowledgement, "unsupported acknowledgement response field") + } + return nil +} diff --git a/x/ibc/04-channel/types/channel_test.go b/x/ibc/04-channel/types/channel_test.go index c02114672a5c..a5c528bbf9db 100644 --- a/x/ibc/04-channel/types/channel_test.go +++ b/x/ibc/04-channel/types/channel_test.go @@ -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) + }) + }) + } + +} diff --git a/x/ibc/04-channel/types/msgs_test.go b/x/ibc/04-channel/types/msgs_test.go index ff16a5b44d33..950417785c66 100644 --- a/x/ibc/04-channel/types/msgs_test.go +++ b/x/ibc/04-channel/types/msgs_test.go @@ -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), From 23950b97dc834f741995dacf2dc498fd4ee44711 Mon Sep 17 00:00:00 2001 From: Colin Axner Date: Tue, 8 Sep 2020 15:39:08 +0200 Subject: [PATCH 04/13] update commented tests --- x/ibc-transfer/keeper/relay_test.go | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/x/ibc-transfer/keeper/relay_test.go b/x/ibc-transfer/keeper/relay_test.go index 984701a4acae..0b17f630160e 100644 --- a/x/ibc-transfer/keeper/relay_test.go +++ b/x/ibc-transfer/keeper/relay_test.go @@ -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 From 50f55db054f32e66c622f17007976394410a940b Mon Sep 17 00:00:00 2001 From: Colin Axner Date: Tue, 8 Sep 2020 15:48:47 +0200 Subject: [PATCH 05/13] small typo fix --- proto/ibc/channel/channel.proto | 16 ++++++++-------- x/ibc/04-channel/types/channel.pb.go | 16 ++++++++-------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/proto/ibc/channel/channel.proto b/proto/ibc/channel/channel.proto index 88f716a3f9a3..f3e879d5d578 100644 --- a/proto/ibc/channel/channel.proto +++ b/proto/ibc/channel/channel.proto @@ -63,7 +63,7 @@ message MsgChannelOpenConfirm { [(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\""]; @@ -152,8 +152,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 @@ -171,8 +171,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 @@ -230,9 +230,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\""]; diff --git a/x/ibc/04-channel/types/channel.pb.go b/x/ibc/04-channel/types/channel.pb.go index 83946d3a4249..259e4095897e 100644 --- a/x/ibc/04-channel/types/channel.pb.go +++ b/x/ibc/04-channel/types/channel.pb.go @@ -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"` From b5fa71f7d17fa5d92dcec9d4dcdab65be7749a00 Mon Sep 17 00:00:00 2001 From: Colin Axner Date: Tue, 8 Sep 2020 15:56:58 +0200 Subject: [PATCH 06/13] revert back to module cdc --- x/ibc-transfer/module.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x/ibc-transfer/module.go b/x/ibc-transfer/module.go index ed7a452d77b0..6a44693ee58d 100644 --- a/x/ibc-transfer/module.go +++ b/x/ibc-transfer/module.go @@ -333,7 +333,7 @@ func (am AppModule) OnAcknowledgementPacket( acknowledgement []byte, ) (*sdk.Result, error) { var ack channeltypes.Acknowledgement - if err := channeltypes.SubModuleCdc.UnmarshalJSON(acknowledgement, &ack); err != nil { + if err := types.ModuleCdc.UnmarshalJSON(acknowledgement, &ack); err != nil { return nil, sdkerrors.Wrapf(sdkerrors.ErrUnknownRequest, "cannot unmarshal ICS-20 transfer packet acknowledgement: %v", err) } var data types.FungibleTokenPacketData From f15986191ea48a870ce81b506c2ec50371ff8908 Mon Sep 17 00:00:00 2001 From: Colin Axner Date: Tue, 8 Sep 2020 16:11:01 +0200 Subject: [PATCH 07/13] update docs --- docs/ibc/custom.md | 4 +++- x/ibc-transfer/spec/01_concepts.md | 10 ++++++++++ x/ibc/04-channel/types/channel.go | 4 ++-- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/docs/ibc/custom.md b/docs/ibc/custom.md index 24decd4fc041..44c4c4851bba 100644 --- a/docs/ibc/custom.md +++ b/docs/ibc/custom.md @@ -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 diff --git a/x/ibc-transfer/spec/01_concepts.md b/x/ibc-transfer/spec/01_concepts.md index 31cbdc5467f7..0c02d7ad638a 100644 --- a/x/ibc-transfer/spec/01_concepts.md +++ b/x/ibc-transfer/spec/01_concepts.md @@ -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. diff --git a/x/ibc/04-channel/types/channel.go b/x/ibc/04-channel/types/channel.go index 2b915fe882fa..50cc9f2280b6 100644 --- a/x/ibc/04-channel/types/channel.go +++ b/x/ibc/04-channel/types/channel.go @@ -161,10 +161,10 @@ func (ack Acknowledgement) ValidateBasic() error { } case *Acknowledgement_Error: if strings.TrimSpace(ack.Response.(*Acknowledgement_Error).Error) == "" { - return sdkerrors.Wrap(ErrInvalidAcknowledgement, "acknowledgement error cannot be nil") + return sdkerrors.Wrap(ErrInvalidAcknowledgement, "acknowledgement error cannot be empty") } default: - return sdkerrors.Wrap(ErrInvalidAcknowledgement, "unsupported acknowledgement response field") + return sdkerrors.Wrapf(ErrInvalidAcknowledgement, "unsupported acknowledgement response field type %T", ack.Response) } return nil } From 500af5917a278b463d3d986420945378072ac1d9 Mon Sep 17 00:00:00 2001 From: Colin Axner Date: Tue, 8 Sep 2020 16:16:52 +0200 Subject: [PATCH 08/13] fix lint --- x/ibc/04-channel/types/channel.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/x/ibc/04-channel/types/channel.go b/x/ibc/04-channel/types/channel.go index 50cc9f2280b6..d902d4aa2c05 100644 --- a/x/ibc/04-channel/types/channel.go +++ b/x/ibc/04-channel/types/channel.go @@ -154,13 +154,13 @@ func (ack Acknowledgement) GetBytes() []byte { // ValidateBasic performs a basic validation of the acknowledgement func (ack Acknowledgement) ValidateBasic() error { - switch ack.Response.(type) { + switch resp := ack.Response.(type) { case *Acknowledgement_Result: - if len(ack.Response.(*Acknowledgement_Result).Result) == 0 { + if len(resp.Result) == 0 { return sdkerrors.Wrap(ErrInvalidAcknowledgement, "acknowledgement result cannot be empty") } case *Acknowledgement_Error: - if strings.TrimSpace(ack.Response.(*Acknowledgement_Error).Error) == "" { + if strings.TrimSpace(resp.Error) == "" { return sdkerrors.Wrap(ErrInvalidAcknowledgement, "acknowledgement error cannot be empty") } default: From 07a08fa07a1375e3a1cdd7352f6c1391c37a1af4 Mon Sep 17 00:00:00 2001 From: Colin Axner Date: Tue, 8 Sep 2020 16:18:52 +0200 Subject: [PATCH 09/13] nit --- x/ibc/04-channel/types/channel.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x/ibc/04-channel/types/channel.go b/x/ibc/04-channel/types/channel.go index d902d4aa2c05..f1e8d91f6027 100644 --- a/x/ibc/04-channel/types/channel.go +++ b/x/ibc/04-channel/types/channel.go @@ -164,7 +164,7 @@ func (ack Acknowledgement) ValidateBasic() error { return sdkerrors.Wrap(ErrInvalidAcknowledgement, "acknowledgement error cannot be empty") } default: - return sdkerrors.Wrapf(ErrInvalidAcknowledgement, "unsupported acknowledgement response field type %T", ack.Response) + return sdkerrors.Wrapf(ErrInvalidAcknowledgement, "unsupported acknowledgement response field type %T", resp) } return nil } From 5eeefa395aa6fd170765e89af09ffc61b15e3a77 Mon Sep 17 00:00:00 2001 From: Colin Axner Date: Tue, 8 Sep 2020 17:14:10 +0200 Subject: [PATCH 10/13] update ack event emission --- x/ibc-transfer/module.go | 17 +++++++++++++++++ x/ibc-transfer/spec/05_events.md | 2 +- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/x/ibc-transfer/module.go b/x/ibc-transfer/module.go index 6f54e413cd80..547fbb2ba849 100644 --- a/x/ibc-transfer/module.go +++ b/x/ibc-transfer/module.go @@ -358,6 +358,23 @@ func (am AppModule) OnAcknowledgementPacket( ), ) + switch resp := ack.Response.(type) { + case *channeltypes.Acknowledgement_Result: + ctx.EventManager().EmitEvent( + sdk.NewEvent( + types.EventTypePacket, + sdk.NewAttribute(types.AttributeKeyAckSuccess, string(resp.Result)), + ), + ) + case *channeltypes.Acknowledgement_Error: + ctx.EventManager().EmitEvent( + sdk.NewEvent( + types.EventTypePacket, + sdk.NewAttribute(types.AttributeKeyAckError, resp.Error), + ), + ) + } + return &sdk.Result{ Events: ctx.EventManager().Events().ToABCIEvents(), }, nil diff --git a/x/ibc-transfer/spec/05_events.md b/x/ibc-transfer/spec/05_events.md index 0d8bf0fdc328..51b49da4602d 100644 --- a/x/ibc-transfer/spec/05_events.md +++ b/x/ibc-transfer/spec/05_events.md @@ -32,7 +32,7 @@ order: 5 | fungible_token_packet | receiver | {receiver} | | fungible_token_packet | denom | {denom} | | fungible_token_packet | amount | {amount} | -| fungible_token_packet | acknowledgement | {acknowledgement} | +| fungible_token_packet | success | error | {ack.Response} | ## OnTimeoutPacket callback From 73a44044ffa91c31dc5afed4caf30d67988dffcd Mon Sep 17 00:00:00 2001 From: Federico Kunze <31522760+fedekunze@users.noreply.github.com> Date: Wed, 9 Sep 2020 00:01:15 +0200 Subject: [PATCH 11/13] Update x/ibc-transfer/spec/01_concepts.md --- x/ibc-transfer/spec/01_concepts.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/x/ibc-transfer/spec/01_concepts.md b/x/ibc-transfer/spec/01_concepts.md index 0c02d7ad638a..a9e1a30ccb4e 100644 --- a/x/ibc-transfer/spec/01_concepts.md +++ b/x/ibc-transfer/spec/01_concepts.md @@ -9,7 +9,7 @@ order: 1 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. +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. +with the error message in the `Response` field. From 25bc225ba68547890cc11c40429798c7a438b0a9 Mon Sep 17 00:00:00 2001 From: Colin Axner Date: Wed, 9 Sep 2020 10:45:10 +0200 Subject: [PATCH 12/13] add comment for onacknowledgement --- x/ibc-transfer/keeper/relay.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/x/ibc-transfer/keeper/relay.go b/x/ibc-transfer/keeper/relay.go index 0f559fcab02f..dc48f13db706 100644 --- a/x/ibc-transfer/keeper/relay.go +++ b/x/ibc-transfer/keeper/relay.go @@ -237,6 +237,8 @@ func (k Keeper) OnAcknowledgementPacket(ctx sdk.Context, packet channeltypes.Pac 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 } } From a0bd8a4d68720d05f2fd62fc26c4da1b487b6e2d Mon Sep 17 00:00:00 2001 From: Christopher Goes Date: Wed, 9 Sep 2020 11:47:31 +0200 Subject: [PATCH 13/13] Update proto/ibc/channel/channel.proto --- proto/ibc/channel/channel.proto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/proto/ibc/channel/channel.proto b/proto/ibc/channel/channel.proto index d24c6f96810b..fc9b23a181f6 100644 --- a/proto/ibc/channel/channel.proto +++ b/proto/ibc/channel/channel.proto @@ -225,7 +225,7 @@ message PacketAckCommitment { } // Acknowledgement is the recommended acknowledgement format to be used by -// app-specifc protocols. +// 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