sbv2-solana/javascript/__deprecated__/sbv2-utils/tests/feed.tests.ts

186 lines
5.0 KiB
TypeScript

import * as anchor from "@project-serum/anchor";
import {
AnchorWallet,
JobAccount,
OracleJob,
} from "@switchboard-xyz/switchboard-v2";
// import fs from "fs";
import "mocha";
import {
awaitOpenRound,
createAggregator,
sleep,
SwitchboardTestContext,
} from "../lib/cjs";
describe("Feed tests", () => {
const payer = anchor.web3.Keypair.generate();
// const payer = anchor.web3.Keypair.fromSecretKey(
// new Uint8Array(
// JSON.parse(fs.readFileSync("../../../payer-keypair.json", "utf8"))
// )
// );
let switchboard: SwitchboardTestContext;
before(async () => {
try {
const localnetConnection = new anchor.web3.Connection(
"http://localhost:8899"
);
const provider = new anchor.AnchorProvider(
localnetConnection,
new AnchorWallet(payer),
{ commitment: "confirmed" }
);
switchboard = await SwitchboardTestContext.loadFromEnv(provider);
console.log("local env detected");
return;
} catch (error: any) {}
try {
const devnetConnection = new anchor.web3.Connection(
"https://switchboard.devnet.rpcpool.com/f9fe774d81ba4527a418f5b19477"
);
const provider = new anchor.AnchorProvider(
devnetConnection,
new AnchorWallet(payer),
{ commitment: "confirmed" }
);
// const airdropSignature = await devnetConnection.requestAirdrop(
// payer.publicKey,
// anchor.web3.LAMPORTS_PER_SOL
// );
// await devnetConnection.confirmTransaction(airdropSignature);
switchboard = await SwitchboardTestContext.loadDevnetQueue(
provider,
"uPeRMdfPmrPqgRWSrjAnAkH78RqAhe5kXoW6vBYRqFX"
);
console.log("devnet detected");
return;
} catch (error: any) {
// console.log(`Error: SBV2 Devnet - ${error.message}`);
console.error(error);
}
if (!switchboard) {
// If fails, throw error
throw new Error(
`Failed to load the SwitchboardTestContext from devnet or from a switchboard.env file`
);
}
const airdropSignature =
await switchboard.program.provider.connection.requestAirdrop(
payer.publicKey,
anchor.web3.LAMPORTS_PER_SOL
);
await switchboard.program.provider.connection.confirmTransaction(
airdropSignature
);
});
it("Creates a switchboard feed", async () => {
const job1 = await JobAccount.create(switchboard.program, {
name: Buffer.from("Job1"),
authority: payer.publicKey,
data: Buffer.from(
OracleJob.encodeDelimited(
OracleJob.create({
tasks: [
OracleJob.Task.create({
httpTask: OracleJob.HttpTask.create({
url: `https://ftx.us/api/markets/SOL_USD`,
}),
}),
OracleJob.Task.create({
jsonParseTask: OracleJob.JsonParseTask.create({
path: "$.result.price",
}),
}),
],
})
).finish()
),
});
const job2 = await JobAccount.create(switchboard.program, {
name: Buffer.from("Job1"),
authority: payer.publicKey,
data: Buffer.from(
OracleJob.encodeDelimited(
OracleJob.create({
tasks: [
OracleJob.Task.create({
httpTask: OracleJob.HttpTask.create({
url: "https://www.binance.com/api/v3/ticker/price?symbol=SOLUSDT",
}),
}),
OracleJob.Task.create({
jsonParseTask: OracleJob.JsonParseTask.create({
path: "$.price",
}),
}),
OracleJob.Task.create({
multiplyTask: OracleJob.MultiplyTask.create({
aggregatorPubkey:
"ETAaeeuQBwsh9mC2gCov9WdhJENZuffRMXY2HgjCcSL9",
}),
}),
],
})
).finish()
),
});
let retryCount = 10;
while (retryCount) {
try {
await job1.loadData();
await job2.loadData();
break;
} catch {
await sleep(1000);
--retryCount;
}
}
try {
const newAggregator = await createAggregator(
switchboard.program,
switchboard.queue,
{
name: Buffer.from("Test Feed"),
batchSize: 1,
minRequiredOracleResults: 1,
minRequiredJobResults: 1,
minUpdateDelaySeconds: 10,
queueAccount: switchboard.queue,
},
[
[job1, 1],
[job2, 1],
],
new anchor.BN(12500 * 5)
);
console.log(`Created Aggregator: ${newAggregator.publicKey}`);
// call openRound
const value = await awaitOpenRound(
newAggregator,
switchboard.queue,
switchboard.payerTokenWallet,
undefined,
45
);
console.log(`Aggregator Value: ${value.toString()}`);
} catch (error) {
console.error(error);
throw error;
}
});
});