Bläddra i källkod

spl: Add token initialize_account instruction (#166)

Armani Ferrante 4 år sedan
förälder
incheckning
ae990e21d7
2 ändrade filer med 29 tillägg och 0 borttagningar
  1. 1 0
      CHANGELOG.md
  2. 28 0
      spl/src/token.rs

+ 1 - 0
CHANGELOG.md

@@ -14,6 +14,7 @@ incremented for features.
 ## Features
 
 * cli: Fund Anchor.toml configured wallet when testing ([#164](https://github.com/project-serum/anchor/pull/164)).
+* spl: Add initialize_account instruction for spl tokens ([#166](https://github.com/project-serum/anchor/pull/166)).
 
 ## [0.4.1] - 2021-04-06
 

+ 28 - 0
spl/src/token.rs

@@ -104,6 +104,27 @@ pub fn approve<'a, 'b, 'c, 'info>(
     )
 }
 
+pub fn initialize_account<'a, 'b, 'c, 'info>(
+    ctx: CpiContext<'a, 'b, 'c, 'info, InitializeAccount<'info>>,
+) -> ProgramResult {
+    let ix = spl_token::instruction::initialize_account(
+        &spl_token::ID,
+        ctx.accounts.account.key,
+        ctx.accounts.mint.key,
+        ctx.accounts.authority.key,
+    )?;
+    solana_program::program::invoke_signed(
+        &ix,
+        &[
+            ctx.accounts.account.clone(),
+            ctx.accounts.mint.clone(),
+            ctx.accounts.authority.clone(),
+            ctx.program.clone(),
+        ],
+        ctx.signer_seeds,
+    )
+}
+
 #[derive(Accounts)]
 pub struct Transfer<'info> {
     pub from: AccountInfo<'info>,
@@ -132,6 +153,13 @@ pub struct Approve<'info> {
     pub authority: AccountInfo<'info>,
 }
 
+#[derive(Accounts)]
+pub struct InitializeAccount<'info> {
+    pub account: AccountInfo<'info>,
+    pub mint: AccountInfo<'info>,
+    pub authority: AccountInfo<'info>,
+}
+
 #[derive(Clone)]
 pub struct TokenAccount(spl_token::state::Account);