solana.js: cleaned up queue logic
This commit is contained in:
parent
0fa4fdaa84
commit
e15c83a801
|
@ -326,7 +326,10 @@ export class QueueAccount extends Account<types.OracleQueueAccountData> {
|
|||
authority: queueAuthorityPubkey,
|
||||
});
|
||||
|
||||
if (params.enable && params.queueAuthority) {
|
||||
if (
|
||||
params.enable &&
|
||||
(params.queueAuthority || queueAuthorityPubkey.equals(payer))
|
||||
) {
|
||||
const permissionSetTxn = permissionAccount.setInstruction(payer, {
|
||||
permission: new PermitOracleHeartbeat(),
|
||||
enable: true,
|
||||
|
@ -364,7 +367,11 @@ export class QueueAccount extends Account<types.OracleQueueAccountData> {
|
|||
* ```
|
||||
*/
|
||||
public async createOracle(
|
||||
params: OracleInitParams & OracleStakeParams & Partial<PermissionSetParams>
|
||||
params: OracleInitParams &
|
||||
OracleStakeParams &
|
||||
Partial<PermissionSetParams> & {
|
||||
queueAuthorityPubkey?: PublicKey;
|
||||
}
|
||||
): Promise<[OracleAccount, Array<TransactionSignature>]> {
|
||||
const signers: Keypair[] = [];
|
||||
|
||||
|
@ -534,7 +541,10 @@ export class QueueAccount extends Account<types.OracleQueueAccountData> {
|
|||
});
|
||||
|
||||
// // set permissions if needed
|
||||
if (params.enable && params.queueAuthority) {
|
||||
if (
|
||||
params.enable &&
|
||||
(params.queueAuthority || queueAuthorityPubkey.equals(payer))
|
||||
) {
|
||||
const permissionSetTxn = permissionAccount.setInstruction(payer, {
|
||||
permission: new PermitOracleQueueUsage(),
|
||||
enable: true,
|
||||
|
@ -637,6 +647,8 @@ export class QueueAccount extends Account<types.OracleQueueAccountData> {
|
|||
} & Partial<PermissionSetParams> & {
|
||||
// job params
|
||||
jobs?: Array<{ pubkey: PublicKey; weight?: number } | JobInitParams>;
|
||||
} & {
|
||||
queueAuthorityPubkey?: PublicKey;
|
||||
}
|
||||
): Promise<[AggregatorAccount, Array<TransactionSignature>]> {
|
||||
const signers: Keypair[] = [];
|
||||
|
@ -755,9 +767,14 @@ export class QueueAccount extends Account<types.OracleQueueAccountData> {
|
|||
*/
|
||||
public async createVrfInstructions(
|
||||
payer: PublicKey,
|
||||
params: Omit<VrfInitParams, 'queueAccount'> & Partial<PermissionSetParams>
|
||||
params: Omit<VrfInitParams, 'queueAccount'> &
|
||||
Partial<PermissionSetParams> & {
|
||||
queueAuthorityPubkey?: PublicKey;
|
||||
}
|
||||
): Promise<[VrfAccount, TransactionObject]> {
|
||||
const queue = await this.loadData();
|
||||
const queueAuthorityPubkey = params.queueAuthority
|
||||
? params.queueAuthority.publicKey
|
||||
: params.queueAuthorityPubkey ?? (await this.loadData()).authority;
|
||||
|
||||
const [vrfAccount, vrfInit] = await VrfAccount.createInstructions(
|
||||
this.program,
|
||||
|
@ -775,18 +792,19 @@ export class QueueAccount extends Account<types.OracleQueueAccountData> {
|
|||
PermissionAccount.createInstruction(this.program, payer, {
|
||||
granter: this.publicKey,
|
||||
grantee: vrfAccount.publicKey,
|
||||
authority: queue.authority,
|
||||
authority: queueAuthorityPubkey,
|
||||
});
|
||||
|
||||
if (params.enable) {
|
||||
if (params.queueAuthority || queue.authority.equals(payer)) {
|
||||
const permissionSet = permissionAccount.setInstruction(payer, {
|
||||
permission: new PermitOracleQueueUsage(),
|
||||
enable: true,
|
||||
queueAuthority: params.queueAuthority,
|
||||
});
|
||||
permissionInit = permissionInit.combine(permissionSet);
|
||||
}
|
||||
if (
|
||||
params.enable &&
|
||||
(params.queueAuthority || queueAuthorityPubkey.equals(payer))
|
||||
) {
|
||||
const permissionSet = permissionAccount.setInstruction(payer, {
|
||||
permission: new PermitOracleQueueUsage(),
|
||||
enable: true,
|
||||
queueAuthority: params.queueAuthority,
|
||||
});
|
||||
permissionInit = permissionInit.combine(permissionSet);
|
||||
}
|
||||
|
||||
return [vrfAccount, vrfInit.combine(permissionInit)];
|
||||
|
@ -817,7 +835,10 @@ export class QueueAccount extends Account<types.OracleQueueAccountData> {
|
|||
* ```
|
||||
*/
|
||||
public async createVrf(
|
||||
params: Omit<VrfInitParams, 'queueAccount'> & Partial<PermissionSetParams>
|
||||
params: Omit<VrfInitParams, 'queueAccount'> &
|
||||
Partial<PermissionSetParams> & {
|
||||
queueAuthorityPubkey?: PublicKey;
|
||||
}
|
||||
): Promise<[VrfAccount, TransactionSignature]> {
|
||||
const [vrfAccount, txn] = await this.createVrfInstructions(
|
||||
this.program.walletPubkey,
|
||||
|
@ -856,9 +877,13 @@ export class QueueAccount extends Account<types.OracleQueueAccountData> {
|
|||
Partial<PermissionSetParams> & {
|
||||
// job params
|
||||
job: JobAccount | PublicKey | Omit<JobInitParams, 'weight'>;
|
||||
} & {
|
||||
queueAuthorityPubkey?: PublicKey;
|
||||
}
|
||||
): Promise<[BufferRelayerAccount, TransactionObject]> {
|
||||
const queue = await this.loadData();
|
||||
const queueAuthorityPubkey = params.queueAuthority
|
||||
? params.queueAuthority.publicKey
|
||||
: params.queueAuthorityPubkey ?? (await this.loadData()).authority;
|
||||
|
||||
const txns: TransactionObject[] = [];
|
||||
|
||||
|
@ -907,18 +932,19 @@ export class QueueAccount extends Account<types.OracleQueueAccountData> {
|
|||
PermissionAccount.createInstruction(this.program, payer, {
|
||||
granter: this.publicKey,
|
||||
grantee: bufferAccount.publicKey,
|
||||
authority: queue.authority,
|
||||
authority: queueAuthorityPubkey,
|
||||
});
|
||||
|
||||
if (params.enable) {
|
||||
if (params.queueAuthority || queue.authority.equals(payer)) {
|
||||
const permissionSet = permissionAccount.setInstruction(payer, {
|
||||
permission: new PermitOracleQueueUsage(),
|
||||
enable: true,
|
||||
queueAuthority: params.queueAuthority,
|
||||
});
|
||||
permissionInit = permissionInit.combine(permissionSet);
|
||||
}
|
||||
if (
|
||||
params.enable &&
|
||||
(params.queueAuthority || queueAuthorityPubkey.equals(payer))
|
||||
) {
|
||||
const permissionSet = permissionAccount.setInstruction(payer, {
|
||||
permission: new PermitOracleQueueUsage(),
|
||||
enable: true,
|
||||
queueAuthority: params.queueAuthority,
|
||||
});
|
||||
permissionInit = permissionInit.combine(permissionSet);
|
||||
}
|
||||
|
||||
txns.push(permissionInit);
|
||||
|
@ -958,6 +984,8 @@ export class QueueAccount extends Account<types.OracleQueueAccountData> {
|
|||
Partial<PermissionSetParams> & {
|
||||
// job params
|
||||
job: JobAccount | PublicKey | Omit<JobInitParams, 'weight'>;
|
||||
} & {
|
||||
queueAuthorityPubkey?: PublicKey;
|
||||
}
|
||||
): Promise<[BufferRelayerAccount, TransactionSignature]> {
|
||||
const [bufferRelayerAccount, txn] =
|
||||
|
|
|
@ -753,7 +753,9 @@ export class SwitchboardProgram {
|
|||
const [oracleAccount, oracleInit] =
|
||||
await queueAccount.createOracleInstructions(payer, {
|
||||
...oracleInitParams,
|
||||
queueAuthorityPubkey: payer,
|
||||
queueAuthorityPubkey:
|
||||
oracleInitParams.queueAuthorityPubkey ?? payer,
|
||||
enable: true,
|
||||
});
|
||||
|
||||
const [oraclePermissionAccount, oraclePermissionBump] =
|
||||
|
|
|
@ -348,6 +348,7 @@ export class SwitchboardTestContext {
|
|||
metadata: `created ${BNtoDateTimeString(
|
||||
new anchor.BN(Math.floor(Date.now() / 1000))
|
||||
)}`,
|
||||
authority: program.walletPubkey,
|
||||
reward: 0,
|
||||
minStake: 0,
|
||||
queueSize: 10,
|
||||
|
@ -364,6 +365,7 @@ export class SwitchboardTestContext {
|
|||
name: 'Test Oracle',
|
||||
enable: true,
|
||||
stakingWalletKeypair: oracleStakingWalletKeypair,
|
||||
queueAuthorityPubkey: program.walletPubkey,
|
||||
},
|
||||
],
|
||||
});
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -13,10 +13,7 @@
|
|||
},
|
||||
"dependencies": {
|
||||
"@project-serum/anchor": "^0.25.0",
|
||||
"@solana/web3.js": "^1.66.2",
|
||||
"@switchboard-xyz/sbv2-utils": "^0.1.53",
|
||||
"@switchboard-xyz/switchboard-v2": "^0.0.165",
|
||||
"fs": "^0.0.1-security"
|
||||
"@solana/web3.js": "^1.66.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/chai": "^4.3.0",
|
||||
|
|
Loading…
Reference in New Issue