1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- use {
- borsh::{
- BorshDeserialize,
- BorshSerialize,
- },
- solana_program::{
- account_info::{next_account_info, AccountInfo},
- entrypoint::ProgramResult,
- msg,
- program::invoke,
- },
- spl_token::{
- instruction as token_instruction,
- },
- spl_associated_token_account::{
- instruction as associated_token_account_instruction,
- },
- };
- #[derive(BorshSerialize, BorshDeserialize, Debug)]
- pub struct MintSplArgs {
- pub quantity: u64,
- }
- pub fn mint_spl(
- accounts: &[AccountInfo],
- args: MintSplArgs,
- ) -> ProgramResult {
- let accounts_iter = &mut accounts.iter();
- let mint_account = next_account_info(accounts_iter)?;
- let mint_authority = next_account_info(accounts_iter)?;
- let associated_token_account = next_account_info(accounts_iter)?;
- let payer = next_account_info(accounts_iter)?;
- let system_program = next_account_info(accounts_iter)?;
- let token_program = next_account_info(accounts_iter)?;
- let associated_token_program = next_account_info(accounts_iter)?;
- if associated_token_account.lamports() == 0 {
- msg!("Creating associated token account...");
- invoke(
- &associated_token_account_instruction::create_associated_token_account(
- &payer.key,
- &payer.key,
- &mint_account.key,
- ),
- &[
- mint_account.clone(),
- associated_token_account.clone(),
- payer.clone(),
- system_program.clone(),
- token_program.clone(),
- associated_token_program.clone(),
- ]
- )?;
- } else {
- msg!("Associated token account exists.");
- }
- msg!("Associated Token Address: {}", associated_token_account.key);
- msg!("Minting {} tokens to associated token account...", args.quantity);
- invoke(
- &token_instruction::mint_to(
- &token_program.key,
- &mint_account.key,
- &associated_token_account.key,
- &mint_authority.key,
- &[&mint_authority.key],
- args.quantity,
- )?,
- &[
- mint_account.clone(),
- mint_authority.clone(),
- associated_token_account.clone(),
- token_program.clone(),
- ],
- )?;
- msg!("Tokens minted to wallet successfully.");
- Ok(())
- }
|