Flexible handshake followup (#7454)

* rename provedID

rename provedID to counterpartyChosenID for connection and channel. Update if statement in handshake and tests. Ref: https://github.com/cosmos/cosmos-sdk/pull/7439#discussion_r498858944

* update docs

Co-authored-by: Christopher Goes <cwgoes@pluranimity.org>
This commit is contained in:
colin axnér 2020-10-05 16:48:04 +02:00 committed by GitHub
parent a84f4fb3d5
commit 6fa8330c31
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
14 changed files with 332 additions and 320 deletions

View File

@ -24,13 +24,13 @@ message MsgChannelOpenTry {
option (gogoproto.equal) = false;
option (gogoproto.goproto_getters) = false;
string port_id = 1 [(gogoproto.moretags) = "yaml:\"port_id\""];
string channel_id = 2 [(gogoproto.moretags) = "yaml:\"channel_id\""];
string proved_channel_id = 3 [(gogoproto.moretags) = "yaml:\"proved_channel_id\""];
Channel channel = 4 [(gogoproto.nullable) = false];
string counterparty_version = 5 [(gogoproto.moretags) = "yaml:\"counterparty_version\""];
bytes proof_init = 6 [(gogoproto.moretags) = "yaml:\"proof_init\""];
ibc.core.client.v1.Height proof_height = 7
string port_id = 1 [(gogoproto.moretags) = "yaml:\"port_id\""];
string desired_channel_id = 2 [(gogoproto.moretags) = "yaml:\"desired_channel_id\""];
string counterparty_chosen_channel_id = 3 [(gogoproto.moretags) = "yaml:\"counterparty_chosen_channel_id\""];
Channel channel = 4 [(gogoproto.nullable) = false];
string counterparty_version = 5 [(gogoproto.moretags) = "yaml:\"counterparty_version\""];
bytes proof_init = 6 [(gogoproto.moretags) = "yaml:\"proof_init\""];
ibc.core.client.v1.Height proof_height = 7
[(gogoproto.moretags) = "yaml:\"proof_height\"", (gogoproto.nullable) = false];
string signer = 8;
}

View File

@ -27,11 +27,11 @@ message MsgConnectionOpenTry {
option (gogoproto.equal) = false;
option (gogoproto.goproto_getters) = false;
string client_id = 1 [(gogoproto.moretags) = "yaml:\"client_id\""];
string connection_id = 2 [(gogoproto.moretags) = "yaml:\"connection_id\""];
string proved_id = 3 [(gogoproto.moretags) = "yaml:\"proved_id\""];
google.protobuf.Any client_state = 4 [(gogoproto.moretags) = "yaml:\"client_state\""];
Counterparty counterparty = 5 [(gogoproto.nullable) = false];
string client_id = 1 [(gogoproto.moretags) = "yaml:\"client_id\""];
string desired_connection_id = 2 [(gogoproto.moretags) = "yaml:\"desired_connection_id\""];
string counterparty_chosen_connection_id = 3 [(gogoproto.moretags) = "yaml:\"counterparty_chosen_connection_id\""];
google.protobuf.Any client_state = 4 [(gogoproto.moretags) = "yaml:\"client_state\""];
Counterparty counterparty = 5 [(gogoproto.nullable) = false];
repeated string counterparty_versions = 6 [(gogoproto.moretags) = "yaml:\"counterparty_versions\""];
ibc.core.client.v1.Height proof_height = 7
[(gogoproto.moretags) = "yaml:\"proof_height\"", (gogoproto.nullable) = false];

View File

@ -43,7 +43,7 @@ func HandleMsgConnectionOpenTry(ctx sdk.Context, k keeper.Keeper, msg *types.Msg
}
if err := k.ConnOpenTry(
ctx, msg.ConnectionId, msg.ProvedId, msg.Counterparty, msg.ClientId, targetClient,
ctx, msg.DesiredConnectionId, msg.CounterpartyChosenConnectionId, msg.Counterparty, msg.ClientId, targetClient,
msg.CounterpartyVersions, msg.ProofInit, msg.ProofClient, msg.ProofConsensus,
msg.ProofHeight, msg.ConsensusHeight,
); err != nil {
@ -53,7 +53,7 @@ func HandleMsgConnectionOpenTry(ctx sdk.Context, k keeper.Keeper, msg *types.Msg
ctx.EventManager().EmitEvents(sdk.Events{
sdk.NewEvent(
types.EventTypeConnectionOpenTry,
sdk.NewAttribute(types.AttributeKeyConnectionID, msg.ConnectionId),
sdk.NewAttribute(types.AttributeKeyConnectionID, msg.DesiredConnectionId),
sdk.NewAttribute(types.AttributeKeyClientID, msg.ClientId),
sdk.NewAttribute(types.AttributeKeyCounterpartyClientID, msg.Counterparty.ClientId),
sdk.NewAttribute(types.AttributeKeyCounterpartyConnectionID, msg.Counterparty.ConnectionId),

View File

@ -56,8 +56,8 @@ func (k Keeper) ConnOpenInit(
// - Identifiers are checked on msg validation
func (k Keeper) ConnOpenTry(
ctx sdk.Context,
connectionID, // desiredIdentifier
provedID string, // provedIdentifier
desiredConnectionID, // desiredIdentifier
counterpartyChosenConnectionID string, // counterparty used this identifier in proof
counterparty types.Counterparty, // counterpartyConnectionIdentifier, counterpartyPrefix and counterpartyClientIdentifier
clientID string, // clientID of chainA
clientState exported.ClientState, // clientState that chainA has for chainB
@ -86,24 +86,27 @@ func (k Keeper) ConnOpenTry(
return clienttypes.ErrSelfConsensusStateNotFound
}
if provedID != connectionID && provedID != "" {
// If the connection id chosen for this connection end by the counterparty is empty then
// flexible connection identifier selection is allowed by using the desired connection id.
// Otherwise the desiredConnectionID must match the counterpartyChosenConnectionID.
if counterpartyChosenConnectionID != "" && counterpartyChosenConnectionID != desiredConnectionID {
return sdkerrors.Wrapf(
types.ErrInvalidConnectionIdentifier,
"proved identifier (%s) must equal connection identifier (%s) or be empty", provedID, connectionID,
"counterparty chosen connection ID (%s) must be empty or equal to the desired connection ID (%s)", counterpartyChosenConnectionID, desiredConnectionID,
)
}
// expectedConnection defines Chain A's ConnectionEnd
// NOTE: chain A's counterparty is chain B (i.e where this code is executed)
prefix := k.GetCommitmentPrefix()
expectedCounterparty := types.NewCounterparty(clientID, provedID, commitmenttypes.NewMerklePrefix(prefix.Bytes()))
expectedCounterparty := types.NewCounterparty(clientID, counterpartyChosenConnectionID, commitmenttypes.NewMerklePrefix(prefix.Bytes()))
expectedConnection := types.NewConnectionEnd(types.INIT, counterparty.ClientId, expectedCounterparty, counterpartyVersions)
// If connection already exists for connectionID, ensure that the existing connection's
// If connection already exists for desiredConnectionID, ensure that the existing connection's
// counterparty is chainA and connection is on INIT stage.
// Check that existing connection versions for initialized connection is equal to compatible
// versions for this chain.
previousConnection, found := k.GetConnection(ctx, connectionID)
previousConnection, found := k.GetConnection(ctx, desiredConnectionID)
if found && !(previousConnection.State == types.INIT &&
previousConnection.Counterparty.ConnectionId == counterparty.ConnectionId &&
bytes.Equal(previousConnection.Counterparty.Prefix.Bytes(), counterparty.Prefix.Bytes()) &&
@ -149,12 +152,12 @@ func (k Keeper) ConnOpenTry(
}
// store connection in chainB state
if err := k.addConnectionToClient(ctx, clientID, connectionID); err != nil {
return sdkerrors.Wrapf(err, "failed to add connection with ID %s to client with ID %s", connectionID, clientID)
if err := k.addConnectionToClient(ctx, clientID, desiredConnectionID); err != nil {
return sdkerrors.Wrapf(err, "failed to add connection with ID %s to client with ID %s", desiredConnectionID, clientID)
}
k.SetConnection(ctx, connectionID, connection)
k.Logger(ctx).Info(fmt.Sprintf("connection %s state updated: %s -> TRYOPEN ", connectionID, previousConnection.State))
k.SetConnection(ctx, desiredConnectionID, connection)
k.Logger(ctx).Info(fmt.Sprintf("connection %s state updated: %s -> TRYOPEN ", desiredConnectionID, previousConnection.State))
return nil
}
@ -189,10 +192,13 @@ func (k Keeper) ConnOpenAck(
return sdkerrors.Wrap(types.ErrConnectionNotFound, connectionID)
}
if counterpartyConnectionID != connection.Counterparty.ConnectionId && connection.Counterparty.ConnectionId != "" {
// If the previously set connection end allowed for the counterparty to select its own
// connection identifier then we use the counterpartyConnectionID. Otherwise the
// counterpartyConnectionID must match the previously set counterparty connection ID.
if connection.Counterparty.ConnectionId != "" && counterpartyConnectionID != connection.Counterparty.ConnectionId {
return sdkerrors.Wrapf(
types.ErrInvalidConnectionIdentifier,
"counterparty connection identifier (%s) must be empty or equal to stored connection ID for counterparty (%s)", counterpartyConnectionID, connection.Counterparty.ConnectionId,
"counterparty connection identifier (%s) must be equal to stored connection ID for counterparty (%s)", counterpartyConnectionID, connection.Counterparty.ConnectionId,
)
}

View File

@ -101,7 +101,7 @@ func (suite *KeeperTestSuite) TestConnOpenTry() {
// retrieve client state of chainA to pass as counterpartyClient
counterpartyClient = suite.chainA.GetClientState(clientA)
}, true},
{"success with empty provedID", func() {
{"success with empty counterpartyChosenConnectionID", func() {
clientA, clientB = suite.coordinator.SetupClients(suite.chainA, suite.chainB, ibctesting.Tendermint)
connA, _, err := suite.coordinator.ConnOpenInit(suite.chainA, suite.chainB, clientA, clientB)
suite.Require().NoError(err)
@ -123,7 +123,7 @@ func (suite *KeeperTestSuite) TestConnOpenTry() {
// retrieve client state of chainA to pass as counterpartyClient
counterpartyClient = suite.chainA.GetClientState(clientA)
}, true},
{"invalid provedID", func() {
{"counterpartyChosenConnectionID does not match desiredConnectionID", func() {
clientA, clientB = suite.coordinator.SetupClients(suite.chainA, suite.chainB, ibctesting.Tendermint)
connA, _, err := suite.coordinator.ConnOpenInit(suite.chainA, suite.chainB, clientA, clientB)
suite.Require().NoError(err)
@ -299,11 +299,11 @@ func (suite *KeeperTestSuite) TestConnOpenTry() {
connB := suite.chainB.GetFirstTestConnection(clientB, clientA)
counterparty := types.NewCounterparty(clientA, connA.ID, suite.chainA.GetPrefix())
// get provedID
var provedID string
// get counterpartyChosenConnectionID
var counterpartyChosenConnectionID string
connection, found := suite.chainA.App.IBCKeeper.ConnectionKeeper.GetConnection(suite.chainA.GetContext(), connA.ID)
if found {
provedID = connection.Counterparty.ConnectionId
counterpartyChosenConnectionID = connection.Counterparty.ConnectionId
}
connectionKey := host.KeyConnection(connA.ID)
@ -321,7 +321,7 @@ func (suite *KeeperTestSuite) TestConnOpenTry() {
proofClient, _ := suite.chainA.QueryProof(clientKey)
err := suite.chainB.App.IBCKeeper.ConnectionKeeper.ConnOpenTry(
suite.chainB.GetContext(), connB.ID, provedID, counterparty, clientB, counterpartyClient,
suite.chainB.GetContext(), connB.ID, counterpartyChosenConnectionID, counterparty, clientB, counterpartyClient,
versions, proofInit, proofClient, proofConsensus,
proofHeight, consensusHeight,
)

View File

@ -110,13 +110,13 @@ var xxx_messageInfo_MsgConnectionOpenInit proto.InternalMessageInfo
// MsgConnectionOpenTry defines a msg sent by a Relayer to try to open a
// connection on Chain B.
type MsgConnectionOpenTry struct {
ClientId string `protobuf:"bytes,1,opt,name=client_id,json=clientId,proto3" json:"client_id,omitempty" yaml:"client_id"`
ConnectionId string `protobuf:"bytes,2,opt,name=connection_id,json=connectionId,proto3" json:"connection_id,omitempty" yaml:"connection_id"`
ProvedId string `protobuf:"bytes,3,opt,name=proved_id,json=provedId,proto3" json:"proved_id,omitempty" yaml:"proved_id"`
ClientState *types.Any `protobuf:"bytes,4,opt,name=client_state,json=clientState,proto3" json:"client_state,omitempty" yaml:"client_state"`
Counterparty Counterparty `protobuf:"bytes,5,opt,name=counterparty,proto3" json:"counterparty"`
CounterpartyVersions []string `protobuf:"bytes,6,rep,name=counterparty_versions,json=counterpartyVersions,proto3" json:"counterparty_versions,omitempty" yaml:"counterparty_versions"`
ProofHeight types1.Height `protobuf:"bytes,7,opt,name=proof_height,json=proofHeight,proto3" json:"proof_height" yaml:"proof_height"`
ClientId string `protobuf:"bytes,1,opt,name=client_id,json=clientId,proto3" json:"client_id,omitempty" yaml:"client_id"`
DesiredConnectionId string `protobuf:"bytes,2,opt,name=desired_connection_id,json=desiredConnectionId,proto3" json:"desired_connection_id,omitempty" yaml:"desired_connection_id"`
CounterpartyChosenConnectionId string `protobuf:"bytes,3,opt,name=counterparty_chosen_connection_id,json=counterpartyChosenConnectionId,proto3" json:"counterparty_chosen_connection_id,omitempty" yaml:"counterparty_chosen_connection_id"`
ClientState *types.Any `protobuf:"bytes,4,opt,name=client_state,json=clientState,proto3" json:"client_state,omitempty" yaml:"client_state"`
Counterparty Counterparty `protobuf:"bytes,5,opt,name=counterparty,proto3" json:"counterparty"`
CounterpartyVersions []string `protobuf:"bytes,6,rep,name=counterparty_versions,json=counterpartyVersions,proto3" json:"counterparty_versions,omitempty" yaml:"counterparty_versions"`
ProofHeight types1.Height `protobuf:"bytes,7,opt,name=proof_height,json=proofHeight,proto3" json:"proof_height" yaml:"proof_height"`
// proof of the initialization the connection on Chain A: `UNITIALIZED ->
// INIT`
ProofInit []byte `protobuf:"bytes,8,opt,name=proof_init,json=proofInit,proto3" json:"proof_init,omitempty" yaml:"proof_init"`
@ -560,75 +560,77 @@ func init() {
}
var fileDescriptor_90572467c054e43a = []byte{
// 1077 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x57, 0x4f, 0x8f, 0x22, 0x45,
0x14, 0xa7, 0x9b, 0x3f, 0x03, 0x05, 0xb3, 0xcb, 0xb6, 0xcc, 0x4c, 0xdb, 0xba, 0x34, 0xb6, 0x1a,
0x27, 0x26, 0xdb, 0xc8, 0x8c, 0xf1, 0x30, 0xc6, 0xc3, 0xc0, 0x62, 0xec, 0xe8, 0xb2, 0xa4, 0x87,
0x31, 0x71, 0x2e, 0x04, 0x9a, 0x82, 0xa9, 0x30, 0x74, 0x91, 0xee, 0x86, 0x2c, 0xdf, 0x60, 0x33,
0x17, 0xbd, 0x78, 0xf0, 0x30, 0xc9, 0x26, 0x7e, 0x11, 0x8f, 0x1b, 0x4f, 0xeb, 0xcd, 0x13, 0x31,
0x33, 0x17, 0xbd, 0xf2, 0x09, 0x4c, 0x55, 0xf5, 0x3f, 0xfe, 0xc5, 0xec, 0x82, 0xd9, 0x13, 0xf5,
0xea, 0xfd, 0x5e, 0x55, 0xbd, 0x5f, 0xfd, 0xde, 0xab, 0x06, 0x7c, 0x82, 0xda, 0x46, 0xd1, 0xc0,
0x16, 0x2c, 0x1a, 0xd8, 0x34, 0xa1, 0xe1, 0x20, 0x6c, 0x16, 0xc7, 0xa5, 0x90, 0xa5, 0x0e, 0x2d,
0xec, 0x60, 0x61, 0x1f, 0xb5, 0x0d, 0x95, 0x00, 0xd5, 0x90, 0x6b, 0x5c, 0x92, 0x72, 0x3d, 0xdc,
0xc3, 0x14, 0x52, 0x24, 0x23, 0x86, 0x96, 0xde, 0xed, 0x61, 0xdc, 0xbb, 0x82, 0x45, 0x6a, 0xb5,
0x47, 0xdd, 0x62, 0xcb, 0x9c, 0xb8, 0xae, 0xf0, 0x8e, 0x83, 0x01, 0x72, 0x06, 0xd0, 0x74, 0xd8,
0x8e, 0x9e, 0xe5, 0x02, 0xe5, 0x00, 0x78, 0x85, 0x3c, 0x10, 0x1d, 0x31, 0x80, 0xf2, 0x33, 0x0f,
0xf6, 0x9e, 0xd8, 0xbd, 0x8a, 0x7f, 0x9e, 0xa7, 0x43, 0x68, 0x6a, 0x26, 0x72, 0x84, 0x12, 0x48,
0x31, 0x64, 0x13, 0x75, 0x44, 0xae, 0xc0, 0x1d, 0xa6, 0xca, 0xb9, 0xd9, 0x54, 0xce, 0x4e, 0x5a,
0x83, 0xab, 0x13, 0xc5, 0x77, 0x29, 0x7a, 0x92, 0x8d, 0xb5, 0x8e, 0xf0, 0x15, 0xd8, 0x0d, 0x12,
0x23, 0x61, 0x3c, 0x0d, 0x13, 0x67, 0x53, 0x39, 0xe7, 0x86, 0x85, 0xdd, 0x8a, 0x9e, 0x09, 0x6c,
0xad, 0x23, 0xd4, 0x40, 0xc6, 0xc0, 0x23, 0xd3, 0x81, 0xd6, 0xb0, 0x65, 0x39, 0x13, 0x31, 0x5a,
0xe0, 0x0e, 0xd3, 0x47, 0x1f, 0xa9, 0xab, 0x59, 0x53, 0x2b, 0x21, 0x6c, 0x39, 0xf6, 0x72, 0x2a,
0x47, 0xf4, 0xb9, 0x78, 0x41, 0x04, 0x3b, 0x63, 0x68, 0xd9, 0x08, 0x9b, 0x62, 0x8c, 0x1c, 0x44,
0xf7, 0x4c, 0x61, 0x1f, 0x24, 0x6c, 0xd4, 0x33, 0xa1, 0x25, 0xc6, 0xa9, 0xc3, 0xb5, 0x4e, 0x92,
0xcf, 0x5f, 0xc8, 0x91, 0xbf, 0x5f, 0xc8, 0x11, 0xe5, 0x8f, 0x04, 0xc8, 0x2d, 0xf1, 0xd2, 0xb0,
0x26, 0x6f, 0x81, 0x96, 0x12, 0x48, 0x0d, 0x2d, 0x3c, 0x86, 0x1d, 0x12, 0x1a, 0x5d, 0xdc, 0xd1,
0x77, 0x29, 0x7a, 0x92, 0x8d, 0xb5, 0x8e, 0x50, 0x07, 0x19, 0xf7, 0x24, 0xb6, 0xd3, 0x72, 0x20,
0x4d, 0x3f, 0x7d, 0x94, 0x53, 0x99, 0xa2, 0x54, 0x4f, 0x51, 0xea, 0xa9, 0x39, 0x29, 0x1f, 0xcc,
0xa6, 0xf2, 0x3b, 0x73, 0xa7, 0xa7, 0x31, 0x8a, 0x9e, 0x66, 0xe6, 0x19, 0xb1, 0x96, 0xee, 0x26,
0xbe, 0xe1, 0xdd, 0x9c, 0x83, 0xbd, 0xb0, 0xdd, 0x74, 0x6f, 0xc6, 0x16, 0x13, 0x85, 0xe8, 0x61,
0xaa, 0x5c, 0x98, 0x4d, 0xe5, 0xf7, 0x3d, 0x6e, 0x56, 0xc0, 0x14, 0x3d, 0x17, 0x9e, 0xff, 0xde,
0x9d, 0x16, 0x2e, 0x40, 0x66, 0x68, 0x61, 0xdc, 0x6d, 0x5e, 0x42, 0xd4, 0xbb, 0x74, 0xc4, 0x1d,
0x7a, 0x4c, 0x29, 0x74, 0x4c, 0x26, 0xfe, 0x71, 0x49, 0xfd, 0x86, 0x22, 0xca, 0xef, 0x91, 0xc3,
0x05, 0x14, 0x84, 0xa3, 0x15, 0x3d, 0x4d, 0x4d, 0x86, 0x14, 0x3e, 0x07, 0x80, 0x79, 0x91, 0x89,
0x1c, 0x31, 0x59, 0xe0, 0x0e, 0x33, 0xe5, 0xbd, 0xd9, 0x54, 0x7e, 0x10, 0x8e, 0x24, 0x3e, 0x45,
0x4f, 0x51, 0x83, 0x96, 0xd1, 0x89, 0x77, 0x22, 0xb6, 0xb3, 0x98, 0xa2, 0x71, 0x07, 0x8b, 0x3b,
0x32, 0xaf, 0xb7, 0x63, 0x85, 0x5a, 0x42, 0x05, 0xdc, 0x77, 0xbd, 0xd8, 0xb4, 0xa1, 0x69, 0x8f,
0x6c, 0x11, 0xd0, 0x70, 0x69, 0x36, 0x95, 0xf7, 0xe7, 0xc2, 0x3d, 0x80, 0xa2, 0xdf, 0x63, 0x2b,
0x78, 0x13, 0x42, 0x17, 0x64, 0x7d, 0xaf, 0x47, 0x4b, 0xfa, 0x3f, 0x69, 0x91, 0x5d, 0x5a, 0x0e,
0x7c, 0x81, 0xce, 0xad, 0xa0, 0xe8, 0xf7, 0xfd, 0x29, 0x97, 0x9e, 0xa0, 0xa6, 0x32, 0x6b, 0x6a,
0xea, 0xb7, 0xf8, 0x8a, 0x9a, 0x3a, 0x35, 0xfa, 0xcb, 0x05, 0xc2, 0xbd, 0x56, 0x81, 0x18, 0x40,
0x9a, 0x13, 0xc9, 0xaa, 0x62, 0xfb, 0x78, 0x36, 0x95, 0x3f, 0x58, 0x21, 0xa8, 0x85, 0x85, 0xc5,
0xb0, 0xb3, 0x12, 0xde, 0x24, 0xd4, 0x4c, 0xa2, 0xf3, 0xcd, 0x64, 0xfb, 0xc5, 0xb6, 0xa8, 0xe2,
0xf8, 0x16, 0x55, 0xcc, 0xba, 0x09, 0xee, 0x36, 0x1d, 0x6b, 0x22, 0x26, 0xa8, 0x9a, 0xe6, 0xbb,
0x09, 0x73, 0xb1, 0x6e, 0x82, 0xbb, 0xa4, 0xe5, 0x2d, 0x4a, 0x78, 0x67, 0x33, 0x09, 0x27, 0xb7,
0x22, 0xe1, 0xd4, 0xff, 0x2a, 0x61, 0xb0, 0x46, 0xc2, 0xd7, 0x3c, 0x10, 0x97, 0x24, 0x5c, 0xc1,
0x66, 0x17, 0x59, 0x83, 0x4d, 0x65, 0xec, 0xdf, 0x4c, 0xcb, 0xe8, 0x53, 0xd5, 0xae, 0xb8, 0x99,
0x96, 0xd1, 0xf7, 0x6e, 0x86, 0x14, 0xce, 0xa2, 0x50, 0xa2, 0x5b, 0x14, 0x4a, 0x40, 0x46, 0x6c,
0x0d, 0x19, 0xff, 0x70, 0x60, 0x37, 0x60, 0xa2, 0x6a, 0x76, 0xde, 0xe4, 0x71, 0x94, 0x40, 0xd2,
0xef, 0xfd, 0x3c, 0xe9, 0xfd, 0xba, 0x6f, 0x0b, 0xc7, 0x20, 0xce, 0x4a, 0x8a, 0xe4, 0x75, 0xef,
0xe8, 0xe1, 0xba, 0xd7, 0x86, 0x56, 0x8d, 0xce, 0xb0, 0x4b, 0x2f, 0x55, 0x6c, 0xb3, 0x97, 0xea,
0x24, 0x46, 0xf2, 0x55, 0x7e, 0xe4, 0x41, 0x4e, 0xeb, 0x40, 0xd3, 0x41, 0x5d, 0x04, 0x3b, 0x41,
0xd6, 0xc2, 0x43, 0xc0, 0xfb, 0xb9, 0xee, 0xce, 0xa6, 0x72, 0x8a, 0xe5, 0x4a, 0x92, 0xe4, 0xd1,
0x02, 0x23, 0xfc, 0x6b, 0x33, 0x12, 0x5d, 0xc7, 0x48, 0x6c, 0x03, 0x46, 0xe2, 0x5b, 0x61, 0xe4,
0x77, 0x0e, 0x64, 0xc2, 0xd0, 0xb7, 0xf0, 0x65, 0x54, 0x06, 0x89, 0xa1, 0x05, 0xbb, 0xe8, 0xd9,
0xaa, 0x4f, 0x45, 0xff, 0x4b, 0x78, 0x5c, 0x52, 0x9f, 0x40, 0xab, 0x7f, 0x05, 0xeb, 0x14, 0xeb,
0xa6, 0xe4, 0x46, 0xba, 0xc9, 0x7c, 0x08, 0xd2, 0xac, 0x61, 0xd5, 0x5b, 0xce, 0xa5, 0x2d, 0xe4,
0x40, 0x7c, 0x48, 0x06, 0x22, 0x47, 0xf9, 0x67, 0x86, 0x72, 0x01, 0xee, 0x07, 0x17, 0xcf, 0x80,
0x6f, 0x90, 0xb3, 0xbf, 0x36, 0x1f, 0x5e, 0xfb, 0x5b, 0xb0, 0xe3, 0x7e, 0xc4, 0x08, 0x79, 0x00,
0x90, 0xa7, 0x34, 0x8b, 0x2d, 0xaa, 0x87, 0x66, 0x88, 0x3e, 0xba, 0xb0, 0xe5, 0x8c, 0x2c, 0xe8,
0x57, 0x8c, 0x67, 0xb3, 0x6c, 0x3e, 0xfd, 0x85, 0x03, 0x71, 0xf6, 0x92, 0x7c, 0x01, 0xe4, 0xb3,
0xc6, 0x69, 0xa3, 0xda, 0x3c, 0xaf, 0x69, 0x35, 0xad, 0xa1, 0x9d, 0x7e, 0xa7, 0x5d, 0x54, 0x1f,
0x37, 0xcf, 0x6b, 0x67, 0xf5, 0x6a, 0x45, 0xfb, 0x5a, 0xab, 0x3e, 0xce, 0x46, 0xa4, 0x07, 0xd7,
0x37, 0x85, 0xdd, 0x39, 0x80, 0x20, 0x02, 0xc0, 0xe2, 0xc8, 0x64, 0x96, 0x93, 0x92, 0xd7, 0x37,
0x85, 0x18, 0x19, 0x0b, 0x79, 0xb0, 0xcb, 0x3c, 0x0d, 0xfd, 0x87, 0xa7, 0xf5, 0x6a, 0x2d, 0xcb,
0x4b, 0xe9, 0xeb, 0x9b, 0xc2, 0x8e, 0x6b, 0x06, 0x91, 0xd4, 0x19, 0x65, 0x91, 0x64, 0x2c, 0xc5,
0x9e, 0xff, 0x9a, 0x8f, 0x94, 0xcf, 0x5f, 0xde, 0xe6, 0xb9, 0x57, 0xb7, 0x79, 0xee, 0xaf, 0xdb,
0x3c, 0xf7, 0xd3, 0x5d, 0x3e, 0xf2, 0xea, 0x2e, 0x1f, 0xf9, 0xf3, 0x2e, 0x1f, 0xb9, 0xf8, 0xb2,
0x87, 0x9c, 0xcb, 0x51, 0x9b, 0x5c, 0x5d, 0xd1, 0xc0, 0xf6, 0x00, 0xdb, 0xee, 0xcf, 0x23, 0xbb,
0xd3, 0x2f, 0x3e, 0x2b, 0xfa, 0x7f, 0x65, 0x3e, 0x3b, 0x7e, 0x14, 0xfa, 0xa3, 0xe5, 0x4c, 0x86,
0xd0, 0x6e, 0x27, 0xe8, 0x33, 0x7b, 0xfc, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x03, 0x5c, 0x29,
0x45, 0x8c, 0x0d, 0x00, 0x00,
// 1110 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x57, 0x41, 0x6f, 0xe3, 0x44,
0x14, 0x8e, 0x9d, 0xa4, 0x49, 0x5e, 0xd2, 0x6d, 0xd7, 0x9b, 0xb6, 0xc6, 0xb0, 0x76, 0xd6, 0x80,
0xa8, 0x10, 0xeb, 0x90, 0x16, 0x71, 0x28, 0xe2, 0xd0, 0x64, 0x83, 0xb0, 0x60, 0xbb, 0x95, 0x9b,
0x22, 0xd1, 0x4b, 0x94, 0x3a, 0x93, 0x74, 0xd4, 0xc6, 0x8e, 0x6c, 0xb7, 0x6c, 0xfe, 0xc1, 0xaa,
0x17, 0xb8, 0x70, 0xe0, 0x50, 0x69, 0x25, 0xee, 0xfc, 0x06, 0x8e, 0x2b, 0x4e, 0x7b, 0xe4, 0x64,
0xa1, 0xf6, 0x02, 0xd7, 0xfc, 0x02, 0xe4, 0x19, 0xdb, 0x19, 0xa7, 0xa9, 0x56, 0xdb, 0x06, 0x71,
0xca, 0xbc, 0x79, 0xdf, 0x9b, 0x99, 0xf7, 0xcd, 0xf7, 0xde, 0x38, 0xf0, 0x11, 0x3e, 0x34, 0xab,
0xa6, 0xed, 0xa0, 0xaa, 0x69, 0x5b, 0x16, 0x32, 0x3d, 0x6c, 0x5b, 0xd5, 0xb3, 0x1a, 0x63, 0x69,
0x43, 0xc7, 0xf6, 0x6c, 0x61, 0x15, 0x1f, 0x9a, 0x5a, 0x00, 0xd4, 0x18, 0xd7, 0x59, 0x4d, 0x2a,
0xf7, 0xed, 0xbe, 0x4d, 0x20, 0xd5, 0x60, 0x44, 0xd1, 0xd2, 0x3b, 0x7d, 0xdb, 0xee, 0x9f, 0xa0,
0x2a, 0xb1, 0x0e, 0x4f, 0x7b, 0xd5, 0x8e, 0x35, 0x0a, 0x5d, 0xec, 0x8e, 0x83, 0x01, 0xf6, 0x06,
0xc8, 0xf2, 0xe8, 0x8e, 0x91, 0x15, 0x02, 0x95, 0x09, 0xf0, 0x04, 0x47, 0x20, 0x32, 0xa2, 0x00,
0xf5, 0x67, 0x1e, 0x56, 0x9e, 0xba, 0xfd, 0x46, 0x7c, 0x9e, 0x67, 0x43, 0x64, 0xe9, 0x16, 0xf6,
0x84, 0x1a, 0x14, 0x28, 0xb2, 0x8d, 0xbb, 0x22, 0x57, 0xe1, 0xd6, 0x0b, 0xf5, 0xf2, 0xd8, 0x57,
0x96, 0x47, 0x9d, 0xc1, 0xc9, 0x96, 0x1a, 0xbb, 0x54, 0x23, 0x4f, 0xc7, 0x7a, 0x57, 0xf8, 0x12,
0x16, 0x27, 0x89, 0x05, 0x61, 0x3c, 0x09, 0x13, 0xc7, 0xbe, 0x52, 0x0e, 0xc3, 0x58, 0xb7, 0x6a,
0x94, 0x26, 0xb6, 0xde, 0x15, 0x76, 0xa0, 0x64, 0xda, 0xa7, 0x96, 0x87, 0x9c, 0x61, 0xc7, 0xf1,
0x46, 0x62, 0xba, 0xc2, 0xad, 0x17, 0x37, 0x3e, 0xd0, 0x66, 0xb3, 0xa6, 0x35, 0x18, 0x6c, 0x3d,
0xf3, 0xca, 0x57, 0x52, 0x46, 0x22, 0x5e, 0x10, 0x21, 0x77, 0x86, 0x1c, 0x17, 0xdb, 0x96, 0x98,
0x09, 0x0e, 0x62, 0x44, 0xa6, 0xb0, 0x0a, 0x0b, 0x2e, 0xee, 0x5b, 0xc8, 0x11, 0xb3, 0xc4, 0x11,
0x5a, 0x5b, 0xf9, 0x17, 0x2f, 0x95, 0xd4, 0xdf, 0x2f, 0x95, 0x94, 0xfa, 0x5b, 0x0e, 0xca, 0xd7,
0x78, 0x69, 0x39, 0xa3, 0xdb, 0xd0, 0xd2, 0x82, 0x95, 0x2e, 0x72, 0xb1, 0x83, 0xba, 0xed, 0x59,
0xf4, 0x54, 0xc6, 0xbe, 0xf2, 0x1e, 0x0d, 0x9f, 0x09, 0x53, 0x8d, 0x07, 0xe1, 0x7c, 0x83, 0x65,
0xeb, 0x07, 0x78, 0xc4, 0x66, 0xdb, 0x36, 0x8f, 0x6c, 0x17, 0x59, 0x53, 0x3b, 0xa4, 0xc9, 0x0e,
0x9f, 0x8c, 0x7d, 0x65, 0x3d, 0xba, 0x80, 0x37, 0x84, 0xa8, 0x86, 0xcc, 0x62, 0x1a, 0x04, 0x92,
0xd8, 0x78, 0x17, 0x4a, 0x61, 0x9a, 0xae, 0xd7, 0xf1, 0x10, 0xe1, 0xb6, 0xb8, 0x51, 0xd6, 0xa8,
0x5c, 0xb5, 0x48, 0xae, 0xda, 0xb6, 0x35, 0xaa, 0xaf, 0x8d, 0x7d, 0xe5, 0x41, 0x82, 0x1a, 0x12,
0xa3, 0x1a, 0x45, 0x6a, 0xee, 0x05, 0xd6, 0xb5, 0x8b, 0xcf, 0xde, 0xf1, 0xe2, 0xf7, 0x61, 0x25,
0x91, 0x67, 0x78, 0xed, 0xae, 0xb8, 0x50, 0x49, 0x27, 0x09, 0x9f, 0x09, 0x53, 0x8d, 0x32, 0x3b,
0xff, 0x5d, 0x38, 0x2d, 0x1c, 0x40, 0x69, 0xe8, 0xd8, 0x76, 0xaf, 0x7d, 0x84, 0x70, 0xff, 0xc8,
0x13, 0x73, 0xe4, 0x98, 0x12, 0x73, 0x4c, 0x5a, 0x59, 0x67, 0x35, 0xed, 0x6b, 0x82, 0xa8, 0xbf,
0x1b, 0x1c, 0x6e, 0x42, 0x01, 0x1b, 0xad, 0x1a, 0x45, 0x62, 0x52, 0xa4, 0xf0, 0x19, 0x00, 0xf5,
0x62, 0x0b, 0x7b, 0x62, 0xbe, 0xc2, 0xad, 0x97, 0xea, 0x2b, 0x63, 0x5f, 0xb9, 0xcf, 0x46, 0x06,
0x3e, 0xd5, 0x28, 0x10, 0x83, 0xd4, 0xe8, 0x56, 0x74, 0x22, 0xba, 0xb3, 0x58, 0x20, 0x71, 0x6b,
0xd3, 0x3b, 0x52, 0x6f, 0xb4, 0x63, 0x83, 0x58, 0x42, 0x03, 0x96, 0x42, 0xaf, 0x6d, 0xb9, 0xc8,
0x72, 0x4f, 0x5d, 0x11, 0x48, 0xb8, 0x34, 0xf6, 0x95, 0xd5, 0x44, 0x78, 0x04, 0x50, 0x8d, 0x7b,
0x74, 0x85, 0x68, 0x42, 0xe8, 0xc1, 0x72, 0xec, 0x8d, 0x68, 0x29, 0xbe, 0x91, 0x16, 0x25, 0xa4,
0x65, 0x2d, 0x6e, 0x0a, 0x89, 0x15, 0x54, 0x63, 0x29, 0x9e, 0x0a, 0xe9, 0x99, 0x14, 0x6c, 0xe9,
0x86, 0x82, 0xfd, 0x3d, 0x3b, 0xa3, 0x60, 0xb7, 0xcd, 0xe3, 0xeb, 0x4d, 0x89, 0x7b, 0xab, 0xa6,
0x64, 0x82, 0x94, 0xac, 0x99, 0x19, 0x15, 0xfc, 0xe1, 0xd8, 0x57, 0x1e, 0xcd, 0xaa, 0xaf, 0xe4,
0xc2, 0x62, 0xa2, 0xb0, 0xd8, 0x4d, 0x98, 0x4e, 0x95, 0x4e, 0x76, 0xaa, 0xf9, 0x17, 0xdb, 0xb4,
0x8a, 0xb3, 0x73, 0x54, 0x71, 0x0d, 0xa8, 0x38, 0xdb, 0x9e, 0x33, 0x12, 0x17, 0x88, 0x9a, 0x98,
0xe6, 0x18, 0xbb, 0x54, 0x23, 0x4f, 0xc6, 0x41, 0x3f, 0x9d, 0x96, 0x70, 0xee, 0x6e, 0x12, 0xce,
0xcf, 0x45, 0xc2, 0x85, 0xff, 0x54, 0xc2, 0x70, 0x83, 0x84, 0xcf, 0x79, 0x10, 0xaf, 0x49, 0xb8,
0x61, 0x5b, 0x3d, 0xec, 0x0c, 0xee, 0x2a, 0xe3, 0xf8, 0x66, 0x3a, 0xe6, 0x31, 0x51, 0xed, 0x8c,
0x9b, 0xe9, 0x98, 0xc7, 0xd1, 0xcd, 0x04, 0x85, 0x33, 0x2d, 0x94, 0xf4, 0x1c, 0x85, 0x32, 0x21,
0x23, 0x73, 0x03, 0x19, 0xff, 0x70, 0xb0, 0x38, 0x61, 0xa2, 0x69, 0x75, 0x6f, 0xf3, 0xf2, 0x4a,
0x90, 0x8f, 0x7b, 0x3f, 0x1f, 0xf4, 0x7e, 0x23, 0xb6, 0x85, 0x4d, 0xc8, 0xd2, 0x92, 0x0a, 0xf2,
0xba, 0xb7, 0xf1, 0xf0, 0xa6, 0xd7, 0x86, 0x54, 0x8d, 0x41, 0xb1, 0xd7, 0x5e, 0xaa, 0xcc, 0xdd,
0x5e, 0xaa, 0xad, 0x4c, 0x90, 0xaf, 0xfa, 0x23, 0x0f, 0x65, 0xbd, 0x8b, 0x2c, 0x0f, 0xf7, 0x30,
0xfb, 0xca, 0x0b, 0x0f, 0x81, 0x8f, 0x73, 0x5d, 0x1c, 0xfb, 0x4a, 0x81, 0xe6, 0x1a, 0x24, 0xc9,
0xe3, 0x29, 0x46, 0xf8, 0xb7, 0x66, 0x24, 0x7d, 0x13, 0x23, 0x99, 0x3b, 0x30, 0x92, 0x9d, 0x0b,
0x23, 0x7f, 0x70, 0x50, 0x62, 0xa1, 0xff, 0xc3, 0xd7, 0x68, 0x1d, 0x16, 0x86, 0x0e, 0xea, 0xe1,
0xe7, 0xb3, 0xbe, 0x43, 0xe3, 0xcf, 0xec, 0xb3, 0x9a, 0xf6, 0x14, 0x39, 0xc7, 0x27, 0x68, 0x97,
0x60, 0xc3, 0x94, 0xc2, 0xc8, 0x30, 0x99, 0xf7, 0xa1, 0x48, 0x1b, 0xd6, 0x6e, 0xc7, 0x3b, 0x72,
0x85, 0x32, 0x64, 0x87, 0xc1, 0x40, 0xe4, 0x08, 0xff, 0xd4, 0x50, 0x0f, 0x60, 0x69, 0x72, 0xf1,
0x14, 0x78, 0x8b, 0x9c, 0xe3, 0xb5, 0x79, 0x76, 0xed, 0x6f, 0x20, 0x17, 0x7e, 0xc4, 0x08, 0x32,
0x00, 0x8e, 0x94, 0xe6, 0xd0, 0x45, 0x0d, 0x66, 0x26, 0xd0, 0x47, 0x0f, 0x75, 0xbc, 0x53, 0x07,
0xc5, 0x15, 0x13, 0xd9, 0x34, 0x9b, 0x8f, 0x7f, 0xe1, 0x20, 0x4b, 0x5f, 0x92, 0xcf, 0x41, 0xd9,
0x6b, 0x6d, 0xb7, 0x9a, 0xed, 0xfd, 0x1d, 0x7d, 0x47, 0x6f, 0xe9, 0xdb, 0xdf, 0xea, 0x07, 0xcd,
0x27, 0xed, 0xfd, 0x9d, 0xbd, 0xdd, 0x66, 0x43, 0xff, 0x4a, 0x6f, 0x3e, 0x59, 0x4e, 0x49, 0xf7,
0xcf, 0x2f, 0x2a, 0x8b, 0x09, 0x80, 0x20, 0x02, 0xd0, 0xb8, 0x60, 0x72, 0x99, 0x93, 0xf2, 0xe7,
0x17, 0x95, 0x4c, 0x30, 0x16, 0x64, 0x58, 0xa4, 0x9e, 0x96, 0xf1, 0xfd, 0xb3, 0xdd, 0xe6, 0xce,
0x32, 0x2f, 0x15, 0xcf, 0x2f, 0x2a, 0xb9, 0xd0, 0x9c, 0x44, 0x12, 0x67, 0x9a, 0x46, 0x06, 0x63,
0x29, 0xf3, 0xe2, 0x57, 0x39, 0x55, 0xdf, 0x7f, 0x75, 0x29, 0x73, 0xaf, 0x2f, 0x65, 0xee, 0xaf,
0x4b, 0x99, 0xfb, 0xe9, 0x4a, 0x4e, 0xbd, 0xbe, 0x92, 0x53, 0x7f, 0x5e, 0xc9, 0xa9, 0x83, 0x2f,
0xfa, 0xd8, 0x3b, 0x3a, 0x3d, 0x0c, 0xae, 0xae, 0x6a, 0xda, 0xee, 0xc0, 0x76, 0xc3, 0x9f, 0xc7,
0x6e, 0xf7, 0xb8, 0xfa, 0xbc, 0x1a, 0xff, 0x4f, 0xfa, 0x74, 0xf3, 0x31, 0xf3, 0x2f, 0xce, 0x1b,
0x0d, 0x91, 0x7b, 0xb8, 0x40, 0x9e, 0xd9, 0xcd, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0x62, 0x66,
0x42, 0x8b, 0xe9, 0x0d, 0x00, 0x00,
}
func (m *MsgConnectionOpenInit) Marshal() (dAtA []byte, err error) {
@ -791,17 +793,17 @@ func (m *MsgConnectionOpenTry) MarshalToSizedBuffer(dAtA []byte) (int, error) {
i--
dAtA[i] = 0x22
}
if len(m.ProvedId) > 0 {
i -= len(m.ProvedId)
copy(dAtA[i:], m.ProvedId)
i = encodeVarintConnection(dAtA, i, uint64(len(m.ProvedId)))
if len(m.CounterpartyChosenConnectionId) > 0 {
i -= len(m.CounterpartyChosenConnectionId)
copy(dAtA[i:], m.CounterpartyChosenConnectionId)
i = encodeVarintConnection(dAtA, i, uint64(len(m.CounterpartyChosenConnectionId)))
i--
dAtA[i] = 0x1a
}
if len(m.ConnectionId) > 0 {
i -= len(m.ConnectionId)
copy(dAtA[i:], m.ConnectionId)
i = encodeVarintConnection(dAtA, i, uint64(len(m.ConnectionId)))
if len(m.DesiredConnectionId) > 0 {
i -= len(m.DesiredConnectionId)
copy(dAtA[i:], m.DesiredConnectionId)
i = encodeVarintConnection(dAtA, i, uint64(len(m.DesiredConnectionId)))
i--
dAtA[i] = 0x12
}
@ -1293,11 +1295,11 @@ func (m *MsgConnectionOpenTry) Size() (n int) {
if l > 0 {
n += 1 + l + sovConnection(uint64(l))
}
l = len(m.ConnectionId)
l = len(m.DesiredConnectionId)
if l > 0 {
n += 1 + l + sovConnection(uint64(l))
}
l = len(m.ProvedId)
l = len(m.CounterpartyChosenConnectionId)
if l > 0 {
n += 1 + l + sovConnection(uint64(l))
}
@ -1811,7 +1813,7 @@ func (m *MsgConnectionOpenTry) Unmarshal(dAtA []byte) error {
iNdEx = postIndex
case 2:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field ConnectionId", wireType)
return fmt.Errorf("proto: wrong wireType = %d for field DesiredConnectionId", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@ -1839,11 +1841,11 @@ func (m *MsgConnectionOpenTry) Unmarshal(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.ConnectionId = string(dAtA[iNdEx:postIndex])
m.DesiredConnectionId = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 3:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field ProvedId", wireType)
return fmt.Errorf("proto: wrong wireType = %d for field CounterpartyChosenConnectionId", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@ -1871,7 +1873,7 @@ func (m *MsgConnectionOpenTry) Unmarshal(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.ProvedId = string(dAtA[iNdEx:postIndex])
m.CounterpartyChosenConnectionId = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 4:
if wireType != 2 {

View File

@ -77,7 +77,7 @@ var _ sdk.Msg = &MsgConnectionOpenTry{}
// NewMsgConnectionOpenTry creates a new MsgConnectionOpenTry instance
//nolint:interfacer
func NewMsgConnectionOpenTry(
connectionID, provedID, clientID, counterpartyConnectionID,
desiredConnectionID, counterpartyChosenConnectionID, clientID, counterpartyConnectionID,
counterpartyClientID string, counterpartyClient exported.ClientState,
counterpartyPrefix commitmenttypes.MerklePrefix, counterpartyVersions []string,
proofInit, proofClient, proofConsensus []byte,
@ -86,18 +86,18 @@ func NewMsgConnectionOpenTry(
counterparty := NewCounterparty(counterpartyClientID, counterpartyConnectionID, counterpartyPrefix)
csAny, _ := clienttypes.PackClientState(counterpartyClient)
return &MsgConnectionOpenTry{
ConnectionId: connectionID,
ProvedId: provedID,
ClientId: clientID,
ClientState: csAny,
Counterparty: counterparty,
CounterpartyVersions: counterpartyVersions,
ProofInit: proofInit,
ProofClient: proofClient,
ProofConsensus: proofConsensus,
ProofHeight: proofHeight,
ConsensusHeight: consensusHeight,
Signer: signer.String(),
DesiredConnectionId: desiredConnectionID,
CounterpartyChosenConnectionId: counterpartyChosenConnectionID,
ClientId: clientID,
ClientState: csAny,
Counterparty: counterparty,
CounterpartyVersions: counterpartyVersions,
ProofInit: proofInit,
ProofClient: proofClient,
ProofConsensus: proofConsensus,
ProofHeight: proofHeight,
ConsensusHeight: consensusHeight,
Signer: signer.String(),
}
}
@ -113,11 +113,11 @@ func (msg MsgConnectionOpenTry) Type() string {
// ValidateBasic implements sdk.Msg
func (msg MsgConnectionOpenTry) ValidateBasic() error {
if err := host.ConnectionIdentifierValidator(msg.ConnectionId); err != nil {
return sdkerrors.Wrap(err, "invalid connection ID")
if err := host.ConnectionIdentifierValidator(msg.DesiredConnectionId); err != nil {
return sdkerrors.Wrap(err, "invalid desired connection ID")
}
if msg.ProvedId != "" && msg.ProvedId != msg.ConnectionId {
return sdkerrors.Wrap(ErrInvalidConnectionIdentifier, "proved identifier must be empty or equal to connection identifier")
if msg.CounterpartyChosenConnectionId != "" && msg.CounterpartyChosenConnectionId != msg.DesiredConnectionId {
return sdkerrors.Wrap(ErrInvalidConnectionIdentifier, "counterparty chosen connection identifier must be empty or equal to desired connection identifier")
}
if err := host.ClientIdentifierValidator(msg.ClientId); err != nil {
return sdkerrors.Wrap(err, "invalid client ID")

View File

@ -40,7 +40,7 @@ func HandleMsgChannelOpenInit(ctx sdk.Context, k keeper.Keeper, portCap *capabil
// HandleMsgChannelOpenTry defines the sdk.Handler for MsgChannelOpenTry
func HandleMsgChannelOpenTry(ctx sdk.Context, k keeper.Keeper, portCap *capabilitytypes.Capability, msg *types.MsgChannelOpenTry) (*sdk.Result, *capabilitytypes.Capability, error) {
capKey, err := k.ChanOpenTry(ctx, msg.Channel.Ordering, msg.Channel.ConnectionHops, msg.PortId, msg.ChannelId, msg.ProvedChannelId,
capKey, err := k.ChanOpenTry(ctx, msg.Channel.Ordering, msg.Channel.ConnectionHops, msg.PortId, msg.DesiredChannelId, msg.CounterpartyChosenChannelId,
portCap, msg.Channel.Counterparty, msg.Channel.Version, msg.CounterpartyVersion, msg.ProofInit, msg.ProofHeight,
)
if err != nil {
@ -51,7 +51,7 @@ func HandleMsgChannelOpenTry(ctx sdk.Context, k keeper.Keeper, portCap *capabili
sdk.NewEvent(
types.EventTypeChannelOpenTry,
sdk.NewAttribute(types.AttributeKeyPortID, msg.PortId),
sdk.NewAttribute(types.AttributeKeyChannelID, msg.ChannelId),
sdk.NewAttribute(types.AttributeKeyChannelID, msg.DesiredChannelId),
sdk.NewAttribute(types.AttributeCounterpartyPortID, msg.Channel.Counterparty.PortId),
sdk.NewAttribute(types.AttributeCounterpartyChannelID, msg.Channel.Counterparty.ChannelId),
sdk.NewAttribute(types.AttributeKeyConnectionID, msg.Channel.ConnectionHops[0]),

View File

@ -96,8 +96,8 @@ func (k Keeper) ChanOpenTry(
order types.Order,
connectionHops []string,
portID,
channelID,
provedChannelID string,
desiredChannelID,
counterpartyChosenChannelID string,
portCap *capabilitytypes.Capability,
counterparty types.Counterparty,
version,
@ -106,7 +106,7 @@ func (k Keeper) ChanOpenTry(
proofHeight exported.Height,
) (*capabilitytypes.Capability, error) {
// channel identifier and connection hop length checked on msg.ValidateBasic()
previousChannel, found := k.GetChannel(ctx, portID, channelID)
previousChannel, found := k.GetChannel(ctx, portID, desiredChannelID)
if found && !(previousChannel.State == types.INIT &&
previousChannel.Ordering == order &&
previousChannel.Counterparty.PortId == counterparty.PortId &&
@ -148,12 +148,13 @@ func (k Keeper) ChanOpenTry(
)
}
// empty-string is a sentinel value for "allow any identifier" to be selected by
// the counterparty channel
if provedChannelID != channelID && provedChannelID != "" {
// If the channel id chosen for this channel end by the counterparty is empty then
// flexible channel identifier selection is allowed by using the desired channel id.
// Otherwise the desiredChannelID must match the counterpartyChosenChannelID.
if counterpartyChosenChannelID != "" && counterpartyChosenChannelID != desiredChannelID {
return nil, sdkerrors.Wrapf(
types.ErrInvalidChannelIdentifier,
"proved channel identifier (%s) must equal channel identifier (%s) or be empty", provedChannelID, channelID,
"counterparty chosen channel ID (%s) must be empty or equal to the desired channel ID (%s)", counterpartyChosenChannelID, desiredChannelID,
)
}
@ -169,7 +170,7 @@ func (k Keeper) ChanOpenTry(
// expectedCounterpaty is the counterparty of the counterparty's channel end
// (i.e self)
expectedCounterparty := types.NewCounterparty(portID, provedChannelID)
expectedCounterparty := types.NewCounterparty(portID, counterpartyChosenChannelID)
expectedChannel := types.NewChannel(
types.INIT, channel.Ordering, expectedCounterparty,
counterpartyHops, counterpartyVersion,
@ -182,18 +183,18 @@ func (k Keeper) ChanOpenTry(
return nil, err
}
k.SetChannel(ctx, portID, channelID, channel)
k.SetChannel(ctx, portID, desiredChannelID, channel)
capKey, err := k.scopedKeeper.NewCapability(ctx, host.ChannelCapabilityPath(portID, channelID))
capKey, err := k.scopedKeeper.NewCapability(ctx, host.ChannelCapabilityPath(portID, desiredChannelID))
if err != nil {
return nil, sdkerrors.Wrapf(err, "could not create channel capability for port ID %s and channel ID %s", portID, channelID)
return nil, sdkerrors.Wrapf(err, "could not create channel capability for port ID %s and channel ID %s", portID, desiredChannelID)
}
k.SetNextSequenceSend(ctx, portID, channelID, 1)
k.SetNextSequenceRecv(ctx, portID, channelID, 1)
k.SetNextSequenceAck(ctx, portID, channelID, 1)
k.SetNextSequenceSend(ctx, portID, desiredChannelID, 1)
k.SetNextSequenceRecv(ctx, portID, desiredChannelID, 1)
k.SetNextSequenceAck(ctx, portID, desiredChannelID, 1)
k.Logger(ctx).Info(fmt.Sprintf("channel (port-id: %s, channel-id: %s) state updated: NONE -> TRYOPEN", portID, channelID))
k.Logger(ctx).Info(fmt.Sprintf("channel (port-id: %s, channel-id: %s) state updated: NONE -> TRYOPEN", portID, desiredChannelID))
return capKey, nil
}
@ -225,12 +226,13 @@ func (k Keeper) ChanOpenAck(
return sdkerrors.Wrapf(types.ErrChannelCapabilityNotFound, "caller does not own capability for channel, port ID (%s) channel ID (%s)", portID, channelID)
}
// empty-string is a sentinel value for "allow any identifier" to be selected by
// the counterparty channel
if counterpartyChannelID != channel.Counterparty.ChannelId && channel.Counterparty.ChannelId != "" {
// If the previously set channel end allowed for the counterparty to select its own
// channel identifier then we use the counterpartyChannelID. Otherwise the
// counterpartyChannelID must match the previously set counterparty channel ID.
if channel.Counterparty.ChannelId != "" && counterpartyChannelID != channel.Counterparty.ChannelId {
return sdkerrors.Wrapf(
types.ErrInvalidChannelIdentifier,
"counterparty channel identifier (%s) must be empty or equal to stored channel ID for counterparty (%s)", counterpartyChannelID, channel.Counterparty.ChannelId,
"counterparty channel identifier (%s) must be equal to stored channel ID for counterparty (%s)", counterpartyChannelID, channel.Counterparty.ChannelId,
)
}

View File

@ -153,7 +153,7 @@ func (suite *KeeperTestSuite) TestChanOpenTry() {
suite.chainB.CreatePortCapability(connB.NextTestChannel(ibctesting.MockPort).PortID)
portCap = suite.chainB.GetPortCapability(connB.NextTestChannel(ibctesting.MockPort).PortID)
}, true},
{"success with empty proved channel id", func() {
{"success with empty counterparty chosen channel id", func() {
var clientA, clientB string
clientA, clientB, connA, connB = suite.coordinator.SetupClientConnections(suite.chainA, suite.chainB, ibctesting.Tendermint)
channelA, _, err := suite.coordinator.ChanOpenInit(suite.chainA, suite.chainB, connA, connB, ibctesting.MockPort, ibctesting.MockPort, types.ORDERED)
@ -207,7 +207,7 @@ func (suite *KeeperTestSuite) TestChanOpenTry() {
heightDiff = 3 // consensus state doesn't exist at this height
}, false},
{"invalid proved channel id", func() {
{"counterparty chosen channel id does not match desired channel id", func() {
_, _, connA, connB = suite.coordinator.SetupClientConnections(suite.chainA, suite.chainB, ibctesting.Tendermint)
channelA, _, err := suite.coordinator.ChanOpenInit(suite.chainA, suite.chainB, connA, connB, ibctesting.MockPort, ibctesting.MockPort, types.ORDERED)
suite.Require().NoError(err)
@ -280,11 +280,11 @@ func (suite *KeeperTestSuite) TestChanOpenTry() {
channelB := connB.FirstOrNextTestChannel(ibctesting.MockPort)
counterparty := types.NewCounterparty(channelA.PortID, channelA.ID)
// get provedChannelID
var provedChannelID string
// get counterpartyChosenChannelID
var counterpartyChosenChannelID string
channel, found := suite.chainA.App.IBCKeeper.ChannelKeeper.GetChannel(suite.chainA.GetContext(), channelA.PortID, channelA.ID)
if found {
provedChannelID = channel.Counterparty.ChannelId
counterpartyChosenChannelID = channel.Counterparty.ChannelId
}
channelKey := host.KeyChannel(counterparty.PortId, counterparty.ChannelId)
@ -292,7 +292,7 @@ func (suite *KeeperTestSuite) TestChanOpenTry() {
cap, err := suite.chainB.App.IBCKeeper.ChannelKeeper.ChanOpenTry(
suite.chainB.GetContext(), types.ORDERED, []string{connB.ID},
channelB.PortID, channelB.ID, provedChannelID, portCap, counterparty, channelB.Version, connA.FirstOrNextTestChannel(ibctesting.MockPort).Version,
channelB.PortID, channelB.ID, counterpartyChosenChannelID, portCap, counterparty, channelB.Version, connA.FirstOrNextTestChannel(ibctesting.MockPort).Version,
proof, malleateHeight(proofHeight, heightDiff),
)

View File

@ -145,14 +145,14 @@ var xxx_messageInfo_MsgChannelOpenInit proto.InternalMessageInfo
// MsgChannelOpenInit defines a msg sent by a Relayer to try to open a channel
// on Chain B.
type MsgChannelOpenTry struct {
PortId string `protobuf:"bytes,1,opt,name=port_id,json=portId,proto3" json:"port_id,omitempty" yaml:"port_id"`
ChannelId string `protobuf:"bytes,2,opt,name=channel_id,json=channelId,proto3" json:"channel_id,omitempty" yaml:"channel_id"`
ProvedChannelId string `protobuf:"bytes,3,opt,name=proved_channel_id,json=provedChannelId,proto3" json:"proved_channel_id,omitempty" yaml:"proved_channel_id"`
Channel Channel `protobuf:"bytes,4,opt,name=channel,proto3" json:"channel"`
CounterpartyVersion string `protobuf:"bytes,5,opt,name=counterparty_version,json=counterpartyVersion,proto3" json:"counterparty_version,omitempty" yaml:"counterparty_version"`
ProofInit []byte `protobuf:"bytes,6,opt,name=proof_init,json=proofInit,proto3" json:"proof_init,omitempty" yaml:"proof_init"`
ProofHeight types.Height `protobuf:"bytes,7,opt,name=proof_height,json=proofHeight,proto3" json:"proof_height" yaml:"proof_height"`
Signer string `protobuf:"bytes,8,opt,name=signer,proto3" json:"signer,omitempty"`
PortId string `protobuf:"bytes,1,opt,name=port_id,json=portId,proto3" json:"port_id,omitempty" yaml:"port_id"`
DesiredChannelId string `protobuf:"bytes,2,opt,name=desired_channel_id,json=desiredChannelId,proto3" json:"desired_channel_id,omitempty" yaml:"desired_channel_id"`
CounterpartyChosenChannelId string `protobuf:"bytes,3,opt,name=counterparty_chosen_channel_id,json=counterpartyChosenChannelId,proto3" json:"counterparty_chosen_channel_id,omitempty" yaml:"counterparty_chosen_channel_id"`
Channel Channel `protobuf:"bytes,4,opt,name=channel,proto3" json:"channel"`
CounterpartyVersion string `protobuf:"bytes,5,opt,name=counterparty_version,json=counterpartyVersion,proto3" json:"counterparty_version,omitempty" yaml:"counterparty_version"`
ProofInit []byte `protobuf:"bytes,6,opt,name=proof_init,json=proofInit,proto3" json:"proof_init,omitempty" yaml:"proof_init"`
ProofHeight types.Height `protobuf:"bytes,7,opt,name=proof_height,json=proofHeight,proto3" json:"proof_height" yaml:"proof_height"`
Signer string `protobuf:"bytes,8,opt,name=signer,proto3" json:"signer,omitempty"`
}
func (m *MsgChannelOpenTry) Reset() { *m = MsgChannelOpenTry{} }
@ -891,97 +891,99 @@ func init() {
func init() { proto.RegisterFile("ibc/core/channel/v1/channel.proto", fileDescriptor_c3a07336710636a0) }
var fileDescriptor_c3a07336710636a0 = []byte{
// 1432 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x58, 0xcf, 0x6f, 0x1a, 0xc7,
0x17, 0x67, 0x61, 0xc1, 0xf8, 0x19, 0xdb, 0x78, 0x6c, 0x13, 0x82, 0x13, 0x96, 0xac, 0xbe, 0x07,
0x2b, 0x5f, 0x05, 0xe2, 0x34, 0xea, 0x8f, 0xa8, 0x87, 0x1a, 0x4c, 0x64, 0x94, 0x04, 0xac, 0x31,
0xa9, 0x54, 0x5f, 0x28, 0x5e, 0x26, 0xb0, 0xc2, 0xec, 0xd0, 0xdd, 0x35, 0x89, 0xff, 0x81, 0x2a,
0xb2, 0x54, 0xa9, 0xe7, 0x4a, 0x96, 0x22, 0x55, 0x95, 0x2a, 0x55, 0x6a, 0x8f, 0xfd, 0x17, 0x72,
0xcc, 0x2d, 0x3d, 0xad, 0xaa, 0xe4, 0xd0, 0x9c, 0xf9, 0x07, 0x5a, 0xed, 0xcc, 0x2c, 0x2c, 0x18,
0xaa, 0xb4, 0xa9, 0x91, 0x2a, 0xf5, 0xc4, 0xbc, 0xf7, 0x3e, 0x33, 0xf3, 0xde, 0xe7, 0xbd, 0x7d,
0x33, 0x03, 0x5c, 0xd3, 0x0f, 0xb5, 0x9c, 0x46, 0x4d, 0x92, 0xd3, 0x5a, 0x75, 0xc3, 0x20, 0x47,
0xb9, 0xde, 0x96, 0x37, 0xcc, 0x76, 0x4d, 0x6a, 0x53, 0xb4, 0xaa, 0x1f, 0x6a, 0x59, 0x17, 0x92,
0xf5, 0xf4, 0xbd, 0xad, 0xd4, 0x5a, 0x93, 0x36, 0x29, 0xb3, 0xe7, 0xdc, 0x11, 0x87, 0xa6, 0x94,
0xe1, 0x6a, 0x47, 0x3a, 0x31, 0x6c, 0xb6, 0x18, 0x1b, 0x71, 0x80, 0xfa, 0x52, 0x02, 0xf4, 0xc0,
0x6a, 0x16, 0xf8, 0x42, 0x95, 0x2e, 0x31, 0x4a, 0x86, 0x6e, 0xa3, 0xff, 0xc3, 0x5c, 0x97, 0x9a,
0x76, 0x4d, 0x6f, 0x24, 0xa5, 0x8c, 0xb4, 0x39, 0x9f, 0x47, 0x7d, 0x47, 0x59, 0x3a, 0xa9, 0x77,
0x8e, 0xee, 0xa8, 0xc2, 0xa0, 0xe2, 0x88, 0x3b, 0x2a, 0x35, 0xd0, 0x6d, 0x00, 0xe1, 0x88, 0x8b,
0x0f, 0x32, 0xfc, 0x7a, 0xdf, 0x51, 0x56, 0x38, 0x7e, 0x68, 0x53, 0xf1, 0xbc, 0x10, 0x4a, 0x0d,
0xf4, 0x31, 0xcc, 0x09, 0x21, 0x19, 0xca, 0x48, 0x9b, 0x0b, 0xb7, 0xae, 0x64, 0x27, 0xc4, 0x95,
0x15, 0x9e, 0xe5, 0xe5, 0xe7, 0x8e, 0x12, 0xc0, 0xde, 0x14, 0x94, 0x80, 0x88, 0xa5, 0x37, 0x0d,
0x62, 0x26, 0x65, 0x77, 0x3f, 0x2c, 0xa4, 0x3b, 0xd1, 0xa7, 0xcf, 0x94, 0xc0, 0x9b, 0x67, 0x4a,
0x40, 0xfd, 0x52, 0x86, 0x95, 0xd1, 0xc8, 0xaa, 0xe6, 0xc9, 0x2c, 0x02, 0xdb, 0x85, 0x95, 0xae,
0x49, 0x7b, 0xa4, 0x51, 0xf3, 0x4d, 0x0e, 0xb1, 0xc9, 0x57, 0xfa, 0x8e, 0x92, 0x14, 0x9b, 0x8d,
0x43, 0x54, 0xbc, 0xcc, 0x75, 0x85, 0x49, 0x14, 0xc9, 0x7f, 0x9d, 0x22, 0x0c, 0x6b, 0x1a, 0x3d,
0x36, 0x6c, 0x62, 0x76, 0xeb, 0xa6, 0x7d, 0x52, 0xeb, 0x11, 0xd3, 0xd2, 0xa9, 0x91, 0x0c, 0x33,
0x57, 0x94, 0xbe, 0xa3, 0x6c, 0x88, 0x38, 0x26, 0xa0, 0x54, 0xbc, 0xea, 0x57, 0x7f, 0xca, 0xb5,
0x2e, 0x23, 0x5d, 0x93, 0xd2, 0x47, 0x35, 0xdd, 0xd0, 0xed, 0x64, 0x24, 0x23, 0x6d, 0xc6, 0xfc,
0x8c, 0x0c, 0x6d, 0x2a, 0x9e, 0x67, 0x02, 0xab, 0xa6, 0x03, 0x88, 0x71, 0x4b, 0x8b, 0xe8, 0xcd,
0x96, 0x9d, 0x9c, 0x63, 0xc1, 0xa4, 0x7c, 0xc1, 0xf0, 0x92, 0xec, 0x6d, 0x65, 0x77, 0x19, 0x22,
0xbf, 0xe1, 0x86, 0xd2, 0x77, 0x94, 0x55, 0xff, 0xba, 0x7c, 0xb6, 0x8a, 0x17, 0x98, 0xc8, 0x91,
0xbe, 0x42, 0x88, 0x4e, 0x29, 0x84, 0x97, 0xa1, 0xf1, 0x42, 0xd8, 0xd6, 0xda, 0xb3, 0x28, 0x84,
0x03, 0xb8, 0x34, 0x42, 0xed, 0xb9, 0x72, 0x50, 0xfb, 0x8e, 0x92, 0x9e, 0x90, 0x03, 0xff, 0x7a,
0xeb, 0x7e, 0xcb, 0xb0, 0x34, 0xa6, 0x25, 0x57, 0x7e, 0x87, 0xe4, 0x6e, 0x01, 0xcf, 0x59, 0xcd,
0x36, 0x4f, 0x58, 0x95, 0xc4, 0xf2, 0x6b, 0x7d, 0x47, 0x89, 0xfb, 0x73, 0x60, 0x9b, 0x27, 0x2a,
0x8e, 0xb2, 0xb1, 0xfb, 0x39, 0x8d, 0x67, 0x36, 0x72, 0x21, 0x99, 0x9d, 0x9b, 0x92, 0xd9, 0x1f,
0x82, 0xb0, 0x3e, 0x9a, 0xd9, 0x02, 0x35, 0x1e, 0xe9, 0x66, 0x67, 0x16, 0xd9, 0x1d, 0xb0, 0x55,
0xd7, 0xda, 0x2c, 0x9f, 0x13, 0xd8, 0xaa, 0x6b, 0x6d, 0x8f, 0x2d, 0xb7, 0xe6, 0xc6, 0xd9, 0x92,
0x2f, 0x84, 0xad, 0xf0, 0x14, 0xb6, 0xbe, 0x91, 0x60, 0x75, 0xc8, 0x56, 0xe1, 0x88, 0x5a, 0x64,
0x56, 0xbd, 0x7e, 0xe8, 0x5c, 0x68, 0x8a, 0x73, 0x3f, 0x05, 0x21, 0x31, 0xe6, 0xdc, 0x0c, 0x73,
0x39, 0xda, 0xd6, 0x42, 0x7f, 0xb3, 0xad, 0xcd, 0x36, 0x9d, 0x8e, 0x04, 0x8b, 0x0f, 0xac, 0x26,
0x26, 0x5a, 0x6f, 0xaf, 0xae, 0xb5, 0x89, 0x8d, 0x3e, 0x82, 0x48, 0x97, 0x8d, 0x18, 0x4f, 0x0b,
0xb7, 0x36, 0x26, 0x9e, 0x16, 0x1c, 0x2c, 0x0e, 0x0b, 0x31, 0x01, 0xad, 0x41, 0x98, 0xed, 0xce,
0x18, 0x8b, 0x61, 0x2e, 0x9c, 0x0b, 0x30, 0x74, 0x21, 0x01, 0x4e, 0x3b, 0xc0, 0xbf, 0x0f, 0x02,
0x3c, 0xb0, 0x9a, 0x55, 0xbd, 0x43, 0xe8, 0xf1, 0xbf, 0x2c, 0xba, 0x7b, 0x80, 0x0c, 0xf2, 0xc4,
0xae, 0x59, 0xe4, 0x8b, 0x63, 0x62, 0x68, 0xa4, 0x66, 0x12, 0xad, 0xc7, 0x22, 0x95, 0xf3, 0x57,
0xfb, 0x8e, 0x72, 0x99, 0xaf, 0x70, 0x1e, 0xa3, 0xe2, 0xb8, 0xab, 0xdc, 0x17, 0x3a, 0x37, 0xbb,
0x6f, 0x51, 0x0b, 0x6f, 0x82, 0xec, 0x88, 0x13, 0x54, 0x55, 0x0c, 0xf6, 0xfd, 0xfc, 0xf3, 0x8c,
0x7d, 0x00, 0x3c, 0xc8, 0x9a, 0xe6, 0xae, 0x2f, 0xbe, 0x93, 0x44, 0xdf, 0x51, 0x90, 0x9f, 0x10,
0x66, 0x54, 0x31, 0xff, 0xa2, 0xb8, 0x27, 0x17, 0xf9, 0xa5, 0x4c, 0xa6, 0x3a, 0xfc, 0xae, 0x54,
0x47, 0xa6, 0x50, 0xfd, 0x55, 0x90, 0x5d, 0x98, 0xb7, 0xb5, 0xb6, 0x41, 0x1f, 0x1f, 0x91, 0x46,
0x93, 0x74, 0x88, 0xf1, 0x4e, 0xd5, 0xb9, 0x09, 0xcb, 0xf5, 0xd1, 0xd5, 0x04, 0xeb, 0xe3, 0xea,
0x61, 0x56, 0x42, 0x7f, 0x56, 0xc7, 0xb3, 0x6d, 0x43, 0xdf, 0x05, 0x61, 0x4e, 0x74, 0x6d, 0x74,
0x13, 0xc2, 0x96, 0x5d, 0xb7, 0x09, 0xe3, 0x60, 0x69, 0xc4, 0x85, 0x21, 0x07, 0xfb, 0x2e, 0x02,
0x73, 0x20, 0x7a, 0x1f, 0xa2, 0xd4, 0x6c, 0x10, 0x53, 0x37, 0x9a, 0x2c, 0xe8, 0x69, 0x93, 0x2a,
0x2e, 0x08, 0x0f, 0xb0, 0xe8, 0x1e, 0xc4, 0xfc, 0x37, 0x18, 0xf1, 0xed, 0x5e, 0x9b, 0x7c, 0x3d,
0xf6, 0x01, 0x05, 0xf5, 0x23, 0x93, 0x51, 0x01, 0x96, 0x35, 0x6a, 0x18, 0x44, 0xb3, 0x75, 0x6a,
0xd4, 0x5a, 0xb4, 0x6b, 0x25, 0xe5, 0x4c, 0x68, 0x73, 0x3e, 0x9f, 0xea, 0x3b, 0x4a, 0xc2, 0xbb,
0x46, 0x8d, 0x00, 0x54, 0xbc, 0x34, 0xd4, 0xec, 0xd2, 0xae, 0x85, 0x92, 0x30, 0x37, 0x72, 0xc1,
0xc6, 0x9e, 0x78, 0x47, 0x76, 0xb9, 0x52, 0x7f, 0x0b, 0xc2, 0x4a, 0xa9, 0x41, 0x0c, 0x5b, 0x7f,
0xa4, 0x0f, 0xee, 0xf8, 0xff, 0x31, 0x36, 0x89, 0x31, 0x74, 0x69, 0x78, 0xe2, 0x8b, 0xcf, 0x50,
0x9c, 0xee, 0x57, 0x47, 0x4e, 0x77, 0x7e, 0x2d, 0x1c, 0x1e, 0xe3, 0x82, 0xe9, 0xc7, 0x10, 0xf3,
0x07, 0x30, 0x83, 0xfb, 0x83, 0xd8, 0xf8, 0xf7, 0x10, 0x44, 0xc4, 0x51, 0x9c, 0x82, 0xa8, 0xd7,
0x6b, 0xd8, 0xa6, 0x32, 0x1e, 0xc8, 0x6e, 0x17, 0xb5, 0xe8, 0xb1, 0xa9, 0x91, 0x9a, 0xbb, 0xa7,
0xd8, 0xc3, 0xd7, 0x45, 0x7d, 0x46, 0x15, 0x03, 0x97, 0xf6, 0xa8, 0x69, 0xa3, 0x4f, 0x60, 0x49,
0xd8, 0xfc, 0x0f, 0xe7, 0xf9, 0xfc, 0xe5, 0xbe, 0xa3, 0xac, 0x8f, 0xcc, 0x15, 0x76, 0x15, 0x2f,
0x72, 0x85, 0x57, 0x6e, 0x77, 0x21, 0xde, 0x20, 0x96, 0xad, 0x1b, 0x75, 0x96, 0x17, 0xb6, 0x3f,
0x7f, 0x31, 0x6c, 0xf4, 0x1d, 0xe5, 0x12, 0x5f, 0x63, 0x1c, 0xa1, 0xe2, 0x65, 0x9f, 0x8a, 0x79,
0x52, 0x81, 0x55, 0x3f, 0xca, 0x73, 0x87, 0xbf, 0x2c, 0xd3, 0x7d, 0x47, 0x49, 0x9d, 0x5f, 0x6a,
0xe0, 0x13, 0xf2, 0x69, 0x3d, 0xc7, 0x10, 0xc8, 0x8d, 0xba, 0x5d, 0xe7, 0x2f, 0x4a, 0xcc, 0xc6,
0xe8, 0x73, 0x58, 0xb2, 0xf9, 0x81, 0xf6, 0xf6, 0xef, 0xc6, 0xab, 0xa2, 0xb3, 0x09, 0x3a, 0x46,
0xe7, 0xab, 0x78, 0x51, 0x28, 0x44, 0x77, 0x2b, 0xc1, 0x8a, 0x87, 0x70, 0x7f, 0x2d, 0xbb, 0xde,
0xe9, 0xb2, 0x67, 0xa4, 0xec, 0x7f, 0xa9, 0x9f, 0x83, 0xa8, 0x38, 0x2e, 0x74, 0x55, 0x4f, 0x25,
0x2a, 0xe0, 0x47, 0x09, 0x56, 0x79, 0x05, 0x6c, 0x6b, 0xed, 0x02, 0xed, 0x74, 0x74, 0x9b, 0x35,
0xee, 0x19, 0x5c, 0x61, 0xfd, 0x15, 0x17, 0x1a, 0xab, 0x38, 0x04, 0x72, 0xab, 0x6e, 0xb5, 0x58,
0xaa, 0x63, 0x98, 0x8d, 0x85, 0xc3, 0x15, 0x58, 0x1e, 0x3f, 0xc9, 0x92, 0x10, 0x31, 0x89, 0x75,
0x7c, 0x64, 0x27, 0xd7, 0x5d, 0xf8, 0x6e, 0x00, 0x0b, 0x19, 0x25, 0x20, 0x4c, 0x4c, 0x93, 0x9a,
0xc9, 0x84, 0xeb, 0xd3, 0x6e, 0x00, 0x73, 0x31, 0x0f, 0x10, 0x35, 0x89, 0xd5, 0xa5, 0x86, 0x45,
0xae, 0xff, 0x2c, 0x41, 0x78, 0x5f, 0x34, 0x2a, 0x65, 0xbf, 0xba, 0x5d, 0x2d, 0xd6, 0x1e, 0x96,
0x4b, 0xe5, 0x52, 0xb5, 0xb4, 0x7d, 0xbf, 0x74, 0x50, 0xdc, 0xa9, 0x3d, 0x2c, 0xef, 0xef, 0x15,
0x0b, 0xa5, 0xbb, 0xa5, 0xe2, 0x4e, 0x3c, 0x90, 0x5a, 0x39, 0x3d, 0xcb, 0x2c, 0x8e, 0x00, 0x50,
0x12, 0x80, 0xcf, 0x73, 0x95, 0x71, 0x29, 0x15, 0x3d, 0x3d, 0xcb, 0xc8, 0xee, 0x18, 0xa5, 0x61,
0x91, 0x5b, 0xaa, 0xf8, 0xb3, 0xca, 0x5e, 0xb1, 0x1c, 0x0f, 0xa6, 0x16, 0x4e, 0xcf, 0x32, 0x73,
0x42, 0x1c, 0xce, 0x64, 0xc6, 0x10, 0x9f, 0xc9, 0x2c, 0x57, 0x20, 0xc6, 0x2d, 0x85, 0xfb, 0x95,
0xfd, 0xe2, 0x4e, 0x5c, 0x4e, 0xc1, 0xe9, 0x59, 0x26, 0xc2, 0xa5, 0x94, 0xfc, 0xf4, 0xdb, 0x74,
0xe0, 0xfa, 0x63, 0x08, 0xb3, 0x9e, 0x89, 0xfe, 0x07, 0x89, 0x0a, 0xde, 0x29, 0xe2, 0x5a, 0xb9,
0x52, 0x2e, 0x8e, 0xf9, 0xcb, 0x96, 0x74, 0xf5, 0x48, 0x85, 0x65, 0x8e, 0x7a, 0x58, 0x66, 0xbf,
0xc5, 0x9d, 0xb8, 0x94, 0x5a, 0x3c, 0x3d, 0xcb, 0xcc, 0x0f, 0x14, 0xae, 0xc3, 0x1c, 0xe3, 0x21,
0x84, 0xc3, 0x42, 0xe4, 0x1b, 0xe7, 0xf1, 0xf3, 0x57, 0x69, 0xe9, 0xc5, 0xab, 0xb4, 0xf4, 0xeb,
0xab, 0xb4, 0xf4, 0xf5, 0xeb, 0x74, 0xe0, 0xc5, 0xeb, 0x74, 0xe0, 0x97, 0xd7, 0xe9, 0xc0, 0xc1,
0x87, 0x4d, 0xdd, 0x6e, 0x1d, 0x1f, 0x66, 0x35, 0xda, 0xc9, 0x69, 0xd4, 0xea, 0x50, 0x4b, 0xfc,
0xdc, 0xb0, 0x1a, 0xed, 0xdc, 0x93, 0xdc, 0xe0, 0xcf, 0xbd, 0x9b, 0xb7, 0x6f, 0x78, 0xff, 0x16,
0xda, 0x27, 0x5d, 0x62, 0x1d, 0x46, 0xd8, 0xbf, 0x7b, 0xef, 0xfd, 0x11, 0x00, 0x00, 0xff, 0xff,
0x12, 0x29, 0x8f, 0x28, 0x4e, 0x14, 0x00, 0x00,
// 1465 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x58, 0xcf, 0x6b, 0x1b, 0xc7,
0x17, 0xd7, 0x4a, 0x2b, 0xd9, 0x7e, 0x96, 0x6d, 0x79, 0xfc, 0x23, 0x8a, 0x9c, 0x68, 0x95, 0xe5,
0xfb, 0x05, 0x37, 0x25, 0x76, 0x9c, 0x86, 0xfe, 0x08, 0x3d, 0xd4, 0x92, 0x15, 0x2c, 0x92, 0x48,
0x66, 0xac, 0x14, 0xea, 0x8b, 0x2a, 0xaf, 0x26, 0xd2, 0x22, 0x6b, 0x47, 0xdd, 0x5d, 0x3b, 0xf1,
0x7f, 0x10, 0x0c, 0x85, 0x9e, 0x0b, 0x86, 0x40, 0x29, 0x14, 0x0a, 0xed, 0xb1, 0x7f, 0x40, 0x2f,
0x39, 0xe6, 0x96, 0x9e, 0x96, 0x92, 0x1c, 0x9a, 0xf3, 0xfe, 0x03, 0x2d, 0x3b, 0x33, 0x2b, 0xed,
0xca, 0x52, 0x48, 0x9a, 0x5a, 0x50, 0xe8, 0x69, 0xe7, 0xbd, 0xf7, 0x99, 0x99, 0xf7, 0x3e, 0xef,
0xcd, 0xaf, 0x85, 0x2b, 0xfa, 0xbe, 0xb6, 0xae, 0x51, 0x93, 0xac, 0x6b, 0xad, 0xba, 0x61, 0x90,
0x83, 0xf5, 0xa3, 0x0d, 0xbf, 0xb9, 0xd6, 0x35, 0xa9, 0x4d, 0xd1, 0x82, 0xbe, 0xaf, 0xad, 0x79,
0x90, 0x35, 0x5f, 0x7f, 0xb4, 0x91, 0x59, 0x6c, 0xd2, 0x26, 0x65, 0xf6, 0x75, 0xaf, 0xc5, 0xa1,
0x19, 0xa5, 0x3f, 0xda, 0x81, 0x4e, 0x0c, 0x9b, 0x0d, 0xc6, 0x5a, 0x1c, 0xa0, 0x3e, 0x97, 0x00,
0xdd, 0xb3, 0x9a, 0x05, 0x3e, 0x50, 0xa5, 0x4b, 0x8c, 0x92, 0xa1, 0xdb, 0xe8, 0x7d, 0x98, 0xe8,
0x52, 0xd3, 0xae, 0xe9, 0x8d, 0xb4, 0x94, 0x93, 0x56, 0xa7, 0xf2, 0xc8, 0x75, 0x94, 0xd9, 0xe3,
0x7a, 0xe7, 0xe0, 0x96, 0x2a, 0x0c, 0x2a, 0x4e, 0x78, 0xad, 0x52, 0x03, 0xdd, 0x04, 0x10, 0x8e,
0x78, 0xf8, 0x28, 0xc3, 0x2f, 0xb9, 0x8e, 0x32, 0xcf, 0xf1, 0x7d, 0x9b, 0x8a, 0xa7, 0x84, 0x50,
0x6a, 0xa0, 0x4f, 0x61, 0x42, 0x08, 0xe9, 0x58, 0x4e, 0x5a, 0x9d, 0xbe, 0x71, 0x69, 0x6d, 0x48,
0x5c, 0x6b, 0xc2, 0xb3, 0xbc, 0xfc, 0xd4, 0x51, 0x22, 0xd8, 0xef, 0x82, 0x96, 0x21, 0x61, 0xe9,
0x4d, 0x83, 0x98, 0x69, 0xd9, 0x9b, 0x0f, 0x0b, 0xe9, 0xd6, 0xe4, 0xe3, 0x27, 0x4a, 0xe4, 0xd5,
0x13, 0x25, 0xa2, 0xfe, 0x2a, 0xc3, 0x7c, 0x38, 0xb2, 0xaa, 0x79, 0xfc, 0x76, 0x81, 0xdd, 0x01,
0xd4, 0x20, 0x96, 0x6e, 0x92, 0x46, 0xed, 0x4c, 0x80, 0x97, 0x5d, 0x47, 0xb9, 0xc8, 0xfb, 0x9d,
0xc5, 0xa8, 0x38, 0x25, 0x94, 0x85, 0x5e, 0xbc, 0x06, 0x64, 0x35, 0x7a, 0x68, 0xd8, 0xc4, 0xec,
0xd6, 0x4d, 0xfb, 0xb8, 0xa6, 0xb5, 0xa8, 0x45, 0x8c, 0xe0, 0xc0, 0x31, 0x36, 0xf0, 0x7b, 0xae,
0xa3, 0xfc, 0x5f, 0x30, 0xf7, 0x5a, 0xbc, 0x8a, 0x57, 0x82, 0x80, 0x02, 0xb3, 0x17, 0x86, 0xf1,
0x2b, 0xbf, 0x3d, 0xbf, 0x18, 0x16, 0x43, 0xb3, 0x1f, 0x11, 0xd3, 0xd2, 0xa9, 0x91, 0x8e, 0x33,
0x1f, 0x15, 0xd7, 0x51, 0x56, 0x86, 0xf8, 0x28, 0x50, 0x2a, 0x5e, 0x08, 0xaa, 0x3f, 0xe7, 0x5a,
0xaf, 0x4e, 0xba, 0x26, 0xa5, 0x0f, 0x6a, 0xba, 0xa1, 0xdb, 0xe9, 0x44, 0x4e, 0x5a, 0x4d, 0x06,
0xeb, 0xa4, 0x6f, 0x53, 0xf1, 0x14, 0x13, 0x58, 0x29, 0xee, 0x41, 0x92, 0x5b, 0x5a, 0x44, 0x6f,
0xb6, 0xec, 0xf4, 0x04, 0x0b, 0x26, 0x13, 0x08, 0x86, 0xd7, 0xf3, 0xd1, 0xc6, 0xda, 0x36, 0x43,
0xe4, 0x57, 0xbc, 0x50, 0x5c, 0x47, 0x59, 0x08, 0x8e, 0xcb, 0x7b, 0xab, 0x78, 0x9a, 0x89, 0x1c,
0x19, 0xa8, 0xa2, 0xc9, 0x11, 0x55, 0xf4, 0x3c, 0x36, 0x58, 0x45, 0x9b, 0x5a, 0x7b, 0x1c, 0xcb,
0x63, 0x0f, 0x2e, 0x0c, 0xa4, 0x7f, 0xa0, 0x4e, 0x54, 0xd7, 0x51, 0xb2, 0x43, 0xeb, 0xa4, 0x3f,
0xde, 0x52, 0xb8, 0x40, 0xfc, 0xb1, 0x47, 0x25, 0x57, 0x7e, 0x87, 0xe4, 0x6e, 0x00, 0xcf, 0x59,
0xcd, 0x36, 0x8f, 0x59, 0x95, 0x24, 0xf3, 0x8b, 0xae, 0xa3, 0xa4, 0x82, 0x39, 0xb0, 0xcd, 0x63,
0x15, 0x4f, 0xb2, 0xb6, 0xb7, 0x16, 0x07, 0x33, 0x9b, 0x38, 0x97, 0xcc, 0x4e, 0x8c, 0xc8, 0xec,
0x8f, 0x51, 0x58, 0x0a, 0x67, 0xb6, 0x40, 0x8d, 0x07, 0xba, 0xd9, 0x19, 0x47, 0x76, 0x7b, 0x6c,
0xd5, 0xb5, 0x36, 0xcb, 0xe7, 0x10, 0xb6, 0xea, 0x5a, 0xdb, 0x67, 0xcb, 0xab, 0xb9, 0x41, 0xb6,
0xe4, 0x73, 0x61, 0x2b, 0x3e, 0x82, 0xad, 0x6f, 0x25, 0x58, 0xe8, 0xb3, 0x55, 0x38, 0xa0, 0x16,
0x19, 0xd7, 0x41, 0xd1, 0x77, 0x2e, 0x36, 0xc2, 0xb9, 0x9f, 0xa3, 0xb0, 0x3c, 0xe0, 0xdc, 0x18,
0x73, 0x19, 0xde, 0xd6, 0x62, 0x7f, 0x73, 0x5b, 0x1b, 0x6f, 0x3a, 0x1d, 0x09, 0x66, 0xee, 0x59,
0x4d, 0x4c, 0xb4, 0xa3, 0x9d, 0xba, 0xd6, 0x26, 0x36, 0xfa, 0x04, 0x12, 0x5d, 0xd6, 0x62, 0x3c,
0x4d, 0xdf, 0x58, 0x19, 0x7a, 0x5a, 0x70, 0xb0, 0x38, 0x2c, 0x44, 0x07, 0xb4, 0x08, 0x71, 0x36,
0x3b, 0x63, 0x2c, 0x89, 0xb9, 0x70, 0x26, 0xc0, 0xd8, 0xb9, 0x04, 0x38, 0xea, 0xf4, 0xff, 0x21,
0x0a, 0x70, 0xcf, 0x6a, 0x56, 0xf5, 0x0e, 0xa1, 0x87, 0xff, 0xb2, 0xe8, 0xee, 0x00, 0x32, 0xc8,
0x23, 0xbb, 0x66, 0x91, 0xaf, 0x0e, 0x89, 0xa1, 0x91, 0x9a, 0x49, 0xb4, 0x23, 0x16, 0xa9, 0x1c,
0xbc, 0x76, 0x9c, 0xc5, 0xa8, 0x38, 0xe5, 0x29, 0x77, 0x85, 0xce, 0xcb, 0xee, 0x1b, 0xd4, 0xc2,
0xab, 0x28, 0x3b, 0xe2, 0x04, 0x55, 0x15, 0x83, 0xad, 0x9f, 0x7f, 0x9e, 0xb1, 0x8f, 0x80, 0x07,
0x59, 0xd3, 0xbc, 0xf1, 0xc5, 0x3a, 0x59, 0x76, 0x1d, 0x05, 0x05, 0x09, 0x61, 0x46, 0x15, 0xf3,
0x15, 0xc5, 0x3d, 0x39, 0xcf, 0x95, 0x32, 0x9c, 0xea, 0xf8, 0xbb, 0x52, 0x9d, 0x18, 0x41, 0xf5,
0xd7, 0x51, 0x76, 0xdb, 0xde, 0xd4, 0xda, 0x06, 0x7d, 0x78, 0x40, 0x1a, 0x4d, 0xd2, 0x21, 0xc6,
0x3b, 0x55, 0xe7, 0x2a, 0xcc, 0xd5, 0xc3, 0xa3, 0x09, 0xd6, 0x07, 0xd5, 0xfd, 0xac, 0xc4, 0x5e,
0x57, 0xc7, 0xe3, 0xdd, 0x86, 0xbe, 0x8f, 0xc2, 0x84, 0xd8, 0xb5, 0xd1, 0x75, 0x88, 0x5b, 0x76,
0xdd, 0x26, 0x8c, 0x83, 0xd9, 0x90, 0x0b, 0x7d, 0x0e, 0x76, 0x3d, 0x04, 0xe6, 0x40, 0xf4, 0x21,
0x4c, 0x52, 0xb3, 0x41, 0x4c, 0xdd, 0x68, 0xb2, 0xa0, 0x47, 0x75, 0xaa, 0x78, 0x20, 0xdc, 0xc3,
0xa2, 0x3b, 0x90, 0x0c, 0xde, 0x60, 0xc4, 0xda, 0xbd, 0x32, 0xfc, 0x7a, 0x1c, 0x00, 0x0a, 0xea,
0x43, 0x9d, 0x51, 0x01, 0xe6, 0x34, 0x6a, 0x18, 0x44, 0xb3, 0x75, 0x6a, 0xd4, 0x5a, 0xb4, 0x6b,
0xa5, 0xe5, 0x5c, 0x6c, 0x75, 0x2a, 0x9f, 0x71, 0x1d, 0x65, 0xd9, 0xbf, 0x46, 0x85, 0x00, 0x2a,
0x9e, 0xed, 0x6b, 0xb6, 0x69, 0xd7, 0x42, 0x69, 0x98, 0x08, 0x5d, 0xb0, 0xb1, 0x2f, 0xde, 0x92,
0x3d, 0xae, 0xd4, 0x3f, 0xa2, 0x30, 0x5f, 0x6a, 0x10, 0xc3, 0xd6, 0x1f, 0xe8, 0xbd, 0x37, 0xc5,
0x7f, 0x8c, 0x0d, 0x63, 0x0c, 0x5d, 0xe8, 0x9f, 0xf8, 0x62, 0x19, 0x8a, 0xd3, 0xfd, 0x72, 0xe8,
0x74, 0xe7, 0xd7, 0xc2, 0xfe, 0x31, 0x2e, 0x98, 0x7e, 0x08, 0xc9, 0x60, 0x00, 0x63, 0xb8, 0x3f,
0x88, 0x89, 0xff, 0x8c, 0x41, 0x42, 0x1c, 0xc5, 0x19, 0x98, 0xf4, 0xf7, 0x1a, 0x36, 0xa9, 0x8c,
0x7b, 0xb2, 0xb7, 0x8b, 0x5a, 0xf4, 0xd0, 0xd4, 0x48, 0xcd, 0x9b, 0x53, 0xcc, 0x11, 0xd8, 0x45,
0x03, 0x46, 0x15, 0x03, 0x97, 0x76, 0xa8, 0x69, 0xa3, 0xcf, 0x60, 0x56, 0xd8, 0x82, 0xaf, 0xee,
0xa9, 0xfc, 0x45, 0xd7, 0x51, 0x96, 0x42, 0x7d, 0x85, 0x5d, 0xc5, 0x33, 0x5c, 0xe1, 0x97, 0xdb,
0x6d, 0xf0, 0x1e, 0xb5, 0xb6, 0x6e, 0xd4, 0x59, 0x5e, 0xd8, 0xfc, 0xfc, 0xc5, 0xb0, 0xe2, 0x3a,
0xca, 0x85, 0xde, 0x5b, 0x38, 0x84, 0x50, 0xf1, 0x5c, 0x40, 0xc5, 0x3c, 0xa9, 0xc0, 0x42, 0x10,
0xe5, 0xbb, 0xc3, 0x5f, 0x96, 0x59, 0xd7, 0x51, 0x32, 0x67, 0x87, 0xea, 0xf9, 0x84, 0x02, 0x5a,
0xdf, 0x31, 0x04, 0x72, 0xa3, 0x6e, 0xd7, 0xf9, 0x8b, 0x12, 0xb3, 0x36, 0xfa, 0x12, 0x66, 0x6d,
0x7e, 0xa0, 0xbd, 0xf9, 0xbb, 0xf1, 0xb2, 0xd8, 0xd9, 0x04, 0x1d, 0xe1, 0xfe, 0x2a, 0x9e, 0x11,
0x0a, 0xb1, 0xbb, 0x95, 0x60, 0xde, 0x47, 0x78, 0x5f, 0xcb, 0xae, 0x77, 0xba, 0xec, 0x19, 0x29,
0xe7, 0x2f, 0xb9, 0x8e, 0x92, 0x0e, 0x0f, 0xd2, 0x83, 0xa8, 0x38, 0x25, 0x74, 0x55, 0x5f, 0x25,
0x2a, 0xe0, 0x27, 0x09, 0x16, 0x78, 0x05, 0x6c, 0x6a, 0xed, 0x02, 0xed, 0x74, 0x74, 0x9b, 0x6d,
0xdc, 0x63, 0xb8, 0xc2, 0x06, 0x2b, 0x2e, 0x36, 0x50, 0x71, 0x08, 0xe4, 0x56, 0xdd, 0x6a, 0xb1,
0x54, 0x27, 0x31, 0x6b, 0x0b, 0x87, 0x2b, 0x30, 0x37, 0x78, 0x92, 0xa5, 0x21, 0x61, 0x12, 0xeb,
0xf0, 0xc0, 0x4e, 0x2f, 0x79, 0xf0, 0xed, 0x08, 0x16, 0x32, 0x5a, 0x86, 0x38, 0x31, 0x4d, 0x6a,
0xa6, 0x97, 0x3d, 0x9f, 0xb6, 0x23, 0x98, 0x8b, 0x79, 0x80, 0x49, 0x93, 0x58, 0x5d, 0x6a, 0x58,
0xe4, 0xea, 0x2f, 0x12, 0xc4, 0x77, 0xc5, 0x46, 0xa5, 0xec, 0x56, 0x37, 0xab, 0xc5, 0xda, 0xfd,
0x72, 0xa9, 0x5c, 0xaa, 0x96, 0x36, 0xef, 0x96, 0xf6, 0x8a, 0x5b, 0xb5, 0xfb, 0xe5, 0xdd, 0x9d,
0x62, 0xa1, 0x74, 0xbb, 0x54, 0xdc, 0x4a, 0x45, 0x32, 0xf3, 0x27, 0xa7, 0xb9, 0x99, 0x10, 0x00,
0xa5, 0x01, 0x78, 0x3f, 0x4f, 0x99, 0x92, 0x32, 0x93, 0x27, 0xa7, 0x39, 0xd9, 0x6b, 0xa3, 0x2c,
0xcc, 0x70, 0x4b, 0x15, 0x7f, 0x51, 0xd9, 0x29, 0x96, 0x53, 0xd1, 0xcc, 0xf4, 0xc9, 0x69, 0x6e,
0x42, 0x88, 0xfd, 0x9e, 0xcc, 0x18, 0xe3, 0x3d, 0x99, 0xe5, 0x12, 0x24, 0xb9, 0xa5, 0x70, 0xb7,
0xb2, 0x5b, 0xdc, 0x4a, 0xc9, 0x19, 0x38, 0x39, 0xcd, 0x25, 0xb8, 0x94, 0x91, 0x1f, 0x7f, 0x97,
0x8d, 0x5c, 0x7d, 0x08, 0x71, 0xb6, 0x67, 0xa2, 0xff, 0xc1, 0x72, 0x05, 0x6f, 0x15, 0x71, 0xad,
0x5c, 0x29, 0x17, 0x07, 0xfc, 0x65, 0x43, 0x7a, 0x7a, 0xa4, 0xc2, 0x1c, 0x47, 0xdd, 0x2f, 0xb3,
0x6f, 0x71, 0x2b, 0x25, 0x65, 0x66, 0x4e, 0x4e, 0x73, 0x53, 0x3d, 0x85, 0xe7, 0x30, 0xc7, 0xf8,
0x08, 0xe1, 0xb0, 0x10, 0xf9, 0xc4, 0x79, 0xfc, 0xf4, 0x45, 0x56, 0x7a, 0xf6, 0x22, 0x2b, 0xfd,
0xfe, 0x22, 0x2b, 0x7d, 0xf3, 0x32, 0x1b, 0x79, 0xf6, 0x32, 0x1b, 0xf9, 0xed, 0x65, 0x36, 0xb2,
0xf7, 0x71, 0x53, 0xb7, 0x5b, 0x87, 0xfb, 0x6b, 0x1a, 0xed, 0xac, 0x6b, 0xd4, 0xea, 0x50, 0x4b,
0x7c, 0xae, 0x59, 0x8d, 0xf6, 0xfa, 0xa3, 0xf5, 0xde, 0x9f, 0xc1, 0xeb, 0x37, 0xaf, 0xf9, 0xbf,
0x1a, 0xed, 0xe3, 0x2e, 0xb1, 0xf6, 0x13, 0xec, 0xd7, 0xe0, 0x07, 0x7f, 0x05, 0x00, 0x00, 0xff,
0xff, 0x7f, 0x85, 0xc2, 0xbb, 0x8b, 0x14, 0x00, 0x00,
}
func (m *MsgChannelOpenInit) Marshal() (dAtA []byte, err error) {
@ -1099,17 +1101,17 @@ func (m *MsgChannelOpenTry) MarshalToSizedBuffer(dAtA []byte) (int, error) {
}
i--
dAtA[i] = 0x22
if len(m.ProvedChannelId) > 0 {
i -= len(m.ProvedChannelId)
copy(dAtA[i:], m.ProvedChannelId)
i = encodeVarintChannel(dAtA, i, uint64(len(m.ProvedChannelId)))
if len(m.CounterpartyChosenChannelId) > 0 {
i -= len(m.CounterpartyChosenChannelId)
copy(dAtA[i:], m.CounterpartyChosenChannelId)
i = encodeVarintChannel(dAtA, i, uint64(len(m.CounterpartyChosenChannelId)))
i--
dAtA[i] = 0x1a
}
if len(m.ChannelId) > 0 {
i -= len(m.ChannelId)
copy(dAtA[i:], m.ChannelId)
i = encodeVarintChannel(dAtA, i, uint64(len(m.ChannelId)))
if len(m.DesiredChannelId) > 0 {
i -= len(m.DesiredChannelId)
copy(dAtA[i:], m.DesiredChannelId)
i = encodeVarintChannel(dAtA, i, uint64(len(m.DesiredChannelId)))
i--
dAtA[i] = 0x12
}
@ -2022,11 +2024,11 @@ func (m *MsgChannelOpenTry) Size() (n int) {
if l > 0 {
n += 1 + l + sovChannel(uint64(l))
}
l = len(m.ChannelId)
l = len(m.DesiredChannelId)
if l > 0 {
n += 1 + l + sovChannel(uint64(l))
}
l = len(m.ProvedChannelId)
l = len(m.CounterpartyChosenChannelId)
if l > 0 {
n += 1 + l + sovChannel(uint64(l))
}
@ -2683,7 +2685,7 @@ func (m *MsgChannelOpenTry) Unmarshal(dAtA []byte) error {
iNdEx = postIndex
case 2:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field ChannelId", wireType)
return fmt.Errorf("proto: wrong wireType = %d for field DesiredChannelId", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@ -2711,11 +2713,11 @@ func (m *MsgChannelOpenTry) Unmarshal(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.ChannelId = string(dAtA[iNdEx:postIndex])
m.DesiredChannelId = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 3:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field ProvedChannelId", wireType)
return fmt.Errorf("proto: wrong wireType = %d for field CounterpartyChosenChannelId", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@ -2743,7 +2745,7 @@ func (m *MsgChannelOpenTry) Unmarshal(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.ProvedChannelId = string(dAtA[iNdEx:postIndex])
m.CounterpartyChosenChannelId = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 4:
if wireType != 2 {

View File

@ -69,21 +69,21 @@ var _ sdk.Msg = &MsgChannelOpenTry{}
// NewMsgChannelOpenTry creates a new MsgChannelOpenTry instance
//nolint:interfacer
func NewMsgChannelOpenTry(
portID, channelID, provedChannelID, version string, channelOrder Order, connectionHops []string,
portID, desiredChannelID, counterpartyChosenChannelID, version string, channelOrder Order, connectionHops []string,
counterpartyPortID, counterpartyChannelID, counterpartyVersion string,
proofInit []byte, proofHeight clienttypes.Height, signer sdk.AccAddress,
) *MsgChannelOpenTry {
counterparty := NewCounterparty(counterpartyPortID, counterpartyChannelID)
channel := NewChannel(INIT, channelOrder, counterparty, connectionHops, version)
return &MsgChannelOpenTry{
PortId: portID,
ChannelId: channelID,
ProvedChannelId: provedChannelID,
Channel: channel,
CounterpartyVersion: counterpartyVersion,
ProofInit: proofInit,
ProofHeight: proofHeight,
Signer: signer.String(),
PortId: portID,
DesiredChannelId: desiredChannelID,
CounterpartyChosenChannelId: counterpartyChosenChannelID,
Channel: channel,
CounterpartyVersion: counterpartyVersion,
ProofInit: proofInit,
ProofHeight: proofHeight,
Signer: signer.String(),
}
}
@ -102,11 +102,11 @@ func (msg MsgChannelOpenTry) ValidateBasic() error {
if err := host.PortIdentifierValidator(msg.PortId); err != nil {
return sdkerrors.Wrap(err, "invalid port ID")
}
if err := host.ChannelIdentifierValidator(msg.ChannelId); err != nil {
return sdkerrors.Wrap(err, "invalid channel ID")
if err := host.ChannelIdentifierValidator(msg.DesiredChannelId); err != nil {
return sdkerrors.Wrap(err, "invalid desired channel ID")
}
if msg.ProvedChannelId != "" && msg.ProvedChannelId != msg.ChannelId {
return sdkerrors.Wrap(ErrInvalidChannelIdentifier, "proved channel identifier must be empty or equal to channel identifier")
if msg.CounterpartyChosenChannelId != "" && msg.CounterpartyChosenChannelId != msg.DesiredChannelId {
return sdkerrors.Wrap(ErrInvalidChannelIdentifier, "counterparty chosen channel ID must be empty or equal to desired channel ID")
}
if len(msg.ProofInit) == 0 {
return sdkerrors.Wrap(commitmenttypes.ErrInvalidProof, "cannot submit an empty proof init")

View File

@ -85,7 +85,7 @@ func NewHandler(k keeper.Keeper) sdk.Handler {
return nil, sdkerrors.Wrapf(porttypes.ErrInvalidRoute, "route not found to module: %s", module)
}
if err = cbs.OnChanOpenTry(ctx, msg.Channel.Ordering, msg.Channel.ConnectionHops, msg.PortId, msg.ChannelId, cap, msg.Channel.Counterparty, msg.Channel.Version, msg.CounterpartyVersion); err != nil {
if err = cbs.OnChanOpenTry(ctx, msg.Channel.Ordering, msg.Channel.ConnectionHops, msg.PortId, msg.DesiredChannelId, cap, msg.Channel.Counterparty, msg.Channel.Version, msg.CounterpartyVersion); err != nil {
return nil, sdkerrors.Wrap(err, "channel open try callback failed")
}

View File

@ -114,26 +114,26 @@ using the `MsgConnectionOpenTry`.
```go
type MsgConnectionOpenTry struct {
ClientId string
ConnectionId string
ProvedId string
ClientState *types.Any // proto-packed counterparty client
Counterparty Counterparty
CounterpartyVersions []string
ProofHeight Height
ProofInit []byte
ProofClient []byte
ProofConsensus []byte
ConsensusHeight Height
Signer sdk.AccAddress
ClientId string
DesiredConnectionId string
CounterpartyChosenConnectionId string
ClientState *types.Any // proto-packed counterparty client
Counterparty Counterparty
CounterpartyVersions []string
ProofHeight Height
ProofInit []byte
ProofClient []byte
ProofConsensus []byte
ConsensusHeight Height
Signer sdk.AccAddress
}
```
This message is expected to fail if:
- `ClientId` is invalid (see naming requirements)
- `ConnectionId` is invalid (see naming requirements)
- `ProvedId` is not empty and doesn't match `ConnectionId`
- `DesiredConnectionId` is invalid (see naming requirements)
- `CounterpartyChosenConnectionId` is not empty and doesn't match `DesiredConnectionId`
- `ClientState` is not a valid client of the executing chain
- `Counterparty` is empty
- `CounterpartyVersions` is empty
@ -149,7 +149,7 @@ This message is expected to fail if:
- `ProofClient` does not prove that the counterparty has stored the `ClientState` provided in message
- `ProofConsensus` does not prove that the counterparty has the correct consensus state for this chain
The message creates a connection for the given ID with an TRYOPEN State. The `ProvedID`
The message creates a connection for the given ID with an TRYOPEN State. The `CounterpartyChosenConnectionID`
represents the connection ID the counterparty set under `connection.Counterparty.ConnectionId`
to represent the connection ID this chain should use. An empty string indicates the connection
identifier is flexible and gives this chain an opportunity to choose its own identifier.
@ -252,22 +252,22 @@ the `MsgChannelOpenTry` message.
```go
type MsgChannelOpenTry struct {
PortId string
ChannelId string
ProvedChannelId string
Channel Channel
CounterpartyVersion string
ProofInit []byte
ProofHeight Height
Signer sdk.AccAddress
PortId string
DesiredChannelId string
CounterpartyChosenChannelId string
Channel Channel
CounterpartyVersion string
ProofInit []byte
ProofHeight Height
Signer sdk.AccAddress
}
```
This message is expected to fail if:
- `PortId` is invalid (see naming requirements)
- `ChannelId` is invalid (see naming requirements)
- `ProvedId` is not empty and not equal to `ChannelId`
- `DesiredChannelId` is invalid (see naming requirements)
- `CounterpartyChosenChannelId` is not empty and not equal to `ChannelId`
- `Channel` is empty
- `CounterpartyVersion` is empty
- `ProofInit` is empty
@ -277,7 +277,7 @@ This message is expected to fail if:
- `ProofInit` does not prove that the counterparty's Channel state is in INIT
The message creates a channel on chain B with an TRYOPEN state for the given Channel ID
and Port ID. The `ProvedChannelId` represents the channel ID the counterparty set under
and Port ID. The `CounterpartyChosenChannelId` represents the channel ID the counterparty set under
`connection.Counterparty.ChannelId` to represent the channel ID this chain should use.
An empty string indicates the channel identifier is flexible and gives this chain an
opportunity to choose its own identifier.