Browse Source

Added token::transfer_checked wrapper to token (#2351)

Barebox 2 years ago
parent
commit
a068171aee
1 changed files with 35 additions and 0 deletions
  1. 35 0
      spl/src/token.rs

+ 35 - 0
spl/src/token.rs

@@ -33,6 +33,33 @@ pub fn transfer<'a, 'b, 'c, 'info>(
     .map_err(Into::into)
 }
 
+pub fn transfer_checked<'a, 'b, 'c, 'info>(
+    ctx: CpiContext<'a, 'b, 'c, 'info, TransferChecked<'info>>,
+    amount: u64,
+    decimals: u8,
+) -> Result<()> {
+    let ix = spl_token::instruction::transfer_checked(
+        &spl_token::ID,
+        ctx.accounts.from.key,
+        ctx.accounts.mint.key,
+        ctx.accounts.to.key,
+        ctx.accounts.authority.key,
+        &[],
+        amount,
+        decimals
+    )?;
+    solana_program::program::invoke_signed(
+        &ix, &[
+        ctx.accounts.from.clone(),
+        ctx.accounts.mint.clone(),
+        ctx.accounts.to.clone(),
+        ctx.accounts.authority.clone(),
+        ], 
+        ctx.signer_seeds
+    )
+    .map_err(Into::into)
+}
+
 pub fn mint_to<'a, 'b, 'c, 'info>(
     ctx: CpiContext<'a, 'b, 'c, 'info, MintTo<'info>>,
     amount: u64,
@@ -307,6 +334,14 @@ pub struct Transfer<'info> {
     pub authority: AccountInfo<'info>,
 }
 
+#[derive(Accounts)]
+pub struct TransferChecked<'info> {
+    pub from: AccountInfo<'info>,
+    pub mint: AccountInfo<'info>,
+    pub to: AccountInfo<'info>,
+    pub authority: AccountInfo<'info>,
+}
+
 #[derive(Accounts)]
 pub struct MintTo<'info> {
     pub mint: AccountInfo<'info>,