123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- import assert from "assert";
- import { splRecordProgram } from "@project-serum/spl-record";
- import { Keypair, PublicKey } from "@solana/web3.js";
- import { BN } from "@project-serum/anchor";
- import { SPL_RECORD_PROGRAM_ID } from "../constants";
- import {
- confirmTx,
- getProvider,
- loadKp,
- sendAndConfirmTx,
- test,
- } from "../utils";
- export async function recordTests() {
- const provider = await getProvider();
- const program = splRecordProgram({
- provider,
- programId: SPL_RECORD_PROGRAM_ID,
- });
- const kp = await loadKp();
- const RECORD_DATA = new Uint8Array(8).fill(1);
- const newAuthorityKp = new Keypair();
- let recordPk: PublicKey;
- async function initialize() {
- const recordKp = new Keypair();
- recordPk = recordKp.publicKey;
- const createRecordAccountIx =
- await program.account.recordData.createInstruction(recordKp);
- const initIx = await program.methods
- .initialize()
- .accounts({
- recordAccount: recordKp.publicKey,
- authority: kp.publicKey,
- })
- .instruction();
- await sendAndConfirmTx([createRecordAccountIx, initIx], [kp, recordKp]);
- }
- async function write() {
- await program.methods
- .write(new BN(0), RECORD_DATA)
- .accounts({
- recordAccount: recordPk,
- signer: kp.publicKey,
- })
- .rpc();
- }
- async function setAuthority() {
- await program.methods
- .setAuthority()
- .accounts({
- recordAccount: recordPk,
- signer: kp.publicKey,
- newAuthority: newAuthorityKp.publicKey,
- })
- .rpc();
- try {
- await write();
- throw new Error("Authority did not update.");
- } catch {}
- }
- async function fetchRecordDataAccount() {
- const record = await program.account.recordData.fetch(recordPk);
- assert(record.authority.equals(newAuthorityKp.publicKey));
- assert(record.data.bytes.every((b, i) => b === RECORD_DATA[i]));
- }
- async function closeAccount() {
- const txHash = await program.methods
- .closeAccount()
- .accounts({
- recordAccount: recordPk,
- signer: newAuthorityKp.publicKey,
- receiver: kp.publicKey,
- })
- .signers([newAuthorityKp])
- .rpc();
- await confirmTx(txHash);
- try {
- await program.account.recordData.fetch(recordPk);
- throw new Error("Record account did not close.");
- } catch {}
- }
- await test(initialize);
- await test(write);
- await test(setAuthority);
- await test(fetchRecordDataAccount);
- await test(closeAccount);
- }
|