feat: fallback to single tx submission if batching fails#7247
Conversation
|
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #7247 +/- ##
============================
============================
🚀 New features to boost your workflow:
|
📝 WalkthroughWalkthroughThis diff replaces eyre-based errors with ChainResult/ChainCommunicationError for multicall/provider paths, adds domain-aware batched-transaction metrics and wiring through Dispatcher → EthereumAdapter → NonceManager, changes batched build to return ChainResult with a fallback to single-tx builds, and reorganizes adapter tests into focused modules. Changes
Sequence Diagram(s)sequenceDiagram
%% Batched build with metrics and fallback (high-level)
participant Caller
participant EthereumAdapter
participant BatchBuilder as build_batched_transaction
participant SingleBuilder as single_tx_builder
participant Metrics
Caller->>EthereumAdapter: build_transactions(precursors)
EthereumAdapter->>BatchBuilder: attempt batched build (async)
alt Batch Success
BatchBuilder-->>EthereumAdapter: ChainResult::Ok(batched_results)
EthereumAdapter->>Metrics: increment_batched_transactions("success", count)
EthereumAdapter-->>Caller: return batched_results
else Batch Fails
BatchBuilder-->>EthereumAdapter: ChainResult::Err(err)
EthereumAdapter->>Metrics: increment_batched_transactions("failed", count)
EthereumAdapter->>SingleBuilder: build each tx individually (fallback)
SingleBuilder-->>EthereumAdapter: vec(single_results)
EthereumAdapter-->>Caller: return per-tx results
end
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes
Possibly related PRs
Suggested reviewers
Pre-merge checks and finishing touches✅ Passed checks (2 passed)
✨ Finishing touches
🧪 Generate unit tests (beta)
📜 Recent review detailsConfiguration used: CodeRabbit UI Review profile: CHILL Plan: Pro 📒 Files selected for processing (1)
🚧 Files skipped from review as they are similar to previous changes (1)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (11)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 0
🧹 Nitpick comments (1)
rust/main/lander/src/adapter/chains/ethereum/adapter/tests/check_if_resubmission_makes_sense.rs (1)
15-402: Suggest extracting helper functions to reduce test duplication.The test functions contain significant duplication in their setup code. Each test manually constructs
TypedTransactionvariants with identical boilerplate fields. Consider extracting helper functions likesetup_tx_with_eip1559_gas_priceandsetup_tx_with_legacy_gas_priceto improve maintainability and readability.Example refactor:
fn setup_eip1559_tx_with_gas( status: crate::TransactionStatus, max_fee: u64, max_priority_fee: u64, ) -> Transaction { let mut tx = dummy_evm_tx( ExpectedTxType::Eip1559, vec![], status, H160::random(), ); if let VmSpecificTxData::Evm(ethereum_tx_precursor) = &mut tx.vm_specific_data { ethereum_tx_precursor.tx = TypedTransaction::Eip1559(Eip1559TransactionRequest { from: Some(H160::random()), to: Some(H160::random().into()), nonce: Some(0.into()), gas: Some(21000.into()), max_fee_per_gas: Some(max_fee.into()), max_priority_fee_per_gas: Some(max_priority_fee.into()), value: Some(1.into()), ..Default::default() }); } tx }
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (8)
rust/main/chains/hyperlane-ethereum/src/contracts/multicall.rs(3 hunks)rust/main/chains/hyperlane-ethereum/src/rpc_clients/provider.rs(1 hunks)rust/main/hyperlane-core/src/error.rs(1 hunks)rust/main/lander/src/adapter/chains/ethereum/adapter.rs(4 hunks)rust/main/lander/src/adapter/chains/ethereum/adapter/tests.rs(1 hunks)rust/main/lander/src/adapter/chains/ethereum/adapter/tests/check_if_resubmission_makes_sense.rs(1 hunks)rust/main/lander/src/adapter/chains/ethereum/adapter/tests/tests_build.rs(1 hunks)rust/main/lander/src/adapter/chains/ethereum/adapter/tests/vm_specific_metrics.rs(1 hunks)
🧰 Additional context used
📓 Path-based instructions (3)
rust/main/{hyperlane-core,hyperlane-base}/**/src/**/*.rs
📄 CodeRabbit inference engine (CLAUDE.md)
Keep shared Rust core crates in rust/main/{hyperlane-core,hyperlane-base}
Files:
rust/main/hyperlane-core/src/error.rs
rust/main/**/src/**/*.rs
📄 CodeRabbit inference engine (CLAUDE.md)
Run cargo clippy for Rust code linting
Files:
rust/main/hyperlane-core/src/error.rsrust/main/lander/src/adapter/chains/ethereum/adapter/tests.rsrust/main/lander/src/adapter/chains/ethereum/adapter/tests/tests_build.rsrust/main/lander/src/adapter/chains/ethereum/adapter/tests/vm_specific_metrics.rsrust/main/chains/hyperlane-ethereum/src/contracts/multicall.rsrust/main/lander/src/adapter/chains/ethereum/adapter.rsrust/main/lander/src/adapter/chains/ethereum/adapter/tests/check_if_resubmission_makes_sense.rsrust/main/chains/hyperlane-ethereum/src/rpc_clients/provider.rs
rust/main/chains/{hyperlane-ethereum,hyperlane-cosmos,hyperlane-sealevel,hyperlane-fuel}/**/src/**/*.rs
📄 CodeRabbit inference engine (CLAUDE.md)
Keep chain support implementations within rust/main/chains/{hyperlane-ethereum,hyperlane-cosmos,hyperlane-sealevel,hyperlane-fuel}
Files:
rust/main/chains/hyperlane-ethereum/src/contracts/multicall.rsrust/main/chains/hyperlane-ethereum/src/rpc_clients/provider.rs
🧬 Code graph analysis (5)
rust/main/lander/src/adapter/chains/ethereum/adapter/tests.rs (1)
rust/main/lander/src/adapter/chains/ethereum/adapter.rs (1)
check_if_resubmission_makes_sense(164-195)
rust/main/lander/src/adapter/chains/ethereum/adapter/tests/tests_build.rs (2)
rust/main/lander/src/tests/test_utils.rs (1)
tmp_dbs(41-51)rust/main/lander/src/adapter/chains/ethereum/adapter.rs (1)
new(73-126)
rust/main/lander/src/adapter/chains/ethereum/adapter/tests/vm_specific_metrics.rs (2)
rust/main/lander/src/adapter/chains/ethereum/tests.rs (1)
dummy_evm_tx(116-138)rust/main/lander/src/adapter/chains/ethereum/adapter.rs (1)
extract_vm_specific_metrics(302-321)
rust/main/lander/src/adapter/chains/ethereum/adapter.rs (3)
rust/main/lander/src/adapter/chains/ethereum/precursor.rs (2)
new(48-50)from_payload(52-59)rust/main/agents/relayer/src/msg/pending_message.rs (1)
payload(550-560)rust/main/hyperlane-core/src/traits/pending_operation.rs (1)
payload(175-175)
rust/main/lander/src/adapter/chains/ethereum/adapter/tests/check_if_resubmission_makes_sense.rs (2)
rust/main/lander/src/adapter/chains/ethereum/tests.rs (1)
dummy_evm_tx(116-138)rust/main/lander/src/adapter/chains/ethereum/adapter.rs (3)
tx(265-274)tx(667-673)check_if_resubmission_makes_sense(164-195)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (55)
- GitHub Check: infra-test
- GitHub Check: cli-evm-e2e-matrix (warp-send)
- GitHub Check: cli-evm-e2e-matrix (warp-read)
- GitHub Check: cli-evm-e2e-matrix (warp-extend-config)
- GitHub Check: cli-evm-e2e-matrix (warp-rebalancer)
- GitHub Check: cli-evm-e2e-matrix (warp-bridge-1)
- GitHub Check: cli-evm-e2e-matrix (warp-deploy)
- GitHub Check: cli-evm-e2e-matrix (warp-check-3)
- GitHub Check: cli-evm-e2e-matrix (warp-check-1)
- GitHub Check: cli-evm-e2e-matrix (warp-init)
- GitHub Check: cli-evm-e2e-matrix (warp-check-2)
- GitHub Check: cli-evm-e2e-matrix (warp-extend-recovery)
- GitHub Check: cli-evm-e2e-matrix (warp-extend-basic)
- GitHub Check: cli-evm-e2e-matrix (warp-bridge-2)
- GitHub Check: cli-evm-e2e-matrix (warp-apply-2)
- GitHub Check: cli-evm-e2e-matrix (core-read)
- GitHub Check: cli-evm-e2e-matrix (warp-apply-submitters)
- GitHub Check: cli-evm-e2e-matrix (warp-apply-ism-updates)
- GitHub Check: cli-evm-e2e-matrix (warp-apply-1)
- GitHub Check: cli-evm-e2e-matrix (core-deploy)
- GitHub Check: cli-evm-e2e-matrix (relay)
- GitHub Check: cli-evm-e2e-matrix (core-apply)
- GitHub Check: cli-evm-e2e-matrix (core-init)
- GitHub Check: env-test-matrix (mainnet3, inevm, igp)
- GitHub Check: cli-evm-e2e-matrix (core-check)
- GitHub Check: env-test-matrix (mainnet3, optimism, core)
- GitHub Check: env-test-matrix (mainnet3, arbitrum, core)
- GitHub Check: env-test-matrix (mainnet3, inevm, core)
- GitHub Check: env-test-matrix (testnet4, sepolia, core)
- GitHub Check: env-test-matrix (mainnet3, arbitrum, igp)
- GitHub Check: env-test-matrix (mainnet3, ethereum, igp)
- GitHub Check: env-test-matrix (mainnet3, optimism, igp)
- GitHub Check: env-test-matrix (mainnet3, ethereum, core)
- GitHub Check: cli-cross-chain-e2e-matrix (warp-deploy)
- GitHub Check: cosmos-sdk-e2e-run
- GitHub Check: cli-cosmos-e2e-matrix (warp-read)
- GitHub Check: cli-cosmos-e2e-matrix (warp-deploy)
- GitHub Check: cli-cross-chain-e2e-matrix (warp-apply)
- GitHub Check: cli-cosmos-e2e-matrix (core-read)
- GitHub Check: cli-cosmos-e2e-matrix (core-deploy)
- GitHub Check: cli-cosmos-e2e-matrix (core-check)
- GitHub Check: cli-cosmos-e2e-matrix (core-apply)
- GitHub Check: cli-install-test-run
- GitHub Check: yarn-test-run
- GitHub Check: build-and-push-to-gcr
- GitHub Check: e2e-matrix (radix)
- GitHub Check: e2e-matrix (sealevel)
- GitHub Check: e2e-matrix (evm)
- GitHub Check: e2e-matrix (starknet)
- GitHub Check: e2e-matrix (cosmosnative)
- GitHub Check: e2e-matrix (cosmwasm)
- GitHub Check: agent-configs (testnet4)
- GitHub Check: test-rs
- GitHub Check: lint-rs
- GitHub Check: lander-coverage
🔇 Additional comments (10)
rust/main/hyperlane-core/src/error.rs (1)
75-77: LGTM!The new
ContractNotFounderror variant properly handles the case when a contract address doesn't contain deployed code. The error message is clear and includes the address for debugging.rust/main/chains/hyperlane-ethereum/src/rpc_clients/provider.rs (1)
336-348: LGTM!The return type change from
eyre::ResulttoChainResultaligns nicely with the broader error handling improvements across the codebase. Error propagation through the?operator works as expected.rust/main/lander/src/adapter/chains/ethereum/adapter/tests/vm_specific_metrics.rs (1)
11-110: Test coverage looks solid.The tests properly verify VM-specific metrics extraction for all three transaction types (Legacy, EIP-1559, EIP-2930). The assertions correctly validate that
gas_price,priority_fee, andgas_limitare extracted as expected for each variant.rust/main/lander/src/adapter/chains/ethereum/adapter/tests/tests_build.rs (1)
32-125: Test correctly validates fallback behavior.The test properly simulates the batch contract missing scenario and verifies that the adapter falls back to building individual transactions. The assertions confirm both the correct number of results and that transactions were successfully built.
rust/main/lander/src/adapter/chains/ethereum/adapter/tests.rs (1)
1-3: Nice test organization.Breaking out the tests into separate modules improves maintainability and makes the test structure clearer.
rust/main/lander/src/adapter/chains/ethereum/adapter.rs (3)
14-14: LGTM!The
ChainResultimport enables proper error propagation throughout the adapter.
337-363: Well-structured error propagation.The signature change to return
ChainResult<Vec<TxBuildingResult>>properly propagates batch-building errors up the call chain. The?operator on line 354 cleanly handles failures fromprovider.batch.
440-467: Fallback logic implements the core feature correctly.When batch building fails, the code appropriately falls back to constructing individual transactions for each payload. The warnings provide helpful context for debugging. The logic correctly iterates over payloads and builds single transactions using
build_single_transaction.rust/main/chains/hyperlane-ethereum/src/contracts/multicall.rs (2)
10-12: LGTM!The updated imports support the new
ChainResult-based error handling.
34-78: Error handling is well-structured.The changes properly use
ChainResultandChainCommunicationErrorvariants. TheContractNotFounderror at line 62 correctly encodes the address in hex format for debugging. TheCustomErrorpath (lines 70-73) provides a descriptive message and logs the error before returning. Good stuff.
There was a problem hiding this comment.
Actionable comments posted: 1
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (4)
rust/main/lander/src/adapter/chains/ethereum/adapter.rs(6 hunks)rust/main/lander/src/adapter/chains/ethereum/metrics.rs(3 hunks)rust/main/lander/src/adapter/chains/ethereum/nonce/state/core.rs(1 hunks)rust/main/lander/src/dispatcher/metrics.rs(4 hunks)
🧰 Additional context used
📓 Path-based instructions (1)
rust/main/**/src/**/*.rs
📄 CodeRabbit inference engine (CLAUDE.md)
Run cargo clippy for Rust code linting
Files:
rust/main/lander/src/adapter/chains/ethereum/adapter.rsrust/main/lander/src/adapter/chains/ethereum/nonce/state/core.rsrust/main/lander/src/adapter/chains/ethereum/metrics.rsrust/main/lander/src/dispatcher/metrics.rs
🧬 Code graph analysis (3)
rust/main/lander/src/adapter/chains/ethereum/adapter.rs (5)
rust/main/lander/src/adapter/chains/ethereum/nonce/state/core.rs (2)
metrics(34-36)new(20-32)rust/main/lander/src/adapter/chains/ethereum/metrics.rs (1)
new(25-37)rust/main/lander/src/adapter/chains/ethereum/precursor.rs (2)
new(48-50)from_payload(52-59)rust/main/lander/src/adapter/chains/ethereum/transaction/factory.rs (1)
build(11-23)rust/main/hyperlane-core/src/traits/pending_operation.rs (1)
payload(175-175)
rust/main/lander/src/adapter/chains/ethereum/metrics.rs (4)
rust/main/lander/src/adapter/chains/ethereum/adapter.rs (1)
new(76-131)rust/main/lander/src/adapter/chains/ethereum/nonce/state/core.rs (1)
new(20-32)rust/main/lander/src/dispatcher/metrics.rs (1)
new(61-209)rust/main/hyperlane-core/src/chain.rs (1)
new_test_domain(335-343)
rust/main/lander/src/dispatcher/metrics.rs (1)
rust/main/hyperlane-base/src/metrics/core.rs (1)
registry(374-376)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (11)
- GitHub Check: build-and-push-to-gcr
- GitHub Check: lander-coverage
- GitHub Check: lint-rs
- GitHub Check: test-rs
- GitHub Check: e2e-matrix (radix)
- GitHub Check: e2e-matrix (evm)
- GitHub Check: e2e-matrix (starknet)
- GitHub Check: e2e-matrix (cosmosnative)
- GitHub Check: e2e-matrix (sealevel)
- GitHub Check: e2e-matrix (cosmwasm)
- GitHub Check: yarn-install
🔇 Additional comments (8)
rust/main/lander/src/dispatcher/metrics.rs (2)
33-33: Looks good, mate!The new
batched_transactionsmetric is properly registered and wired up. It follows the same pattern as the other metrics in this file.Also applies to: 102-109, 196-196
298-300: Getter looks fine.Returns a clone of the
IntCounterVec, which aligns with how other metric accessors work.rust/main/lander/src/adapter/chains/ethereum/nonce/state/core.rs (1)
34-36: Simple accessor, all good.The
metrics()getter exposes the internal metrics field cleanly.rust/main/lander/src/adapter/chains/ethereum/adapter.rs (2)
343-368: Error propagation is well done.Changing the return type to
ChainResultallows batch failures to be properly caught and handled by the caller. The?operator on line 359 cleanly propagates errors from the provider's batch operation.
446-488: Fallback logic handles batch failures properly.When batching fails, the code:
- Increments the failure metric with the domain label
- Logs clear warnings about the failure and fallback
- Falls back to building individual transactions for each payload
This preserves the original single-transaction behavior when batching isn't available.
rust/main/lander/src/adapter/chains/ethereum/metrics.rs (3)
15-17: Domain-aware metrics properly added.The
domainandbatched_transactionfields are cleanly integrated into the struct and constructor.Also applies to: 25-37
47-51: Metric increment method works correctly.The
increment_batched_transactionsmethod properly labels the counter with domain and status, then increments by the specified amount.
63-64: Test fixture updated correctly.The
dummy_instanceproperly constructs the new metrics with a test domain and batched transactions counter.
There was a problem hiding this comment.
Actionable comments posted: 0
🧹 Nitpick comments (1)
rust/main/lander/src/adapter/chains/ethereum/adapter.rs (1)
446-488: Well done on the fallback logic!The error handling is solid - tries batching first, tracks success, and gracefully falls back to individual transactions when the batch contract isn't available or fails. The metrics tracking on both paths gives good observability.
One tiny consistency thing: line 479 uses
precursors.len()for the capacity, but you're iterating overpayloadsin the loop. They're the same length so no harm done, but usingpayloads.len()would read a bit clearer.Optional diff for consistency:
- let mut results = Vec::with_capacity(precursors.len()); + let mut results = Vec::with_capacity(payloads.len());
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (1)
rust/main/lander/src/adapter/chains/ethereum/adapter.rs(6 hunks)
🧰 Additional context used
📓 Path-based instructions (1)
rust/main/**/src/**/*.rs
📄 CodeRabbit inference engine (CLAUDE.md)
Run cargo clippy for Rust code linting
Files:
rust/main/lander/src/adapter/chains/ethereum/adapter.rs
🧠 Learnings (1)
📚 Learning: 2025-09-02T18:44:06.598Z
Learnt from: CR
Repo: hyperlane-xyz/hyperlane-monorepo PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-09-02T18:44:06.598Z
Learning: Applies to rust/main/chains/{hyperlane-ethereum,hyperlane-cosmos,hyperlane-sealevel,hyperlane-fuel}/**/src/**/*.rs : Keep chain support implementations within rust/main/chains/{hyperlane-ethereum,hyperlane-cosmos,hyperlane-sealevel,hyperlane-fuel}
Applied to files:
rust/main/lander/src/adapter/chains/ethereum/adapter.rs
🧬 Code graph analysis (1)
rust/main/lander/src/adapter/chains/ethereum/adapter.rs (4)
rust/main/lander/src/adapter/chains/ethereum/nonce/state/core.rs (2)
metrics(34-36)new(20-32)rust/main/lander/src/adapter/chains/ethereum/metrics.rs (1)
new(25-37)rust/main/lander/src/adapter/chains/ethereum/precursor.rs (2)
new(50-52)from_payload(54-61)rust/main/lander/src/adapter/chains/ethereum/transaction/factory.rs (1)
build(11-23)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (11)
- GitHub Check: infra-test
- GitHub Check: build-and-push-to-gcr
- GitHub Check: e2e-matrix (starknet)
- GitHub Check: e2e-matrix (cosmwasm)
- GitHub Check: e2e-matrix (radix)
- GitHub Check: e2e-matrix (cosmosnative)
- GitHub Check: e2e-matrix (evm)
- GitHub Check: e2e-matrix (sealevel)
- GitHub Check: lint-rs
- GitHub Check: test-rs
- GitHub Check: lander-coverage
🔇 Additional comments (4)
rust/main/lander/src/adapter/chains/ethereum/adapter.rs (4)
37-39: Looks good! Metrics labels properly imported.These labels are used correctly in the batched transaction success/failure paths below.
104-105: Domain and batched transaction metrics properly wired.The metrics initialization correctly passes domain and batched_transaction counter to enable domain-aware tracking.
347-368: Proper error propagation with ChainResult.The signature change and
?operator correctly propagate batching errors to the caller, allowing the fallback logic to kick in. Much cleaner than the old approach!
1-784: Sandbox can't run cargo—you'll need to verify clippy locally.The sandbox environment doesn't have the necessary setup to execute cargo commands. You'll want to run this on your machine to make sure there are no linting issues lurking in that adapter file:
cd rust/main/lander cargo clippy -- -D warningsIf that runs clean without warnings, you're good to go. If clippy grumbles about something, well, that's what it's there for—best to sort it out now before it becomes someone else's headache.
- add more tests - test metrics as well
…onorepo into jeff/multicall
There was a problem hiding this comment.
Actionable comments posted: 2
🧹 Nitpick comments (1)
rust/main/lander/src/adapter/chains/ethereum/adapter/tests/tests_build.rs (1)
1-36: Clean up unused and suspicious imports.Several imports appear unused or misplaced for Ethereum adapter tests:
- Line 9:
eyre::Resultis imported but not used- Line 18:
solana_client::client_error::reqwestseems out of place in Ethereum tests- Line 19:
tokio::sync::Mutexis not used- Lines 28-30: Imports from radix adapter tests (
MockRadixProvider,MAILBOX_ADDRESS,TEST_PRIVATE_KEY) appear unrelated to Ethereum adapter testsRemove unused imports to keep the codebase tidy.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (1)
rust/main/lander/src/adapter/chains/ethereum/adapter/tests/tests_build.rs(1 hunks)
🧰 Additional context used
📓 Path-based instructions (1)
rust/main/**/src/**/*.rs
📄 CodeRabbit inference engine (CLAUDE.md)
Run cargo clippy for Rust code linting
Files:
rust/main/lander/src/adapter/chains/ethereum/adapter/tests/tests_build.rs
🧠 Learnings (1)
📚 Learning: 2025-09-02T18:44:06.598Z
Learnt from: CR
Repo: hyperlane-xyz/hyperlane-monorepo PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-09-02T18:44:06.598Z
Learning: Applies to rust/main/chains/{hyperlane-ethereum,hyperlane-cosmos,hyperlane-sealevel,hyperlane-fuel}/**/src/**/*.rs : Keep chain support implementations within rust/main/chains/{hyperlane-ethereum,hyperlane-cosmos,hyperlane-sealevel,hyperlane-fuel}
Applied to files:
rust/main/lander/src/adapter/chains/ethereum/adapter/tests/tests_build.rs
🧬 Code graph analysis (1)
rust/main/lander/src/adapter/chains/ethereum/adapter/tests/tests_build.rs (4)
rust/main/lander/src/adapter/chains/ethereum/adapter.rs (2)
metrics(372-374)new(77-133)rust/main/lander/src/tests/evm/test_utils.rs (1)
mock_ethereum_adapter(95-149)rust/main/lander/src/tests/test_utils.rs (1)
tmp_dbs(43-53)rust/main/lander/src/adapter/chains/ethereum/metrics.rs (2)
new(25-37)get_batched_transactions(53-55)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (10)
- GitHub Check: build-and-push-to-gcr
- GitHub Check: e2e-matrix (starknet)
- GitHub Check: e2e-matrix (radix)
- GitHub Check: e2e-matrix (sealevel)
- GitHub Check: e2e-matrix (cosmosnative)
- GitHub Check: e2e-matrix (evm)
- GitHub Check: e2e-matrix (cosmwasm)
- GitHub Check: test-rs
- GitHub Check: lander-coverage
- GitHub Check: lint-rs
🔇 Additional comments (2)
rust/main/lander/src/adapter/chains/ethereum/adapter/tests/tests_build.rs (2)
145-230: Good test coverage for ContractNotFound fallback.This test properly verifies that when batching fails due to a missing contract, the system falls back to single transaction submission and records the appropriate failure metrics.
238-245: Verify that ContractError is a realistic failure scenario.A past review comment suggested that
provider.batchthrowsChainCommunicationError::CustomErrorrather thanContractError. Please confirm whether testingContractErrorhere reflects actual error conditions that occur in production, or if additional error types should be covered.Based on past review comments.
Description
Related issues
Testing
Summary by CodeRabbit
New Features
Bug Fixes
Tests
Chores