From d9c7260375527409e999b76f60af8392a1dcf635 Mon Sep 17 00:00:00 2001 From: microwavedcola1 Date: Tue, 1 Mar 2022 06:28:12 +0100 Subject: [PATCH] code review Signed-off-by: microwavedcola1 --- programs/mango-v4/src/error.rs | 4 +++- programs/mango-v4/src/instructions/withdraw.rs | 2 ++ programs/mango-v4/src/state/oracle.rs | 2 +- programs/mango-v4/tests/program_test/mango_client.rs | 4 +++- programs/mango-v4/tests/test_basic.rs | 11 +---------- 5 files changed, 10 insertions(+), 13 deletions(-) diff --git a/programs/mango-v4/src/error.rs b/programs/mango-v4/src/error.rs index a906c47de..90259c758 100644 --- a/programs/mango-v4/src/error.rs +++ b/programs/mango-v4/src/error.rs @@ -7,5 +7,7 @@ pub enum MangoError { #[msg("")] SomeError, #[msg("")] - UnknownOracle, + UnexpectedOracle, + #[msg("")] + UnknownOracleType, } diff --git a/programs/mango-v4/src/instructions/withdraw.rs b/programs/mango-v4/src/instructions/withdraw.rs index 38386e959..4287f0bb5 100644 --- a/programs/mango-v4/src/instructions/withdraw.rs +++ b/programs/mango-v4/src/instructions/withdraw.rs @@ -132,6 +132,8 @@ pub fn withdraw(ctx: Context, amount: u64, allow_borrow: bool) -> Resu // converts the token value to the basis token value for health computations // TODO: health basis token == USDC? let oracle_type = determine_oracle_type(oracle_ai)?; + require!(bank.oracle == oracle_ai.key(), MangoError::UnexpectedOracle); + let price = match oracle_type { OracleType::Stub => { AccountLoader::<'_, StubOracle>::try_from(oracle_ai)? diff --git a/programs/mango-v4/src/state/oracle.rs b/programs/mango-v4/src/state/oracle.rs index fcec7f3cd..0b98f60b0 100644 --- a/programs/mango-v4/src/state/oracle.rs +++ b/programs/mango-v4/src/state/oracle.rs @@ -23,5 +23,5 @@ pub fn determine_oracle_type(account: &AccountInfo) -> Result { return Ok(OracleType::Stub); } - Err(MangoError::UnknownOracle.into()) + Err(MangoError::UnknownOracleType.into()) } diff --git a/programs/mango-v4/tests/program_test/mango_client.rs b/programs/mango-v4/tests/program_test/mango_client.rs index 528ebed9b..92961f66f 100644 --- a/programs/mango-v4/tests/program_test/mango_client.rs +++ b/programs/mango-v4/tests/program_test/mango_client.rs @@ -7,6 +7,7 @@ use solana_program::instruction::Instruction; use solana_sdk::instruction; use solana_sdk::signature::{Keypair, Signer}; use solana_sdk::transport::TransportError; +use std::str::FromStr; use super::solana::SolanaCookie; use mango_v4::state::*; @@ -294,6 +295,7 @@ impl<'keypair> ClientInstruction for RegisterTokenInstruction<'keypair> { pub struct SetStubOracle<'keypair> { pub mint: Pubkey, pub payer: &'keypair Keypair, + pub price: &'static str, } #[async_trait::async_trait(?Send)] impl<'keypair> ClientInstruction for SetStubOracle<'keypair> { @@ -306,7 +308,7 @@ impl<'keypair> ClientInstruction for SetStubOracle<'keypair> { ) -> (Self::Accounts, Instruction) { let program_id = mango_v4::id(); let instruction = Self::Instruction { - price: I80F48::from_num(1.0), + price: I80F48::from_str(self.price).unwrap(), }; let oracle = Pubkey::find_program_address( diff --git a/programs/mango-v4/tests/test_basic.rs b/programs/mango-v4/tests/test_basic.rs index bfbe9eed0..afbe83f54 100644 --- a/programs/mango-v4/tests/test_basic.rs +++ b/programs/mango-v4/tests/test_basic.rs @@ -65,16 +65,7 @@ async fn test_basic() -> Result<(), TransportError> { SetStubOracle { mint: mint0.pubkey, payer, - }, - ) - .await - .unwrap(); - - send_tx( - solana, - CreateStubOracle { - mint: mint0.pubkey, - payer, + price: "1.0", }, ) .await