Anchor for EVM Developers
  • Anchor for EVM Developers
  • Program Address
  • Functions
  • Token
  • Validation
  • Mutation
  • Calling Other Contract
  • Wrap Native Token
  • Transfer Native Token
  • Transfer Fungible Token
  • Deploy A Fungible Token
  • Access Control
  • Address Mining
  • Events
  • Forking Mainnet
  • Function Selector
  • Feature Flags
  • Feature Dependencies
  • Migration / Scripts
  • Upgrade Programs
  • Block timestamp
Powered by GitBook
On this page

Transfer Fungible Token

EVM

IERC20(token).transfer(receiver, amount);
IERC20(token).safeTransfer(receiver, amount);
// owner
IERC20(token).approve(spender, amount);

// spender
IERC20(token).transferFrom(owner, receiver, amount);
IERC20(token).safeTransferFrom(owner, receiver, amount);

Solana

  1. From regular accounts

let transfer_accounts = TransferChecked {
    from: ctx.accounts.from_token_account.to_account_info(),
    mint: ctx.accounts.mint.to_account_info(),
    to: ctx.accounts.to_token_account.to_account_info(),
    authority: ctx.accounts.from.to_account_info(),
};

let cpi_ctx = CpiContext::new(
    ctx.accounts.token_program.to_account_info(),
    transfer_accounts,
);

transfer_checked(cpi_ctx, amount, ctx.accounts.mint.decimals)?;
  1. From PDAs

let seeds = &[
    b"from".as_bytes(),
    &[ctx.bumps.from],
];
let signer = &[&seeds[..]];

let transfer_accounts = TransferChecked {
    from: ctx.accounts.from_token_account.to_account_info(),
    mint: ctx.accounts.mint.to_account_info(),
    to: ctx.accounts.to_token_account.to_account_info(),
    authority: ctx.accounts.from.to_account_info(),
};

let cpi_ctx = CpiContext::new_with_signer(
    ctx.accounts.token_program.to_account_info(),
    transfer_accounts,
    vault_authority_signer,
);

transfer_checked(cpi_ctx, amount, ctx.accounts.mint.decimals)?;
PreviousTransfer Native TokenNextDeploy A Fungible Token

Last updated 2 months ago