#price #receiver #solana #pyth #update #account #version

pyth-solana-receiver-sdk-legacy

Pyth Solana 接收器程序的 SDK 兼容版本

2 个版本

0.3.3 2024 年 6 月 6 日
0.3.2 2024 年 6 月 6 日
0.3.1 2024 年 6 月 5 日

#7 in #pyth

Apache-2.0

155KB
3.5K SLoC

这是一个为了向后兼容而进行的分支!

这是一个对以下 Pyth 接收器 SDK 的分支,以支持 Anchor 版本 26 及以下和 solana-program 版本 1.14.x 及以下。其他方面与原始版本相同。请参阅:https://github.com/mithraiclabs/pyth-crosschain-legacy

Pyth Solana 接收器 Rust SDK

这是一个用于构建消费 Pyth Solana 接收器发布的 Pyth 价格更新的 Solana 程序的 Rust SDK。

可在 crates.io 上找到。

拉模型

Pyth Solana 接收器允许用户基于拉取方式消费 Pyth 价格更新。这意味着用户负责在想要与需要价格更新的应用程序交互时提交链上价格数据。

价格更新将被发布到由接收器合约拥有的价格更新账户中。一旦价格更新发布到价格更新账户,任何人都可以通过将价格更新账户作为 Solana 指令中的账户之一来使用它。价格更新账户可以被写作者关闭以回收租金。

警告

当使用价格更新账户时,您应该检查账户是否由 Pyth Solana 接收器合约拥有,以避免模仿攻击。如果您使用 Anchor 的 Account 结构(例如:Account<'info, PriceUpdateV2>),此 SDK 会检查此问题。

您还应检查账户的 verification_level。有关此内容的更多信息,请参阅 此处VerificationLevel 文档。

示例用途

一个 Solana 程序可以使用此 SDK 消费由 Pyth Solana 接收器创建的价格更新账户

use anchor_lang::prelude::*;
use pyth_solana_receiver_sdk::price_update::{get_feed_id_from_hex, PriceUpdateV2};

declare_id!("2e5gZD3suxgJgkCg4pkoogxDKszy1SAwokz8mNeZUj4M");

pub const MAXIMUM_AGE: u64 = 60; // One minute
pub const FEED_ID: &str = "0xef0d8b6fda2ceba41da15d4095d1da392a0d2f8ed0c6c7bc0f4cfac8c280b56d"; // SOL/USD price feed id from https://pyth.network/developers/price-feed-ids

#[program]
pub mod my_first_pyth_app {
    use super::*;

    pub fn initialize(ctx: Context<Initialize>) -> Result<()> {
        let price_update = &mut ctx.accounts.price_update;
        let price = price_update.get_price_no_older_than(
            &Clock::get()?,
            MAXIMUM_AGE,
            &get_feed_id_from_hex(FEED_ID)?,
        )?;
        /// Do something with the price
        Ok(())
    }
}

#[derive(Accounts)]
pub struct Initialize<'info> {
    #[account(mut)]
    pub payer: Signer<'info>,
    pub price_update: Account<'info, PriceUpdateV2>,
    // Add more accounts here
}


依赖关系

~16–28MB
~424K SLoC