From 05d56f83c00a0eac439517a4e0c72adbab2edbee Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Wed, 22 Oct 2025 13:50:09 +0000 Subject: [PATCH 1/3] Track timestamps in lazer_exporter to avoid duplicate messages Keep track of the most recent PriceInfo::timestamp for each pyth_sdk::Identifier and skip objects that do not have a newer timestamp. This prevents sending duplicate FeedUpdate messages when the local state has not been updated. Co-Authored-By: Mike Rolish --- src/agent/services/lazer_exporter.rs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/agent/services/lazer_exporter.rs b/src/agent/services/lazer_exporter.rs index c6d46ff..0eacf4a 100644 --- a/src/agent/services/lazer_exporter.rs +++ b/src/agent/services/lazer_exporter.rs @@ -420,6 +420,8 @@ mod lazer_exporter { // consume immediate tick publish_interval.tick().await; + let mut last_sent_timestamps: HashMap = HashMap::new(); + loop { tokio::select! { _ = publish_interval.tick() => { @@ -434,6 +436,12 @@ mod lazer_exporter { // TODO: This read locks and clones local::Store::prices, which may not meet performance needs. for (identifier, price_info) in state.get_all_price_infos().await { if let Some(symbol) = lazer_symbols.get(&identifier) { + if let Some(last_timestamp) = last_sent_timestamps.get(&identifier) { + if price_info.timestamp <= *last_timestamp { + continue; + } + } + let source_timestamp_micros = price_info.timestamp.and_utc().timestamp_micros(); let source_timestamp = MessageField::some(Timestamp { seconds: source_timestamp_micros / 1_000_000, @@ -449,7 +457,8 @@ mod lazer_exporter { ..PriceUpdate::default() })), special_fields: Default::default(), - }) + }); + last_sent_timestamps.insert(identifier, price_info.timestamp); } } From 9cbac1d94950656ad4a5e182fa16e2b800d17453 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Wed, 22 Oct 2025 13:54:13 +0000 Subject: [PATCH 2/3] Apply rustfmt formatting Co-Authored-By: Mike Rolish --- src/agent/services/lazer_exporter.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/agent/services/lazer_exporter.rs b/src/agent/services/lazer_exporter.rs index 0eacf4a..9778cee 100644 --- a/src/agent/services/lazer_exporter.rs +++ b/src/agent/services/lazer_exporter.rs @@ -420,7 +420,8 @@ mod lazer_exporter { // consume immediate tick publish_interval.tick().await; - let mut last_sent_timestamps: HashMap = HashMap::new(); + let mut last_sent_timestamps: HashMap = + HashMap::new(); loop { tokio::select! { From 7e19cf2da1b6c146bf4ce2e85bf1fabb110e43d9 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Wed, 22 Oct 2025 14:58:56 +0000 Subject: [PATCH 3/3] Bump version to 3.0.7 Co-Authored-By: Mike Rolish --- Cargo.lock | 2 +- Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 146ea72..9017e84 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3721,7 +3721,7 @@ dependencies = [ [[package]] name = "pyth-agent" -version = "3.0.6" +version = "3.0.7" dependencies = [ "anyhow", "async-trait", diff --git a/Cargo.toml b/Cargo.toml index a7dee1f..0f9f9d7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pyth-agent" -version = "3.0.6" +version = "3.0.7" edition = "2024" [[bin]]