switchboard-on-demand 0.1.6

A Rust library to interact with the Switchboard Solana program.
docs.rs failed to build switchboard-on-demand-0.1.6
Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.

Switchboard Logo

switchboard-on-demand

A Rust library for seamless interaction with Switchboard Oracle accounts on the Solana blockchain.

Crates.io Discord Twitter Follow

Overview

switchboard-on-demand provides Rust developers with an efficient and easy-to-use client for integrating Solana-based oracles from Switchboard into their applications. This library empowers developers to leverage decentralized, trustless, and highly reliable oracle data for various applications, particularly in the DeFi and Web3 spaces.

Features

  • On-Demand Oracle Data: Fetch real-time, accurate, and tamper-proof data for blockchain applications.
  • Custom Oracle Creation: Design and deploy your own oracles tailored to your specific data needs.
  • High Fidelity Financial Data: Ideal for applications requiring precise and dependable financial data.
  • Privacy-Focused: Operates within confidential runtimes to ensure data integrity and security.

Getting Started

Prerequisites

Ensure you have the following installed:

  • Rust (latest stable version)
  • Cargo
  • Solana CLI tools (if interacting directly with the Solana blockchain)

Installation

Add switchboard-on-demand to your Cargo.toml:

[dependencies]
switchboard-on-demand = "0.1.0"

Using on chain

use switchboard_on_demand::PullFeedAccountData;
use rust_decimal::Decimal;

pub fn solana_ix<'a>(mut ctx: Context<YourAccounts<'a>>, params: Params) -> Result<()> {
    // Assume `account_info` is obtained from the Solana blockchain
    let feed = PullFeedAccountData::parse(ctx.accounts.sb_feed)?;
    let max_stale_slots = 100; // Define the maximum number of slots before data is considered stale
    let min_samples = 5; // Set the minimum number of samples for data accuracy
    let price: Decimal = feed.get_value(&Clock::get()?, max_stale_slots, min_samples, true)?;

    msg!("Oracle Price: {}", price);

    Ok(())
}