diff --git a/program/src/close.rs b/program/src/close.rs index 898a0b9..5d1f5f0 100644 --- a/program/src/close.rs +++ b/program/src/close.rs @@ -5,7 +5,7 @@ use steel::*; pub fn process_close(accounts: &[AccountInfo<'_>], _data: &[u8]) -> ProgramResult { // Load accounts. let clock = Clock::get()?; - let [signer_info, block_info, market_info, mint_base_info, mint_quote_info, recipient_info, treasury_info, vault_base_info, vault_quote_info, system_program, token_program] = + let [signer_info, block_info, market_info, mint_base_info, mint_quote_info, recipient_info, treasury_info, treasury_tokens_info, vault_base_info, vault_quote_info, system_program, token_program, associated_token_program] = accounts else { return Err(ProgramError::NotEnoughAccountKeys); @@ -28,6 +28,32 @@ pub fn process_close(accounts: &[AccountInfo<'_>], _data: &[u8]) -> ProgramResul vault_quote_info.as_associated_token_account(market_info.key, mint_quote_info.key)?; system_program.is_program(&system_program::ID)?; token_program.is_program(&spl_token::ID)?; + associated_token_program.is_program(&spl_associated_token_account::ID)?; + + // Load treasury token accounts. + if treasury_tokens_info.data_is_empty() { + create_associated_token_account( + signer_info, + treasury_info, + treasury_tokens_info, + mint_quote_info, + system_program, + token_program, + associated_token_program, + )?; + } else { + treasury_tokens_info.as_associated_token_account(&TREASURY_ADDRESS, mint_quote_info.key)?; + } + + // Fund motherlode reward. + mint_to_signed( + mint_quote_info, + treasury_tokens_info, + treasury_info, + token_program, + OPEN_FEE, + &[TREASURY], + )?; // Payout block reward. if block.reward.lode_reward > 0 && block.reward.lode_authority != Pubkey::default() { diff --git a/program/src/open.rs b/program/src/open.rs index 639ce83..89f5333 100644 --- a/program/src/open.rs +++ b/program/src/open.rs @@ -12,7 +12,7 @@ pub fn process_open(accounts: &[AccountInfo<'_>], data: &[u8]) -> ProgramResult // Load accounts. let clock = Clock::get()?; - let [signer_info, block_info, collateral_info, commitment_info, market_info, mint_base_info, mint_quote_info, sender_info, treasury_info, treasury_tokens_info, vault_base_info, vault_quote_info, system_program, token_program, associated_token_program, rent_sysvar] = + let [signer_info, block_info, collateral_info, commitment_info, market_info, mint_base_info, mint_quote_info, sender_info, treasury_info, vault_base_info, vault_quote_info, system_program, token_program, associated_token_program, rent_sysvar] = accounts else { return Err(ProgramError::NotEnoughAccountKeys); @@ -41,26 +41,11 @@ pub fn process_open(accounts: &[AccountInfo<'_>], data: &[u8]) -> ProgramResult associated_token_program.is_program(&spl_associated_token_account::ID)?; rent_sysvar.is_sysvar(&sysvar::rent::ID)?; - // Load treasury token accounts. - if treasury_tokens_info.data_is_empty() { - create_associated_token_account( - signer_info, - treasury_info, - treasury_tokens_info, - mint_quote_info, - system_program, - token_program, - associated_token_program, - )?; - } else { - treasury_tokens_info.as_associated_token_account(&TREASURY_ADDRESS, mint_quote_info.key)?; - } - // Pay block opening fee. - transfer( - signer_info, + burn( sender_info, - treasury_tokens_info, + mint_quote_info, + signer_info, token_program, OPEN_FEE, )?;