From 9c5d05b6bc17462e36cedb6a2506b4030b859034 Mon Sep 17 00:00:00 2001 From: Mike MacCana Date: Fri, 2 Oct 2026 16:32:36 +0000 Subject: [PATCH] Pyth comments: Pyth Core is signed by Pyth's guardian set, not Wormhole's Since OP-PIP-131 (August 2026) the Pyth Receiver on Solana verifies updates against Pyth's five-key guardian set with a quorum of three, replacing Wormhole's nineteen guardians. Comments only; the PriceUpdateV2 layout and VerificationLevel enum are unchanged. Claude-Session: https://claude.ai/code/session_01TkdXg7a1aVDcxK28bJ9ujT --- basics/pyth/anchor-v1/programs/pythexample/src/lib.rs | 6 +++--- basics/pyth/anchor/programs/pythexample/src/lib.rs | 6 +++--- .../programs/perpetual-futures/src/state/oracle.rs | 2 +- .../anchor/programs/perpetual-futures/src/state/oracle.rs | 2 +- .../anchor-v1/programs/prop-amm/src/state/oracle.rs | 2 +- .../prop-amm/anchor/programs/prop-amm/src/state/oracle.rs | 2 +- 6 files changed, 10 insertions(+), 10 deletions(-) diff --git a/basics/pyth/anchor-v1/programs/pythexample/src/lib.rs b/basics/pyth/anchor-v1/programs/pythexample/src/lib.rs index 7db83d28..d530ae08 100644 --- a/basics/pyth/anchor-v1/programs/pythexample/src/lib.rs +++ b/basics/pyth/anchor-v1/programs/pythexample/src/lib.rs @@ -84,10 +84,10 @@ pub struct ReadPriceAccountConstraints<'info> { #[derive(AnchorSerialize, AnchorDeserialize, Clone, Debug, PartialEq, Eq)] pub enum VerificationLevel { - /// Partially verified: only `num_signatures` of the Wormhole guardians - /// were checked against the price update. + /// Partially verified: only `num_signatures` of the Pyth guardian set's + /// signatures were checked, fewer than its quorum of three of five. Partial { num_signatures: u8 }, - /// Fully verified against the full guardian set. + /// Verified against a quorum of the guardian set. Full, } diff --git a/basics/pyth/anchor/programs/pythexample/src/lib.rs b/basics/pyth/anchor/programs/pythexample/src/lib.rs index 9b39240e..1c663bb7 100644 --- a/basics/pyth/anchor/programs/pythexample/src/lib.rs +++ b/basics/pyth/anchor/programs/pythexample/src/lib.rs @@ -71,10 +71,10 @@ pub struct ReadPriceAccountConstraints { #[derive(Clone, Debug, PartialEq, Eq, wincode::SchemaRead, wincode::SchemaWrite)] pub enum VerificationLevel { - /// Partially verified: only `num_signatures` of the Wormhole guardians - /// were checked against the price update. + /// Partially verified: only `num_signatures` of the Pyth guardian set's + /// signatures were checked, fewer than its quorum of three of five. Partial { num_signatures: u8 }, - /// Fully verified against the full guardian set. + /// Verified against a quorum of the guardian set. Full, } diff --git a/finance/perpetual-futures/anchor-v1/programs/perpetual-futures/src/state/oracle.rs b/finance/perpetual-futures/anchor-v1/programs/perpetual-futures/src/state/oracle.rs index 6fc998bb..c76b8d48 100644 --- a/finance/perpetual-futures/anchor-v1/programs/perpetual-futures/src/state/oracle.rs +++ b/finance/perpetual-futures/anchor-v1/programs/perpetual-futures/src/state/oracle.rs @@ -14,7 +14,7 @@ use crate::errors::PerpError; // account as a `PriceUpdateV2` instead of reading offsets: from the // `pyth-solana-receiver-sdk` crate, or the vendored copy in `basics/pyth` on // Anchor 2. The Pyth Receiver program writes that account only after checking -// the Wormhole guardian signatures over the update, and the account type's +// the Pyth guardian set's signatures over the update, and the account type's // owner check rejects any account that program does not own. Map // `price_message.price`, `exponent` (the scale is its negation), `conf`, and // `publish_time` or `posted_slot` onto the checks below, and also check diff --git a/finance/perpetual-futures/anchor/programs/perpetual-futures/src/state/oracle.rs b/finance/perpetual-futures/anchor/programs/perpetual-futures/src/state/oracle.rs index 9b9a1974..fa727b35 100644 --- a/finance/perpetual-futures/anchor/programs/perpetual-futures/src/state/oracle.rs +++ b/finance/perpetual-futures/anchor/programs/perpetual-futures/src/state/oracle.rs @@ -14,7 +14,7 @@ use crate::errors::PerpError; // account as a `PriceUpdateV2` instead of reading offsets: from the // `pyth-solana-receiver-sdk` crate, or the vendored copy in `basics/pyth` on // Anchor 2. The Pyth Receiver program writes that account only after checking -// the Wormhole guardian signatures over the update, and the account type's +// the Pyth guardian set's signatures over the update, and the account type's // owner check rejects any account that program does not own. Map // `price_message.price`, `exponent` (the scale is its negation), `conf`, and // `publish_time` or `posted_slot` onto the checks below, and also check diff --git a/finance/prop-amm/anchor-v1/programs/prop-amm/src/state/oracle.rs b/finance/prop-amm/anchor-v1/programs/prop-amm/src/state/oracle.rs index f4a83401..ef33f7a9 100644 --- a/finance/prop-amm/anchor-v1/programs/prop-amm/src/state/oracle.rs +++ b/finance/prop-amm/anchor-v1/programs/prop-amm/src/state/oracle.rs @@ -14,7 +14,7 @@ use crate::errors::PropAmmError; // account as a `PriceUpdateV2` instead of reading offsets: from the // `pyth-solana-receiver-sdk` crate, or the vendored copy in `basics/pyth` on // Anchor 2. The Pyth Receiver program writes that account only after checking -// the Wormhole guardian signatures over the update, and the account type's +// the Pyth guardian set's signatures over the update, and the account type's // owner check rejects any account that program does not own. Map // `price_message.price`, `exponent` (the scale is its negation), `conf`, and // `publish_time` or `posted_slot` onto the checks below, and also check diff --git a/finance/prop-amm/anchor/programs/prop-amm/src/state/oracle.rs b/finance/prop-amm/anchor/programs/prop-amm/src/state/oracle.rs index fb6be7a3..e06cdd45 100644 --- a/finance/prop-amm/anchor/programs/prop-amm/src/state/oracle.rs +++ b/finance/prop-amm/anchor/programs/prop-amm/src/state/oracle.rs @@ -14,7 +14,7 @@ use crate::errors::PropAmmError; // account as a `PriceUpdateV2` instead of reading offsets: from the // `pyth-solana-receiver-sdk` crate, or the vendored copy in `basics/pyth` on // Anchor 2. The Pyth Receiver program writes that account only after checking -// the Wormhole guardian signatures over the update, and the account type's +// the Pyth guardian set's signatures over the update, and the account type's // owner check rejects any account that program does not own. Map // `price_message.price`, `exponent` (the scale is its negation), `conf`, and // `publish_time` or `posted_slot` onto the checks below, and also check