pub struct TwapUpdate {
pub write_authority: Pubkey,
pub twap: TwapPrice,
}
Expand description
A time weighted average price account.
This account is used by the Pyth Receiver program to store a TWAP update from a Pyth price feed.
TwapUpdates can only be created after the client has verified the VAAs via the Wormhole contract.
Check out target_chains/solana/cli/src/main.rs
for an example of how to do this.
It contains:
write_authority
: The write authority for this account. This authority can close this account to reclaim rent or update the account to contain a different TWAP update.twap
: The actual TWAP update.
Fields§
§twap: TwapPrice
Implementations§
Source§impl TwapUpdate
impl TwapUpdate
pub const LEN: usize = 112usize
Sourcepub fn get_twap_unchecked(
&self,
feed_id: &FeedId,
) -> Result<TwapPrice, GetPriceError>
pub fn get_twap_unchecked( &self, feed_id: &FeedId, ) -> Result<TwapPrice, GetPriceError>
Get a TwapPrice
from a TwapUpdate
account for a given FeedId
.
§Warning
This function does not check :
- How recent the price is
- If the TWAP’s window size is expected
- Whether the price update has been verified
It is therefore unsafe to use this function without any extra checks, as it allows for the possibility of using unverified, outdated, or arbitrary window length twap updates.
Sourcepub fn get_twap_no_older_than(
&self,
clock: &Clock,
maximum_age: u64,
window_seconds: u64,
feed_id: &FeedId,
) -> Result<TwapPrice, GetPriceError>
pub fn get_twap_no_older_than( &self, clock: &Clock, maximum_age: u64, window_seconds: u64, feed_id: &FeedId, ) -> Result<TwapPrice, GetPriceError>
Get a TwapPrice
from a TwapUpdate
account for a given FeedId
no older than maximum_age
with a specific window size.
§Example
ⓘ
use pyth_solana_receiver_sdk::price_update::{get_feed_id_from_hex, TwapUpdate};
use anchor_lang::prelude::*;
const MAXIMUM_AGE: u64 = 30;
const WINDOW_SECONDS: u64 = 300; // 5-minute TWAP
const FEED_ID: &str = "0xef0d8b6fda2ceba41da15d4095d1da392a0d2f8ed0c6c7bc0f4cfac8c280b56d"; // SOL/USD
#[derive(Accounts)]
pub struct ReadTwapAccount<'info> {
pub twap_update: Account<'info, TwapUpdate>,
}
pub fn read_twap_account(ctx: Context<ReadTwapAccount>) -> Result<()> {
let twap_update = &ctx.accounts.twap_update;
let twap = twap_update.get_twap_no_older_than(
&Clock::get()?,
MAXIMUM_AGE,
WINDOW_SECONDS,
&get_feed_id_from_hex(FEED_ID)?
)?;
Ok(())
}
Trait Implementations§
Source§impl AccountDeserialize for TwapUpdate
impl AccountDeserialize for TwapUpdate
Source§fn try_deserialize(buf: &mut &[u8]) -> Result<Self>
fn try_deserialize(buf: &mut &[u8]) -> Result<Self>
Deserializes previously initialized account data. Should fail for all
uninitialized accounts, where the bytes are zeroed. Implementations
should be unique to a particular account type so that one can never
successfully deserialize the data of one account type into another.
For example, if the SPL token program were to implement this trait,
it should be impossible to deserialize a
Mint
account into a token
Account
.Source§fn try_deserialize_unchecked(buf: &mut &[u8]) -> Result<Self>
fn try_deserialize_unchecked(buf: &mut &[u8]) -> Result<Self>
Deserializes account data without checking the account discriminator.
This should only be used on account initialization, when the bytes of
the account are zeroed.
Source§impl AccountSerialize for TwapUpdate
impl AccountSerialize for TwapUpdate
Source§impl BorshDeserialize for TwapUpdate
impl BorshDeserialize for TwapUpdate
fn deserialize_reader<R: Read>(reader: &mut R) -> Result<Self, Error>
Source§fn deserialize(buf: &mut &[u8]) -> Result<Self, Error>
fn deserialize(buf: &mut &[u8]) -> Result<Self, Error>
Deserializes this instance from a given slice of bytes.
Updates the buffer to point at the remaining bytes.
Source§fn try_from_slice(v: &[u8]) -> Result<Self, Error>
fn try_from_slice(v: &[u8]) -> Result<Self, Error>
Deserialize this instance from a slice of bytes.
fn try_from_reader<R>(reader: &mut R) -> Result<Self, Error>where
R: Read,
Source§impl BorshSerialize for TwapUpdate
impl BorshSerialize for TwapUpdate
Source§impl BorshSchema for TwapUpdate
impl BorshSchema for TwapUpdate
Source§fn declaration() -> Declaration
fn declaration() -> Declaration
Get the name of the type without brackets.
Source§fn add_definitions_recursively(
definitions: &mut HashMap<Declaration, Definition>,
)
fn add_definitions_recursively( definitions: &mut HashMap<Declaration, Definition>, )
Recursively, using DFS, add type definitions required for this type. For primitive types
this is an empty map. Type definition explains how to serialize/deserialize a type.
Source§fn add_definition(
declaration: String,
definition: Definition,
definitions: &mut HashMap<String, Definition>,
)
fn add_definition( declaration: String, definition: Definition, definitions: &mut HashMap<String, Definition>, )
Helper method to add a single type definition to the map.
fn schema_container() -> BorshSchemaContainer
Source§impl Clone for TwapUpdate
impl Clone for TwapUpdate
Source§fn clone(&self) -> TwapUpdate
fn clone(&self) -> TwapUpdate
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source
. Read moreSource§impl Discriminator for TwapUpdate
impl Discriminator for TwapUpdate
Source§const DISCRIMINATOR: &'static [u8]
const DISCRIMINATOR: &'static [u8]
Discriminator slice. Read more
Auto Trait Implementations§
impl Freeze for TwapUpdate
impl RefUnwindSafe for TwapUpdate
impl Send for TwapUpdate
impl Sync for TwapUpdate
impl Unpin for TwapUpdate
impl UnwindSafe for TwapUpdate
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more