From c1af3314edabe5fa28f2b15d1f66ed5615910a54 Mon Sep 17 00:00:00 2001 From: Carlos Rodriguez Date: Mon, 22 Jan 2024 12:45:03 +0100 Subject: [PATCH] sync ibc-go with tag 04-channel-upgrades-hermes.integration.1 --- src/IBC_GO_COMMIT | 2 +- src/prost/ibc.applications.fee.v1.rs | 4 ++-- ...tions.interchain_accounts.controller.v1.rs | 5 +++++ src/prost/ibc.applications.transfer.v1.rs | 4 ++++ src/prost/ibc.core.channel.v1.rs | 15 +++++++++++---- src/prost/ibc.core.client.v1.rs | 2 +- src/prost/ibc.core.connection.v1.rs | 6 +++--- src/prost/ibc.lightclients.tendermint.v1.rs | 2 +- src/prost/proto_descriptor.bin | Bin 737265 -> 745710 bytes 9 files changed, 28 insertions(+), 12 deletions(-) diff --git a/src/IBC_GO_COMMIT b/src/IBC_GO_COMMIT index 8c33106a..802233a8 100644 --- a/src/IBC_GO_COMMIT +++ b/src/IBC_GO_COMMIT @@ -1 +1 @@ -7a89e5d5b5ebb7643ce3992c34008c35373ecf34 +4e3d164e4f9a5986bbe6595138feb49160e27215 \ No newline at end of file diff --git a/src/prost/ibc.applications.fee.v1.rs b/src/prost/ibc.applications.fee.v1.rs index 0a0885f6..ac68851b 100644 --- a/src/prost/ibc.applications.fee.v1.rs +++ b/src/prost/ibc.applications.fee.v1.rs @@ -107,7 +107,7 @@ pub struct MsgPayPacketFee { /// the source port unique identifier #[prost(string, tag = "2")] pub source_port_id: ::prost::alloc::string::String, - /// the source channel unique identifer + /// the source channel unique identifier #[prost(string, tag = "3")] pub source_channel_id: ::prost::alloc::string::String, /// account address to refund fee if necessary @@ -791,7 +791,7 @@ pub struct ForwardRelayerAddress { /// the forward relayer address #[prost(string, tag = "1")] pub address: ::prost::alloc::string::String, - /// unique packet identifer comprised of the channel ID, port ID and sequence + /// unique packet identifier comprised of the channel ID, port ID and sequence #[prost(message, optional, tag = "2")] pub packet_id: ::core::option::Option< super::super::super::core::channel::v1::PacketId, diff --git a/src/prost/ibc.applications.interchain_accounts.controller.v1.rs b/src/prost/ibc.applications.interchain_accounts.controller.v1.rs index a351adda..f9f95bbc 100644 --- a/src/prost/ibc.applications.interchain_accounts.controller.v1.rs +++ b/src/prost/ibc.applications.interchain_accounts.controller.v1.rs @@ -19,6 +19,11 @@ pub struct MsgRegisterInterchainAccount { pub connection_id: ::prost::alloc::string::String, #[prost(string, tag = "3")] pub version: ::prost::alloc::string::String, + #[prost( + enumeration = "super::super::super::super::core::channel::v1::Order", + tag = "4" + )] + pub order: i32, } /// MsgRegisterInterchainAccountResponse defines the response for Msg/RegisterAccount #[cfg_attr(feature = "serde", derive(::serde::Serialize, ::serde::Deserialize))] diff --git a/src/prost/ibc.applications.transfer.v1.rs b/src/prost/ibc.applications.transfer.v1.rs index ba523ebd..1d5e32ad 100644 --- a/src/prost/ibc.applications.transfer.v1.rs +++ b/src/prost/ibc.applications.transfer.v1.rs @@ -1328,6 +1328,10 @@ pub struct Allocation { /// allow list of receivers, an empty allow list permits any receiver address #[prost(string, repeated, tag = "4")] pub allow_list: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, + /// allow list of packet data keys, an empty list prohibits all packet data keys; + /// a list only with "*" permits any packet data key + #[prost(string, repeated, tag = "5")] + pub allowed_packet_data: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, } /// TransferAuthorization allows the grantee to spend up to spend_limit coins from /// the granter's account for ibc transfer on a specific channel diff --git a/src/prost/ibc.core.channel.v1.rs b/src/prost/ibc.core.channel.v1.rs index b6053be0..bbdca680 100644 --- a/src/prost/ibc.core.channel.v1.rs +++ b/src/prost/ibc.core.channel.v1.rs @@ -132,7 +132,7 @@ pub struct PacketState { #[prost(bytes = "vec", tag = "4")] pub data: ::prost::alloc::vec::Vec, } -/// PacketId is an identifer for a unique Packet +/// PacketId is an identifier for a unique Packet /// Source chains refer to packets by source port/channel /// Destination chains refer to packets by destination port/channel #[cfg_attr(feature = "serde", derive(::serde::Serialize, ::serde::Deserialize))] @@ -429,6 +429,9 @@ pub struct MsgChannelOpenTryResponse { } /// MsgChannelOpenAck defines a msg sent by a Relayer to Chain A to acknowledge /// the change of channel state to TRYOPEN on Chain B. +/// WARNING: a channel upgrade MUST NOT initialize an upgrade for this channel +/// in the same block as executing this message otherwise the counterparty will +/// be incapable of opening. #[cfg_attr(feature = "serde", derive(::serde::Serialize, ::serde::Deserialize))] #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] @@ -618,6 +621,8 @@ pub struct MsgAcknowledgementResponse { pub result: i32, } /// MsgChannelUpgradeInit defines the request type for the ChannelUpgradeInit rpc +/// WARNING: Initializing a channel upgrade in the same block as opening the channel +/// may result in the counterparty being incapable of opening. #[cfg_attr(feature = "serde", derive(::serde::Serialize, ::serde::Deserialize))] #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] @@ -748,11 +753,13 @@ pub struct MsgChannelUpgradeOpen { pub channel_id: ::prost::alloc::string::String, #[prost(enumeration = "State", tag = "3")] pub counterparty_channel_state: i32, - #[prost(bytes = "vec", tag = "4")] + #[prost(uint64, tag = "4")] + pub counterparty_upgrade_sequence: u64, + #[prost(bytes = "vec", tag = "5")] pub proof_channel: ::prost::alloc::vec::Vec, - #[prost(message, optional, tag = "5")] + #[prost(message, optional, tag = "6")] pub proof_height: ::core::option::Option, - #[prost(string, tag = "6")] + #[prost(string, tag = "7")] pub signer: ::prost::alloc::string::String, } /// MsgChannelUpgradeOpenResponse defines the MsgChannelUpgradeOpen response type diff --git a/src/prost/ibc.core.client.v1.rs b/src/prost/ibc.core.client.v1.rs index 05dd3b4b..201c5e30 100644 --- a/src/prost/ibc.core.client.v1.rs +++ b/src/prost/ibc.core.client.v1.rs @@ -1199,7 +1199,7 @@ pub struct QueryConsensusStateRequest { /// consensus state revision height #[prost(uint64, tag = "3")] pub revision_height: u64, - /// latest_height overrrides the height field and queries the latest stored + /// latest_height overrides the height field and queries the latest stored /// ConsensusState #[prost(bool, tag = "4")] pub latest_height: bool, diff --git a/src/prost/ibc.core.connection.v1.rs b/src/prost/ibc.core.connection.v1.rs index 12cc3618..2c4ac346 100644 --- a/src/prost/ibc.core.connection.v1.rs +++ b/src/prost/ibc.core.connection.v1.rs @@ -97,7 +97,7 @@ pub struct ConnectionPaths { #[prost(string, repeated, tag = "2")] pub paths: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, } -/// Version defines the versioning scheme used to negotiate the IBC verison in +/// Version defines the versioning scheme used to negotiate the IBC version in /// the connection handshake. #[cfg_attr(feature = "serde", derive(::serde::Serialize, ::serde::Deserialize))] #[cfg_attr( @@ -227,7 +227,7 @@ pub struct MsgConnectionOpenTry { pub counterparty_versions: ::prost::alloc::vec::Vec, #[prost(message, optional, tag = "7")] pub proof_height: ::core::option::Option, - /// proof of the initialization the connection on Chain A: `UNITIALIZED -> + /// proof of the initialization the connection on Chain A: `UNINITIALIZED -> /// INIT` #[prost(bytes = "vec", tag = "8")] pub proof_init: ::prost::alloc::vec::Vec, @@ -268,7 +268,7 @@ pub struct MsgConnectionOpenAck { >, #[prost(message, optional, tag = "5")] pub proof_height: ::core::option::Option, - /// proof of the initialization the connection on Chain B: `UNITIALIZED -> + /// proof of the initialization the connection on Chain B: `UNINITIALIZED -> /// TRYOPEN` #[prost(bytes = "vec", tag = "6")] pub proof_try: ::prost::alloc::vec::Vec, diff --git a/src/prost/ibc.lightclients.tendermint.v1.rs b/src/prost/ibc.lightclients.tendermint.v1.rs index 8849c261..6413016b 100644 --- a/src/prost/ibc.lightclients.tendermint.v1.rs +++ b/src/prost/ibc.lightclients.tendermint.v1.rs @@ -8,7 +8,7 @@ pub struct ClientState { pub chain_id: ::prost::alloc::string::String, #[prost(message, optional, tag = "2")] pub trust_level: ::core::option::Option, - /// duration of the period since the LastestTimestamp during which the + /// duration of the period since the LatestTimestamp during which the /// submitted headers are valid for upgrade #[prost(message, optional, tag = "3")] pub trusting_period: ::core::option::Option< diff --git a/src/prost/proto_descriptor.bin b/src/prost/proto_descriptor.bin index 67a1abe35e79458536cd8533e680298e87afd0ed..29e7d2b2e10921d2531fe222099fc2bb5a0a5c07 100644 GIT binary patch delta 18446 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