Skip to content

Commit 517ba3e

Browse files
chore(kms-connector): distinct from_block for decryption and kms (#1745)
* chore(kms-connector): distinct from_block for decryption and kms * chore(kms-connector): rename config field
1 parent ef3ded9 commit 517ba3e

File tree

5 files changed

+28
-13
lines changed

5 files changed

+28
-13
lines changed

kms-connector/config/gw-listener.toml

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,13 @@ database_url = "postgres://postgres:postgres@localhost/kms-connector"
3737
# ENV: KMS_CONNECTOR_KMS_GENERATION_POLLING (format: https://docs.rs/humantime/latest/humantime/)
3838
# key_management_polling = "30s"
3939

40-
# Block number to start processing from (optional, defaults to latest block if not set)
41-
# ENV: KMS_CONNECTOR_FROM_BLOCK_NUMBER
42-
# from_block_number = 1234
40+
# Block number to start processing decryption events from (optional, defaults to latest block if not set)
41+
# ENV: KMS_CONNECTOR_DECRYPTION_FROM_BLOCK_NUMBER
42+
# decryption_from_block_number = 1234
43+
44+
# Block number to start processing KMS operation events from (optional, defaults to latest block if not set)
45+
# ENV: KMS_CONNECTOR_KMS_FROM_BLOCK_NUMBER
46+
# kms_operation_from_block_number = 1234
4347

4448
# Configuration of the Decryption contract (required)
4549
[decryption_contract]

kms-connector/crates/gw-listener/src/core/config.rs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,10 @@ pub struct Config {
5555
#[serde(with = "humantime_serde", default = "default_key_management_polling")]
5656
pub key_management_polling: Duration,
5757

58-
/// Optional block number to start processing from.
59-
pub from_block_number: Option<u64>,
58+
/// Optional block number to start processing decryption events from.
59+
pub decryption_from_block_number: Option<u64>,
60+
/// Optional block number to start processing KMS operation events from.
61+
pub kms_operation_from_block_number: Option<u64>,
6062
}
6163

6264
impl DeserializeConfig for Config {}
@@ -89,7 +91,8 @@ impl Default for Config {
8991
healthcheck_timeout: default_healthcheck_timeout(),
9092
decryption_polling: default_decryption_polling(),
9193
key_management_polling: default_key_management_polling(),
92-
from_block_number: None,
94+
decryption_from_block_number: None,
95+
kms_operation_from_block_number: None,
9396
}
9497
}
9598
}

kms-connector/crates/gw-listener/src/core/gw_listener.rs

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -298,8 +298,15 @@ where
298298

299299
/// Get the last block polled from config or DB.
300300
async fn get_last_block_polled(&self, event_type: EventType) -> anyhow::Result<Option<u64>> {
301-
let last_block_polled = match self.config.from_block_number {
302-
// Start polling event from `from_block_number` if configured
301+
let from_block_number = match event_type {
302+
EventType::PublicDecryptionRequest | EventType::UserDecryptionRequest => {
303+
self.config.decryption_from_block_number
304+
}
305+
_ => self.config.kms_operation_from_block_number,
306+
};
307+
308+
let last_block_polled = match from_block_number {
309+
// Start polling event from the configured `from_block_number` if set
303310
Some(from_block) => {
304311
info!(
305312
"Found configured `from_block_number` ({from_block}) for {event_type} subscriptions!"
@@ -460,7 +467,7 @@ mod tests {
460467
>;
461468

462469
async fn test_setup(
463-
from_block_number: Option<u64>,
470+
kms_operation_from_block_number: Option<u64>,
464471
) -> (TestInstance, Asserter, GatewayListener<MockProvider>) {
465472
let test_instance = TestInstanceBuilder::db_setup().await.unwrap();
466473

@@ -475,7 +482,7 @@ mod tests {
475482
let config = Config {
476483
decryption_polling: Duration::from_millis(500),
477484
key_management_polling: Duration::from_millis(500),
478-
from_block_number,
485+
kms_operation_from_block_number,
479486
..Default::default()
480487
};
481488
let listener = GatewayListener::new(

kms-connector/crates/gw-listener/tests/common/mod.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@ pub async fn start_test_listener(
4242
let mut config = Config::default();
4343
config.decryption_contract.address = DECRYPTION_MOCK_ADDRESS;
4444
config.kms_generation_contract.address = KMS_GENERATION_MOCK_ADDRESS;
45-
config.from_block_number = from_block_number;
45+
config.decryption_from_block_number = from_block_number;
46+
config.kms_operation_from_block_number = from_block_number;
4647
config.decryption_polling = Duration::from_millis(300);
4748
config.key_management_polling = Duration::from_millis(300);
4849
let gw_listener = GatewayListener::new(

kms-connector/docs/architecture.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -182,8 +182,8 @@ sent.
182182
As we will run multiple `GatewayListener` instances, we assume that they will not crash all
183183
simultaneously, thus that all events emitted by the Gateway would be written in the DB.
184184

185-
There is also a `from_block_number` option in its configuration, to be able to recover all events
186-
from a given block number.
185+
There are also `decryption_from_block_number` and `kms_operation_from_block_number` options in its configuration,
186+
to be able to recover decryption events and KMS operation events from given block numbers respectively.
187187

188188
So even if we run only one `KmsWorker` that crashes, it will have access to unhandled events when
189189
restarted.

0 commit comments

Comments
 (0)