@@ -5,37 +5,53 @@ use steel::*;
55pub fn process_mint ( accounts : & [ AccountInfo < ' _ > ] , data : & [ u8 ] ) -> ProgramResult {
66 // parse args.
77 let args = Mint :: try_from_bytes ( data) ?;
8- let amount = u64:: from_le_bytes ( args. amount ) ;
8+ let quantity = u64:: from_le_bytes ( args. quantity ) ;
99
1010 // Load accounts.
11- let [ signer_info, mint_info, to_info, authority_info, token_program] = accounts else {
11+ let [ signer_info, recipient_info, mint_info, associated_token_account_info, authority_info, token_program, associated_token_program, system_program] =
12+ accounts
13+ else {
1214 return Err ( ProgramError :: NotEnoughAccountKeys ) ;
1315 } ;
1416
15- msg ! ( "Minting tokens to associated token account..." ) ;
16- msg ! ( "Mint: {:?}" , mint_info) ;
17- msg ! ( "Token Address: {:?}" , & to_info) ;
18-
19- // validation
2017 signer_info. is_signer ( ) ?;
2118 mint_info. as_mint ( ) ?;
2219 token_program. is_program ( & spl_token:: ID ) ?;
2320
24- to_info. as_associated_token_account ( signer_info. key , mint_info. key ) ?;
21+ if associated_token_account_info. lamports ( ) == 0 {
22+ msg ! ( "Creating associated token account..." ) ;
23+ create_associated_token_account (
24+ signer_info,
25+ recipient_info,
26+ associated_token_account_info,
27+ mint_info,
28+ system_program,
29+ token_program,
30+ associated_token_program,
31+ ) ?;
32+ } else {
33+ msg ! ( "Associated token account exists." ) ;
34+ }
35+ msg ! (
36+ "Associated Token Address: {}" ,
37+ associated_token_account_info. key
38+ ) ;
39+
40+ msg ! ( "Minting {} tokens to associated token account..." , quantity) ;
2541
2642 solana_program:: program:: invoke (
2743 & spl_token:: instruction:: mint_to (
2844 & spl_token:: id ( ) ,
2945 mint_info. key ,
30- to_info . key ,
46+ associated_token_account_info . key ,
3147 authority_info. key ,
3248 & [ authority_info. key ] ,
33- amount ,
49+ quantity ,
3450 ) ?,
3551 & [
3652 token_program. clone ( ) ,
3753 mint_info. clone ( ) ,
38- to_info . clone ( ) ,
54+ associated_token_account_info . clone ( ) ,
3955 authority_info. clone ( ) ,
4056 ] ,
4157 ) ?;
0 commit comments