simple_voter/
token_cpi.rs

1use crate::token_record_signer_seeds;
2use crate::TokenContext;
3use anchor_lang::prelude::*;
4use anchor_spl::token;
5
6impl TokenContext<'_> {
7    pub fn transfer_to_vault(&self, amount: u64) -> Result<()> {
8        let cpi_ctx = CpiContext::new(
9            self.token_program.to_account_info(),
10            token::Transfer {
11                from: self.gov_token_account.to_account_info().clone(),
12                to: self.gov_token_vault.to_account_info().clone(),
13                authority: self.authority.to_account_info().clone(),
14            },
15        );
16        token::transfer(cpi_ctx, amount)
17    }
18
19    pub fn transfer_from_vault(&self, amount: u64) -> Result<()> {
20        let seeds = token_record_signer_seeds!(self.token_record);
21        let signer_seeds = &[&seeds[..]];
22        let cpi_ctx = CpiContext::new_with_signer(
23            self.token_program.to_account_info(),
24            token::Transfer {
25                from: self.gov_token_vault.to_account_info().clone(),
26                to: self.gov_token_account.to_account_info().clone(),
27                authority: self.token_record.to_account_info().clone(),
28            },
29            signer_seeds,
30        );
31        token::transfer(cpi_ctx, amount)
32    }
33}