From f7f29b7565edbb27c8b6db0d34bee839f61d5299 Mon Sep 17 00:00:00 2001 From: Simon Eudeline Date: Wed, 7 Jan 2026 13:53:20 +0100 Subject: [PATCH 1/4] fix(kms-connector): listen from latest block if catchup fail --- kms-connector/crates/gw-listener/src/core/gw_listener.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/kms-connector/crates/gw-listener/src/core/gw_listener.rs b/kms-connector/crates/gw-listener/src/core/gw_listener.rs index 3f019cb521..bc922ad654 100644 --- a/kms-connector/crates/gw-listener/src/core/gw_listener.rs +++ b/kms-connector/crates/gw-listener/src/core/gw_listener.rs @@ -167,9 +167,10 @@ where event_poller.poller = event_poller.poller.with_poll_interval(poll_interval); info!("✓ Subscribed to {event_type} events"); - self.catchup_past_events::(&mut last_block_polled, event_type) + let _ = self + .catchup_past_events::(&mut last_block_polled, event_type) .await - .map_err(|e| anyhow!("Failed to catch up past {event_type} events: {e}"))?; + .inspect_err(|e| warn!("Failed to catch up past {event_type} events: {e}")); select! { _ = self.process_events(event_type, event_poller, &mut last_block_polled) => (), From 610fd1ac9896b52fb8398f7f5f2b066dfbdf35a1 Mon Sep 17 00:00:00 2001 From: Simon Eudeline Date: Wed, 7 Jan 2026 14:07:41 +0100 Subject: [PATCH 2/4] chore(kms-connector): add tests --- .../gw-listener/src/core/gw_listener.rs | 29 +++++++++++++++++-- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/kms-connector/crates/gw-listener/src/core/gw_listener.rs b/kms-connector/crates/gw-listener/src/core/gw_listener.rs index bc922ad654..aebedfd105 100644 --- a/kms-connector/crates/gw-listener/src/core/gw_listener.rs +++ b/kms-connector/crates/gw-listener/src/core/gw_listener.rs @@ -408,7 +408,7 @@ mod tests { #[timeout(Duration::from_secs(90))] #[tokio::test] async fn test_reset_filter_stops_listener() { - let (_test_instance, asserter, gw_listener) = test_setup().await; + let (_test_instance, asserter, gw_listener) = test_setup(None).await; asserter.push_failure(ErrorPayload { code: -32000, @@ -419,11 +419,31 @@ mod tests { gw_listener.subscribe(EventType::KeygenRequest).await; } + #[rstest::rstest] + #[timeout(Duration::from_secs(90))] + #[tokio::test] + async fn test_failed_catchup_does_not_stop_listener() { + let (mut test_instance, asserter, gw_listener) = test_setup(Some(0)).await; + + asserter.push_failure(ErrorPayload { + code: -32002, + message: "request timed out".into(), + data: None, + }); + + let event_type = EventType::KeygenRequest; + tokio::spawn(gw_listener.subscribe(event_type)); + test_instance.wait_for_log("Failed to catch up").await; + test_instance + .wait_for_log(&format!("Waiting for next {event_type}")) + .await; + } + #[rstest::rstest] #[timeout(Duration::from_secs(90))] #[tokio::test] async fn test_listener_ended_by_end_of_any_task() { - let (mut test_instance, _asserter, gw_listener) = test_setup().await; + let (mut test_instance, _asserter, gw_listener) = test_setup(None).await; // Will stop because some subcription tasks will not be able to init their event filter gw_listener.start().await; @@ -439,7 +459,9 @@ mod tests { RootProvider, >; - async fn test_setup() -> (TestInstance, Asserter, GatewayListener) { + async fn test_setup( + from_block_number: Option, + ) -> (TestInstance, Asserter, GatewayListener) { let test_instance = TestInstanceBuilder::db_setup().await.unwrap(); // Create a mocked `alloy::Provider` @@ -453,6 +475,7 @@ mod tests { let config = Config { decryption_polling: Duration::from_millis(500), key_management_polling: Duration::from_millis(500), + from_block_number, ..Default::default() }; let listener = GatewayListener::new( From f8c6373d90349f0251849fa79970d69405899eb0 Mon Sep 17 00:00:00 2001 From: "Simon E." Date: Mon, 29 Dec 2025 12:09:10 +0100 Subject: [PATCH 3/4] ci(kms-connector): upgrade cargo-audit (#1671) --- .../kms-connector-dependency-analysis.yml | 8 ++++---- kms-connector/Cargo.lock | 14 +++++++------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/.github/workflows/kms-connector-dependency-analysis.yml b/.github/workflows/kms-connector-dependency-analysis.yml index 0371a06970..527b125b82 100644 --- a/.github/workflows/kms-connector-dependency-analysis.yml +++ b/.github/workflows/kms-connector-dependency-analysis.yml @@ -30,6 +30,7 @@ jobs: rust-files: - .github/workflows/kms-connector-dependency-analysis.yml - kms-connector/** + dependencies-check: name: kms-connector-dependency-analysis/dependencies-check (bpr) needs: check-changes @@ -50,13 +51,13 @@ jobs: toolchain: stable - name: Install cargo-binstall - uses: cargo-bins/cargo-binstall@84ca29d5c1719e79e23b6af147555a8f4dac79d6 # v1.10.14 + uses: cargo-bins/cargo-binstall@80aaafe04903087c333980fa2686259ddd34b2d9 # v1.16.6 - name: Install cargo tools run: | cargo binstall --no-confirm --force \ - cargo-audit@0.21.2 \ - cargo-deny@0.16.2 + cargo-audit@0.22.0 \ + cargo-deny@0.18.9 - name: Check that Cargo.lock is the source of truth run: | @@ -72,4 +73,3 @@ jobs: run: | cd kms-connector cargo-audit audit - diff --git a/kms-connector/Cargo.lock b/kms-connector/Cargo.lock index 06f2d19052..b8a8c262ae 100644 --- a/kms-connector/Cargo.lock +++ b/kms-connector/Cargo.lock @@ -2905,7 +2905,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] @@ -3873,7 +3873,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5" dependencies = [ "equivalent", - "hashbrown 0.16.0", + "hashbrown 0.15.5", "serde", "serde_core", ] @@ -4377,7 +4377,7 @@ version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" dependencies = [ - "windows-sys 0.61.2", + "windows-sys 0.60.2", ] [[package]] @@ -5470,9 +5470,9 @@ dependencies = [ [[package]] name = "ruint" -version = "1.17.0" +version = "1.17.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a68df0380e5c9d20ce49534f292a36a7514ae21350726efe1865bdb1fa91d278" +checksum = "c141e807189ad38a07276942c6623032d3753c8859c146104ac2e4d68865945a" dependencies = [ "alloy-rlp", "ark-ff 0.3.0", @@ -5557,7 +5557,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys", - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] @@ -6507,7 +6507,7 @@ dependencies = [ "getrandom 0.3.4", "once_cell", "rustix", - "windows-sys 0.59.0", + "windows-sys 0.52.0", ] [[package]] From 6e40c13981c0135c8b477947c7e9c2636c4eb06b Mon Sep 17 00:00:00 2001 From: Simon Eudeline Date: Fri, 5 Dec 2025 16:36:05 +0100 Subject: [PATCH 4/4] chore(kms-connector): update codeowner --- .github/CODEOWNERS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index b940ca7bd4..b0ad9a8d77 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -11,7 +11,7 @@ /host-contracts/ @zama-ai/fhevm-gateway /protocol-contracts/ @zama-ai/fhevm-gateway /library-solidity/ @zama-ai/fhevm-gateway -/kms-connector/ @zama-ai/fhevm-gateway +/kms-connector/ @zama-ai/fhevm-gateway @dartdart26 # Coprocessor Team ownership /coprocessor/ @zama-ai/fhevm-coprocessor