Skip to content

Commit 0352fec

Browse files
authored
feat: Enable batching multiple TXs with a single client update (#635)
* Enable batching multiple TXs with a single client update * Use HashMap for CLI transfer arguments * Move BatchConfig to be per-chain configuration * Improve BatchConfig handling * Increase COSMOS_TRUSTING_PERIOD from 30 to 70 in tests to avoid client expiring due to batching * Remove unnecessary CLI transfer component and fix recover client test * Add early return when trying to relay empty vector of packets in batch implementations * Fix and improve event batching and configuration * Fix cargo doc and run taplo * Group packet information together in batching methods * Use slice instead of Vec for batching methods * Warn when packet timeout has neither height nor timestamp * Query ack commitments and proofs using the same height and improve batch transactions test * Remove redundant height queries when batching acks
1 parent f2930c9 commit 0352fec

File tree

88 files changed

+1668
-187
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

88 files changed

+1668
-187
lines changed

.github/workflows/integration-tests.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ jobs:
7676
env:
7777
RUST_BACKTRACE: 1
7878
TEST_PRESET: ${{ matrix.chain.preset }}
79-
COSMOS_TRUSTING_PERIOD: 30
79+
COSMOS_TRUSTING_PERIOD: 70
8080
COSMOS_REFRESH_RATE: 20
8181
run: |
8282
nix develop -c \

Cargo.lock

Lines changed: 4 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/any/any-counterparty/src/impls/types/client_state.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,4 +50,10 @@ where
5050
AnyClientState::Tendermint(cs) => cs.chain_id.clone(),
5151
}
5252
}
53+
54+
fn client_state_trusting_period(client_state: &AnyClientState) -> Option<Duration> {
55+
match client_state {
56+
AnyClientState::Tendermint(cs) => Some(cs.trusting_period),
57+
}
58+
}
5359
}

crates/celestia/celestia-integration-tests/src/contexts/bootstrap.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,8 @@ use hermes_cosmos_test_components::bootstrap::impls::{
3636
NoModifyCometConfig, NoModifyCosmosSdkConfig, NoModifyGenesisConfig, StartCosmosChain,
3737
};
3838
use hermes_cosmos_test_components::bootstrap::traits::{
39-
AccountPrefixGetter, AccountPrefixGetterComponent, ChainCommandPathGetter,
40-
ChainCommandPathGetterComponent, ChainDriverBuilderComponent, ChainFullNodeStarterComponent,
41-
ChainStoreDirGetterComponent, CometConfigModifierComponent,
39+
AccountPrefixGetter, AccountPrefixGetterComponent, ChainDriverBuilderComponent,
40+
ChainFullNodeStarterComponent, ChainStoreDirGetterComponent, CometConfigModifierComponent,
4241
CosmosGenesisConfigModifierComponent, CosmosSdkConfigModifierComponent, DenomForStaking,
4342
DenomForTransfer, DenomPrefixGetter, DenomPrefixGetterComponent, DynamicGasGetterComponent,
4443
RandomIdFlagGetterComponent, UseRandomIdFlag, WalletConfigGeneratorComponent,
@@ -51,7 +50,9 @@ use hermes_prelude::*;
5150
use hermes_runtime::types::runtime::HermesRuntime;
5251
use hermes_runtime_components::traits::{RuntimeGetterComponent, RuntimeTypeProviderComponent};
5352
use hermes_test_components::bootstrap::traits::ChainBootstrapperComponent;
54-
use hermes_test_components::chain_driver::traits::ChainTypeProviderComponent;
53+
use hermes_test_components::chain_driver::traits::{
54+
ChainCommandPathGetter, ChainCommandPathGetterComponent, ChainTypeProviderComponent,
55+
};
5556
use hermes_test_components::driver::traits::ChainDriverTypeProviderComponent;
5657
use hermes_tracing_logging_components::contexts::TracingLogger;
5758
use tokio::process::Child;

crates/chain/chain-components/src/traits/types/client_state.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ pub trait HasClientStateFields<Counterparty>:
3535
fn client_state_has_expired(client_state: &Self::ClientState, elapsed: Duration) -> bool;
3636

3737
fn client_state_chain_id(client_state: &Self::ClientState) -> Self::ChainId;
38+
39+
fn client_state_trusting_period(client_state: &Self::ClientState) -> Option<Duration>;
3840
}
3941

4042
#[cgp_provider(ClientStateFieldsComponent)]
@@ -60,4 +62,8 @@ where
6062
fn client_state_chain_id(client_state: &Chain::ClientState) -> Chain::ChainId {
6163
Delegate::client_state_chain_id(client_state)
6264
}
65+
66+
fn client_state_trusting_period(client_state: &Chain::ClientState) -> Option<Duration> {
67+
Delegate::client_state_trusting_period(client_state)
68+
}
6369
}

crates/chain/chain-components/src/traits/types/packets/ack.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ pub trait HasAckPacketPayloadType<Counterparty>: Async {
77

88
#[cgp_type]
99
pub trait HasAcknowledgementType<Counterparty>: Async {
10-
type Acknowledgement: Async;
10+
type Acknowledgement: Async + Clone;
1111
}
1212

1313
#[cgp_type]

crates/chain/chain-type-components/Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,5 @@ description = "Implementation of an IBC Relayer in Rust, as a library"
1212
[dependencies]
1313
cgp = { workspace = true }
1414
hermes-prelude = { workspace = true }
15+
16+
serde = { workspace = true, features = [ "derive" ] }
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
use core::time::Duration;
22

3-
#[derive(Debug, Clone)]
3+
use serde::{Deserialize, Serialize};
4+
5+
#[derive(Debug, Clone, Serialize, Deserialize)]
46
pub struct BatchConfig {
57
pub max_message_count: usize,
68
pub max_tx_size: usize,
@@ -12,11 +14,11 @@ pub struct BatchConfig {
1214
impl Default for BatchConfig {
1315
fn default() -> Self {
1416
Self {
15-
max_message_count: 10,
16-
max_tx_size: 1000,
17-
buffer_size: 1000,
18-
max_delay: Duration::from_secs(1),
19-
sleep_time: Duration::from_millis(50),
17+
max_message_count: 300,
18+
max_tx_size: 1000000,
19+
buffer_size: 1000000,
20+
max_delay: Duration::from_secs(30),
21+
sleep_time: Duration::from_millis(100),
2022
}
2123
}
2224
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,5 @@
1+
mod batch_config;
2+
pub use batch_config::*;
3+
14
mod message_response;
25
pub use message_response::*;

crates/chain/chain-type-components/src/traits/types/event.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,5 +46,5 @@ pub trait HasEventType: Sized + Async {
4646
[`WriteAckEvent`](crate::traits::HasWriteAckEvent::WriteAckEvent),
4747
and _extraction_ methods to parse the variant information from the event.
4848
*/
49-
type Event: Async + Debug;
49+
type Event: Async + Clone + Debug;
5050
}

0 commit comments

Comments
 (0)