From 4db8ae5f574ed4855eeecadb5224c2e10092b07a Mon Sep 17 00:00:00 2001 From: Darun Seethammagari Date: Mon, 6 Jan 2025 10:43:48 -0800 Subject: [PATCH 1/4] Add publisher count to aggregated price feed data --- lazer/sdk/rust/protocol/src/payload.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/lazer/sdk/rust/protocol/src/payload.rs b/lazer/sdk/rust/protocol/src/payload.rs index b474804b77..014816d32a 100644 --- a/lazer/sdk/rust/protocol/src/payload.rs +++ b/lazer/sdk/rust/protocol/src/payload.rs @@ -39,6 +39,7 @@ pub struct AggregatedPriceFeedData { pub price: Option, pub best_bid_price: Option, pub best_ask_price: Option, + pub publisher_count: Option, } pub const PAYLOAD_FORMAT_MAGIC: u32 = 2479346549; From 5d9327cf7c2c077fdb06ec7fa68ce6333c877486 Mon Sep 17 00:00:00 2001 From: Darun Seethammagari Date: Mon, 6 Jan 2025 11:35:08 -0800 Subject: [PATCH 2/4] Add publisher count to parsed payloads --- lazer/sdk/rust/protocol/src/payload.rs | 2 +- lazer/sdk/rust/protocol/src/router.rs | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/lazer/sdk/rust/protocol/src/payload.rs b/lazer/sdk/rust/protocol/src/payload.rs index 014816d32a..8c9f969467 100644 --- a/lazer/sdk/rust/protocol/src/payload.rs +++ b/lazer/sdk/rust/protocol/src/payload.rs @@ -39,7 +39,7 @@ pub struct AggregatedPriceFeedData { pub price: Option, pub best_bid_price: Option, pub best_ask_price: Option, - pub publisher_count: Option, + pub publisher_count: Option, } pub const PAYLOAD_FORMAT_MAGIC: u32 = 2479346549; diff --git a/lazer/sdk/rust/protocol/src/router.rs b/lazer/sdk/rust/protocol/src/router.rs index f6559b0f28..09c1df09da 100644 --- a/lazer/sdk/rust/protocol/src/router.rs +++ b/lazer/sdk/rust/protocol/src/router.rs @@ -131,6 +131,7 @@ pub enum PriceFeedProperty { Price, BestBidPrice, BestAskPrice, + PublisherCount, // More fields may be added later. } @@ -392,6 +393,9 @@ pub struct ParsedFeedPayload { #[serde(with = "crate::serde_str::option_price")] #[serde(default)] pub best_ask_price: Option, + #[serde(skip_serializing_if = "Option::is_none")] + #[serde(default)] + pub publisher_count: Option, // More fields may be added later. } @@ -406,6 +410,7 @@ impl ParsedFeedPayload { price: None, best_bid_price: None, best_ask_price: None, + publisher_count: None, }; for &property in properties { match property { @@ -418,6 +423,9 @@ impl ParsedFeedPayload { PriceFeedProperty::BestAskPrice => { output.best_ask_price = data.best_ask_price; } + PriceFeedProperty::PublisherCount => { + output.publisher_count = data.publisher_count; + } } } output @@ -429,6 +437,7 @@ impl ParsedFeedPayload { price: data.price, best_bid_price: data.best_bid_price, best_ask_price: data.best_ask_price, + publisher_count: data.publisher_count, } } } From 3625fdb65c9eb3969942cbb224205882da4390d9 Mon Sep 17 00:00:00 2001 From: Darun Seethammagari Date: Mon, 6 Jan 2025 11:50:52 -0800 Subject: [PATCH 3/4] Change count to u16 --- lazer/sdk/rust/protocol/src/payload.rs | 9 ++++++++- lazer/sdk/rust/protocol/src/router.rs | 5 ++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/lazer/sdk/rust/protocol/src/payload.rs b/lazer/sdk/rust/protocol/src/payload.rs index 8c9f969467..7941bb612e 100644 --- a/lazer/sdk/rust/protocol/src/payload.rs +++ b/lazer/sdk/rust/protocol/src/payload.rs @@ -32,6 +32,7 @@ pub enum PayloadPropertyValue { Price(Option), BestBidPrice(Option), BestAskPrice(Option), + PublisherCount(u16), } #[derive(Debug, Clone, Default)] @@ -39,7 +40,7 @@ pub struct AggregatedPriceFeedData { pub price: Option, pub best_bid_price: Option, pub best_ask_price: Option, - pub publisher_count: Option, + pub publisher_count: u16, } pub const PAYLOAD_FORMAT_MAGIC: u32 = 2479346549; @@ -68,6 +69,9 @@ impl PayloadData { PriceFeedProperty::BestAskPrice => { PayloadPropertyValue::BestAskPrice(feed.best_ask_price) } + PriceFeedProperty::PublisherCount => { + PayloadPropertyValue::PublisherCount(feed.publisher_count) + } }) .collect(), }) @@ -97,6 +101,9 @@ impl PayloadData { writer.write_u8(PriceFeedProperty::BestAskPrice as u8)?; write_option_price::(&mut writer, *price)?; } + PayloadPropertyValue::PublisherCount(count) => { + writer.write_u16::(*count)?; + } } } } diff --git a/lazer/sdk/rust/protocol/src/router.rs b/lazer/sdk/rust/protocol/src/router.rs index 09c1df09da..d9b846c726 100644 --- a/lazer/sdk/rust/protocol/src/router.rs +++ b/lazer/sdk/rust/protocol/src/router.rs @@ -393,9 +393,8 @@ pub struct ParsedFeedPayload { #[serde(with = "crate::serde_str::option_price")] #[serde(default)] pub best_ask_price: Option, - #[serde(skip_serializing_if = "Option::is_none")] #[serde(default)] - pub publisher_count: Option, + pub publisher_count: u16, // More fields may be added later. } @@ -410,7 +409,7 @@ impl ParsedFeedPayload { price: None, best_bid_price: None, best_ask_price: None, - publisher_count: None, + publisher_count: 0, }; for &property in properties { match property { From a78a1c106c6fdd42ea6bd672317c0445486e7838 Mon Sep 17 00:00:00 2001 From: Darun Seethammagari Date: Mon, 6 Jan 2025 12:05:16 -0800 Subject: [PATCH 4/4] Bump version and change count to option of u16 --- lazer/Cargo.lock | 2 +- lazer/sdk/rust/protocol/Cargo.toml | 2 +- lazer/sdk/rust/protocol/src/payload.rs | 21 ++++++++++++++++++--- lazer/sdk/rust/protocol/src/router.rs | 5 +++-- 4 files changed, 23 insertions(+), 7 deletions(-) diff --git a/lazer/Cargo.lock b/lazer/Cargo.lock index 3cdb3a4c03..cedf88bec3 100644 --- a/lazer/Cargo.lock +++ b/lazer/Cargo.lock @@ -3190,7 +3190,7 @@ dependencies = [ [[package]] name = "pyth-lazer-protocol" -version = "0.2.0" +version = "0.2.1" dependencies = [ "anyhow", "bincode", diff --git a/lazer/sdk/rust/protocol/Cargo.toml b/lazer/sdk/rust/protocol/Cargo.toml index c5b87095d6..39ba1ab369 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.2.0" +version = "0.2.1" 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 7941bb612e..7e08cf465d 100644 --- a/lazer/sdk/rust/protocol/src/payload.rs +++ b/lazer/sdk/rust/protocol/src/payload.rs @@ -32,7 +32,7 @@ pub enum PayloadPropertyValue { Price(Option), BestBidPrice(Option), BestAskPrice(Option), - PublisherCount(u16), + PublisherCount(Option), } #[derive(Debug, Clone, Default)] @@ -40,7 +40,7 @@ pub struct AggregatedPriceFeedData { pub price: Option, pub best_bid_price: Option, pub best_ask_price: Option, - pub publisher_count: u16, + pub publisher_count: Option, } pub const PAYLOAD_FORMAT_MAGIC: u32 = 2479346549; @@ -102,7 +102,8 @@ impl PayloadData { write_option_price::(&mut writer, *price)?; } PayloadPropertyValue::PublisherCount(count) => { - writer.write_u16::(*count)?; + writer.write_u8(PriceFeedProperty::PublisherCount as u8)?; + write_option_u16::(&mut writer, *count)?; } } } @@ -142,6 +143,8 @@ impl PayloadData { PayloadPropertyValue::BestBidPrice(read_option_price::(&mut reader)?) } else if property == PriceFeedProperty::BestAskPrice as u8 { PayloadPropertyValue::BestAskPrice(read_option_price::(&mut reader)?) + } else if property == PriceFeedProperty::PublisherCount as u8 { + PayloadPropertyValue::PublisherCount(read_option_u16::(&mut reader)?) } else { bail!("unknown property"); }; @@ -169,6 +172,18 @@ fn read_option_price(mut reader: impl Read) -> std::io::Result( + mut writer: impl Write, + value: Option, +) -> std::io::Result<()> { + writer.write_u16::(value.unwrap_or(0)) +} + +fn read_option_u16(mut reader: impl Read) -> std::io::Result> { + let value = reader.read_u16::()?; + Ok(Some(value)) +} + pub const BINARY_UPDATE_FORMAT_MAGIC: u32 = 1937213467; pub const PARSED_FORMAT_MAGIC: u32 = 2584795844; diff --git a/lazer/sdk/rust/protocol/src/router.rs b/lazer/sdk/rust/protocol/src/router.rs index d9b846c726..75ef04fa04 100644 --- a/lazer/sdk/rust/protocol/src/router.rs +++ b/lazer/sdk/rust/protocol/src/router.rs @@ -393,8 +393,9 @@ pub struct ParsedFeedPayload { #[serde(with = "crate::serde_str::option_price")] #[serde(default)] pub best_ask_price: Option, + #[serde(skip_serializing_if = "Option::is_none")] #[serde(default)] - pub publisher_count: u16, + pub publisher_count: Option, // More fields may be added later. } @@ -409,7 +410,7 @@ impl ParsedFeedPayload { price: None, best_bid_price: None, best_ask_price: None, - publisher_count: 0, + publisher_count: None, }; for &property in properties { match property {