From d9623b315bd1ebc1acb3d1281c0aa9118e18ed73 Mon Sep 17 00:00:00 2001 From: Luca Joss Date: Mon, 24 Jun 2024 15:21:57 +0200 Subject: [PATCH 1/3] Add '--fees' to local_transfer_token --- tools/integration-test/src/mbt/handlers.rs | 2 ++ tools/integration-test/src/mbt/transfer.rs | 11 +++++++++-- .../src/tests/async_icq/simple_query.rs | 2 +- tools/integration-test/src/tests/authz.rs | 4 ++-- .../src/tests/channel_upgrade/ica.rs | 10 ++++++++-- tools/integration-test/src/tests/clear_packet.rs | 9 ++++++--- tools/integration-test/src/tests/client_upgrade.rs | 8 ++++---- tools/integration-test/src/tests/fee_grant.rs | 4 ++-- tools/integration-test/src/tests/ica.rs | 11 +++++++++-- .../interchain_security/ica_ordered_channel.rs | 5 ++++- .../src/tests/interchain_security/ica_transfer.rs | 5 ++++- tools/integration-test/src/tests/supervisor.rs | 10 ++++++++-- tools/test-framework/src/chain/cli/transfer.rs | 3 +++ tools/test-framework/src/chain/ext/transfer.rs | 3 +++ tools/test-framework/src/types/config.rs | 6 ++++++ tools/test-framework/src/types/single/node.rs | 13 ++++--------- 16 files changed, 75 insertions(+), 31 deletions(-) diff --git a/tools/integration-test/src/mbt/handlers.rs b/tools/integration-test/src/mbt/handlers.rs index 32c445984e..53421f20c8 100644 --- a/tools/integration-test/src/mbt/handlers.rs +++ b/tools/integration-test/src/mbt/handlers.rs @@ -39,6 +39,7 @@ pub fn local_transfer_handler( target: u128, denom: u128, amount: u128, + fees: &TaggedTokenRef, ) -> Result<(), Error> { let wallets = node.wallets(); @@ -50,6 +51,7 @@ pub fn local_transfer_handler( &source_wallet, &target_wallet.address(), &denom.with_amount(amount).as_ref(), + fees, )?; Ok(()) diff --git a/tools/integration-test/src/mbt/transfer.rs b/tools/integration-test/src/mbt/transfer.rs index 846edc822f..9b8cfcf6a8 100644 --- a/tools/integration-test/src/mbt/transfer.rs +++ b/tools/integration-test/src/mbt/transfer.rs @@ -174,11 +174,13 @@ impl TestOverrides for IbcTransferMBT { impl BinaryChannelTest for IbcTransferMBT { fn run( &self, - _config: &TestConfig, + config: &TestConfig, relayer: RelayerDriver, chains: ConnectedChains, channels: ConnectedChannel, ) -> Result<(), Error> { + let fee_denom_a: MonoTagged = + MonoTagged::new(Denom::base(config.native_token(0))); // relayer is spawned let mut supervisor = Some(relayer.spawn_supervisor()?); @@ -197,7 +199,12 @@ impl BinaryChannelTest for IbcTransferMBT { info!("[LocalTransfer] Init"); let node: Tagged = get_chain(&chains, *chain_id); super::handlers::local_transfer_handler( - node, *source, *target, *denom, *amount, + node, + *source, + *target, + *denom, + *amount, + &fee_denom_a.with_amount(1200u64).as_ref(), )?; info!("[LocalTransfer] Done"); } diff --git a/tools/integration-test/src/tests/async_icq/simple_query.rs b/tools/integration-test/src/tests/async_icq/simple_query.rs index f8343d1811..2efa49081f 100644 --- a/tools/integration-test/src/tests/async_icq/simple_query.rs +++ b/tools/integration-test/src/tests/async_icq/simple_query.rs @@ -53,7 +53,7 @@ impl BinaryConnectionTest for AsyncIcqTest { connection: ConnectedConnection, ) -> Result<(), Error> { let fee_denom_a: MonoTagged = - MonoTagged::new(Denom::base(&config.native_tokens[0])); + MonoTagged::new(Denom::base(config.native_token(0))); let port_a = DualTagged::new(PortId::oracle()); let port_b = DualTagged::new(PortId::icqhost()); let (channel_id_b, channel_id_a) = init_channel_version( diff --git a/tools/integration-test/src/tests/authz.rs b/tools/integration-test/src/tests/authz.rs index 7b8e9e58fa..28f5c11a18 100644 --- a/tools/integration-test/src/tests/authz.rs +++ b/tools/integration-test/src/tests/authz.rs @@ -35,7 +35,7 @@ impl BinaryChannelTest for AuthzTest { ) -> Result<(), Error> { let denom_a = chains.node_a.denom(); let fee_denom_a: MonoTagged = - MonoTagged::new(Denom::base(&config.native_tokens[0])); + MonoTagged::new(Denom::base(config.native_token(0))); let wallet_b = chains.node_b.wallets().user1().cloned(); let a_to_b_amount = 12345u64; @@ -120,7 +120,7 @@ impl BinaryChannelTest for NoAuthzTest { ) -> Result<(), Error> { let denom_a = chains.node_a.denom(); let fee_denom_a: MonoTagged = - MonoTagged::new(Denom::base(&config.native_tokens[0])); + MonoTagged::new(Denom::base(config.native_token(0))); let wallet_b = chains.node_b.wallets().user1().cloned(); let a_to_b_amount = 12345u64; diff --git a/tools/integration-test/src/tests/channel_upgrade/ica.rs b/tools/integration-test/src/tests/channel_upgrade/ica.rs index 4b26c9d37b..1721bad2e0 100644 --- a/tools/integration-test/src/tests/channel_upgrade/ica.rs +++ b/tools/integration-test/src/tests/channel_upgrade/ica.rs @@ -85,11 +85,13 @@ impl TestOverrides for ChannelUpgradeICACloseChannel { impl BinaryConnectionTest for ChannelUpgradeICACloseChannel { fn run( &self, - _config: &TestConfig, + config: &TestConfig, relayer: RelayerDriver, chains: ConnectedChains, connection: ConnectedConnection, ) -> Result<(), Error> { + let fee_denom_host: MonoTagged = + MonoTagged::new(Denom::base(config.native_token(1))); let stake_denom: MonoTagged = MonoTagged::new(Denom::base("stake")); // Run the block with supervisor in order to open and then upgrade the ICA channel @@ -219,6 +221,7 @@ impl BinaryConnectionTest for ChannelUpgradeICACloseChannel { &chains.node_b.wallets().user1(), &ica_address.as_ref(), &stake_denom.with_amount(ica_fund).as_ref(), + &fee_denom_host.with_amount(1200u64).as_ref(), )?; chains.node_b.chain_driver().assert_eventual_wallet_amount( @@ -335,11 +338,13 @@ impl TestOverrides for ChannelUpgradeICAUnordered { impl BinaryConnectionTest for ChannelUpgradeICAUnordered { fn run( &self, - _config: &TestConfig, + config: &TestConfig, _relayer: RelayerDriver, chains: ConnectedChains, connection: ConnectedConnection, ) -> Result<(), Error> { + let fee_denom_host: MonoTagged = + MonoTagged::new(Denom::base(config.native_token(1))); let stake_denom: MonoTagged = MonoTagged::new(Denom::base("stake")); info!("Will register interchain account..."); @@ -377,6 +382,7 @@ impl BinaryConnectionTest for ChannelUpgradeICAUnordered { &chains.node_b.wallets().user1(), &ica_address.as_ref(), &stake_denom.with_amount(ica_fund).as_ref(), + &fee_denom_host.with_amount(1200u64).as_ref(), )?; chains.node_b.chain_driver().assert_eventual_wallet_amount( diff --git a/tools/integration-test/src/tests/clear_packet.rs b/tools/integration-test/src/tests/clear_packet.rs index ce9a94ada9..1bb19077ef 100644 --- a/tools/integration-test/src/tests/clear_packet.rs +++ b/tools/integration-test/src/tests/clear_packet.rs @@ -150,11 +150,13 @@ impl BinaryChannelTest for ClearPacketTest { impl BinaryChannelTest for ClearPacketRecoveryTest { fn run( &self, - _config: &TestConfig, + config: &TestConfig, relayer: RelayerDriver, chains: ConnectedChains, channel: ConnectedChannel, ) -> Result<(), Error> { + let fee_denom_b: MonoTagged = + MonoTagged::new(Denom::base(config.native_token(1))); let denom_a = chains.node_a.denom(); let denom_b1 = chains.node_b.denom(); @@ -168,6 +170,7 @@ impl BinaryChannelTest for ClearPacketRecoveryTest { &relayer_wallet_b.as_ref(), &wallet_b.address(), &denom_b1.with_amount(100u64).as_ref(), + &fee_denom_b.with_amount(1200u64).as_ref(), )?; let amount1 = random_u128_range(1000, 5000); @@ -224,7 +227,7 @@ impl BinaryChannelTest for ClearPacketNoScanTest { channel: ConnectedChannel, ) -> Result<(), Error> { let denom_a = chains.node_a.denom(); - let fee_denom_a = MonoTagged::new(Denom::base(&config.native_tokens[0])); + let fee_denom_a = MonoTagged::new(Denom::base(config.native_token(0))); let wallet_a = chains.node_a.wallets().user1().cloned(); let wallet_b = chains.node_b.wallets().user1().cloned(); @@ -344,7 +347,7 @@ impl BinaryChannelTest for ClearPacketOverrideTest { channel: ConnectedChannel, ) -> Result<(), Error> { let denom_a = chains.node_a.denom(); - let fee_denom_a = MonoTagged::new(Denom::base(&config.native_tokens[0])); + let fee_denom_a = MonoTagged::new(Denom::base(config.native_token(0))); let wallet_a = chains.node_a.wallets().user1().cloned(); let wallet_b = chains.node_b.wallets().user1().cloned(); diff --git a/tools/integration-test/src/tests/client_upgrade.rs b/tools/integration-test/src/tests/client_upgrade.rs index e6f94a0336..9480a4a105 100644 --- a/tools/integration-test/src/tests/client_upgrade.rs +++ b/tools/integration-test/src/tests/client_upgrade.rs @@ -83,7 +83,7 @@ impl BinaryChainTest for ClientUpgradeTest { ) -> Result<(), ibc_test_framework::prelude::Error> { let upgraded_chain_id = ChainId::new("upgradedibc".to_owned(), 1); let fee_denom_a: MonoTagged = - MonoTagged::new(Denom::base(&config.native_tokens[0])); + MonoTagged::new(Denom::base(config.native_token(0))); let foreign_clients = chains.clone().foreign_clients; // Create and send an chain upgrade proposal @@ -242,7 +242,7 @@ impl BinaryChainTest for HeightTooHighClientUpgradeTest { ) -> Result<(), ibc_test_framework::prelude::Error> { let upgraded_chain_id = ChainId::new("upgradedibc".to_owned(), 1); let fee_denom_a: MonoTagged = - MonoTagged::new(Denom::base(&config.native_tokens[0])); + MonoTagged::new(Denom::base(config.native_token(0))); let foreign_clients = chains.clone().foreign_clients; // Create and send an chain upgrade proposal @@ -340,7 +340,7 @@ impl BinaryChainTest for HeightTooLowClientUpgradeTest { ) -> Result<(), ibc_test_framework::prelude::Error> { let upgraded_chain_id = ChainId::new("upgradedibc".to_owned(), 1); let fee_denom_a: MonoTagged = - MonoTagged::new(Denom::base(&config.native_tokens[0])); + MonoTagged::new(Denom::base(config.native_token(0))); let foreign_clients = chains.clone().foreign_clients; let opts = create_upgrade_plan(config, &chains, &upgraded_chain_id)?; @@ -433,7 +433,7 @@ fn create_upgrade_plan( upgraded_chain_id: &ChainId, ) -> Result { let fee_denom_a: MonoTagged = - MonoTagged::new(Denom::base(&config.native_tokens[0])); + MonoTagged::new(Denom::base(config.native_token(0))); let foreign_clients = chains.clone().foreign_clients; let src_client_id = foreign_clients.client_id_b().0.clone(); diff --git a/tools/integration-test/src/tests/fee_grant.rs b/tools/integration-test/src/tests/fee_grant.rs index f12e30a981..a936c02e20 100644 --- a/tools/integration-test/src/tests/fee_grant.rs +++ b/tools/integration-test/src/tests/fee_grant.rs @@ -42,7 +42,7 @@ impl BinaryChannelTest for FeeGrantTest { let denom_a = chains.node_a.denom(); let wallet_a = chains.node_a.wallets().user1().cloned(); let wallet_b = chains.node_b.wallets().user1().cloned(); - let fee_denom_a = MonoTagged::new(Denom::base(&config.native_tokens[0])); + let fee_denom_a = MonoTagged::new(Denom::base(config.native_token(0))); let a_to_b_amount = 12345u64; let granter = chains @@ -185,7 +185,7 @@ impl BinaryChannelTest for NoFeeGrantTest { let wallet_a = chains.node_a.wallets().user1().cloned(); let wallet_a2 = chains.node_a.wallets().user2().cloned(); let wallet_b = chains.node_b.wallets().user1().cloned(); - let fee_denom_a = MonoTagged::new(Denom::base(&config.native_tokens[0])); + let fee_denom_a = MonoTagged::new(Denom::base(config.native_token(0))); let a_to_b_amount = 12345u64; let granter = chains diff --git a/tools/integration-test/src/tests/ica.rs b/tools/integration-test/src/tests/ica.rs index a6b8427a89..8087a671a1 100644 --- a/tools/integration-test/src/tests/ica.rs +++ b/tools/integration-test/src/tests/ica.rs @@ -67,6 +67,7 @@ impl TestOverrides for IcaFilterTestAllow { // Enable channel workers and allow relaying on ICA channels fn modify_relayer_config(&self, config: &mut Config) { config.mode.channels.enabled = true; + config.mode.clients.misbehaviour = false; for chain in &mut config.chains { match chain { @@ -88,11 +89,13 @@ impl TestOverrides for IcaFilterTestAllow { impl BinaryConnectionTest for IcaFilterTestAllow { fn run( &self, - _config: &TestConfig, + config: &TestConfig, _relayer: RelayerDriver, chains: ConnectedChains, connection: ConnectedConnection, ) -> Result<(), Error> { + let fee_denom_host: MonoTagged = + MonoTagged::new(Denom::base(config.native_token(1))); // Register an interchain account on behalf of // controller wallet `user1` where the counterparty chain is the interchain accounts host. let (wallet, channel_id, port_id) = @@ -126,6 +129,7 @@ impl BinaryConnectionTest for IcaFilterTestAllow { &chains.node_b.wallets().user1(), &ica_address.as_ref(), &stake_denom.with_amount(ica_fund).as_ref(), + &fee_denom_host.with_amount(1200u64).as_ref(), )?; chains.node_b.chain_driver().assert_eventual_wallet_amount( @@ -242,11 +246,13 @@ impl TestOverrides for ICACloseChannelTest { impl BinaryConnectionTest for ICACloseChannelTest { fn run( &self, - _config: &TestConfig, + config: &TestConfig, relayer: RelayerDriver, chains: ConnectedChains, connection: ConnectedConnection, ) -> Result<(), Error> { + let fee_denom_host: MonoTagged = + MonoTagged::new(Denom::base(config.native_token(1))); let stake_denom: MonoTagged = MonoTagged::new(Denom::base("stake")); let (wallet, ica_address, controller_channel_id, controller_port_id) = relayer .with_supervisor(|| { @@ -293,6 +299,7 @@ impl BinaryConnectionTest for ICACloseChannelTest { &chains.node_b.wallets().user1(), &ica_address.as_ref(), &stake_denom.with_amount(ica_fund).as_ref(), + &fee_denom_host.with_amount(1200u64).as_ref(), )?; chains.node_b.chain_driver().assert_eventual_wallet_amount( diff --git a/tools/integration-test/src/tests/interchain_security/ica_ordered_channel.rs b/tools/integration-test/src/tests/interchain_security/ica_ordered_channel.rs index ade71f8132..04fad4bcee 100644 --- a/tools/integration-test/src/tests/interchain_security/ica_ordered_channel.rs +++ b/tools/integration-test/src/tests/interchain_security/ica_ordered_channel.rs @@ -66,11 +66,13 @@ impl TestOverrides for IcaOrderedChannelTest { impl BinaryChannelTest for IcaOrderedChannelTest { fn run( &self, - _config: &TestConfig, + config: &TestConfig, relayer: RelayerDriver, chains: ConnectedChains, channel: ConnectedChannel, ) -> Result<(), Error> { + let fee_denom_a: MonoTagged = + MonoTagged::new(Denom::base(config.native_token(0))); let connection_b_to_a = channel.connection.clone().flip(); let (wallet, channel_id, port_id) = register_interchain_account(&chains.node_b, chains.handle_b(), &connection_b_to_a)?; @@ -113,6 +115,7 @@ impl BinaryChannelTest for IcaOrderedChannelTest { &chains.node_a.wallets().user1(), &ica_address.as_ref(), &stake_denom.with_amount(ica_fund).as_ref(), + &fee_denom_a.with_amount(1200u64).as_ref(), )?; chains.node_a.chain_driver().assert_eventual_wallet_amount( diff --git a/tools/integration-test/src/tests/interchain_security/ica_transfer.rs b/tools/integration-test/src/tests/interchain_security/ica_transfer.rs index 28d05cad91..b09fe79c7f 100644 --- a/tools/integration-test/src/tests/interchain_security/ica_transfer.rs +++ b/tools/integration-test/src/tests/interchain_security/ica_transfer.rs @@ -49,11 +49,13 @@ impl TestOverrides for InterchainSecurityIcaTransferTest { impl BinaryChannelTest for InterchainSecurityIcaTransferTest { fn run( &self, - _config: &TestConfig, + config: &TestConfig, _relayer: RelayerDriver, chains: ConnectedChains, channel: ConnectedChannel, ) -> Result<(), Error> { + let fee_denom_a: MonoTagged = + MonoTagged::new(Denom::base(config.native_token(0))); let connection_b_to_a = channel.connection.clone().flip(); let (wallet, channel_id, port_id) = register_interchain_account(&chains.node_b, chains.handle_b(), &connection_b_to_a)?; @@ -86,6 +88,7 @@ impl BinaryChannelTest for InterchainSecurityIcaTransferTest { &chains.node_a.wallets().user1(), &ica_address.as_ref(), &stake_denom.with_amount(ica_fund).as_ref(), + &fee_denom_a.with_amount(1200u64).as_ref(), )?; chains.node_a.chain_driver().assert_eventual_wallet_amount( diff --git a/tools/integration-test/src/tests/supervisor.rs b/tools/integration-test/src/tests/supervisor.rs index fd24c71551..7ddd3597fb 100644 --- a/tools/integration-test/src/tests/supervisor.rs +++ b/tools/integration-test/src/tests/supervisor.rs @@ -51,10 +51,14 @@ impl TestOverrides for SupervisorTest { impl BinaryChainTest for SupervisorTest { fn run( &self, - _config: &TestConfig, + config: &TestConfig, _relayer: RelayerDriver, chains: ConnectedChains, ) -> Result<(), Error> { + let fee_denom_a: MonoTagged = + MonoTagged::new(Denom::base(config.native_token(0))); + let fee_denom_b: MonoTagged = + MonoTagged::new(Denom::base(config.native_token(1))); let (connection_id_b, _) = init_connection( &chains.handle_a, &chains.handle_b, @@ -112,12 +116,14 @@ impl BinaryChainTest for SupervisorTest { &chains.node_a.wallets().relayer(), &chains.node_a.wallets().user2().address(), &denom_a.with_amount(1000u64).as_ref(), + &fee_denom_a.with_amount(1200u64).as_ref(), )?; chains.node_b.chain_driver().local_transfer_token( &chains.node_b.wallets().relayer(), &chains.node_b.wallets().user2().address(), &chains.node_b.denom().with_amount(1000u64).as_ref(), + &fee_denom_b.with_amount(1200u64).as_ref(), )?; info!( @@ -193,7 +199,7 @@ impl BinaryChannelTest for SupervisorScanTest { channels: ConnectedChannel, ) -> Result<(), Error> { let denom_a = chains.node_a.denom(); - let fee_denom_a = MonoTagged::new(Denom::base(&config.native_tokens[0])); + let fee_denom_a = MonoTagged::new(Denom::base(config.native_token(0))); let denom_b = derive_ibc_denom( &channels.port_b.as_ref(), diff --git a/tools/test-framework/src/chain/cli/transfer.rs b/tools/test-framework/src/chain/cli/transfer.rs index cd554304f7..39ed3f758b 100644 --- a/tools/test-framework/src/chain/cli/transfer.rs +++ b/tools/test-framework/src/chain/cli/transfer.rs @@ -13,6 +13,7 @@ pub fn local_transfer_token( sender: &str, recipient: &str, token: &str, + fees: &str, ) -> Result<(), Error> { simple_exec( chain_id, @@ -32,6 +33,8 @@ pub fn local_transfer_token( home_path, "--keyring-backend", "test", + "--fees", + fees, "--yes", ], )?; diff --git a/tools/test-framework/src/chain/ext/transfer.rs b/tools/test-framework/src/chain/ext/transfer.rs index 94707ff8da..e1c50cd546 100644 --- a/tools/test-framework/src/chain/ext/transfer.rs +++ b/tools/test-framework/src/chain/ext/transfer.rs @@ -71,6 +71,7 @@ pub trait ChainTransferMethodsExt { sender: &MonoTagged, recipient: &MonoTagged, token: &TaggedTokenRef, + fees: &TaggedTokenRef, ) -> Result<(), Error>; fn transfer_from_chain( @@ -161,6 +162,7 @@ impl<'a, Chain: Send> ChainTransferMethodsExt for MonoTagged, recipient: &MonoTagged, token: &TaggedTokenRef, + fees: &TaggedTokenRef, ) -> Result<(), Error> { let driver = *self.value(); local_transfer_token( @@ -171,6 +173,7 @@ impl<'a, Chain: Send> ChainTransferMethodsExt for MonoTagged &String { + &self.native_tokens[id % self.native_tokens.len()] + } +} diff --git a/tools/test-framework/src/types/single/node.rs b/tools/test-framework/src/types/single/node.rs index fd19ebbd3f..7ec43141b9 100644 --- a/tools/test-framework/src/types/single/node.rs +++ b/tools/test-framework/src/types/single/node.rs @@ -132,7 +132,6 @@ impl FullNode { test_config: &TestConfig, chain_number: usize, ) -> Result { - let native_token_number = chain_number % test_config.native_tokens.len(); let hermes_keystore_dir = test_config .chain_store_dir .join("hermes_keyring") @@ -147,14 +146,10 @@ impl FullNode { // Provenance requires a very high gas price let gas_price = match chain_type { - TestedChainType::Provenance => config::GasPrice::new( - 5000.0, - test_config.native_tokens[native_token_number].clone(), - ), - _ => config::GasPrice::new( - 0.003, - test_config.native_tokens[native_token_number].clone(), - ), + TestedChainType::Provenance => { + config::GasPrice::new(5000.0, test_config.native_token(chain_number).clone()) + } + _ => config::GasPrice::new(0.003, test_config.native_token(chain_number).clone()), }; Ok(config::ChainConfig::CosmosSdk(CosmosSdkConfig { From b07a79debbf41a6009bfb2ab0be8debbd10e1be9 Mon Sep 17 00:00:00 2001 From: Luca Joss Date: Mon, 24 Jun 2024 15:22:22 +0200 Subject: [PATCH 2/3] Add packet-forward and ica features to tests running Osmosis --- .github/workflows/integration.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/integration.yaml b/.github/workflows/integration.yaml index bec5a86434..05624fd340 100644 --- a/.github/workflows/integration.yaml +++ b/.github/workflows/integration.yaml @@ -74,7 +74,7 @@ jobs: command: osmosisd account_prefix: osmo native_token: stake - features: dynamic-gas-fee + features: dynamic-gas-fee,forward-packet,ica - package: juno command: junod account_prefix: juno From 73e963b5ccfce45c9d55035e521e4e6b3a82e84e Mon Sep 17 00:00:00 2001 From: Luca Joss Date: Mon, 24 Jun 2024 16:23:38 +0200 Subject: [PATCH 3/3] Add changelog entry --- .../3195-add-pfm-ica-features-to-osmosis.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .changelog/unreleased/improvements/ibc-integration-test/3195-add-pfm-ica-features-to-osmosis.md diff --git a/.changelog/unreleased/improvements/ibc-integration-test/3195-add-pfm-ica-features-to-osmosis.md b/.changelog/unreleased/improvements/ibc-integration-test/3195-add-pfm-ica-features-to-osmosis.md new file mode 100644 index 0000000000..073bd29431 --- /dev/null +++ b/.changelog/unreleased/improvements/ibc-integration-test/3195-add-pfm-ica-features-to-osmosis.md @@ -0,0 +1,3 @@ +- Add the features `packet-forward` and `ica` to enable + Packet Forward Middleware and ICA when running tests with Osmosis + ([\#3195](https://github.com/informalsystems/hermes/issues/3195)) \ No newline at end of file