Quantcast
Channel: Recent Questions - Solana Stack Exchange
Viewing all articles
Browse latest Browse all 7906

How to transfer tokens using transfer hook in Anchor

$
0
0

I'm trying to transfer tokens from my program that has a transfer hook. I keep getting 0x7dc8348c Error.

My transfer checked call

// transfer the base token from base bank to the payer base token account based on the amount of base token to be received    token_2022::transfer_checked(        CpiContext::new_with_signer(            token_program.to_account_info(),            TransferChecked {                from: base_token_bank.to_account_info(),                mint: base_token.to_account_info(),                to: payer_base_token_account.to_account_info(),                authority: amm.to_account_info(),            },&[&[SEED_AMM, &amm.id.to_be_bytes(), &[amm.bump]]],        ),        base_recieved,        base_token.decimals,    )?;

This is my context

#[derive(Accounts)]pub struct Buy<'info> {  #[account(mut)]    pub payer: Signer<'info>,    // we use amm to store the SOL balance    #[account(mut,        address = Amm::pda(amm.id).0,    )]    pub amm: Account<'info, Amm>,    #[account(        mut,        associated_token::mint = base_token,        associated_token::authority = payer,        associated_token::token_program = token_program,    )]    pub payer_base_token_account: Box<InterfaceAccount<'info, TokenAccount>>,    #[account(mut,        associated_token::mint = amm.base_token,        associated_token::authority = amm,        associated_token::token_program = token_program,    )]    pub base_token_bank: Box<InterfaceAccount<'info, TokenAccount>>,    #[account(address = Amm::mint_pda(amm.id).0)]    pub base_token: Box<InterfaceAccount<'info, Mint>>,    #[account(        seeds = [b"extra-account-metas", base_token.key().as_ref()],        bump    )]    /// CHECK extra meta list account    pub extra_meta_list: AccountInfo<'info>,    pub system_program: Program<'info, System>,    pub token_program: Program<'info, Token2022>,    pub associated_token_program: Program<'info, AssociatedToken>,}

I invoke the initializeAmm first (initializes the mint with transfer hook and the extra_accounts_meta

pub struct InitializeAmm<'info> {    #[account(mut)]    pub authority: Signer<'info>,    #[account(init,      payer = authority,      space = 8 + mem::size_of::<Amm>(),      seeds = [SEED_AMM, &amm_id.to_be_bytes()],      bump)]    pub amm: Box<Account<'info, Amm>>,    #[account(        init,        payer = authority,        mint::authority = amm,        mint::decimals = 9,        mint::token_program = token_program,        extensions::transfer_hook::authority = amm,        extensions::transfer_hook::program_id = crate::ID,        seeds = [SEED_MINT,&amm_id.to_be_bytes()],        bump    )]    pub base_token: Box<InterfaceAccount<'info, Mint>>,    #[        account(            init,            payer = authority,            associated_token::authority = amm,            associated_token::mint = base_token,            associated_token::token_program = token_program,        )    ]    pub base_token_bank: Box<InterfaceAccount<'info, TokenAccount>>,    /// CHECK transfer hook program    #[account(        mut,        seeds = [b"extra-account-metas", base_token.key().as_ref()],        bump    )]    pub extra_meta_list: AccountInfo<'info>,    pub system_program: Program<'info, System>,    pub token_program: Program<'info, Token2022>,    pub associated_token_program: Program<'info, AssociatedToken>,}

Example transaction:https://explorer.solana.com/tx/22qAMoehhUbmX3jbcqNahy95KdViegfrWpCxMdWZDME7XjY7iRgybfGtRjzAVQFyS51DZcpaQ7T2mszga5cSderd?cluster=devnet

I can provide more info as needed.


Viewing all articles
Browse latest Browse all 7906

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>