A Rust library to interact with Switchboard V2's hosted data feeds.
This package can be used to manage Switchboard data feed account parsing.
Specifically, this package will return the most recent confirmed round result from a provided data feed AccountInfo.
```rust use anchorlang::solanaprogram::clock; use std::convert::TryInto; use switchboardv2::{AggregatorAccountData, SwitchboardDecimal, SWITCHBOARDV2DEVNET, SWITCHBOARDV2_MAINNET};
// check feed owner let owner = *aggregator.owner; if owner != SWITCHBOARDV2DEVNET && owner != SWITCHBOARDV2MAINNET { return Err(error!(ErrorCode::InvalidSwitchboardAccount)); }
// deserialize account info let feed = AggregatorAccountData::new(feedaccountinfo)?;
// get result let decimal: f64 = feed.getresult()?.tryinto()?;
// check if feed has been updated in the last 5 minutes feed.checkstaleness(clock::Clock::get().unwrap().unixtimestamp, 300)?;
// check if feed exceeds a confidence interval of +/i $0.80 feed.checkconfidenceinterval(SwitchboardDecimal::from_f64(0.80))?; ```
```rust use switchboard_v2::AggregatorHistoryBuffer; use std::convert::TryInto;
let historybuffer = AggregatorHistoryBuffer::new(historyaccountinfo)?; let currenttimestamp = Clock::get()?.unixtimestamp; let onehourago: f64 = historybuffer.lowerbound(currenttimestamp - 3600).unwrap().try_into()?; ```
```rust use switchboard_v2::VrfAccountData;
let vrf = VrfAccountData::new(vrfaccountinfo)?; let resultbuffer = vrf.getresult()?; let value: &[u128] = bytemuck::castslice(&resultbuffer[..]); let result = value[0] % 256000 as u128; ```
```rust use anchorlang::solanaprogram::clock; use std::convert::TryInto; use switchboardv2::{BufferRelayerAccountData, SWITCHBOARDV2DEVNET, SWITCHBOARDV2_MAINNET};
// check feed owner let owner = *aggregator.owner; if owner != SWITCHBOARDV2DEVNET && owner != SWITCHBOARDV2MAINNET { return Err(error!(ErrorCode::InvalidSwitchboardAccount)); }
// deserialize account info let buffer = BufferRelayerAccountData::new(feedaccountinfo)?;
// get result let bufferresult = buffer.getresult();
// check if feed has been updated in the last 5 minutes buffer.checkstaleness(clock::Clock::get().unwrap().unixtimestamp, 300)?;
// convert buffer to a string let resultstring = String::fromutf8(buffer.result) .maperr(|| error!(ErrorCode::StringConversionFailed))?; msg!("Buffer string {:?}!", result_string); ```