123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- import * as anchor from "@coral-xyz/anchor";
- import { Program } from "@coral-xyz/anchor";
- import { TransferFee } from "../target/types/transfer_fee";
- import {
- TOKEN_2022_PROGRAM_ID,
- getAssociatedTokenAddressSync,
- getOrCreateAssociatedTokenAccount,
- mintTo,
- } from "@solana/spl-token";
- import { ASSOCIATED_PROGRAM_ID } from "@coral-xyz/anchor/dist/cjs/utils/token";
- describe("transfer-fee", () => {
- const provider = anchor.AnchorProvider.env();
- const connection = provider.connection;
- const wallet = provider.wallet as anchor.Wallet;
- anchor.setProvider(provider);
- const program = anchor.workspace.TransferFee as Program<TransferFee>;
- const mintKeypair = new anchor.web3.Keypair();
- const recipient = new anchor.web3.Keypair();
- const senderTokenAccountAddress = getAssociatedTokenAddressSync(
- mintKeypair.publicKey,
- wallet.publicKey,
- false,
- TOKEN_2022_PROGRAM_ID
- );
- const recipientTokenAccountAddress = getAssociatedTokenAddressSync(
- mintKeypair.publicKey,
- recipient.publicKey,
- false,
- TOKEN_2022_PROGRAM_ID
- );
- it("Create Mint with Transfer Fee", async () => {
- const transferFeeBasisPoints = 100;
- const maximumFee = 1;
- const transactionSignature = await program.methods
- .initialize(transferFeeBasisPoints, new anchor.BN(maximumFee))
- .accounts({ mintAccount: mintKeypair.publicKey })
- .signers([mintKeypair])
- .rpc({ skipPreflight: true });
- console.log("Your transaction signature", transactionSignature);
- });
- it("Mint Tokens", async () => {
- await getOrCreateAssociatedTokenAccount(
- connection,
- wallet.payer,
- mintKeypair.publicKey,
- wallet.publicKey,
- false,
- null,
- null,
- TOKEN_2022_PROGRAM_ID,
- ASSOCIATED_PROGRAM_ID
- );
- await mintTo(
- connection,
- wallet.payer,
- mintKeypair.publicKey,
- senderTokenAccountAddress,
- wallet.payer,
- 300,
- [],
- null,
- TOKEN_2022_PROGRAM_ID
- );
- });
- it("Transfer", async () => {
- const transactionSignature = await program.methods
- .transfer(new anchor.BN(100))
- .accounts({
- sender: wallet.publicKey,
- recipient: recipient.publicKey,
- mintAccount: mintKeypair.publicKey,
- senderTokenAccount: senderTokenAccountAddress,
- recipientTokenAccount: recipientTokenAccountAddress,
- })
- .rpc({ skipPreflight: true });
- console.log("Your transaction signature", transactionSignature);
- });
- it("Transfer Again, fee limit by maximumFee", async () => {
- const transactionSignature = await program.methods
- .transfer(new anchor.BN(200))
- .accounts({
- sender: wallet.publicKey,
- recipient: recipient.publicKey,
- mintAccount: mintKeypair.publicKey,
- senderTokenAccount: senderTokenAccountAddress,
- recipientTokenAccount: recipientTokenAccountAddress,
- })
- .rpc({ skipPreflight: true });
- console.log("Your transaction signature", transactionSignature);
- });
- it("Harvest Transfer Fees to Mint Account", async () => {
- const transactionSignature = await program.methods
- .harvest()
- .accounts({ mintAccount: mintKeypair.publicKey })
- .remainingAccounts([
- {
- pubkey: recipientTokenAccountAddress,
- isSigner: false,
- isWritable: true,
- },
- ])
- .rpc({ skipPreflight: true });
- console.log("Your transaction signature", transactionSignature);
- });
- it("Withdraw Transfer Fees from Mint Account", async () => {
- const transactionSignature = await program.methods
- .withdraw()
- .accounts({
- mintAccount: mintKeypair.publicKey,
- tokenAccount: senderTokenAccountAddress,
- })
- .rpc({ skipPreflight: true });
- console.log("Your transaction signature", transactionSignature);
- });
- it("Update Transfer Fee", async () => {
- const transferFeeBasisPoints = 0;
- const maximumFee = 0;
- const transactionSignature = await program.methods
- .updateFee(transferFeeBasisPoints, new anchor.BN(maximumFee))
- .accounts({ mintAccount: mintKeypair.publicKey })
- .rpc({ skipPreflight: true });
- console.log("Your transaction signature", transactionSignature);
- });
- });
|