4 个版本 (2 个破坏性更新)
0.3.1 | 2024 年 7 月 18 日 |
---|---|
0.3.0 | 2024 年 5 月 24 日 |
0.2.0 | 2024 年 5 月 1 日 |
0.1.0 | 2024 年 3 月 22 日 |
#3 in #pyth
2,612 每月下载量
用于 6 个 crate (通过 bonfida-utils)
36KB
699 行
Pyth Solana 接收 Rust SDK
这是一个用于构建 Solana 程序的 Rust SDK,这些程序将消费 Pyth Solana 接收器发布的 Pyth 价格更新。
它可在 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
}
依赖关系
~18–27MB
~457K SLoC