3.0.0 • Published 12 days ago

@switchboard-xyz/aptos.js v3.0.0

Weekly downloads
-
License
MIT
Repository
github
Last release
12 days ago

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);
  }
});
3.0.0

12 days ago

2.7.0

4 months ago

2.6.11

7 months ago

2.6.10

11 months ago

2.6.9-beta.2

11 months ago

2.6.9-beta.1

11 months ago

2.6.9-beta.0

11 months ago

2.6.8

1 year ago

2.6.7

1 year ago

2.6.6

1 year ago

2.6.3

1 year ago

2.6.5

1 year ago

2.6.4

1 year ago

2.6.1

1 year ago

2.6.0

1 year ago

2.6.2

1 year ago

2.5.32

1 year ago

2.4.0

2 years ago

2.3.24

2 years ago

2.3.25

2 years ago

2.5.6

2 years ago

2.3.8

2 years ago

2.5.5

2 years ago

2.3.7

2 years ago

2.5.8

2 years ago

2.5.7

2 years ago

2.3.9

2 years ago

2.5.9

2 years ago

2.5.18

2 years ago

2.5.14

2 years ago

2.5.15

2 years ago

2.5.16

2 years ago

2.5.17

2 years ago

2.5.10

2 years ago

2.5.11

2 years ago

2.5.12

2 years ago

2.5.13

2 years ago

2.5.29

2 years ago

2.5.0

2 years ago

2.5.25

2 years ago

2.5.2

2 years ago

2.5.26

2 years ago

2.5.1

2 years ago

2.5.27

2 years ago

2.3.6

2 years ago

2.5.28

2 years ago

2.5.3

2 years ago

2.3.5

2 years ago

2.5.21

2 years ago

2.5.22

2 years ago

2.5.23

2 years ago

2.5.24

2 years ago

2.5.20

2 years ago

2.5.30

1 year ago

2.5.31

1 year ago

2.3.3

2 years ago

2.3.2

2 years ago

2.3.1

2 years ago

2.3.0

2 years ago

2.2.1

2 years ago

2.2.0

2 years ago

2.1.0

2 years ago

2.0.8

2 years ago

2.0.7

2 years ago

2.0.6

2 years ago

2.0.5

2 years ago

2.0.4

2 years ago

2.0.3

2 years ago

2.0.2

2 years ago

2.0.1

2 years ago

2.0.0

2 years ago

2.0.0-beta.1

2 years ago

2.0.0-beta.0

2 years ago