Bläddra i källkod

anchor token basics working, excluding swap and token22

John 1 år sedan
förälder
incheckning
b9f3d4086b
44 ändrade filer med 159 tillägg och 284 borttagningar
  1. 6 3
      tokens/create-token/anchor/Anchor.toml
  2. 1 2
      tokens/create-token/anchor/package.json
  3. 0 1
      tokens/create-token/anchor/programs/create-token/Cargo.toml
  4. 10 6
      tokens/create-token/anchor/programs/create-token/src/lib.rs
  5. 3 40
      tokens/create-token/anchor/tests/test.ts
  6. 10 3
      tokens/nft-minter/anchor/Anchor.toml
  7. 2 0
      tokens/nft-minter/anchor/Cargo.toml
  8. 0 1
      tokens/nft-minter/anchor/package.json
  9. 0 1
      tokens/nft-minter/anchor/programs/nft-minter/Cargo.toml
  10. 12 11
      tokens/nft-minter/anchor/programs/nft-minter/src/lib.rs
  11. 2 40
      tokens/nft-minter/anchor/tests/test.ts
  12. 6 3
      tokens/pda-mint-authority/anchor/Anchor.toml
  13. 0 1
      tokens/pda-mint-authority/anchor/package.json
  14. 0 1
      tokens/pda-mint-authority/anchor/programs/token-minter/Cargo.toml
  15. 9 5
      tokens/pda-mint-authority/anchor/programs/token-minter/src/instructions/create.rs
  16. 1 1
      tokens/pda-mint-authority/anchor/programs/token-minter/src/instructions/mint.rs
  17. 1 1
      tokens/pda-mint-authority/anchor/programs/token-minter/src/lib.rs
  18. 2 27
      tokens/pda-mint-authority/anchor/tests/test.ts
  19. 9 3
      tokens/spl-token-minter/anchor/Anchor.toml
  20. 0 1
      tokens/spl-token-minter/anchor/package.json
  21. 0 1
      tokens/spl-token-minter/anchor/programs/spl-token-minter/Cargo.toml
  22. 8 4
      tokens/spl-token-minter/anchor/programs/spl-token-minter/src/instructions/create.rs
  23. 2 2
      tokens/spl-token-minter/anchor/programs/spl-token-minter/src/instructions/mint.rs
  24. 1 1
      tokens/spl-token-minter/anchor/programs/spl-token-minter/src/lib.rs
  25. 3 31
      tokens/spl-token-minter/anchor/tests/test.ts
  26. 6 3
      tokens/token-swap/anchor/Anchor.toml
  27. 18 18
      tokens/token-swap/anchor/package.json
  28. 4 5
      tokens/token-swap/anchor/programs/token-swap/Cargo.toml
  29. 2 2
      tokens/token-swap/anchor/programs/token-swap/src/constants.rs
  30. 2 2
      tokens/token-swap/anchor/programs/token-swap/src/instructions/create_pool.rs
  31. 4 5
      tokens/token-swap/anchor/programs/token-swap/src/instructions/deposit_liquidity.rs
  32. 3 3
      tokens/token-swap/anchor/programs/token-swap/src/instructions/swap_exact_tokens_for_tokens.rs
  33. 4 4
      tokens/token-swap/anchor/programs/token-swap/src/instructions/withdraw_liquidity.rs
  34. 1 1
      tokens/token-swap/anchor/programs/token-swap/src/lib.rs
  35. 2 0
      tokens/token-swap/anchor/tests/create-pool.ts
  36. 1 1
      tokens/token-swap/anchor/tests/swap.ts
  37. 4 4
      tokens/token-swap/anchor/tests/utils.ts
  38. 6 3
      tokens/transfer-tokens/anchor/Anchor.toml
  39. 0 1
      tokens/transfer-tokens/anchor/package.json
  40. 0 1
      tokens/transfer-tokens/anchor/programs/transfer-tokens/Cargo.toml
  41. 8 4
      tokens/transfer-tokens/anchor/programs/transfer-tokens/src/instructions/create.rs
  42. 2 2
      tokens/transfer-tokens/anchor/programs/transfer-tokens/src/instructions/mint.rs
  43. 1 1
      tokens/transfer-tokens/anchor/programs/transfer-tokens/src/lib.rs
  44. 3 34
      tokens/transfer-tokens/anchor/tests/test.ts

+ 6 - 3
tokens/create-token/anchor/Anchor.toml

@@ -1,15 +1,17 @@
+[toolchain]
+
 [features]
-seeds = false
+resolution = true
 skip-lint = false
 
 [programs.localnet]
-create_token = "2B6MrsKB2pVq6W6tY8dJLcnSd3Uv1KE7yRaboBjdQoEX"
+create_token = "GwvQ53QTu1xz3XXYfG5m5jEqwhMBvVBudPS8TUuFYnhT"
 
 [registry]
 url = "https://api.apr.dev"
 
 [provider]
-cluster = "localnet"
+cluster = "devnet"
 wallet = "~/.config/solana/id.json"
 
 [scripts]
@@ -18,6 +20,7 @@ test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
 [test]
 startup_wait = 5000
 shutdown_wait = 2000
+upgradeable = false
 
 [test.validator]
 bind_address = "0.0.0.0"

+ 1 - 2
tokens/create-token/anchor/package.json

@@ -1,7 +1,6 @@
 {
   "dependencies": {
-    "@coral-xyz/anchor": "^0.30.0",
-    "@metaplex-foundation/mpl-token-metadata": "^2.5.2"
+    "@coral-xyz/anchor": "^0.30.0"
   },
   "devDependencies": {
     "@types/bn.js": "^5.1.0",

+ 0 - 1
tokens/create-token/anchor/programs/create-token/Cargo.toml

@@ -19,4 +19,3 @@ idl-build = ["anchor-lang/idl-build", "anchor-spl/idl-build"]
 [dependencies]
 anchor-lang = "0.30.0"
 anchor-spl = { version = "0.30.0", features = ["metadata"] }
-mpl-token-metadata = { version = "1.13.1", features = ["no-entrypoint"] }

+ 10 - 6
tokens/create-token/anchor/programs/create-token/src/lib.rs

@@ -3,13 +3,15 @@
 use {
     anchor_lang::prelude::*,
     anchor_spl::{
-        metadata::{create_metadata_accounts_v3, CreateMetadataAccountsV3, Metadata},
+        metadata::{
+            create_metadata_accounts_v3, mpl_token_metadata::types::DataV2,
+            CreateMetadataAccountsV3, Metadata,
+        },
         token::{Mint, Token},
     },
-    mpl_token_metadata::{pda::find_metadata_account, state::DataV2},
 };
 
-declare_id!("2B6MrsKB2pVq6W6tY8dJLcnSd3Uv1KE7yRaboBjdQoEX");
+declare_id!("GwvQ53QTu1xz3XXYfG5m5jEqwhMBvVBudPS8TUuFYnhT");
 
 #[program]
 pub mod create_token {
@@ -17,10 +19,10 @@ pub mod create_token {
 
     pub fn create_token_mint(
         ctx: Context<CreateTokenMint>,
+        _token_decimals: u8,
         token_name: String,
         token_symbol: String,
         token_uri: String,
-        _token_decimals: u8,
     ) -> Result<()> {
         msg!("Creating metadata account...");
         msg!(
@@ -69,10 +71,12 @@ pub struct CreateTokenMint<'info> {
     #[account(mut)]
     pub payer: Signer<'info>,
 
-    /// CHECK: Address validated using constraint
+    /// CHECK: Validate address by deriving pda
     #[account(
         mut,
-        address=find_metadata_account(&mint_account.key()).0
+        seeds = [b"metadata", token_metadata_program.key().as_ref(), mint_account.key().as_ref()],
+        bump,
+        seeds::program = token_metadata_program.key(),
     )]
     pub metadata_account: UncheckedAccount<'info>,
     // Create new mint account

+ 3 - 40
tokens/create-token/anchor/tests/test.ts

@@ -1,13 +1,6 @@
-import { PROGRAM_ID as TOKEN_METADATA_PROGRAM_ID } from "@metaplex-foundation/mpl-token-metadata";
 import * as anchor from "@coral-xyz/anchor";
-import { TOKEN_PROGRAM_ID } from "@coral-xyz/anchor/dist/cjs/utils/token";
 import { CreateToken } from "../target/types/create_token";
-import {
-  PublicKey,
-  Keypair,
-  SYSVAR_RENT_PUBKEY,
-  SystemProgram,
-} from "@solana/web3.js";
+import { Keypair } from "@solana/web3.js";
 
 describe("Create Tokens", () => {
   const provider = anchor.AnchorProvider.env();
@@ -25,27 +18,12 @@ describe("Create Tokens", () => {
     // Generate new keypair to use as address for mint account.
     const mintKeypair = new Keypair();
 
-    // Derive the PDA of the metadata account for the mint.
-    const [metadataAddress] = PublicKey.findProgramAddressSync(
-      [
-        Buffer.from("metadata"),
-        TOKEN_METADATA_PROGRAM_ID.toBuffer(),
-        mintKeypair.publicKey.toBuffer(),
-      ],
-      TOKEN_METADATA_PROGRAM_ID
-    );
-
     // SPL Token default = 9 decimals
     const transactionSignature = await program.methods
-      .createTokenMint(metadata.name, metadata.symbol, metadata.uri, 9)
+      .createTokenMint(9, metadata.name, metadata.symbol, metadata.uri)
       .accounts({
         payer: payer.publicKey,
-        metadataAccount: metadataAddress,
         mintAccount: mintKeypair.publicKey,
-        rent: SYSVAR_RENT_PUBKEY,
-        systemProgram: SystemProgram.programId,
-        tokenProgram: TOKEN_PROGRAM_ID,
-        tokenMetadataProgram: TOKEN_METADATA_PROGRAM_ID,
       })
       .signers([mintKeypair])
       .rpc();
@@ -59,27 +37,12 @@ describe("Create Tokens", () => {
     // Generate new keypair to use as address for mint account.
     const mintKeypair = new Keypair();
 
-    // Derive the PDA of the metadata account for the mint.
-    const [metadataAddress] = PublicKey.findProgramAddressSync(
-      [
-        Buffer.from("metadata"),
-        TOKEN_METADATA_PROGRAM_ID.toBuffer(),
-        mintKeypair.publicKey.toBuffer(),
-      ],
-      TOKEN_METADATA_PROGRAM_ID
-    );
-
     // NFT default = 0 decimals
     const transactionSignature = await program.methods
-      .createTokenMint(metadata.name, metadata.symbol, metadata.uri, 0)
+      .createTokenMint(0, metadata.name, metadata.symbol, metadata.uri)
       .accounts({
         payer: payer.publicKey,
-        metadataAccount: metadataAddress,
         mintAccount: mintKeypair.publicKey,
-        rent: SYSVAR_RENT_PUBKEY,
-        systemProgram: SystemProgram.programId,
-        tokenProgram: TOKEN_PROGRAM_ID,
-        tokenMetadataProgram: TOKEN_METADATA_PROGRAM_ID,
       })
       .signers([mintKeypair])
       .rpc();

+ 10 - 3
tokens/nft-minter/anchor/Anchor.toml

@@ -1,12 +1,18 @@
+[toolchain]
+
 [features]
-seeds = false
+resolution = true
 skip-lint = false
+seeds = true
 
 [programs.localnet]
-nft_minter = "3qHNM98iLTaQtwmj2NkViXnHZQjNBS5PTHT2AuPxHXYN"
+nft_minter = "52quezNUzc1Ej6Jh6L4bvtxPW8j6TEFHuLVAWiFvdnsc"
+
+[registry]
+url = "https://api.apr.dev"
 
 [provider]
-cluster = "localnet"
+cluster = "devnet"
 wallet = "~/.config/solana/id.json"
 
 [scripts]
@@ -15,6 +21,7 @@ test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
 [test]
 startup_wait = 5000
 shutdown_wait = 2000
+upgradeable = false
 
 [test.validator]
 bind_address = "0.0.0.0"

+ 2 - 0
tokens/nft-minter/anchor/Cargo.toml

@@ -1,5 +1,6 @@
 [workspace]
 members = ["programs/*"]
+resolver = "2"
 
 [profile.release]
 overflow-checks = true
@@ -9,3 +10,4 @@ codegen-units = 1
 opt-level = 3
 incremental = false
 codegen-units = 1
+

+ 0 - 1
tokens/nft-minter/anchor/package.json

@@ -1,7 +1,6 @@
 {
   "dependencies": {
     "@coral-xyz/anchor": "^0.30.0",
-    "@metaplex-foundation/mpl-token-metadata": "^2.5.2",
     "@solana/spl-token": "^0.3.8"
   },
   "devDependencies": {

+ 0 - 1
tokens/nft-minter/anchor/programs/nft-minter/Cargo.toml

@@ -19,4 +19,3 @@ idl-build = ["anchor-lang/idl-build", "anchor-spl/idl-build"]
 [dependencies]
 anchor-lang = { version = "0.30.0", features = ["init-if-needed"] }
 anchor-spl = { version = "0.30.0", features = ["metadata"] }
-mpl-token-metadata = { version = "1.13.1", features = ["no-entrypoint"] }

+ 12 - 11
tokens/nft-minter/anchor/programs/nft-minter/src/lib.rs

@@ -5,18 +5,15 @@ use {
     anchor_spl::{
         associated_token::AssociatedToken,
         metadata::{
-            create_master_edition_v3, create_metadata_accounts_v3, CreateMasterEditionV3,
-            CreateMetadataAccountsV3, Metadata,
+            create_master_edition_v3, create_metadata_accounts_v3,
+            mpl_token_metadata::types::DataV2, CreateMasterEditionV3, CreateMetadataAccountsV3,
+            Metadata,
         },
         token::{mint_to, Mint, MintTo, Token, TokenAccount},
     },
-    mpl_token_metadata::{
-        pda::{find_master_edition_account, find_metadata_account},
-        state::DataV2,
-    },
 };
 
-declare_id!("3qHNM98iLTaQtwmj2NkViXnHZQjNBS5PTHT2AuPxHXYN");
+declare_id!("52quezNUzc1Ej6Jh6L4bvtxPW8j6TEFHuLVAWiFvdnsc");
 
 #[program]
 pub mod nft_minter {
@@ -105,17 +102,21 @@ pub struct CreateToken<'info> {
     #[account(mut)]
     pub payer: Signer<'info>,
 
-    /// CHECK: Address validated using constraint
+    /// CHECK: Validate address by deriving pda
     #[account(
         mut,
-        address=find_metadata_account(&mint_account.key()).0
+        seeds = [b"metadata", token_metadata_program.key().as_ref(), mint_account.key().as_ref()],
+        bump,
+        seeds::program = token_metadata_program.key(),
     )]
     pub metadata_account: UncheckedAccount<'info>,
 
-    /// CHECK: Address validated using constraint
+    /// CHECK: Validate address by deriving pda
     #[account(
         mut,
-        address=find_master_edition_account(&mint_account.key()).0
+        seeds = [b"metadata", token_metadata_program.key().as_ref(), mint_account.key().as_ref(), b"edition"],
+        bump,
+        seeds::program = token_metadata_program.key(),
     )]
     pub edition_account: UncheckedAccount<'info>,
 

+ 2 - 40
tokens/nft-minter/anchor/tests/test.ts

@@ -1,17 +1,7 @@
-import { PROGRAM_ID as TOKEN_METADATA_PROGRAM_ID } from "@metaplex-foundation/mpl-token-metadata";
 import * as anchor from "@coral-xyz/anchor";
 import { NftMinter } from "../target/types/nft_minter";
-import {
-  Keypair,
-  PublicKey,
-  SYSVAR_RENT_PUBKEY,
-  SystemProgram,
-} from "@solana/web3.js";
-import {
-  getAssociatedTokenAddressSync,
-  ASSOCIATED_TOKEN_PROGRAM_ID,
-  TOKEN_PROGRAM_ID,
-} from "@solana/spl-token";
+import { Keypair } from "@solana/web3.js";
+import { getAssociatedTokenAddressSync } from "@solana/spl-token";
 
 describe("NFT Minter", () => {
   const provider = anchor.AnchorProvider.env();
@@ -30,27 +20,6 @@ describe("NFT Minter", () => {
     // Generate a keypair to use as the address of our mint account
     const mintKeypair = new Keypair();
 
-    // Derive the PDA of the metadata account for the mint.
-    const [metadataAddress] = PublicKey.findProgramAddressSync(
-      [
-        Buffer.from("metadata"),
-        TOKEN_METADATA_PROGRAM_ID.toBuffer(),
-        mintKeypair.publicKey.toBuffer(),
-      ],
-      TOKEN_METADATA_PROGRAM_ID
-    );
-
-    // Derive the PDA of the master edition account for the mint.
-    const [editionAddress] = PublicKey.findProgramAddressSync(
-      [
-        Buffer.from("metadata"),
-        TOKEN_METADATA_PROGRAM_ID.toBuffer(),
-        mintKeypair.publicKey.toBuffer(),
-        Buffer.from("edition"),
-      ],
-      TOKEN_METADATA_PROGRAM_ID
-    );
-
     // Derive the associated token address account for the mint and payer.
     const associatedTokenAccountAddress = getAssociatedTokenAddressSync(
       mintKeypair.publicKey,
@@ -61,15 +30,8 @@ describe("NFT Minter", () => {
       .mintNft(metadata.name, metadata.symbol, metadata.uri)
       .accounts({
         payer: payer.publicKey,
-        metadataAccount: metadataAddress,
-        editionAccount: editionAddress,
         mintAccount: mintKeypair.publicKey,
         associatedTokenAccount: associatedTokenAccountAddress,
-        tokenProgram: TOKEN_PROGRAM_ID,
-        associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,
-        tokenMetadataProgram: TOKEN_METADATA_PROGRAM_ID,
-        systemProgram: SystemProgram.programId,
-        rent: SYSVAR_RENT_PUBKEY,
       })
       .signers([mintKeypair])
       .rpc({ skipPreflight: true });

+ 6 - 3
tokens/pda-mint-authority/anchor/Anchor.toml

@@ -1,15 +1,17 @@
+[toolchain]
+
 [features]
-seeds = false
+resolution = true
 skip-lint = false
 
 [programs.localnet]
-token_minter = "A5gNtapBvMLD6i7D2t3SSyJeFtBdfb6ibvZu1hoBLzCo"
+token_minter = "3LFrPHqwk5jMrmiz48BFj6NV2k4NjobgTe1jChzx3JGD"
 
 [registry]
 url = "https://api.apr.dev"
 
 [provider]
-cluster = "Localnet"
+cluster = "Devnet"
 wallet = "~/.config/solana/id.json"
 
 [scripts]
@@ -18,6 +20,7 @@ test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
 [test]
 startup_wait = 5000
 shutdown_wait = 2000
+upgradeable = false
 
 [test.validator]
 bind_address = "0.0.0.0"

+ 0 - 1
tokens/pda-mint-authority/anchor/package.json

@@ -1,7 +1,6 @@
 {
   "dependencies": {
     "@coral-xyz/anchor": "^0.30.0",
-    "@metaplex-foundation/mpl-token-metadata": "^2.5.2",
     "@solana/spl-token": "^0.3.8"
   },
   "devDependencies": {

+ 0 - 1
tokens/pda-mint-authority/anchor/programs/token-minter/Cargo.toml

@@ -19,4 +19,3 @@ idl-build = ["anchor-lang/idl-build", "anchor-spl/idl-build"]
 [dependencies]
 anchor-lang = { version = "0.30.0", features = ["init-if-needed"] }
 anchor-spl = { version = "0.30.0", features = ["metadata"] }
-mpl-token-metadata = { version = "1.13.1", features = ["no-entrypoint"] }

+ 9 - 5
tokens/pda-mint-authority/anchor/programs/token-minter/src/instructions/create.rs

@@ -3,10 +3,12 @@
 use {
     anchor_lang::prelude::*,
     anchor_spl::{
-        metadata::{create_metadata_accounts_v3, CreateMetadataAccountsV3, Metadata},
+        metadata::{
+            create_metadata_accounts_v3, mpl_token_metadata::types::DataV2,
+            CreateMetadataAccountsV3, Metadata,
+        },
         token::{Mint, Token},
     },
-    mpl_token_metadata::{pda::find_metadata_account, state::DataV2},
 };
 
 #[derive(Accounts)]
@@ -28,10 +30,12 @@ pub struct CreateToken<'info> {
     )]
     pub mint_account: Account<'info, Mint>,
 
-    /// CHECK: Address validated using constraint
+    /// CHECK: Validate address by deriving pda
     #[account(
         mut,
-        address=find_metadata_account(&mint_account.key()).0
+        seeds = [b"metadata", token_metadata_program.key().as_ref(), mint_account.key().as_ref()],
+        bump,
+        seeds::program = token_metadata_program.key(),
     )]
     pub metadata_account: UncheckedAccount<'info>,
 
@@ -50,7 +54,7 @@ pub fn create_token(
     msg!("Creating metadata account");
 
     // PDA signer seeds
-    let signer_seeds: &[&[&[u8]]] = &[&[b"mint", &[*ctx.bumps.get("mint_account").unwrap()]]];
+    let signer_seeds: &[&[&[u8]]] = &[&[b"mint", &[ctx.bumps.mint_account]]];
 
     // Cross Program Invocation (CPI) signed by PDA
     // Invoking the create_metadata_account_v3 instruction on the token metadata program

+ 1 - 1
tokens/pda-mint-authority/anchor/programs/token-minter/src/instructions/mint.rs

@@ -43,7 +43,7 @@ pub fn mint_token(ctx: Context<MintToken>, amount: u64) -> Result<()> {
     );
 
     // PDA signer seeds
-    let signer_seeds: &[&[&[u8]]] = &[&[b"mint", &[*ctx.bumps.get("mint_account").unwrap()]]];
+    let signer_seeds: &[&[&[u8]]] = &[&[b"mint", &[ctx.bumps.mint_account]]];
 
     // Invoke the mint_to instruction on the token program
     mint_to(

+ 1 - 1
tokens/pda-mint-authority/anchor/programs/token-minter/src/lib.rs

@@ -4,7 +4,7 @@ use anchor_lang::prelude::*;
 use instructions::*;
 pub mod instructions;
 
-declare_id!("A5gNtapBvMLD6i7D2t3SSyJeFtBdfb6ibvZu1hoBLzCo");
+declare_id!("3LFrPHqwk5jMrmiz48BFj6NV2k4NjobgTe1jChzx3JGD");
 
 #[program]
 pub mod token_minter {

+ 2 - 27
tokens/pda-mint-authority/anchor/tests/test.ts

@@ -1,12 +1,7 @@
-import { PROGRAM_ID as TOKEN_METADATA_PROGRAM_ID } from "@metaplex-foundation/mpl-token-metadata";
 import * as anchor from "@coral-xyz/anchor";
 import { TokenMinter } from "../target/types/token_minter";
-import { PublicKey, SYSVAR_RENT_PUBKEY, SystemProgram } from "@solana/web3.js";
-import {
-  getAssociatedTokenAddressSync,
-  ASSOCIATED_TOKEN_PROGRAM_ID,
-  TOKEN_PROGRAM_ID,
-} from "@solana/spl-token";
+import { PublicKey } from "@solana/web3.js";
+import { getAssociatedTokenAddressSync } from "@solana/spl-token";
 
 describe("NFT Minter", () => {
   const provider = anchor.AnchorProvider.env();
@@ -28,26 +23,10 @@ describe("NFT Minter", () => {
   };
 
   it("Create a token!", async () => {
-    // Derive the metadata account address.
-    const [metadataAddress] = PublicKey.findProgramAddressSync(
-      [
-        Buffer.from("metadata"),
-        TOKEN_METADATA_PROGRAM_ID.toBuffer(),
-        mintPDA.toBuffer(),
-      ],
-      TOKEN_METADATA_PROGRAM_ID
-    );
-
     const transactionSignature = await program.methods
       .createToken(metadata.name, metadata.symbol, metadata.uri)
       .accounts({
         payer: payer.publicKey,
-        mintAccount: mintPDA,
-        metadataAccount: metadataAddress,
-        tokenProgram: TOKEN_PROGRAM_ID,
-        tokenMetadataProgram: TOKEN_METADATA_PROGRAM_ID,
-        systemProgram: SystemProgram.programId,
-        rent: SYSVAR_RENT_PUBKEY,
       })
       .rpc();
 
@@ -70,11 +49,7 @@ describe("NFT Minter", () => {
       .mintToken(amount)
       .accounts({
         payer: payer.publicKey,
-        mintAccount: mintPDA,
         associatedTokenAccount: associatedTokenAccountAddress,
-        tokenProgram: TOKEN_PROGRAM_ID,
-        associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,
-        systemProgram: SystemProgram.programId,
       })
       .rpc();
 

+ 9 - 3
tokens/spl-token-minter/anchor/Anchor.toml

@@ -1,12 +1,17 @@
+[toolchain]
+
 [features]
-seeds = false
+resolution = true
 skip-lint = false
 
 [programs.localnet]
-spl_token_minter = "77p9WmpzQW29RUEzTEef2ym7AHePBE9yNWJ9acikXfZS"
+spl_token_minter = "3of89Z9jwek9zrFgpCWc9jZvQvitpVMxpZNsrAD2vQUD"
+
+[registry]
+url = "https://api.apr.dev"
 
 [provider]
-cluster = "localnet"
+cluster = "devnet"
 wallet = "~/.config/solana/id.json"
 
 [scripts]
@@ -15,6 +20,7 @@ test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
 [test]
 startup_wait = 5000
 shutdown_wait = 2000
+upgradeable = false
 
 [test.validator]
 bind_address = "0.0.0.0"

+ 0 - 1
tokens/spl-token-minter/anchor/package.json

@@ -1,7 +1,6 @@
 {
   "dependencies": {
     "@coral-xyz/anchor": "^0.30.0",
-    "@metaplex-foundation/mpl-token-metadata": "^2.5.2",
     "@solana/spl-token": "^0.3.8"
   },
   "devDependencies": {

+ 0 - 1
tokens/spl-token-minter/anchor/programs/spl-token-minter/Cargo.toml

@@ -19,4 +19,3 @@ idl-build = ["anchor-lang/idl-build", "anchor-spl/idl-build"]
 [dependencies]
 anchor-lang = { version = "0.30.0", features = ["init-if-needed"] }
 anchor-spl = { version = "0.30.0", features = ["metadata"] }
-mpl-token-metadata = { version = "1.13.1", features = ["no-entrypoint"] }

+ 8 - 4
tokens/spl-token-minter/anchor/programs/spl-token-minter/src/instructions/create.rs

@@ -1,10 +1,12 @@
 use {
     anchor_lang::prelude::*,
     anchor_spl::{
-        metadata::{create_metadata_accounts_v3, CreateMetadataAccountsV3, Metadata},
+        metadata::{
+            create_metadata_accounts_v3, mpl_token_metadata::types::DataV2,
+            CreateMetadataAccountsV3, Metadata,
+        },
         token::{Mint, Token},
     },
-    mpl_token_metadata::{pda::find_metadata_account, state::DataV2},
 };
 
 #[derive(Accounts)]
@@ -21,10 +23,12 @@ pub struct CreateToken<'info> {
 
     )]
     pub mint_account: Account<'info, Mint>,
-    /// CHECK: Address validated using constraint
+    /// CHECK: Validate address by deriving pda
     #[account(
         mut,
-        address=find_metadata_account(&mint_account.key()).0
+        seeds = [b"metadata", token_metadata_program.key().as_ref(), mint_account.key().as_ref()],
+        bump,
+        seeds::program = token_metadata_program.key(),
     )]
     pub metadata_account: UncheckedAccount<'info>,
 

+ 2 - 2
tokens/spl-token-minter/anchor/programs/spl-token-minter/src/instructions/mint.rs

@@ -11,14 +11,14 @@ pub struct MintToken<'info> {
     #[account(mut)]
     pub mint_authority: Signer<'info>,
 
-    pub recepient: SystemAccount<'info>,
+    pub recipient: SystemAccount<'info>,
     #[account(mut)]
     pub mint_account: Account<'info, Mint>,
     #[account(
         init_if_needed,
         payer = mint_authority,
         associated_token::mint = mint_account,
-        associated_token::authority = recepient,
+        associated_token::authority = recipient,
     )]
     pub associated_token_account: Account<'info, TokenAccount>,
 

+ 1 - 1
tokens/spl-token-minter/anchor/programs/spl-token-minter/src/lib.rs

@@ -5,7 +5,7 @@ use anchor_lang::prelude::*;
 pub mod instructions;
 use instructions::*;
 
-declare_id!("77p9WmpzQW29RUEzTEef2ym7AHePBE9yNWJ9acikXfZS");
+declare_id!("3of89Z9jwek9zrFgpCWc9jZvQvitpVMxpZNsrAD2vQUD");
 
 #[program]
 pub mod spl_token_minter {

+ 3 - 31
tokens/spl-token-minter/anchor/tests/test.ts

@@ -1,17 +1,7 @@
-import { PROGRAM_ID as TOKEN_METADATA_PROGRAM_ID } from "@metaplex-foundation/mpl-token-metadata";
 import * as anchor from "@coral-xyz/anchor";
 import { SplTokenMinter } from "../target/types/spl_token_minter";
-import {
-  PublicKey,
-  Keypair,
-  SYSVAR_RENT_PUBKEY,
-  SystemProgram,
-} from "@solana/web3.js";
-import {
-  getAssociatedTokenAddressSync,
-  ASSOCIATED_TOKEN_PROGRAM_ID,
-  TOKEN_PROGRAM_ID,
-} from "@solana/spl-token";
+import { Keypair } from "@solana/web3.js";
+import { getAssociatedTokenAddressSync } from "@solana/spl-token";
 
 describe("SPL Token Minter", () => {
   const provider = anchor.AnchorProvider.env();
@@ -30,26 +20,11 @@ describe("SPL Token Minter", () => {
   const mintKeypair = new Keypair();
 
   it("Create an SPL Token!", async () => {
-    // Derive the metadata account address.
-    const [metadataAddress] = PublicKey.findProgramAddressSync(
-      [
-        Buffer.from("metadata"),
-        TOKEN_METADATA_PROGRAM_ID.toBuffer(),
-        mintKeypair.publicKey.toBuffer(),
-      ],
-      TOKEN_METADATA_PROGRAM_ID
-    );
-
     const transactionSignature = await program.methods
       .createToken(metadata.name, metadata.symbol, metadata.uri)
       .accounts({
         payer: payer.publicKey,
         mintAccount: mintKeypair.publicKey,
-        metadataAccount: metadataAddress,
-        tokenProgram: TOKEN_PROGRAM_ID,
-        tokenMetadataProgram: TOKEN_METADATA_PROGRAM_ID,
-        systemProgram: SystemProgram.programId,
-        rent: SYSVAR_RENT_PUBKEY,
       })
       .signers([mintKeypair])
       .rpc();
@@ -74,12 +49,9 @@ describe("SPL Token Minter", () => {
       .mintToken(amount)
       .accounts({
         mintAuthority: payer.publicKey,
-        recepient: payer.publicKey,
+        recipient: payer.publicKey,
         mintAccount: mintKeypair.publicKey,
         associatedTokenAccount: associatedTokenAccountAddress,
-        tokenProgram: TOKEN_PROGRAM_ID,
-        associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,
-        systemProgram: SystemProgram.programId,
       })
       .rpc();
 

+ 6 - 3
tokens/token-swap/anchor/Anchor.toml

@@ -1,14 +1,17 @@
+[toolchain]
+
 [features]
-seeds = false
+resolution = true
 skip-lint = false
+
 [programs.devnet]
-swap_example = "C3ti6PFK6PoYShRFx1BNNTQU3qeY1iVwjwCA6SjJhiuW"
+swap_example = "9mcG7PFTBuii5oyfHbJm3kL8eQZrYqNYe9NEgaME21ff"
 
 [registry]
 url = "https://api.apr.dev"
 
 [provider]
-cluster = "Devnet"
+cluster = "Localnet"
 wallet = "~/.config/solana/id.json"
 
 [scripts]

+ 18 - 18
tokens/token-swap/anchor/package.json

@@ -1,20 +1,20 @@
 {
-    "scripts": {
-        "lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w",
-        "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check"
-    },
-    "dependencies": {
-        "@coral-xyz/anchor": "^0.27.0",
-        "@solana/spl-token": "^0.3.8"
-    },
-    "devDependencies": {
-        "@types/bn.js": "^5.1.0",
-        "@types/chai": "^4.3.0",
-        "@types/mocha": "^9.0.0",
-        "chai": "^4.3.4",
-        "mocha": "^9.0.3",
-        "prettier": "^2.6.2",
-        "ts-mocha": "^10.0.0",
-        "typescript": "^4.3.5"
-    }
+  "scripts": {
+    "lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w",
+    "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check"
+  },
+  "dependencies": {
+    "@coral-xyz/anchor": "^0.30.0",
+    "@solana/spl-token": "^0.3.8"
+  },
+  "devDependencies": {
+    "@types/bn.js": "^5.1.0",
+    "@types/chai": "^4.3.0",
+    "@types/mocha": "^9.0.0",
+    "chai": "^4.3.4",
+    "mocha": "^9.0.3",
+    "prettier": "^2.6.2",
+    "ts-mocha": "^10.0.0",
+    "typescript": "^4.3.5"
+  }
 }

+ 4 - 5
tokens/token-swap/anchor/programs/token-swap/Cargo.toml

@@ -1,12 +1,12 @@
 [package]
-name = "amm-tutorial"
+name = "swap_example"
 version = "0.1.0"
 description = "Created with Anchor"
 edition = "2021"
 
 [lib]
 crate-type = ["cdylib", "lib"]
-name = "amm_tutorial"
+name = "swap_example"
 
 [features]
 default = []
@@ -22,6 +22,5 @@ anchor-spl = { version = "0.30.0" }
 fixed = "1.23.1"
 half = "=2.2.1"
 fixed-sqrt = "0.2.5"
-solana-program = "1.16.10"
-winnow = "=0.4.1"
-toml_datetime = "=0.6.1"
+solana-program = "1.18.10"
+

+ 2 - 2
tokens/token-swap/anchor/programs/token-swap/src/constants.rs

@@ -4,7 +4,7 @@ use anchor_lang::prelude::*;
 pub const MINIMUM_LIQUIDITY: u64 = 100;
 
 #[constant]
-pub const AUTHORITY_SEED: &str = "authority";
+pub const AUTHORITY_SEED: &[u8] = b"authority";
 
 #[constant]
-pub const LIQUIDITY_SEED: &str = "liquidity";
+pub const LIQUIDITY_SEED: &[u8] = b"liquidity";

+ 2 - 2
tokens/token-swap/anchor/programs/token-swap/src/instructions/create_pool.rs

@@ -49,7 +49,7 @@ pub struct CreatePool<'info> {
             amm.key().as_ref(),
             mint_a.key().as_ref(),
             mint_b.key().as_ref(),
-            AUTHORITY_SEED.as_ref(),
+            AUTHORITY_SEED,
         ],
         bump,
     )]
@@ -62,7 +62,7 @@ pub struct CreatePool<'info> {
             amm.key().as_ref(),
             mint_a.key().as_ref(),
             mint_b.key().as_ref(),
-            LIQUIDITY_SEED.as_ref(),
+            LIQUIDITY_SEED,
         ],
         bump,
         mint::decimals = 6,

+ 4 - 5
tokens/token-swap/anchor/programs/token-swap/src/instructions/deposit_liquidity.rs

@@ -4,7 +4,6 @@ use anchor_spl::{
     token::{self, Mint, MintTo, Token, TokenAccount, Transfer},
 };
 use fixed::types::I64F64;
-use fixed_sqrt::FixedSqrt;
 
 use crate::{
     constants::{AUTHORITY_SEED, LIQUIDITY_SEED, MINIMUM_LIQUIDITY},
@@ -101,12 +100,12 @@ pub fn deposit_liquidity(
     )?;
 
     // Mint the liquidity to user
-    let authority_bump = *ctx.bumps.get("pool_authority").unwrap();
+    let authority_bump = ctx.bumps.pool_authority;
     let authority_seeds = &[
         &ctx.accounts.pool.amm.to_bytes(),
         &ctx.accounts.mint_a.key().to_bytes(),
         &ctx.accounts.mint_b.key().to_bytes(),
-        AUTHORITY_SEED.as_bytes(),
+        AUTHORITY_SEED,
         &[authority_bump],
     ];
     let signer_seeds = &[&authority_seeds[..]];
@@ -146,7 +145,7 @@ pub struct DepositLiquidity<'info> {
             pool.amm.as_ref(),
             mint_a.key().as_ref(),
             mint_b.key().as_ref(),
-            AUTHORITY_SEED.as_ref(),
+            AUTHORITY_SEED,
         ],
         bump,
     )]
@@ -161,7 +160,7 @@ pub struct DepositLiquidity<'info> {
             pool.amm.as_ref(),
             mint_a.key().as_ref(),
             mint_b.key().as_ref(),
-            LIQUIDITY_SEED.as_ref(),
+            LIQUIDITY_SEED,
         ],
         bump,
     )]

+ 3 - 3
tokens/token-swap/anchor/programs/token-swap/src/instructions/swap_exact_tokens_for_tokens.rs

@@ -63,12 +63,12 @@ pub fn swap_exact_tokens_for_tokens(
     let invariant = pool_a.amount * pool_b.amount;
 
     // Transfer tokens to the pool
-    let authority_bump = *ctx.bumps.get("pool_authority").unwrap();
+    let authority_bump = ctx.bumps.pool_authority;
     let authority_seeds = &[
         &ctx.accounts.pool.amm.to_bytes(),
         &ctx.accounts.mint_a.key().to_bytes(),
         &ctx.accounts.mint_b.key().to_bytes(),
-        AUTHORITY_SEED.as_bytes(),
+        AUTHORITY_SEED,
         &[authority_bump],
     ];
     let signer_seeds = &[&authority_seeds[..]];
@@ -170,7 +170,7 @@ pub struct SwapExactTokensForTokens<'info> {
             pool.amm.as_ref(),
             mint_a.key().as_ref(),
             mint_b.key().as_ref(),
-            AUTHORITY_SEED.as_ref(),
+            AUTHORITY_SEED,
         ],
         bump,
     )]

+ 4 - 4
tokens/token-swap/anchor/programs/token-swap/src/instructions/withdraw_liquidity.rs

@@ -11,12 +11,12 @@ use crate::{
 };
 
 pub fn withdraw_liquidity(ctx: Context<WithdrawLiquidity>, amount: u64) -> Result<()> {
-    let authority_bump = *ctx.bumps.get("pool_authority").unwrap();
+    let authority_bump = ctx.bumps.pool_authority;
     let authority_seeds = &[
         &ctx.accounts.pool.amm.to_bytes(),
         &ctx.accounts.mint_a.key().to_bytes(),
         &ctx.accounts.mint_b.key().to_bytes(),
-        AUTHORITY_SEED.as_bytes(),
+        AUTHORITY_SEED,
         &[authority_bump],
     ];
     let signer_seeds = &[&authority_seeds[..]];
@@ -111,7 +111,7 @@ pub struct WithdrawLiquidity<'info> {
             pool.amm.as_ref(),
             mint_a.key().as_ref(),
             mint_b.key().as_ref(),
-            AUTHORITY_SEED.as_ref(),
+            AUTHORITY_SEED,
         ],
         bump,
     )]
@@ -126,7 +126,7 @@ pub struct WithdrawLiquidity<'info> {
             pool.amm.as_ref(),
             mint_a.key().as_ref(),
             mint_b.key().as_ref(),
-            LIQUIDITY_SEED.as_ref(),
+            LIQUIDITY_SEED,
         ],
         bump,
     )]

+ 1 - 1
tokens/token-swap/anchor/programs/token-swap/src/lib.rs

@@ -8,7 +8,7 @@ mod instructions;
 mod state;
 
 // Set the correct key here
-declare_id!("C3ti6PFK6PoYShRFx1BNNTQU3qeY1iVwjwCA6SjJhiuW");
+declare_id!("9mcG7PFTBuii5oyfHbJm3kL8eQZrYqNYe9NEgaME21ff");
 
 #[program]
 pub mod swap_example {

+ 2 - 0
tokens/token-swap/anchor/tests/create-pool.ts

@@ -21,6 +21,8 @@ describe("Create pool", () => {
       .accounts({ amm: values.ammKey, admin: values.admin.publicKey })
       .rpc();
 
+    console.log(values.ammKey);
+
     await mintingTokens({
       connection,
       creator: values.admin,

+ 1 - 1
tokens/token-swap/anchor/tests/swap.ts

@@ -10,7 +10,7 @@ describe("Swap", () => {
   const connection = provider.connection;
   anchor.setProvider(provider);
 
-  const program = anchor.workspace.AmmTutorial as Program<AmmTutorial>;
+  const program = anchor.workspace.SwapExample as Program<SwapExample>;
 
   let values: TestValues;
 

+ 4 - 4
tokens/token-swap/anchor/tests/utils.ts

@@ -133,7 +133,7 @@ export function createValues(defaults?: TestValuesDefaults): TestValues {
   const admin = Keypair.generate();
   const ammKey = PublicKey.findProgramAddressSync(
     [id.toBuffer()],
-    anchor.workspace.AmmTutorial.programId
+    anchor.workspace.SwapExample.programId
   )[0];
 
   // Making sure tokens are in the right order
@@ -154,7 +154,7 @@ export function createValues(defaults?: TestValuesDefaults): TestValues {
       mintBKeypair.publicKey.toBuffer(),
       Buffer.from("authority"),
     ],
-    anchor.workspace.AmmTutorial.programId
+    anchor.workspace.SwapExample.programId
   )[0];
   const mintLiquidity = PublicKey.findProgramAddressSync(
     [
@@ -163,7 +163,7 @@ export function createValues(defaults?: TestValuesDefaults): TestValues {
       mintBKeypair.publicKey.toBuffer(),
       Buffer.from("liquidity"),
     ],
-    anchor.workspace.AmmTutorial.programId
+    anchor.workspace.SwapExample.programId
   )[0];
   const poolKey = PublicKey.findProgramAddressSync(
     [
@@ -171,7 +171,7 @@ export function createValues(defaults?: TestValuesDefaults): TestValues {
       mintAKeypair.publicKey.toBuffer(),
       mintBKeypair.publicKey.toBuffer(),
     ],
-    anchor.workspace.AmmTutorial.programId
+    anchor.workspace.SwapExample.programId
   )[0];
   return {
     id,

+ 6 - 3
tokens/transfer-tokens/anchor/Anchor.toml

@@ -1,15 +1,17 @@
+[toolchain]
+
 [features]
-seeds = false
+resolution = true
 skip-lint = false
 
 [programs.localnet]
-transfer_tokens = "2W7B8C5skxyVaAA1LfYAsRHiv26LL5j88GJ9XYyybWqc"
+transfer_tokens = "nHi9DdNjuupjQ3c8AJU9sChB5gLbZvTLsJQouY4hU67"
 
 [registry]
 url = "https://api.apr.dev"
 
 [provider]
-cluster = "Localnet"
+cluster = "devnet"
 wallet = "~/.config/solana/id.json"
 
 [scripts]
@@ -18,6 +20,7 @@ test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
 [test]
 startup_wait = 5000
 shutdown_wait = 2000
+upgradeable = false
 
 [test.validator]
 bind_address = "0.0.0.0"

+ 0 - 1
tokens/transfer-tokens/anchor/package.json

@@ -1,7 +1,6 @@
 {
   "dependencies": {
     "@coral-xyz/anchor": "^0.30.0",
-    "@metaplex-foundation/mpl-token-metadata": "^2.5.2",
     "@solana/spl-token": "^0.3.8"
   },
   "devDependencies": {

+ 0 - 1
tokens/transfer-tokens/anchor/programs/transfer-tokens/Cargo.toml

@@ -19,4 +19,3 @@ idl-build = ["anchor-lang/idl-build", "anchor-spl/idl-build"]
 [dependencies]
 anchor-lang = { version = "0.30.0", features = ["init-if-needed"] }
 anchor-spl = { version = "0.30.0", features = ["metadata"] }
-mpl-token-metadata = { version = "1.13.1", features = ["no-entrypoint"] }

+ 8 - 4
tokens/transfer-tokens/anchor/programs/transfer-tokens/src/instructions/create.rs

@@ -1,10 +1,12 @@
 use {
     anchor_lang::prelude::*,
     anchor_spl::{
-        metadata::{create_metadata_accounts_v3, CreateMetadataAccountsV3, Metadata},
+        metadata::{
+            create_metadata_accounts_v3, mpl_token_metadata::types::DataV2,
+            CreateMetadataAccountsV3, Metadata,
+        },
         token::{Mint, Token},
     },
-    mpl_token_metadata::{pda::find_metadata_account, state::DataV2},
 };
 
 #[derive(Accounts)]
@@ -22,10 +24,12 @@ pub struct CreateToken<'info> {
     )]
     pub mint_account: Account<'info, Mint>,
 
-    /// CHECK: Address validated using constraint
+    /// CHECK: Validate address by deriving pda
     #[account(
         mut,
-        address=find_metadata_account(&mint_account.key()).0
+        seeds = [b"metadata", token_metadata_program.key().as_ref(), mint_account.key().as_ref()],
+        bump,
+        seeds::program = token_metadata_program.key(),
     )]
     pub metadata_account: UncheckedAccount<'info>,
 

+ 2 - 2
tokens/transfer-tokens/anchor/programs/transfer-tokens/src/instructions/mint.rs

@@ -11,14 +11,14 @@ pub struct MintToken<'info> {
     #[account(mut)]
     pub mint_authority: Signer<'info>,
 
-    pub recepient: SystemAccount<'info>,
+    pub recipient: SystemAccount<'info>,
     #[account(mut)]
     pub mint_account: Account<'info, Mint>,
     #[account(
         init_if_needed,
         payer = mint_authority,
         associated_token::mint = mint_account,
-        associated_token::authority = recepient,
+        associated_token::authority = recipient,
     )]
     pub associated_token_account: Account<'info, TokenAccount>,
 

+ 1 - 1
tokens/transfer-tokens/anchor/programs/transfer-tokens/src/lib.rs

@@ -6,7 +6,7 @@ pub mod instructions;
 
 use instructions::*;
 
-declare_id!("2W7B8C5skxyVaAA1LfYAsRHiv26LL5j88GJ9XYyybWqc");
+declare_id!("nHi9DdNjuupjQ3c8AJU9sChB5gLbZvTLsJQouY4hU67");
 
 #[program]
 pub mod transfer_tokens {

+ 3 - 34
tokens/transfer-tokens/anchor/tests/test.ts

@@ -1,17 +1,7 @@
-import { PROGRAM_ID as TOKEN_METADATA_PROGRAM_ID } from "@metaplex-foundation/mpl-token-metadata";
 import * as anchor from "@coral-xyz/anchor";
 import { TransferTokens } from "../target/types/transfer_tokens";
-import {
-  PublicKey,
-  Keypair,
-  SYSVAR_RENT_PUBKEY,
-  SystemProgram,
-} from "@solana/web3.js";
-import {
-  getAssociatedTokenAddressSync,
-  ASSOCIATED_TOKEN_PROGRAM_ID,
-  TOKEN_PROGRAM_ID,
-} from "@solana/spl-token";
+import { Keypair } from "@solana/web3.js";
+import { getAssociatedTokenAddressSync } from "@solana/spl-token";
 
 describe("Transfer Tokens", () => {
   const provider = anchor.AnchorProvider.env();
@@ -45,26 +35,11 @@ describe("Transfer Tokens", () => {
   );
 
   it("Create an SPL Token!", async () => {
-    // Derive the metadata account address.
-    const [metadataAddress] = PublicKey.findProgramAddressSync(
-      [
-        Buffer.from("metadata"),
-        TOKEN_METADATA_PROGRAM_ID.toBuffer(),
-        mintKeypair.publicKey.toBuffer(),
-      ],
-      TOKEN_METADATA_PROGRAM_ID
-    );
-
     const transactionSignature = await program.methods
       .createToken(metadata.name, metadata.symbol, metadata.uri)
       .accounts({
         payer: payer.publicKey,
         mintAccount: mintKeypair.publicKey,
-        metadataAccount: metadataAddress,
-        tokenProgram: TOKEN_PROGRAM_ID,
-        tokenMetadataProgram: TOKEN_METADATA_PROGRAM_ID,
-        systemProgram: SystemProgram.programId,
-        rent: SYSVAR_RENT_PUBKEY,
       })
       .signers([mintKeypair])
       .rpc();
@@ -83,12 +58,9 @@ describe("Transfer Tokens", () => {
       .mintToken(amount)
       .accounts({
         mintAuthority: payer.publicKey,
-        recepient: payer.publicKey,
+        recipient: payer.publicKey,
         mintAccount: mintKeypair.publicKey,
         associatedTokenAccount: senderTokenAddress,
-        tokenProgram: TOKEN_PROGRAM_ID,
-        associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,
-        systemProgram: SystemProgram.programId,
       })
       .rpc();
 
@@ -109,9 +81,6 @@ describe("Transfer Tokens", () => {
         mintAccount: mintKeypair.publicKey,
         senderTokenAccount: senderTokenAddress,
         recipientTokenAccount: recepientTokenAddress,
-        tokenProgram: TOKEN_PROGRAM_ID,
-        associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,
-        systemProgram: SystemProgram.programId,
       })
       .rpc();