This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
static async fetchUpdateManyIx( | |
program: Program, | |
params_: { | |
gateway?: string; | |
feeds: PublicKey[]; | |
numSignatures: number; | |
crossbarClient?: CrossbarClient; | |
payer?: PublicKey; | |
}, | |
recentSlothashes?: Array<[anchor.BN, string]>, |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
use anchor_lang::prelude::*; | |
use arrayref::array_ref; | |
use bytemuck; | |
use crate::SwitchboardError; | |
#[repr(C)] | |
#[derive(bytemuck::Pod, bytemuck::Zeroable, Debug, Clone, Copy)] | |
pub struct SlotHash { | |
pub slot: u64, | |
pub hash: [u8; 32], |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"version": "0.1.0", | |
"name": "sb_on_demand", | |
"instructions": [ | |
{ | |
"name": "stateInit", | |
"accounts": [ | |
{ | |
"name": "state", | |
"isMut": true, |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
export async function fetchAllLutKeys( | |
queue: Queue, | |
feeds: PullFeed[] | |
): Promise<PublicKey[]> { | |
const oracles = await queue.fetchOracleKeys(); | |
const lutOwners: any[] = []; | |
lutOwners.push(queue); | |
for (const feed of feeds) { | |
lutOwners.push(feed); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
use solana_client::nonblocking::rpc_client::RpcClient; | |
use std::cmp::Ordering; | |
use std::str::FromStr; | |
use tokio; | |
use base64::{engine::general_purpose::STANDARD as base64, Engine as _}; | |
use libsecp256k1; | |
use hex; | |
use sha2::{Sha256, Digest}; | |
use solana_sdk::pubkey::Pubkey; | |
use solana_sdk::transaction::VersionedTransaction; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
use crate::protos::oracle_job::*; | |
use crate::TaskOutput; | |
use crate::TaskResult; | |
use crate::TaskRunnerContext; | |
use anyhow_ext::anyhow; | |
use anyhow_ext::Result; | |
use async_recursion::async_recursion; | |
use jupiter_amm_interface::Amm; | |
use jupiter_amm_interface::SwapMode; | |
use lazy_static::lazy_static; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
async fn get_accounts(client: &RpcClient, keys: Vec<Pubkey>) -> Result<HashMap<Pubkey, Account>> { | |
let account_datas: Vec<Option<Account>> = client | |
.get_multiple_accounts(&keys.clone()) | |
.await | |
.map_err(|_| anyhow!("Failed to get inf SPool accounts"))?; | |
let mut data_map = HashMap::new(); | |
for i in 0..keys.len() { | |
let key = &keys[i]; | |
let account = &account_datas[i]; | |
if let Some(account) = account { |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import * as anchor from "@coral-xyz/anchor"; | |
import type { Commitment } from "@solana/web3.js"; | |
import { Connection, Keypair } from "@solana/web3.js"; | |
import * as fs from "fs"; | |
import yaml from 'js-yaml'; | |
import path from 'path'; | |
import os from 'os'; | |
type SolanaConfig = { | |
rpcUrl: string; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
which base58 > /dev/null || (brew install pipx && pipx install base58) | |
# Function to detect if the input is hex | |
is_hex() { | |
[[ $1 =~ ^[0-9a-fA-F]+$ ]] && return 0 || return 1 | |
} | |
# Function to detect if the input is base64 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const coder = new BorshAccountsCoder(program.idl); | |
const oracles = await queue.fetchOracleKeys(); | |
const oracleAccounts = await utils.rpc.getMultipleAccounts( | |
program.provider.connection, | |
oracles | |
); | |
const oracleDatas = oracleAccounts | |
.map((x: any) => coder.decode("OracleAccountData", x.account.data)); | |
// TODO: now filter out all oracles that keys are not currently verified and keys expire in more than an hour |
NewerOlder