69 lines
1.9 KiB
TypeScript
69 lines
1.9 KiB
TypeScript
import { BN } from '@coral-xyz/anchor';
|
|
import {
|
|
PublicKey,
|
|
SystemProgram,
|
|
TransactionInstruction,
|
|
} from '@solana/web3.js';
|
|
import { createHash } from 'crypto';
|
|
|
|
export const seqEnforcerProgramIds = {
|
|
devnet: new PublicKey('FBngRHN4s5cmHagqy3Zd6xcK3zPJBeX5DixtHFbBhyCn'),
|
|
testnet: new PublicKey('FThcgpaJM8WiEbK5rw3i31Ptb8Hm4rQ27TrhfzeR1uUy'),
|
|
'mainnet-beta': new PublicKey('GDDMwNyyx8uB6zrqwBFHjLLG3TBYk2F8Az4yrQC5RzMp'),
|
|
};
|
|
|
|
export function makeInitSequenceEnforcerAccountIx(
|
|
account: PublicKey,
|
|
ownerPk: PublicKey,
|
|
bump: number,
|
|
sym: string,
|
|
cluster: string,
|
|
): TransactionInstruction {
|
|
const keys = [
|
|
{ isSigner: false, isWritable: true, pubkey: account },
|
|
{ isSigner: true, isWritable: true, pubkey: ownerPk },
|
|
{ isSigner: false, isWritable: false, pubkey: SystemProgram.programId },
|
|
];
|
|
|
|
const variant = createHash('sha256')
|
|
.update('global:initialize')
|
|
.digest()
|
|
.slice(0, 8);
|
|
|
|
const bumpData = new BN(bump).toBuffer('le', 1);
|
|
const strLen = new BN(sym.length).toBuffer('le', 4);
|
|
const symEncoded = Buffer.from(sym);
|
|
|
|
const data = Buffer.concat([variant, bumpData, strLen, symEncoded]);
|
|
|
|
return new TransactionInstruction({
|
|
keys,
|
|
data,
|
|
programId: seqEnforcerProgramIds[cluster],
|
|
});
|
|
}
|
|
|
|
export function makeCheckAndSetSequenceNumberIx(
|
|
sequenceAccount: PublicKey,
|
|
ownerPk: PublicKey,
|
|
seqNum: number,
|
|
cluster,
|
|
): TransactionInstruction {
|
|
const keys = [
|
|
{ isSigner: false, isWritable: true, pubkey: sequenceAccount },
|
|
{ isSigner: true, isWritable: false, pubkey: ownerPk },
|
|
];
|
|
const variant = createHash('sha256')
|
|
.update('global:check_and_set_sequence_number')
|
|
.digest()
|
|
.slice(0, 8);
|
|
|
|
const seqNumBuffer = new BN(seqNum).toBuffer('le', 8);
|
|
const data = Buffer.concat([variant, seqNumBuffer]);
|
|
return new TransactionInstruction({
|
|
keys,
|
|
data,
|
|
programId: seqEnforcerProgramIds[cluster],
|
|
});
|
|
}
|