Christian Kamm
5c7502d360
token_withdraw: avoid silencing errors with is_ok() ( #936 )
...
(cherry picked from commit 653cf9f30b
)
2024-04-08 16:28:44 +02:00
Christian Kamm
61117ccd11
withdraw: replace overflow with better error ( #910 )
2024-03-11 14:02:54 +01:00
Christian Kamm
a7aaaff07e
allow skipping banks and oracles in fixed-order health account list ( #891 )
...
The following instructions now allow skipping banks and oracles if health
and the token position balance is not negative:
- token_withdraw
- token_deposit
- serum3_place_order
- perp_place_order
- flash_loan
They also allow skipping oracles that are stale.
2024-03-04 15:49:14 +01:00
Christian Kamm
719aee37ae
delegate withdraw: require target to have expected owner
2024-01-29 15:13:29 +01:00
Lou-Kamades
9ce6b67831
Add an Orca oracle type ( #813 )
...
* deps: add whirlpool crate
* allow oracle to read price from Orca CLMM
* test: add test for raw orca CLMM price
* require the USD/USDC oracle when using a CLMM oracle
* test: add CLMM oracle tests
* use KeyedAccountReader instead of AccountInfoRef for fallback fetching functions
* calculate price for inverted orca pools
* ensure that Orca fallback oracles have USDC side
* remove unused Whirlpool impl
* clmm prices have correct decimals and pyth update slot
* manually deserialize the orca Whirlpool
* refactor: use OracleAccountInfos when checking oracle price
* properly handle inverted clmm prices
* update rs client with OracleAccountInfos struct
* refactor: simplify OracleAccountInfos impl
* add clmm oracle integration test
* use OracleAccountInfos::from_reader in account_retriever
* CLM oracles inherit deviation from supplementary quote oracle
* review fixes
* use f64 division for clmm sqrt price
* standardize fixed to f64 conversion
* review fixes
2024-01-04 11:29:54 -06:00
Christian Kamm
34aebf01f2
oracle: don't force logging in OracleState functions ( #828 )
...
The msg!() caused writes to stdout in the liquidator etc in codepaths
that just wanted to check if the oracle was usable.
2024-01-03 08:37:35 +01:00
Christian Kamm
30e639fe84
Bank: require borrows <= deposits
...
- require borrows <= deposits, even if vaults have more tokens
- change min_vault_to_deposits_ratio to be about max utilization
Reviewed and audited as part of the v0.21.1 release, original
commit was 5c2f857112
2024-01-02 11:05:58 +01:00
Christian Kamm
428e71e07f
Allow delegates to withdraw small token amounts ( #820 )
...
- if they're withdrawing to the owner's ata
- if they're closing the token position
- if the amount is small
2023-12-20 11:15:47 +01:00
Lou-Kamades
b19678f874
use a Vec for fallbacks in ScannedBanksAndOracles
2023-11-29 01:03:48 -06:00
Lou-Kamades
59001b3631
reduce CU cost of fallback oracles
2023-11-28 22:55:19 -06:00
Christian Kamm
eceef44a96
Log emissions: Serialize to buffer on stack instead of using heap ( #787 )
...
Emitting many events could previously cause heap exhaustion.
2023-11-22 16:00:47 +01:00
Christian Kamm
93d85c3f71
Bank: allow maint weights to change over time ( #780 )
...
- token_edit can set it up to gradually scale to new target values
- security admin can abort an ongoing change via token_edit
- all health computations are now time dependent and get the weight
based on it
- when the change is done, the keeper "cleans up" and moves the new
values into the default fields
2023-11-14 14:52:04 +01:00
microwavedcola1
39ed3a3fb5
program: if position is not negative then continue ahead with withdrawal, also deactivate if position is 0 ( #736 )
...
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2023-10-02 09:11:44 +02:00
Christian Kamm
4f810edebc
Allow token withdraws/deposits even with stale oracles ( #646 )
2023-08-07 16:15:45 +02:00
Nicholas Clarke
23761ef28c
Add price to WithdrawLoanLog ( #603 )
2023-06-14 09:41:54 +02:00
Nicholas Clarke
defbd8c2b1
Add loan amount to WithdrawLoanLog. Add withdraw loan logging to toke… ( #599 )
...
* Add loan amount to WithdrawLoanLog. Add withdraw loan logging to token_force_close_borrows_with_token
* Address review comments.
2023-06-11 15:37:33 -07:00
microwavedcola1
b07857c696
force close tokens program part ( #518 )
...
* force close tokens
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
* Fixes from review
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
* Fixes from review
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
* Fixes from review
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
* Fixes from review
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
* Fixes from review
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
* add test
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
* Fixes from review
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
* Fixes from review
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
* Fixes from review
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
* Fixes from review
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
* Fixes from review
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
* Fixes from review
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
* reset
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
---------
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2023-04-13 12:44:12 +02:00
Christian Kamm
da2a7f4e0c
Net borrow limit: Separate out tracking and checking ( #534 )
...
That way it's easier to be specific about where the limit should be
checked.
2023-04-13 08:56:33 +02:00
Christian Kamm
5c7a2e3e10
Use the overflow-checks=true equivalent with the fixed crate ( #476 )
...
* Vendor `fixed` crate to have checked math in release mode
* remove all cm!()
* drop superfluous parens
* drop use of checked_math crate
* manual removal of redundant checked_* functions
2023-02-24 11:56:33 +01:00
Christian Kamm
8916c28b99
License: Mark instructions GPLv3 and everything else MIT ( #454 )
...
To do that, split up the Accounts objects and the instruction
implementations.
GPL code is only used when the "enable-gpl" feature is enabled. That
means compiling the program or running tests need explicit feature
activation now.
2023-02-15 08:42:07 +01:00
Christian Kamm
1f66bef88f
Change liquidation end target to a new, third health type ( #447 )
...
Due to the safety features in v4, the init health can differ from maint
health a lot more than it used to in v3. This is because of stable-price
adjusted oracle prices used in init health, and the weight scaling based
on total deposits and borrows used in init health.
The effect is that once an account becomes liquidatable, it could be
liquidated a lot until it reaches init>=0.
The original idea of liquidating until init>=0 was just to provide some
buffer, such that liquidated accounts wouldn't immediately become
liquidatable again.
This patch decouples the buffer idea explicit from init health by
creating a new LiquidationEnd health type. Liquidation proceeds until
the LiquidationEnd health becomes positive.
Co-authored-by: microwavedcola1 <89031858+microwavedcola1@users.noreply.github.com>
2023-02-10 09:00:36 +01:00
microwavedcola1
0012907ee3
Mc/ix toggler ( #419 )
...
* add gating to individual ixs
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
* fixes from review
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
* fixes from review
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
* fixes from review
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
* fixes from review
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2023-01-26 20:27:39 +01:00
microwavedcola1
7c69197505
mango account freeze ( #372 )
...
* mango account freeze
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
* format
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
* Fixes from review
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
* Fixes from review
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2023-01-12 13:08:10 +01:00
microwavedcola1
5ef04d6d08
group halt ( #370 )
...
* group halt
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
* Fixes from review
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
* format
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2023-01-12 09:12:55 +01:00
microwavedcola1
86c9331647
reduce only order type and mode for tokens and perp markets ( #353 )
...
* reduce only order type and mode for tokens and perp markets
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
* Fix from review
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
* Fix from review
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
* Fixes from review
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
* tests
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
* remove token
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
* fixes
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
* Fixes from review
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
* Fixes from review
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2023-01-04 09:24:40 +01:00
Christian Kamm
31bd72e84a
Drop AccountLoaderDynamic
...
This gives us better compatibility with released anchor versions.
Instead of using AccountLoaderDynamic<MangoAccount>, we now use
a standard AccountLoader<MangoAccountFixed>. This will generally work
(except for load_init(), which is dangerous).
A new trait, MangoAccountLoader, provides load_full(), load_full_mut()
etc on the AccountLoader<MangoAccountFixed> to create accessor structs
that can read and write to the dynamic part of the mango account data.
2022-12-29 17:40:08 +01:00
microwavedcola1
4169ccb960
enforce min vault to deposits ratio in flash loan and serum3 place order, in addition to token_withdraw ( #338 )
...
* refactor
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
* Enforce min vault to deposits ratio in flash loan and serum3 place order
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
* refactor
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
* refactor
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
* Fixes from review
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-12-15 18:27:22 +01:00
Christian Kamm
a29a736ba2
Move src/state/health/ -> src/health/
2022-12-08 20:48:44 +01:00
Christian Kamm
c8f1f3c821
Net borrow limits: Limit in quote, not native ( #312 )
...
* Net borrow limits: Limit in quote, not native
* make perp settle limit disableable
2022-12-02 12:24:11 +01:00
Christian Kamm
cf34a5b4b7
Health: Add soft deposit and borrow limits
2022-12-02 08:20:22 +01:00
microwavedcola1
1732a5aff4
net borrow limits ( #301 )
...
* net borrow limits
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
* fix client
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
* Fixes from review
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
* Fix tests
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
Co-authored-by: Christian Kamm <mail@ckamm.de>
2022-11-25 13:45:17 +01:00
Christian Kamm
2ee152f7ea
Oracle staleness: Check when accessing oracle price
2022-11-12 12:12:45 +01:00
Nicholas Clarke
01a958cd22
Clarkeni/onchain interest ( #244 )
...
* Onchain interest calculation
* Fix to TokenBalanceLog for token_liq_bankruptcy (was previously using liqee liab position for liqor liab position).
* Log cumulative interest when token position is deactivated.
2022-09-28 23:04:33 -07:00
Nicholas Clarke
1320451e1a
Add serum open orders balance logging. Remove price from token and perp balances. ( #236 )
2022-09-23 10:42:43 -07:00
Christian Kamm
79a7bdc299
Checked math: support cm!(a += b)
2022-09-06 08:55:27 +02:00
Christian Kamm
dfa8166aee
Health: Put common pre/post check logic into functions
2022-08-24 16:39:36 +02:00
Christian Kamm
bba27ed6f0
PlacePerpOrder: pre-health computation
2022-08-24 16:07:22 +02:00
Christian Kamm
1ebbac7d6f
Withdraw: Add pre-health check
2022-08-24 14:15:01 +02:00
Christian Kamm
2d2cef35a0
Add HealthRegion instructions
...
You can do
- HealthRegionBegin
- ... mango instructions ...
- HealthRegionEnd
and the account health will only be checked at the start and end
instead of for every instruction.
2022-08-24 10:07:45 +02:00
Nicholas Clarke
704dfcaa27
Clarkeni/loan fee logging ( #180 )
...
Logging for loan origination fees and token bankruptcy
2022-08-19 18:50:54 -07:00
Christian Kamm
09fc5f716b
Renames in MangoAccount
...
- Accessors in MangoAccountValue
- PerpPositions -> PerpPosition
2022-08-19 14:58:20 +02:00
Christian Kamm
403226dc28
BeingLiquidated: Deactivate flag on positive health
2022-08-18 13:12:13 +02:00
Christian Kamm
0265b9b0a9
Account: Change type of net_deposts / net_settled
...
Because f32 doesn't have enough significant digits for large deposits.
2022-08-15 10:48:43 +02:00
Christian Kamm
92a37f23ed
Remove is_bankrupt
...
Instead, check for any liquidatable assets in liq_token_bankruptcy.
Bankrupt accounts may use the same operations as any other
negative-health account.
2022-08-11 22:57:53 +02:00
Christian Kamm
7c72a1956a
Withdraw: Allow withdrawing all funds with allow_borrow=false
...
We should also add the ability to withdraw as much as possible without
borrowing and without specifying the exact amount, for convenience.
2022-08-09 11:56:08 +02:00
Nicholas Clarke
e4a073c83b
Clarkeni/group logging ( #142 )
...
* Add group logging and updateIndexAndRate anchor test
* Bugfix on health account ordering
2022-08-05 10:11:44 -07:00
microwavedcola1
0b2e1e6e6c
Mc/realloc 4 ( #119 )
...
Realloc + dynamic mango account
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
Co-authored-by: Christian Kamm <mail@ckamm.de>
2022-07-25 16:07:53 +02:00
Christian Kamm
a82bab4ed7
Better error when vault doesn't have enough funds
...
The spl_token transfer cpi instruction just says "error code: 1", which
is too opaque.
2022-07-19 13:43:05 +02:00
Christian Kamm
f132f30874
Better error messages
2022-07-08 12:48:43 +02:00
Nicholas Clarke
348fbc1cb9
Track cumulative net deposits (deposits - withdraws) ( #91 )
...
Track cumulative net deposits (deposits - withdraws) using prices at the time of the deposit and withdraw.
This is used for calculating overall pnl (across all tokens).
I want to store UI amount * UI price = (native amount / base decimals) * (oracle price * base decimals / quote decimals) => native amount * oracle price / quote decimals.
I have used f32 here to reduce the space required on the mango account - we don't need so much precision for this as it's purely a display value.
I've also included a field for net_settled - this will be used for perp pnl but is not implemented yet (as perp settling instructions are not ready).
Co-authored-by: Christian Kamm <mail@ckamm.de>
2022-07-06 12:07:30 +02:00