Skip to main content

Switchboard Logo

@switchboard-xyz/aptos.js

A Typescript client to interact with Switchboard on Aptos.

NPM Badge

Install

npm i --save @switchboard-xyz/aptos.js

Usage

Directory

Reading Feeds

import { AggregatorAccount } from "@switchboard-xyz/aptos.js";

const aggregatorAccount: AggregatorAccount = new AggregatorAccount(
client,
aggregator_address,
SWITCHBOARD_ADDRESS
);

console.log(await aggregatorAccount.loadData());

Creating Feeds

import { Buffer } from "buffer";
import { AptosClient, AptosAccount, FaucetClient, HexString } from "aptos";
import {
AptosEvent,
EventCallback,
OracleJob,
createFeed,
} from "@switchboard-xyz/aptos.js";
import Big from "big.js";

const NODE_URL = "https://fullnode.devnet.aptoslabs.com/v1";
const FAUCET_URL = "https://faucet.devnet.aptoslabs.com";

const SWITCHBOARD_ADDRESS =
"0x34e2eead0aefbc3d0af13c0522be94b002658f4bef8e0740a21086d22236ad77";

const SWITCHBOARD_QUEUE_ADDRESS =
"0x34e2eead0aefbc3d0af13c0522be94b002658f4bef8e0740a21086d22236ad77";

const SWITCHBOARD_CRANK_ADDRESS =
"0x34e2eead0aefbc3d0af13c0522be94b002658f4bef8e0740a21086d22236ad77";

const client = new AptosClient(NODE_URL);
const faucetClient = new FaucetClient(NODE_URL, FAUCET_URL);

// create new user
let user = new AptosAccount();

await faucetClient.fundAccount(user.address(), 50000);
console.log(`User account ${user.address().hex()} created + funded.`);

// Make Job data for btc price
const serializedJob = Buffer.from(
OracleJob.encodeDelimited(
OracleJob.create({
tasks: [
{
httpTask: {
url: "https://www.binance.us/api/v3/ticker/price?symbol=BTCUSD",
},
},
{
jsonParseTask: {
path: "$.price",
},
},
],
})
).finish()
);

const [aggregator, createFeedTx] = await createFeed(
client,
user,
{
authority: user.address(),
queueAddress: SWITCHBOARD_QUEUE_ADDRESS, // account with OracleQueue resource
crankAddress: SWITCHBOARD_CRANK_ADDRESS, // account with Crank resource
batchSize: 1, // number of oracles to respond to each round
minJobResults: 1, // minimum # of jobs that need to return a result
minOracleResults: 1, // minumum # of oracles that need to respond for a result
minUpdateDelaySeconds: 5, // minimum delay between rounds
coinType: "0x1::aptos_coin::AptosCoin", // CoinType of the queue (now only AptosCoin)
initialLoadAmount: 1000, // load of the lease
jobs: [
{
name: "BTC/USD",
metadata: "binance",
authority: user.address().hex(),
data: serializedJob.toString("base64"), // jobs need to be base64 encoded strings
weight: 1,
},
],
},
SWITCHBOARD_ADDRESS
);

console.log(
`Created Aggregator and Lease resources at account address ${aggregator.address}. Tx hash ${createFeedTx}`
);

// Manually trigger an update
await aggregator.openRound(user);

Listening to Updates

/**
* Listen to Aggregator Updates Off-Chain
*/

// create event listener
const onAggregatorUpdate = (
client: AptosClient,
callback: EventCallback,
pollIntervalMs: number = 1000
): AptosEvent => {
return AggregatorAccount.watch(
client,
SWITCHBOARD_ADDRESS,
callback,
pollIntervalMs
);
};

// initialize event listener
const updatePoller = onAggregatorUpdate(client, async (e) => {
if (aggregator.address == e.data.aggregator_address) {
console.log(`NEW RESULT:`, e.data);
}
});

Index

Properties

IOracleJob

IOracleJob: any

References

OracleJob

Renames and re-exports IOracleJob

Type Aliases

AptosNetwork

AptosNetwork: localnet | devnet | testnet | mainnet

EventCallback

EventCallback: (e: any) => Promise<void>

Type declaration

    • (e: any): Promise<void>
    • Parameters

      • e: any

      Returns Promise<void>

Variables

constDEVNET_PROGRAM_ID

DEVNET_PROGRAM_ID: 0xb91d3fef0eeb4e685dc85e739c7d3e2968784945be4424e92e2f86e2418bf271 = "0xb91d3fef0eeb4e685dc85e739c7d3e2968784945be4424e92e2f86e2418bf271"

constErrorCodeMap

ErrorCodeMap: Map<string, SwitchboardErrorEnum> = ...

constMAINNET_PROGRAM_ID

MAINNET_PROGRAM_ID: 0x7d7e436f0b2aafde60774efb26ccc432cf881b677aca7faaf2a01879bd19fb8 = "0x7d7e436f0b2aafde60774efb26ccc432cf881b677aca7faaf2a01879bd19fb8"

constPROGRAM_ID

PROGRAM_ID: 0x7d7e436f0b2aafde60774efb26ccc432cf881b677aca7faaf2a01879bd19fb8 = MAINNET_PROGRAM_ID

constSWITCHBOARD_DEVNET_ADDRESS

SWITCHBOARD_DEVNET_ADDRESS: 0xb91d3fef0eeb4e685dc85e739c7d3e2968784945be4424e92e2f86e2418bf271 = ...

constSWITCHBOARD_MAINNET_ADDRESS

SWITCHBOARD_MAINNET_ADDRESS: 0x7d7e436f0b2aafde60774efb26ccc432cf881b677aca7faaf2a01879bd19fb8 = ...

constSWITCHBOARD_TESTNET_ADDRESS

SWITCHBOARD_TESTNET_ADDRESS: 0xb91d3fef0eeb4e685dc85e739c7d3e2968784945be4424e92e2f86e2418bf271 = ...

constTESTNET_PROGRAM_ID

TESTNET_PROGRAM_ID: 0xb91d3fef0eeb4e685dc85e739c7d3e2968784945be4424e92e2f86e2418bf271 = "0xb91d3fef0eeb4e685dc85e739c7d3e2968784945be4424e92e2f86e2418bf271"