solana.js: added priorityFees to createFeed methods

This commit is contained in:
Conner Gallagher 2022-12-20 08:19:59 -07:00
parent b55a594548
commit 87c9092ea0
6 changed files with 110 additions and 7 deletions

View File

@ -976,10 +976,10 @@ export class AggregatorAccount extends Account<types.AggregatorAccountData> {
) )
) )
: null, : null,
basePriorityFee: params.basePriorityFee ?? 0, basePriorityFee: params.basePriorityFee ?? null,
priorityFeeBump: params.priorityFeeBump ?? 0, priorityFeeBump: params.priorityFeeBump ?? null,
priorityFeeBumpPeriod: params.priorityFeeBumpPeriod ?? 0, priorityFeeBumpPeriod: params.priorityFeeBumpPeriod ?? null,
maxPriorityFeeMultiplier: params.maxPriorityFeeMultiplier ?? 0, maxPriorityFeeMultiplier: params.maxPriorityFeeMultiplier ?? null,
}, },
}, },
{ {

View File

@ -333,7 +333,7 @@ export class CrankAccount extends Account<types.CrankAccountData> {
num?: number, num?: number,
unixTimestamp?: number unixTimestamp?: number
): Promise<PublicKey[]> { ): Promise<PublicKey[]> {
console.log(`unix: ${unixTimestamp}`);
const now = unixTimestamp ?? Math.floor(Date.now() / 1000); const now = unixTimestamp ?? Math.floor(Date.now() / 1000);
const crankRows = await this.peakNextWithTime(num); const crankRows = await this.peakNextWithTime(num);
return crankRows return crankRows

View File

@ -572,6 +572,28 @@ export class QueueAccount extends Account<types.OracleQueueAccountData> {
txns.push(permissionInit); txns.push(permissionInit);
// set priority fees
if (
params.basePriorityFee !== undefined ||
params.priorityFeeBump !== undefined ||
params.priorityFeeBumpPeriod !== undefined ||
params.maxPriorityFeeMultiplier !== undefined
) {
const setAggregatorConfig = await aggregatorAccount.setConfigInstruction(
payer,
{
force: true,
authority: params.authority,
basePriorityFee: params.basePriorityFee,
priorityFeeBump: params.priorityFeeBump,
priorityFeeBumpPeriod: params.priorityFeeBumpPeriod,
maxPriorityFeeMultiplier: params.maxPriorityFeeMultiplier,
}
);
post.push(setAggregatorConfig);
}
for await (const { job, weight } of jobs) { for await (const { job, weight } of jobs) {
const addJobTxn = aggregatorAccount.addJobInstruction(payer, { const addJobTxn = aggregatorAccount.addJobInstruction(payer, {
job: job, job: job,
@ -1381,6 +1403,11 @@ export type CreateQueueFeedParams = Omit<
crankPubkey?: PublicKey; crankPubkey?: PublicKey;
crankDataBuffer?: PublicKey; crankDataBuffer?: PublicKey;
historyLimit?: number; historyLimit?: number;
} & {
basePriorityFee?: number;
priorityFeeBump?: number;
priorityFeeBumpPeriod?: number;
maxPriorityFeeMultiplier?: number;
} & Partial<LeaseInitParams> & } & Partial<LeaseInitParams> &
Partial<PermissionSetParams> & { Partial<PermissionSetParams> & {
// job params // job params

View File

@ -24,6 +24,11 @@ export class AggregatorJson implements CreateQueueFeedParams {
disableCrank: boolean; disableCrank: boolean;
crankIndex?: number; crankIndex?: number;
basePriorityFee?: number;
priorityFeeBump?: number;
priorityFeeBumpPeriod?: number;
maxPriorityFeeMultiplier?: number;
// lease params // lease params
fundAmount: number; fundAmount: number;
@ -63,6 +68,22 @@ export class AggregatorJson implements CreateQueueFeedParams {
this.disableCrank = parseBoolean(object, 'disableCrank', false); this.disableCrank = parseBoolean(object, 'disableCrank', false);
this.crankIndex = this.crankIndex =
'crankIndex' in object ? Number(object.crankIndex) : undefined; 'crankIndex' in object ? Number(object.crankIndex) : undefined;
this.basePriorityFee =
'basePriorityFee' in object
? Number.parseInt(object.basePriorityFee)
: undefined;
this.priorityFeeBump =
'priorityFeeBump' in object
? Number.parseInt(object.priorityFeeBump)
: undefined;
this.priorityFeeBumpPeriod =
'priorityFeeBumpPeriod' in object
? Number.parseInt(object.priorityFeeBumpPeriod)
: undefined;
this.maxPriorityFeeMultiplier =
'maxPriorityFeeMultiplier' in object
? Number.parseInt(object.maxPriorityFeeMultiplier)
: undefined;
// lease // lease
this.fundAmount = parseNumber(object, 'fundAmount', 0); this.fundAmount = parseNumber(object, 'fundAmount', 0);

View File

@ -12,7 +12,6 @@ import {
QueueAccount, QueueAccount,
} from '../src'; } from '../src';
import { OracleJob } from '@switchboard-xyz/common'; import { OracleJob } from '@switchboard-xyz/common';
import BN from 'bn.js';
describe('Aggregator Tests', () => { describe('Aggregator Tests', () => {
let ctx: TestContext; let ctx: TestContext;
@ -379,4 +378,61 @@ describe('Aggregator Tests', () => {
`Failed to setConfig on aggregator` `Failed to setConfig on aggregator`
); );
}); });
it('Sets priority fees during feed creation', async () => {
const basePriorityFee = 10000;
const priorityFeeBump = 1000;
const priorityFeeBumpPeriod = 60;
const maxPriorityFeeMultiplier = 10;
const [myAggregatorAccount] = await queueAccount.createFeed({
queueAuthority: queueAuthority,
batchSize: 1,
minRequiredOracleResults: 1,
minRequiredJobResults: 1,
minUpdateDelaySeconds: 60,
fundAmount: 2.5,
enable: true,
basePriorityFee,
priorityFeeBump,
priorityFeeBumpPeriod,
maxPriorityFeeMultiplier,
jobs: [
{ pubkey: jobAccount.publicKey },
{
weight: 2,
data: OracleJob.encodeDelimited(
OracleJob.fromObject({
tasks: [
{
valueTask: {
value: 1,
},
},
],
})
).finish(),
},
],
});
const myAggregator = await myAggregatorAccount.loadData();
assert(
myAggregator.basePriorityFee === basePriorityFee,
`basePriorityFee mismatch, expected ${basePriorityFee}, received ${myAggregator.basePriorityFee}`
);
assert(
myAggregator.priorityFeeBump === priorityFeeBump,
`priorityFeeBump mismatch, expected ${priorityFeeBump}, received ${myAggregator.priorityFeeBump}`
);
assert(
myAggregator.priorityFeeBumpPeriod === priorityFeeBumpPeriod,
`priorityFeeBumpPeriod mismatch, expected ${priorityFeeBumpPeriod}, received ${myAggregator.priorityFeeBumpPeriod}`
);
assert(
myAggregator.maxPriorityFeeMultiplier === maxPriorityFeeMultiplier,
`maxPriorityFeeMultiplier mismatch, expected ${maxPriorityFeeMultiplier}, received ${myAggregator.maxPriorityFeeMultiplier}`
);
});
}); });

View File

@ -109,7 +109,6 @@ export async function setupTest(): Promise<TestContext> {
: Keypair.generate(); : Keypair.generate();
const programId = getProgramId(cluster); const programId = getProgramId(cluster);
console.log(`PROGRAM_ID: ${programId.toBase58()}`);
const program = await sbv2.SwitchboardProgram.load( const program = await sbv2.SwitchboardProgram.load(
cluster, cluster,