132 lines
3.1 KiB
TypeScript
132 lines
3.1 KiB
TypeScript
import "mocha";
|
|
|
|
import * as sbv2 from "../src/index.js";
|
|
import {
|
|
AggregatorAccount,
|
|
JobAccount,
|
|
LeaseAccount,
|
|
QueueAccount,
|
|
} from "../src/index.js";
|
|
|
|
import { setupTest, TestContext } from "./utils.js";
|
|
|
|
import { Keypair, PublicKey } from "@solana/web3.js";
|
|
import { OracleJob } from "@switchboard-xyz/common";
|
|
import assert from "assert";
|
|
|
|
describe("Lease Tests", () => {
|
|
let ctx: TestContext;
|
|
|
|
const jobData = OracleJob.encodeDelimited(
|
|
OracleJob.fromObject({
|
|
tasks: [
|
|
{
|
|
valueTask: {
|
|
value: 1337,
|
|
},
|
|
},
|
|
],
|
|
})
|
|
).finish();
|
|
|
|
const queueAuthority = Keypair.generate();
|
|
let queueAccount: QueueAccount;
|
|
|
|
const jobAuthority1 = Keypair.generate();
|
|
let jobAccount1: JobAccount;
|
|
|
|
const jobAuthority2 = Keypair.generate();
|
|
let jobAccount2: JobAccount;
|
|
|
|
let aggregatorAccount: AggregatorAccount;
|
|
|
|
let userTokenAddress: PublicKey;
|
|
|
|
before(async () => {
|
|
ctx = await setupTest();
|
|
|
|
[queueAccount] = await sbv2.QueueAccount.create(ctx.program, {
|
|
name: "aggregator-queue",
|
|
metadata: "",
|
|
authority: queueAuthority.publicKey,
|
|
queueSize: 1,
|
|
reward: 0,
|
|
minStake: 0,
|
|
oracleTimeout: 86400,
|
|
slashingEnabled: false,
|
|
unpermissionedFeeds: true,
|
|
unpermissionedVrf: true,
|
|
enableBufferRelayers: false,
|
|
});
|
|
|
|
[jobAccount1] = await JobAccount.create(ctx.program, {
|
|
authority: jobAuthority1,
|
|
data: jobData,
|
|
weight: 1,
|
|
});
|
|
|
|
[jobAccount2] = await JobAccount.create(ctx.program, {
|
|
authority: jobAuthority2,
|
|
data: jobData,
|
|
weight: 1,
|
|
});
|
|
|
|
[aggregatorAccount] = await AggregatorAccount.create(ctx.program, {
|
|
queueAccount: queueAccount,
|
|
queueAuthority: queueAuthority.publicKey,
|
|
batchSize: 2,
|
|
minRequiredOracleResults: 2,
|
|
minRequiredJobResults: 1,
|
|
minUpdateDelaySeconds: 5,
|
|
});
|
|
|
|
[userTokenAddress] = await ctx.program.mint.getOrCreateWrappedUser(
|
|
ctx.payer.publicKey,
|
|
{ fundUpTo: 0.1 }
|
|
);
|
|
});
|
|
|
|
it("Creates a Lease", async () => {
|
|
const fundAmount = 0.025;
|
|
|
|
const [leaseAccount] = await sbv2.LeaseAccount.create(ctx.program, {
|
|
aggregatorAccount,
|
|
queueAccount,
|
|
fundAmount: fundAmount,
|
|
funderTokenWallet: userTokenAddress,
|
|
});
|
|
|
|
await leaseAccount.loadData();
|
|
|
|
const leaseBalance = await leaseAccount.fetchBalance();
|
|
|
|
assert(
|
|
leaseBalance === fundAmount,
|
|
`Incorrect lease balance, expected ${fundAmount} wSOL, received ${leaseBalance}`
|
|
);
|
|
});
|
|
|
|
it("Extends a Lease", async () => {
|
|
const [leaseAccount] = LeaseAccount.fromSeed(
|
|
ctx.program,
|
|
queueAccount.publicKey,
|
|
aggregatorAccount.publicKey
|
|
);
|
|
|
|
const initialLeaseBalance = await leaseAccount.fetchBalance();
|
|
|
|
await leaseAccount.extend({
|
|
fundAmount: 0.075,
|
|
funderTokenWallet: userTokenAddress,
|
|
});
|
|
|
|
const expectedFinalBalance = initialLeaseBalance + 0.075;
|
|
const finalBalance = await leaseAccount.fetchBalance();
|
|
|
|
assert(
|
|
finalBalance === expectedFinalBalance,
|
|
`Incorrect lease balance, expected ${expectedFinalBalance} wSOL, received ${finalBalance}`
|
|
);
|
|
});
|
|
});
|