diff --git a/.github/workflows/ci-lint-test.yml b/.github/workflows/ci-lint-test.yml index 0c5688936..e564abdab 100644 --- a/.github/workflows/ci-lint-test.yml +++ b/.github/workflows/ci-lint-test.yml @@ -112,26 +112,3 @@ jobs: name: cu-per-ix-clean path: cu-per-ix-clean.log - # Push clean logs to git if main/dev branch - push-logs: - name: Push logs - if: | - (github.actor != 'github-actions[bot]' && github.ref_name == 'main') || - (github.actor != 'github-actions[bot]' && github.ref_name == 'dev') - runs-on: ubuntu-latest - needs: [lint, tests, process-logs] - steps: - - name: Checkout code - uses: actions/checkout@v2 - - name: Download clean log - uses: actions/download-artifact@v3 - with: - name: cu-per-ix-clean - path: ./ - - name: Push log to git - run: | - git config --global user.name "github-actions[bot]" - git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com" - git add -A - git commit -m "chore: push cu test logs" - git push diff --git a/cu-per-ix-clean.log b/cu-per-ix-clean.log deleted file mode 100644 index 10e07ebcf..000000000 --- a/cu-per-ix-clean.log +++ /dev/null @@ -1,89 +0,0 @@ -2022-05-24,Benchmark,9227 -2022-05-24,CloseAccount,4758 -2022-05-24,CreateAccount,19936 -2022-05-24,CreateAccount,22945 -2022-05-24,Deposit,28554 -2022-05-24,InitializeAccount,17310 -2022-05-24,InitializeAccount,18436 -2022-05-24,InitializeAccount,26053 -2022-05-24,InitializeAccount,28027 -2022-05-24,InitializeAccount,29977 -2022-05-24,InitializeAccount,31927 -2022-05-24,InitializeAccount,34110 -2022-05-24,InitializeAccount,42249 -2022-05-24,InitializeAccount,5129 -2022-05-24,InitializeAccount,60693 -2022-05-24,InitializeAccount,62216 -2022-05-24,LiqTokenWithToken,57878 -2022-05-24,LiqTokenWithToken,61771 -2022-05-24,PerpCancelAllOrders,11415 -2022-05-24,PerpCancelOrder,8951 -2022-05-24,PerpCancelOrderByClientOrderId,8958 -2022-05-24,PerpConsumeEvents,6388 -2022-05-24,PerpCreateMarket,23251 -2022-05-24,PerpPlaceOrder,20751 -2022-05-24,PerpPlaceOrder,20884 -2022-05-24,PerpPlaceOrder,21451 -2022-05-24,PerpPlaceOrder,22082 -2022-05-24,PerpPlaceOrder,23137 -2022-05-24,RegisterToken,16936 -2022-05-24,RegisterToken,21810 -2022-05-24,Revoke,93211 -2022-05-24,Revoke,97264 -2022-05-24,Revoke,97673 -2022-05-24,Serum3CancelOrder,24472 -2022-05-24,Serum3CreateOpenOrders,26373 -2022-05-24,Serum3CreateOpenOrders,26470 -2022-05-24,Serum3CreateOpenOrders,26475 -2022-05-24,Serum3CreateOpenOrders,26481 -2022-05-24,Serum3CreateOpenOrders,26493 -2022-05-24,Serum3CreateOpenOrders,26567 -2022-05-24,Serum3CreateOpenOrders,32487 -2022-05-24,Serum3CreateOpenOrders,34000 -2022-05-24,Serum3RegisterMarket,22781 -2022-05-24,Serum3RegisterMarket,25781 -2022-05-24,Serum3RegisterMarket,39281 -2022-05-24,SetStubOracle,20310 -2022-05-24,SetStubOracle,56193 -2022-05-24,Transfer,18810 -2022-05-24,Transfer,21281 -2022-05-24,Transfer,22297 -2022-05-24,Transfer,22338 -2022-05-24,Transfer,25862 -2022-05-24,Transfer,25910 -2022-05-24,Transfer,26380 -2022-05-24,Transfer,26390 -2022-05-24,Transfer,26565 -2022-05-24,Transfer,26708 -2022-05-24,Transfer,27631 -2022-05-24,Transfer,27793 -2022-05-24,Transfer,27829 -2022-05-24,Transfer,27850 -2022-05-24,Transfer,28695 -2022-05-24,Transfer,28761 -2022-05-24,Transfer,29298 -2022-05-24,Transfer,29883 -2022-05-24,Transfer,30194 -2022-05-24,Transfer,30492 -2022-05-24,Transfer,30632 -2022-05-24,Transfer,30851 -2022-05-24,Transfer,32444 -2022-05-24,Transfer,32708 -2022-05-24,Transfer,33238 -2022-05-24,Transfer,35581 -2022-05-24,Transfer,36070 -2022-05-24,Transfer,38114 -2022-05-24,Transfer,40066 -2022-05-24,Transfer,40535 -2022-05-24,Transfer,44193 -2022-05-24,Transfer,45726 -2022-05-24,Transfer,48659 -2022-05-24,Transfer,50696 -2022-05-24,Transfer,55672 -2022-05-24,Transfer,58002 -2022-05-24,Transfer,59888 -2022-05-24,Transfer,60667 -2022-05-24,Transfer,65981 -2022-05-24,Transfer,89560 -2022-05-24,Transfer,89889 -2022-05-24,UpdateIndex,20940 diff --git a/programs/mango-v4/src/instructions/margin_trade.rs b/programs/mango-v4/src/instructions/margin_trade.rs index f57045ae8..b1a61204e 100644 --- a/programs/mango-v4/src/instructions/margin_trade.rs +++ b/programs/mango-v4/src/instructions/margin_trade.rs @@ -36,30 +36,32 @@ pub struct MarginTrade<'info> { } struct AllowedVault { - // index of the vault in cpi_ais + /// index of the vault in cpi_ais vault_cpi_ai_index: usize, - // index of the bank in health_ais + /// index of the bank in health_ais bank_health_ai_index: usize, - // raw index into account.tokens + /// raw index into account.tokens raw_token_index: usize, - // vault amount before cpi + /// vault amount before cpi pre_amount: u64, - // withdraw request + /// requested withdraw amount withdraw_amount: u64, - // amount of withdraw request that is a loan + /// amount of withdraw request that is a loan loan_amount: I80F48, } #[derive(AnchorDeserialize, AnchorSerialize, Clone, Copy)] pub struct MarginTradeWithdraw { + /// Account index of the vault to withdraw from in the target_accounts section. + /// Meaning that the first account after target_program_id would have index 0. pub index: u8, + /// Requested withdraw amount. pub amount: u64, } /// - `num_health_accounts` is the number of health accounts that remaining_accounts starts with. -/// - `withdraws` is a list of tuples containing the index to a vault in target_accounts and the -/// amount that the target program shall be allowed to withdraw -/// - `cpi_data` is the bytes to call the target_program_id with +/// - `withdraws` is a list of MarginTradeWithdraw requests. +/// - `cpi_data` is the bytes to call the target_program_id with. pub fn margin_trade<'key, 'accounts, 'remaining, 'info>( ctx: Context<'key, 'accounts, 'remaining, 'info, MarginTrade<'info>>, num_health_accounts: usize, @@ -90,7 +92,8 @@ pub fn margin_trade<'key, 'accounts, 'remaining, 'info>( allowed_banks.insert(ai.key, bank); } Err(Error::AnchorError(error)) - if error.error_code_number == ErrorCode::AccountDiscriminatorMismatch as u32 => + if error.error_code_number == ErrorCode::AccountDiscriminatorMismatch as u32 + || error.error_code_number == ErrorCode::AccountOwnedByWrongProgram as u32 => { break; } @@ -123,7 +126,14 @@ pub fn margin_trade<'key, 'accounts, 'remaining, 'info>( if ai.owner != &TokenAccount::owner() { return None; } - let token_account = Account::::try_from(ai).unwrap(); + + // Skip mints and other accounts that may be owned by the spl_token program + let maybe_token_account = Account::::try_from(ai); + if maybe_token_account.is_err() { + return None; + } + + let token_account = maybe_token_account.unwrap(); if token_account.owner != ctx.accounts.group.key() { return None; } diff --git a/programs/mango-v4/src/state/health.rs b/programs/mango-v4/src/state/health.rs index 6e9c2b557..10625b02a 100644 --- a/programs/mango-v4/src/state/health.rs +++ b/programs/mango-v4/src/state/health.rs @@ -114,7 +114,9 @@ impl<'a, 'b> ScanningAccountRetriever<'a, 'b> { } Err(Error::AnchorError(error)) if error.error_code_number - == ErrorCode::AccountDiscriminatorMismatch as u32 => + == ErrorCode::AccountDiscriminatorMismatch as u32 + || error.error_code_number + == ErrorCode::AccountOwnedByWrongProgram as u32 => { break; }