From c23bd5a9c6c556d5c4f2f271b5e2bf4b2718be1f Mon Sep 17 00:00:00 2001 From: Hardhat Chad Date: Wed, 25 Jun 2025 09:05:27 -0500 Subject: [PATCH] sdk --- api/src/sdk.rs | 25 ++++++++++++++++--------- program/src/close.rs | 35 +++++++++++++++++++++++++++-------- program/src/commit.rs | 7 ++++++- program/src/deposit.rs | 6 +++++- program/src/mine.rs | 6 +++++- program/src/swap.rs | 18 +++++++++++++++--- program/src/uncommit.rs | 6 +++++- program/src/withdraw.rs | 10 +++++++--- 8 files changed, 86 insertions(+), 27 deletions(-) diff --git a/api/src/sdk.rs b/api/src/sdk.rs index b620a4d..794ad12 100644 --- a/api/src/sdk.rs +++ b/api/src/sdk.rs @@ -50,8 +50,10 @@ pub fn close(signer: Pubkey, recipient: Pubkey, id: u64) -> Instruction { let block_adddress = block_pda(id).0; let market_address = market_pda(id).0; let base_mint_address = mint_pda(id).0; - let vault_base = get_associated_token_address(&market_address, &base_mint_address); - let vault_quote = get_associated_token_address(&market_address, &MINT_ADDRESS); + let vault_base = vault_base_pda(id).0; + let vault_quote = vault_quote_pda(id).0; + // let vault_base = get_associated_token_address(&market_address, &base_mint_address); + // let vault_quote = get_associated_token_address(&market_address, &MINT_ADDRESS); Instruction { program_id: crate::ID, accounts: vec![ @@ -112,7 +114,8 @@ pub fn commit( let base_mint_address = mint_pda(id).0; let miner_address = miner_pda(signer).0; let permit_address = permit_pda(signer, id).0; - let commitment_address = get_associated_token_address(&block_adddress, &base_mint_address); + // let commitment_address = get_associated_token_address(&block_adddress, &base_mint_address); + let commitment_address = commitment_pda(id).0; let sender_address = get_associated_token_address(&signer, &base_mint_address); Instruction { program_id: crate::ID, @@ -144,7 +147,8 @@ pub fn uncommit(signer: Pubkey, amount: u64, id: u64) -> Instruction { let base_mint_address = mint_pda(id).0; let miner_address = miner_pda(signer).0; let permit_address = permit_pda(signer, id).0; - let commitment_address = get_associated_token_address(&block_adddress, &base_mint_address); + // let commitment_address = get_associated_token_address(&block_adddress, &base_mint_address); + let commitment_address = commitment_pda(id).0; let recipient_address = get_associated_token_address(&signer, &MINT_ADDRESS); Instruction { program_id: crate::ID, @@ -169,7 +173,8 @@ pub fn uncommit(signer: Pubkey, amount: u64, id: u64) -> Instruction { pub fn deposit(signer: Pubkey, id: u64, amount: u64) -> Instruction { let block_adddress = block_pda(id).0; - let collateral_address = get_associated_token_address(&block_adddress, &MINT_ADDRESS); + // let collateral_address = get_associated_token_address(&block_adddress, &MINT_ADDRESS); + let collateral_address = collateral_pda(id).0; let stake_address = stake_pda(signer, id).0; let sender = get_associated_token_address(&signer, &MINT_ADDRESS); Instruction { @@ -202,17 +207,19 @@ pub fn swap( let market_address = market_pda(id).0; let base_mint_address = mint_pda(id).0; let stake_address = stake_pda(signer, id).0; - let collateral_address = get_associated_token_address(&block_adddress, &MINT_ADDRESS); + // let collateral_address = get_associated_token_address(&block_adddress, &MINT_ADDRESS); let tokens_base_address = get_associated_token_address(&signer, &base_mint_address); let tokens_quote_address = get_associated_token_address(&signer, &MINT_ADDRESS); - let vault_base_address = get_associated_token_address(&market_address, &base_mint_address); - let vault_quote_address = get_associated_token_address(&market_address, &MINT_ADDRESS); + // let vault_base_address = get_associated_token_address(&market_address, &base_mint_address); + // let vault_quote_address = get_associated_token_address(&market_address, &MINT_ADDRESS); + let vault_base_address = vault_base_pda(id).0; + let vault_quote_address = vault_quote_pda(id).0; Instruction { program_id: crate::ID, accounts: vec![ AccountMeta::new(signer, true), AccountMeta::new(block_adddress, false), - AccountMeta::new(collateral_address, false), + // AccountMeta::new(collateral_address, false), AccountMeta::new(market_address, false), AccountMeta::new(base_mint_address, false), AccountMeta::new(MINT_ADDRESS, false), diff --git a/program/src/close.rs b/program/src/close.rs index ba2a19a..4536171 100644 --- a/program/src/close.rs +++ b/program/src/close.rs @@ -14,12 +14,20 @@ pub fn process_close(accounts: &[AccountInfo<'_>], _data: &[u8]) -> ProgramResul let block = block_info .as_account_mut::(&ore_api::ID)? .assert_mut(|b| clock.slot >= b.start_slot + 1500)?; - let _collateral = collateral_info + collateral_info .is_writable()? - .as_associated_token_account(block_info.key, mint_quote_info.key)?; - let commitment = commitment_info + .has_address(&collateral_pda(block.id).0)? + .as_token_account()? + .assert(|t| t.mint() == *mint_quote_info.key)? + .assert(|t| t.owner() == *market_info.key)?; + // .as_associated_token_account(block_info.key, mint_quote_info.key)?; + commitment_info .is_writable()? - .as_associated_token_account(block_info.key, mint_base_info.key)?; + .has_address(&commitment_pda(block.id).0)? + .as_token_account()? + .assert(|t| t.mint() == *mint_base_info.key)? + .assert(|t| t.owner() == *block_info.key)?; + // commitment_info.as_associated_token_account(block_info.key, mint_base_info.key)?; let market = market_info .as_account_mut::(&ore_api::ID)? .assert_mut(|m| m.id == block.id)?; @@ -28,12 +36,20 @@ pub fn process_close(accounts: &[AccountInfo<'_>], _data: &[u8]) -> ProgramResul treasury_info .is_writable()? .has_address(&TREASURY_ADDRESS)?; - let vault_base = vault_base_info + vault_base_info .is_writable()? - .as_associated_token_account(market_info.key, mint_base_info.key)?; - let vault_quote = vault_quote_info + .has_address(&vault_base_pda(block.id).0)? + .as_token_account()? + .assert(|t| t.mint() == *mint_base_info.key)? + .assert(|t| t.owner() == *market_info.key)?; + // .as_associated_token_account(market_info.key, mint_base_info.key)?; + vault_quote_info .is_writable()? - .as_associated_token_account(market_info.key, mint_quote_info.key)?; + .has_address(&vault_quote_pda(block.id).0)? + .as_token_account()? + .assert(|t| t.mint() == *mint_quote_info.key)? + .assert(|t| t.owner() == *market_info.key)?; + // .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)?; @@ -65,6 +81,7 @@ pub fn process_close(accounts: &[AccountInfo<'_>], _data: &[u8]) -> ProgramResul } // Burn base liquidity. + let vault_base = vault_base_info.as_token_account()?; let base_burned = vault_base.amount(); burn_signed( vault_base_info, @@ -76,6 +93,7 @@ pub fn process_close(accounts: &[AccountInfo<'_>], _data: &[u8]) -> ProgramResul )?; // Burn quote liquidity. + let vault_quote = vault_quote_info.as_token_account()?; let quote_burned = vault_quote.amount(); burn_signed( vault_quote_info, @@ -87,6 +105,7 @@ pub fn process_close(accounts: &[AccountInfo<'_>], _data: &[u8]) -> ProgramResul )?; // Burn any remaining commitment. + let commitment = commitment_info.as_token_account()?; let commitment_burned = commitment.amount(); burn_signed( commitment_info, diff --git a/program/src/commit.rs b/program/src/commit.rs index ee46c24..cc7c68e 100644 --- a/program/src/commit.rs +++ b/program/src/commit.rs @@ -20,7 +20,12 @@ pub fn process_commit(accounts: &[AccountInfo<'_>], data: &[u8]) -> ProgramResul let block = block_info .as_account_mut::(&ore_api::ID)? .assert_mut(|b| clock.slot < b.start_slot)?; - commitment_info.as_associated_token_account(block_info.key, mint_info.key)?; + commitment_info + .has_address(&commitment_pda(block.id).0)? + .as_token_account()? + .assert(|t| t.mint() == *mint_info.key)? + .assert(|t| t.owner() == *block_info.key)?; + // commitment_info.as_associated_token_account(block_info.key, mint_info.key)?; let market = market_info .as_account::(&ore_api::ID)? .assert(|m| m.id == block.id)?; diff --git a/program/src/deposit.rs b/program/src/deposit.rs index f9cd4c9..1eb27f1 100644 --- a/program/src/deposit.rs +++ b/program/src/deposit.rs @@ -20,7 +20,11 @@ pub fn process_deposit(accounts: &[AccountInfo<'_>], data: &[u8]) -> ProgramResu .assert_mut(|b| clock.slot < b.start_slot)?; collateral_info .is_writable()? - .as_associated_token_account(block_info.key, mint_ore_info.key)?; + .has_address(&collateral_pda(block.id).0)? + .as_token_account()? + .assert(|t| t.mint() == *mint_ore_info.key)? + .assert(|t| t.owner() == *block_info.key)?; + // .as_associated_token_account(block_info.key, mint_ore_info.key)?; mint_ore_info.has_address(&MINT_ADDRESS)?.as_mint()?; sender_info .is_writable()? diff --git a/program/src/mine.rs b/program/src/mine.rs index 2ec5614..635bb7a 100644 --- a/program/src/mine.rs +++ b/program/src/mine.rs @@ -24,7 +24,11 @@ pub fn process_mine(accounts: &[AccountInfo<'_>], data: &[u8]) -> ProgramResult .assert_mut(|b| clock.slot < b.start_slot + 1500)?; commitment_info .is_writable()? - .as_associated_token_account(block_info.key, mint_hash_info.key)?; + .has_address(&commitment_pda(block.id).0)? + .as_token_account()?; + // .assert(|t| t.mint() == *mint_hash_info.key)? + // .assert(|t| t.owner() == *block_info.key)?; + // commitment_info.as_associated_token_account(block_info.key, mint_hash_info.key)?; let market = market_info .as_account::(&ore_api::ID)? .assert(|m| m.id == block.id)?; diff --git a/program/src/swap.rs b/program/src/swap.rs index 4d781d2..6ab2805 100644 --- a/program/src/swap.rs +++ b/program/src/swap.rs @@ -22,7 +22,11 @@ pub fn process_swap(accounts: &[AccountInfo<'_>], data: &[u8]) -> ProgramResult .assert_mut(|b| clock.slot < b.start_slot)?; collateral_info .is_writable()? - .as_associated_token_account(block_info.key, mint_quote_info.key)?; + .has_address(&collateral_pda(block.id).0)? + .as_token_account()? + .assert(|t| t.mint() == *mint_quote_info.key)? + .assert(|t| t.owner() == *market_info.key)?; + // collateral_info.as_associated_token_account(block_info.key, mint_quote_info.key)?; let market = market_info .as_account_mut::(&ore_api::ID)? .assert_mut(|m| m.id == block.id)? @@ -36,10 +40,18 @@ pub fn process_swap(accounts: &[AccountInfo<'_>], data: &[u8]) -> ProgramResult .assert_mut(|p| p.block_id == block.id)?; vault_base_info .is_writable()? - .as_associated_token_account(market_info.key, mint_base_info.key)?; + .has_address(&vault_base_pda(block.id).0)? + .as_token_account()? + .assert(|t| t.mint() == *mint_base_info.key)? + .assert(|t| t.owner() == *market_info.key)?; + // vault_base_info.as_associated_token_account(market_info.key, mint_base_info.key)?; vault_quote_info .is_writable()? - .as_associated_token_account(market_info.key, mint_quote_info.key)?; + .has_address(&vault_quote_pda(block.id).0)? + .as_token_account()? + .assert(|t| t.mint() == *mint_quote_info.key)? + .assert(|t| t.owner() == *market_info.key)?; + // 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)?; diff --git a/program/src/uncommit.rs b/program/src/uncommit.rs index 9843844..064d26d 100644 --- a/program/src/uncommit.rs +++ b/program/src/uncommit.rs @@ -20,7 +20,11 @@ pub fn process_uncommit(accounts: &[AccountInfo<'_>], data: &[u8]) -> ProgramRes .assert_mut(|b| clock.slot < b.start_slot)?; commitment_info .is_writable()? - .as_associated_token_account(block_info.key, mint_info.key)?; + .has_address(&commitment_pda(block.id).0)? + .as_token_account()? + .assert(|t| t.mint() == *mint_info.key)? + .assert(|t| t.owner() == *block_info.key)?; + // commitment_info.as_associated_token_account(block_info.key, mint_info.key)?; let market = market_info .as_account::(&ore_api::ID)? .assert(|m| m.id == block.id)?; diff --git a/program/src/withdraw.rs b/program/src/withdraw.rs index a2730e3..cd5f790 100644 --- a/program/src/withdraw.rs +++ b/program/src/withdraw.rs @@ -15,9 +15,7 @@ pub fn process_withdraw(accounts: &[AccountInfo<'_>], data: &[u8]) -> ProgramRes return Err(ProgramError::NotEnoughAccountKeys); }; signer_info.is_signer()?; - collateral_info - .is_writable()? - .as_associated_token_account(block_info.key, mint_ore_info.key)?; + // .as_associated_token_account(block_info.key, mint_ore_info.key)?; mint_ore_info.has_address(&MINT_ADDRESS)?.as_mint()?; recipient_info .is_writable()? @@ -26,6 +24,12 @@ pub fn process_withdraw(accounts: &[AccountInfo<'_>], data: &[u8]) -> ProgramRes .as_account_mut::(&ore_api::ID)? .assert_mut(|p| p.authority == *signer_info.key)?; block_info.has_seeds(&[BLOCK, &stake.block_id.to_le_bytes()], &ore_api::ID)?; + collateral_info + .is_writable()? + .has_address(&collateral_pda(stake.block_id).0)? + .as_token_account()? + .assert(|t| t.mint() == *mint_ore_info.key)? + .assert(|t| t.owner() == *block_info.key)?; system_program.is_program(&system_program::ID)?; token_program.is_program(&spl_token::ID)?;