import * as anchor from "@coral-xyz/anchor"; import { Program } from "@coral-xyz/anchor"; import { ImmutableOwner } from "../target/types/immutable_owner"; import { AuthorityType, TOKEN_2022_PROGRAM_ID, createMint, setAuthority, } from "@solana/spl-token"; describe("immutable-owner", () => { // Configure the client to use the local cluster. const provider = anchor.AnchorProvider.env(); const connection = provider.connection; const wallet = provider.wallet as anchor.Wallet; anchor.setProvider(provider); const program = anchor.workspace.ImmutableOwner as Program; const tokenKeypair = new anchor.web3.Keypair(); it("Create Token Account with ImmutableOwner extension", async () => { const mint = await createMint( connection, wallet.payer, // Payer of the transaction and initialization fees wallet.publicKey, // Mint Authority null, // Optional Freeze Authority 2, // Decimals of Mint undefined, // Optional keypair undefined, // Options for confirming the transaction TOKEN_2022_PROGRAM_ID // Token Extension Program ID ); const transactionSignature = await program.methods .initialize() .accounts({ mintAccount: mint, tokenAccount: tokenKeypair.publicKey, }) .signers([tokenKeypair]) .rpc({ skipPreflight: true }); console.log("Your transaction signature", transactionSignature); }); it("Attempt to change token account owner, expect fail", async () => { try { await setAuthority( connection, // Connection to use wallet.payer, // Payer of the transaction fee tokenKeypair.publicKey, // Token Account wallet.publicKey, // Owner of the Token Account AuthorityType.AccountOwner, // Type of Authority new anchor.web3.Keypair().publicKey, // Random address as new account Owner undefined, // Additional signers undefined, // Confirmation options TOKEN_2022_PROGRAM_ID // Token Extension Program ID ); } catch (error) { console.log("\nExpect Error:", error.logs); } }); });