switchboard-v2

A Rust library to interact with Switchboard V2's hosted data feeds.

cargo   twitter  

Description

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.

Usage

Aggregator

```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))?; ```

Aggregator History

```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()?; ```

VRF Account

```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; ```

Buffer Relayer Account

```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); ```