From ae990e21d7cf91268e141768618f4aedd6043d6e Mon Sep 17 00:00:00 2001 From: Armani Ferrante Date: Sat, 10 Apr 2021 14:54:19 +0800 Subject: [PATCH] spl: Add token initialize_account instruction (#166) --- CHANGELOG.md | 1 + spl/src/token.rs | 28 ++++++++++++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 442f0e3e..0422edec 100644 --- a/CHANGELOG.md +++ b/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 diff --git a/spl/src/token.rs b/spl/src/token.rs index 643eb7fd..e4d768d1 100644 --- a/spl/src/token.rs +++ b/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);