@switchboard-xyz/solana.js v3.2.5
@switchboard-xyz/solana.js
A Typescript client to interact with Switchboard V2 on Solana.
Install
npm i --save @switchboard-xyz/solana.js
Usage
Directory
- Load Switchboard Program
- Create a Queue
- Add an Oracle
- Create a Data Feed
- Request a New Value
- Read a Data Feed
- Add a History Buffer
- Watch Data Feed
Load Switchboard Program
import { Connection } from "@solana/web3.js";
import {
SwitchboardProgram,
TransactionObject,
} from "@switchboard-xyz/solana.js";
const program = await SwitchboardProgram.load(
"mainnet-beta",
new Connection("https://api.mainnet-beta.solana.com"),
payerKeypair /** Optional, READ-ONLY if not provided */
);
Create a Queue
import { QueueAccount } from "@switchboard-xyz/solana.js";
const [queueAccount, txnSignature] = await QueueAccount.create(program, {
name: "My Queue",
metadata: "Top Secret",
queueSize: 100,
reward: 0.00001337,
minStake: 10,
oracleTimeout: 60,
slashingEnabled: false,
unpermissionedFeeds: true,
unpermissionedVrf: true,
enableBufferRelayers: false,
});
const queue = await queueAccount.loadData();
Add an Oracle
import { QueueAccount } from "@switchboard-xyz/solana.js";
const queueAccount = new QueueAccount(program, queuePubkey);
const [oracleAccount, oracleInitSignature] = await queueAccount.createOracle({
name: "My Oracle",
metadata: "Oracle #1",
stakeAmount: 10,
});
const oracle = await oracleAccount.loadData();
await oracleAccount.heartbeat();
Create a Data Feed
import { QueueAccount } from "@switchboard-xyz/solana.js";
import { OracleJob } from "@switchboard-xyz/common";
const queueAccount = new QueueAccount(program, queuePubkey);
const [aggregatorAccount, aggregatorInitSignatures] =
await queueAccount.createFeed({
batchSize: 1,
minRequiredOracleResults: 1,
minRequiredJobResults: 1,
minUpdateDelaySeconds: 60,
fundAmount: 2.5, // deposit 2.5 wSOL into the leaseAccount escrow
jobs: [
{ pubkey: jobAccount.publicKey },
{
weight: 2,
data: OracleJob.encodeDelimited(
OracleJob.fromObject({
tasks: [
{
valueTask: {
value: 1,
},
},
],
})
).finish(),
},
],
});
const aggregator = await aggregatorAccount.loadData();
Request a New Value
import { AggregatorAccount } from "@switchboard-xyz/solana.js";
const aggregatorAccount = new AggregatorAccount(program, aggregatorPubkey);
await aggregatorAccount.openRound();
Read a Data Feed
After the oracles respond, read the feed result
import Big from "big.js";
import { AggregatorAccount } from "@switchboard-xyz/solana.js";
const aggregatorAccount = new AggregatorAccount(program, aggregatorPubkey);
const result: Big | null = await aggregatorAccount.fetchLatestValue();
if (result === null) {
throw new Error("Aggregator holds no value");
}
console.log(result.toString());
Add a History Buffer
Optionally, add a history buffer to your feed to store the last N historical samples
import {
AggregatorAccount,
AggregatorHistoryBuffer,
} from "@switchboard-xyz/solana.js";
const aggregatorAccount = new AggregatorAccount(program, aggregatorPubkey);
const aggregator = await aggregatorAccount.loadData();
const [historyBuffer, addHistorySignature] =
await AggregatorHistoryBuffer.create(program, {
aggregatorAccount,
maxSamples: 10000,
});
const history = await historyBuffer.loadData();
Watch Data Feed
Setup a websocket listener to invoke a callback whenever an aggregator is updated
import Big from "big.js";
import { AggregatorAccount } from "@switchboard-xyz/solana.js";
const aggregatorAccount = new AggregatorAccount(program, aggregatorPubkey);
const ws = aggregatorAccount.onChange((aggregator) => {
const result = AggregatorAccount.decodeLatestValue(aggregator);
if (result !== null) {
console.log(result.toString());
}
});
3 months ago
3 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
5 months ago
6 months ago
5 months ago
5 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
9 months ago
9 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
7 months ago
10 months ago
8 months ago
10 months ago
10 months ago
10 months ago
6 months ago
6 months ago
10 months ago
10 months ago
9 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
10 months ago
7 months ago
7 months ago
11 months ago
8 months ago
8 months ago
7 months ago
7 months ago
7 months ago
8 months ago
8 months ago
8 months ago
8 months ago
7 months ago
11 months ago
11 months ago
11 months ago
6 months ago
6 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
7 months ago
11 months ago
11 months ago
11 months ago
11 months ago
12 months ago
12 months ago
11 months ago
12 months ago
11 months ago
12 months ago
12 months ago
12 months ago
12 months ago
1 year ago
12 months ago
12 months ago
12 months ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago