From 38c1df00ca516cda19e1edb4ceda91d69bdbbb56 Mon Sep 17 00:00:00 2001 From: Bart Platak Date: Mon, 4 Aug 2025 23:15:01 +0100 Subject: [PATCH 1/3] feat(pyth-lazer) Add funding_rate_interval to feed properties --- Cargo.lock | 26 ++++++++--------- lazer/sdk/rust/protocol/Cargo.toml | 2 +- lazer/sdk/rust/protocol/src/payload.rs | 39 ++++++++++++++++++++++++++ lazer/sdk/rust/protocol/src/router.rs | 9 ++++++ 4 files changed, 62 insertions(+), 14 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 76c7708924..94e23725be 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5626,7 +5626,7 @@ dependencies = [ "hyper 1.6.0", "hyper-util", "protobuf", - "pyth-lazer-protocol 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)", + "pyth-lazer-protocol 0.10.1", "pyth-lazer-publisher-sdk 0.3.0", "reqwest 0.12.22", "serde", @@ -5657,7 +5657,7 @@ dependencies = [ "futures-util", "hex", "libsecp256k1 0.7.2", - "pyth-lazer-protocol 0.10.1", + "pyth-lazer-protocol 0.10.2", "serde", "serde_json", "tokio", @@ -5671,21 +5671,17 @@ dependencies = [ [[package]] name = "pyth-lazer-protocol" version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d321e49be0315d68f07d097d240701a05e003e05eff5ac9f2d0457d4a606dd92" dependencies = [ - "alloy-primitives 0.8.25", "anyhow", - "bincode 1.3.3", - "bs58", "byteorder", "chrono", "derive_more 1.0.0", - "ed25519-dalek 2.1.1", "hex", "humantime", "humantime-serde", "itertools 0.13.0", - "libsecp256k1 0.7.2", - "mry", "protobuf", "rust_decimal", "serde", @@ -5694,18 +5690,22 @@ dependencies = [ [[package]] name = "pyth-lazer-protocol" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d321e49be0315d68f07d097d240701a05e003e05eff5ac9f2d0457d4a606dd92" +version = "0.10.2" dependencies = [ + "alloy-primitives 0.8.25", "anyhow", + "bincode 1.3.3", + "bs58", "byteorder", "chrono", "derive_more 1.0.0", + "ed25519-dalek 2.1.1", "hex", "humantime", "humantime-serde", "itertools 0.13.0", + "libsecp256k1 0.7.2", + "mry", "protobuf", "rust_decimal", "serde", @@ -5722,7 +5722,7 @@ dependencies = [ "fs-err", "protobuf", "protobuf-codegen", - "pyth-lazer-protocol 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)", + "pyth-lazer-protocol 0.10.1", "serde_json", ] @@ -5734,7 +5734,7 @@ dependencies = [ "fs-err", "protobuf", "protobuf-codegen", - "pyth-lazer-protocol 0.10.1", + "pyth-lazer-protocol 0.10.2", "serde_json", ] diff --git a/lazer/sdk/rust/protocol/Cargo.toml b/lazer/sdk/rust/protocol/Cargo.toml index 52cce03af0..5865eb27da 100644 --- a/lazer/sdk/rust/protocol/Cargo.toml +++ b/lazer/sdk/rust/protocol/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pyth-lazer-protocol" -version = "0.10.1" +version = "0.10.2" edition = "2021" description = "Pyth Lazer SDK - protocol types." license = "Apache-2.0" diff --git a/lazer/sdk/rust/protocol/src/payload.rs b/lazer/sdk/rust/protocol/src/payload.rs index 8506183995..4f02691762 100644 --- a/lazer/sdk/rust/protocol/src/payload.rs +++ b/lazer/sdk/rust/protocol/src/payload.rs @@ -42,6 +42,7 @@ pub enum PayloadPropertyValue { Confidence(Option), FundingRate(Option), FundingTimestamp(Option), + FundingRateInterval(Option), } #[derive(Debug, Clone, Default, PartialEq, Eq, Hash, Serialize, Deserialize)] @@ -98,6 +99,9 @@ impl PayloadData { } PriceFeedProperty::FundingTimestamp => { PayloadPropertyValue::FundingTimestamp(feed.funding_timestamp) + }, + PriceFeedProperty::FundingRateInterval => { + PayloadPropertyValue::FundingRateInterval(feed.funding_rate_interval) } }) .collect(), @@ -147,6 +151,11 @@ impl PayloadData { PayloadPropertyValue::FundingTimestamp(timestamp) => { writer.write_u8(PriceFeedProperty::FundingTimestamp as u8)?; write_option_timestamp::(&mut writer, *timestamp)?; + }, + &PayloadPropertyValue::FundingRateInterval(interval) => { + writer.write_u8(PriceFeedProperty::FundingRateInterval as u8)?; + write_option_duration::(&mut writer, interval)?; + } } } @@ -198,6 +207,9 @@ impl PayloadData { PayloadPropertyValue::FundingTimestamp(read_option_timestamp::( &mut reader, )?) + } else if property == PriceFeedProperty::FundingRateInterval as u8 { + PayloadPropertyValue::FundingRateInterval(read_option_interval::( + &mut reader, )?) } else { bail!("unknown property"); }; @@ -276,3 +288,30 @@ fn read_option_timestamp( Ok(None) } } + +fn write_option_duration( + mut writer: impl Write, + value: Option, +) -> std::io::Result<()> { + match value { + Some(value) => { + writer.write_u8(1)?; + writer.write_u64::(value.as_micros()) + } + None => { + writer.write_u8(0)?; + Ok(()) + } + } +} + +fn read_option_interval( + mut reader: impl Read, +) -> std::io::Result> { + let present = reader.read_u8()? != 0; + if present { + Ok(Some(DurationUs::from_micros(reader.read_u64::()?))) + } else { + Ok(None) + } +} diff --git a/lazer/sdk/rust/protocol/src/router.rs b/lazer/sdk/rust/protocol/src/router.rs index dd0decb0a7..a6dfb1053d 100644 --- a/lazer/sdk/rust/protocol/src/router.rs +++ b/lazer/sdk/rust/protocol/src/router.rs @@ -176,6 +176,7 @@ pub enum PriceFeedProperty { FundingRate, FundingTimestamp, // More fields may be added later. + FundingRateInterval, } #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default, Serialize, Deserialize)] @@ -525,6 +526,9 @@ pub struct ParsedFeedPayload { #[serde(default)] pub funding_timestamp: Option, // More fields may be added later. + #[serde(skip_serializing_if = "Option::is_none")] + #[serde(default)] + pub funding_rate_interval: Option, } impl ParsedFeedPayload { @@ -544,6 +548,7 @@ impl ParsedFeedPayload { confidence: None, funding_rate: None, funding_timestamp: None, + funding_rate_interval: None }; for &property in properties { match property { @@ -571,6 +576,9 @@ impl ParsedFeedPayload { PriceFeedProperty::FundingTimestamp => { output.funding_timestamp = data.funding_timestamp; } + PriceFeedProperty::FundingRateInterval => { + output.funding_rate_interval = data.funding_rate_interval; + } } } output @@ -591,6 +599,7 @@ impl ParsedFeedPayload { confidence: data.confidence, funding_rate: data.funding_rate, funding_timestamp: data.funding_timestamp, + funding_rate_interval: data.funding_rate_interval, } } } From 55e7b70a784bcb3812fe78acf657e74a922e5281 Mon Sep 17 00:00:00 2001 From: Bart Platak Date: Mon, 4 Aug 2025 23:20:38 +0100 Subject: [PATCH 2/3] fmt fix --- lazer/sdk/rust/protocol/src/payload.rs | 12 +++++++----- lazer/sdk/rust/protocol/src/router.rs | 2 +- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/lazer/sdk/rust/protocol/src/payload.rs b/lazer/sdk/rust/protocol/src/payload.rs index 4f02691762..144c566e5f 100644 --- a/lazer/sdk/rust/protocol/src/payload.rs +++ b/lazer/sdk/rust/protocol/src/payload.rs @@ -99,9 +99,11 @@ impl PayloadData { } PriceFeedProperty::FundingTimestamp => { PayloadPropertyValue::FundingTimestamp(feed.funding_timestamp) - }, + } PriceFeedProperty::FundingRateInterval => { - PayloadPropertyValue::FundingRateInterval(feed.funding_rate_interval) + PayloadPropertyValue::FundingRateInterval( + feed.funding_rate_interval, + ) } }) .collect(), @@ -151,11 +153,10 @@ impl PayloadData { PayloadPropertyValue::FundingTimestamp(timestamp) => { writer.write_u8(PriceFeedProperty::FundingTimestamp as u8)?; write_option_timestamp::(&mut writer, *timestamp)?; - }, + } &PayloadPropertyValue::FundingRateInterval(interval) => { writer.write_u8(PriceFeedProperty::FundingRateInterval as u8)?; write_option_duration::(&mut writer, interval)?; - } } } @@ -209,7 +210,8 @@ impl PayloadData { )?) } else if property == PriceFeedProperty::FundingRateInterval as u8 { PayloadPropertyValue::FundingRateInterval(read_option_interval::( - &mut reader, )?) + &mut reader, + )?) } else { bail!("unknown property"); }; diff --git a/lazer/sdk/rust/protocol/src/router.rs b/lazer/sdk/rust/protocol/src/router.rs index a6dfb1053d..df6ecb3c72 100644 --- a/lazer/sdk/rust/protocol/src/router.rs +++ b/lazer/sdk/rust/protocol/src/router.rs @@ -548,7 +548,7 @@ impl ParsedFeedPayload { confidence: None, funding_rate: None, funding_timestamp: None, - funding_rate_interval: None + funding_rate_interval: None, }; for &property in properties { match property { From 6ae8965f72df644a88b1767885c472c3b7260c16 Mon Sep 17 00:00:00 2001 From: Bart Platak Date: Mon, 4 Aug 2025 23:28:05 +0100 Subject: [PATCH 3/3] update comment --- lazer/sdk/rust/protocol/src/router.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lazer/sdk/rust/protocol/src/router.rs b/lazer/sdk/rust/protocol/src/router.rs index df6ecb3c72..e995380e8b 100644 --- a/lazer/sdk/rust/protocol/src/router.rs +++ b/lazer/sdk/rust/protocol/src/router.rs @@ -175,8 +175,8 @@ pub enum PriceFeedProperty { Confidence, FundingRate, FundingTimestamp, - // More fields may be added later. FundingRateInterval, + // More fields may be added later. } #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default, Serialize, Deserialize)]