Commit Graph

503 Commits

Author SHA1 Message Date
microwavedcola1 1c02ccd21d
Transfer dust from bank vaults to a dust account, without this we wont be able to close bank vaults (#88) 2022-06-29 09:11:14 +02:00
Christian Kamm 86d635f5d0 FlashLoan3: Variant that transfers directly
FlashLoan2 requires the user to set up transfers to and from the Mango
vault accounts. This version directly provides the loaned funds into a
target token account and repays everything that exceeds the initial
token account balance at the end.
2022-06-28 15:32:26 +02:00
Christian Kamm d786a672f1 FlashLoan2: API with Begin and End instructions
For FlashLoan users had to pass the target cpi programs, accounts and
data to the FlashLoan instruction itself.

The new API allows existing instructions to be used unchanged, they
just need to be bracketed by FlashLoan2Begin and FlashLoan2End.
2022-06-28 15:30:13 +02:00
Christian Kamm 3eedba67b1 Fix serum3_cancel_order
accidental removal of mut in 20fc9d557a
2022-06-27 11:38:55 +02:00
microwavedcola1 9fc8a5a56a
multiple banks (#82)
* multiple banks

Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>

* Fixes from review

Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>

* test for closing multiple banks for a registered token

Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>

* fix deregister_token

* update idl

Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>

* Fixes from review

Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>

Co-authored-by: Christian Kamm <mail@ckamm.de>
2022-06-27 11:27:17 +02:00
Christian Kamm 20fc9d557a Satisfy anchor's lint by adding CHECK: comments 2022-06-24 12:36:35 +02:00
microwavedcola1 7a28a3bfb0 improvements to flash loan
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-06-23 16:41:24 +02:00
microwavedcola1 54c0306ae7 Fix flash loan
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-06-23 13:10:15 +02:00
Christian Kamm 0bd5b8fdf3 Rename margin_trade.rs -> flash_loan.rs 2022-06-23 10:23:52 +02:00
Christian Kamm c8ebc1f611 Rename MarginTrade -> FlashLoan 2022-06-23 10:23:52 +02:00
Christian Kamm d8a6a29e70 Renames: propagate to idl and ts 2022-06-23 10:04:54 +02:00
Christian Kamm 648b462352 Rename MangoAccount components 2022-06-23 10:04:54 +02:00
Christian Kamm 1143b38d3c Health review comments 2022-06-22 16:52:11 +02:00
Christian Kamm ba79995c01 Health: order-independent serum3 health
Now all the reserved funds in serum3 open orders accounts are added into
each possible token at the same time. Then the worse case from applying
the reserved funds to either quote or base is selected.

This is reasonably cheap to compute, leads to unchanged results when no
markets share (non USDC) base or quote tokens, but can underestimate
the "true" health value when markets do.

An additional advantage is that HealthCache is now indepenent of serum
open orders and can compute the init and maint health when the user has
active OpenOrders accounts.
2022-06-22 16:52:11 +02:00
Christian Kamm d4cec8dfa4 Bank: Fix bug when when depositing to exactly 0 2022-06-22 16:51:16 +02:00
Christian Kamm aeb94642ce fix clippy warnings 2022-06-21 13:10:37 +02:00
Christian Kamm 5dd186ac13 Health: fix unittests 2022-06-21 13:02:47 +02:00
Christian Kamm 6f41efad0f Health: helper for finding token info by index 2022-06-21 13:02:47 +02:00
microwavedcola1 b0fd4c2a61 Fix warnings
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-06-21 13:02:30 +02:00
microwavedcola1 86c8817e0b
serum3 loan origination fees (#69)
* serum3 loan origination fees

Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>

* Fix tests
Fix 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>
2022-06-21 11:45:38 +02:00
Christian Kamm cb0010b2b5 Health: never allow positive contributions from perps 2022-06-21 11:07:13 +02:00
Christian Kamm be98f6524a Orderbook: Avoid usize fields in data 2022-06-21 11:05:46 +02:00
Christian Kamm 6ff4ff5910 Add a ComputeHealth instruction
This way the client can ask for simulation to determine an account's
health.
2022-06-21 11:05:32 +02:00
Christian Kamm 712bece0b2 Remove stray log message from health computation 2022-06-20 18:21:26 +02:00
microwavedcola1 470292024e
Filter out bad switchboard prices (#70)
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-06-20 18:03:16 +02:00
microwavedcola1 5b78293c5c minor refactoring
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-06-19 18:32:04 +02:00
microwavedcola1 9462be7f0b Fix margin trade interface
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-06-18 17:14:20 +02:00
microwavedcola1 4864562ff3
margin trade, support multi cpi (#68)
* margin trade, support multi cpi

Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>

* Fix from review

Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>

* todo

Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-06-18 16:43:45 +02:00
microwavedcola1 0f34851c64
switchboard support (#67)
* switchboard support

Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>

* Fix from review

Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-06-18 16:38:46 +02:00
microwavedcola1 95c06c2bfc
Mc/liquidator (#64)
* Copy over and integrate liquidatable-accounts-feed (doesn't compile)

Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>

* Liquidator

Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>

* Adapt to refactoring

Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>

* remove dead code

Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>

* Use copies of AccountSharedData

* Implement AccountReader for AccountSharedData

* use LoadZeroCopy in liquidator

* Fix from review

Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>

Co-authored-by: Christian Kamm <mail@ckamm.de>
2022-06-18 16:31:28 +02:00
microwavedcola1 de481a4008 todo
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-06-10 08:42:26 +02:00
microwavedcola1 740ff0c09e
Close various things (#65)
* close bank, vaults, mint infos, stub oracles, serum OO (doesnt work, throws https://github.com/project-serum/serum-dex/blob/master/dex/src/error.rs\#L88), close serum market

Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>

* serum oo closing example in ts

Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>

* Fix from code review

Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-06-09 18:27:31 +02:00
Christian Kamm 40023fcef1 Health: Make FixedOrderAccountRetriever more flexible 2022-06-08 14:38:49 +02:00
Christian Kamm b3568b7f3e
Make health/oracle functions usable from clients (#63)
* Make health/oracle functions usable from clients

By creating a shared trait that is implementable for AccountInfo and
AccountSharedData.

* Health: fixup tests
2022-06-08 13:43:12 +02:00
Christian Kamm a14f37362d margin_trade: forbid direct self-calls 2022-06-07 13:25:30 +02:00
Christian Kamm 685fd3122f Perps: Limit overall health contribution from perp markets
We don't want to allow borrowing against unsettled pnl in perp markets.

This makes it safer to create perp markets for untrustworthy assets.
2022-06-06 12:58:08 +02:00
microwavedcola1 1b4063cd0d remove misleading example
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-06-03 08:29:35 +02:00
microwavedcola1 47bccfeec8 Fix oracle price decimal usage
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-06-02 19:16:30 +02:00
microwavedcola1 a20d04b6ff
Fix oracle price read by using decimals from pyth (#62)
* Fix oracle price read by using decimals from pyth

Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>

* fix

Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-06-02 10:36:04 +02:00
microwavedcola1 383489ae34 Merge branch 'mc/liquidator-bot' into dev 2022-05-30 17:08:16 +02:00
Christian Kamm 48cb1f0b88 Compute health in perp_place_order 2022-05-29 20:50:21 +02:00
Christian Kamm 65a5139db7 Tests: Send perp markets as health accounts 2022-05-29 20:50:21 +02:00
Christian Kamm 4984bba71e Health: Add perp health calculation 2022-05-29 20:50:21 +02:00
microwavedcola1 97e434fbb6 keeper: find/create account by account name
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-05-29 12:25:12 +02:00
microwavedcola1 34a8f0919f
serum taker bot (#57)
* taker bot

Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>

* inline code

Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>

* cleanup

Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>

* add mints

Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>

* add todo

Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>

* fix todos

Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>

* remove stray log

Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>

* cleanup

Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>

* remove dead code

Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>

* use same rust as what solana uses, use same solana version as cargo toml

Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>

* Fix from review

Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>

* fix from reviews

Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>

* linter

Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-05-28 07:05:34 +02:00
microwavedcola1 cc2d46bf4a add support for mint decimals on bank, for easy look up
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-05-27 14:52:03 +02:00
Christian Kamm b1fcb4a7e6 CreateGroup: Allow multiple groups per admin 2022-05-27 11:36:50 +02:00
Christian Kamm 1844898280 margin_trade: Allow forwarding mint accounts 2022-05-26 21:12:02 +02:00
Christian Kamm 536ec8a84a Make health iteration code work with pyth oracles
They have a different account owner, that error must be skipped.
2022-05-26 20:38:03 +02:00
Christian Kamm 946e6b1c96 margin_trade: doc improvements 2022-05-25 08:02:55 +02:00
microwavedcola1 ed4e63a82f Change tuple to a struct, seemingly anchor ts doesnt support tuples
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-05-24 22:03:35 +02:00
Christian Kamm f844720130 Review fixes 2022-05-24 13:00:32 +02:00
Christian Kamm 53a5e208fd margin_trade: loan origination fees, limited withdraws 2022-05-23 08:55:30 +02:00
Christian Kamm 21af012d1f Improvements to margin_trade
- don't hard-code the group as the first passed account
- token::approve() banks for each token vault
- sign for each bank
- deal with using tokens without an existing position
- handle deactivation of token account if balance goes to 0
2022-05-20 10:16:09 +02:00
Christian Kamm 8a8b36e345 Fold loan origination fee handling into Bank 2022-05-18 22:53:03 +02:00
microwavedcola1 717b72857d
Remove anchor dummy type workaround (#53)
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-05-18 17:16:14 +02:00
microwavedcola1 ab0df0e7f2 unwrap
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-05-17 17:11:37 +02:00
microwavedcola1 2de149f74c checked math + rustfmt
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-05-17 17:08:00 +02:00
microwavedcola1 6ecd4a0da9 Update funding for keeper
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-05-17 15:59:47 +02:00
microwavedcola1 2518ec24a6 Update client to match program changes
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-05-17 15:06:29 +02:00
microwavedcola1 f19f3da659 add todo
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-05-17 13:01:48 +02:00
microwavedcola1 a4f3569a87 Fix merge
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-05-17 10:12:16 +02:00
microwavedcola1 fac9b4a57a perp funding
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-05-17 10:07:24 +02:00
microwavedcola1 be73106ce1
perp funding (#51)
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-05-16 15:34:56 +02:00
microwavedcola1 f5c505f847 fix test
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-05-16 15:26:38 +02:00
microwavedcola1 db82fcbbcc perp cancel order instructions
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-05-16 10:49:11 +02:00
microwavedcola1 67c1d5d451 format
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-05-16 10:49:11 +02:00
microwavedcola1 967ce34002 move comment
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-05-16 10:49:11 +02:00
microwavedcola1 a1034c08b7 refactor
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-05-16 10:49:11 +02:00
microwavedcola1 ee6fe93b26 Fix tests
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-05-16 10:49:11 +02:00
microwavedcola1 fbd3fd410c loan_origination_fees
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-05-16 10:49:11 +02:00
microwavedcola1 f1791be039 add todo
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-05-11 20:25:09 +02:00
microwavedcola1 b903073ce6 add comment so that it doesnt get lost
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-05-11 20:09:12 +02:00
microwavedcola1 81f0f38188 ts client support for perps
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-05-11 20:06:07 +02:00
microwavedcola1 15961ec81c fees for borrows
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-05-09 11:14:50 +02:00
microwavedcola1 5266668bc2 keeper: consume events
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-05-06 14:19:49 +02:00
microwavedcola1 7abfc417ac reorg
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-05-06 10:13:33 +02:00
microwavedcola1 9f5a2fd32e add a test for consume events, add debug impl for mango account for easy debugging in tests
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-05-05 10:25:32 +02:00
microwavedcola1 d38ca0de4c refactor
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-05-03 18:17:58 +02:00
microwavedcola1 ec7c61327c list of ix to implement
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-05-03 18:07:31 +02:00
microwavedcola1 f09b3cc965 First attempt at finishing perp health
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-05-03 15:15:34 +02:00
microwavedcola1 3c469d7194 todo
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-04-12 20:43:45 +02:00
microwavedcola1 1206109260 todo
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-04-12 20:39:48 +02:00
microwavedcola1 7ead988ba4 small ticker size
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-04-12 20:38:35 +02:00
microwavedcola1 6db679d35e support longer account names
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-04-12 20:23:45 +02:00
microwavedcola1 e3a60a637a format
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-04-12 17:35:39 +02:00
microwavedcola1 bf2fa47a1c fix viz
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-04-12 17:33:42 +02:00
microwavedcola1 62ee1bc5c0 prepare for multiple ts packages
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-04-12 17:28:47 +02:00
microwavedcola1 addb12736f fixes from cr
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-04-12 16:53:45 +02:00
microwavedcola1 03ae43017c account, market and bank names
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-04-12 16:19:58 +02:00
microwavedcola1 1b1dd1a541 poc keeper
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-04-09 21:18:07 +02:00
microwavedcola1 5ab48fb6e0 rust: Fix args in tests to more realistic values, ts: expose args, update idl
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-04-09 17:09:06 +02:00
microwavedcola1 57d9de86c8 comment
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-04-09 16:55:00 +02:00
microwavedcola1 257ccf76ad multi legged interest rates + keeper ix
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-04-09 16:53:30 +02:00
microwavedcola1 2587cd914c checked math
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-04-07 21:04:02 +02:00
Christian Kamm 68ef58248c Perp health: Some code and comments 2022-04-05 09:09:12 +02:00
Christian Kamm 256397593d Health: Support PerpMarkets in remainingAccounts 2022-04-04 11:25:05 +02:00
Christian Kamm 6f3673bcdf Perp: Track taker and maker orders in the account; test 2022-04-04 10:39:13 +02:00
microwavedcola1 a44120c470 add group to mintinfo, for better gpa support
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-04-03 19:07:43 +02:00
microwavedcola1 e6727cbfae fix clippy warning
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-04-03 06:21:34 +02:00
microwavedcola1 7803cae654 fix clippy warning
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-04-03 06:16:41 +02:00
microwavedcola1 dfd1dc5216 fix clippy warning
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-04-03 06:11:41 +02:00
microwavedcola1 204ab6963d checked math
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-04-03 06:09:01 +02:00
microwavedcola1 d6fe317ac9 checked math
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-04-03 06:06:03 +02:00
microwavedcola1 9debc63a6a
update idl, add tokenmint to stuboracle for gpa (#34)
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-04-03 05:43:32 +02:00
microwavedcola1 884d638e36
Merge pull request #33 from blockworks-foundation/mc/stub-oracle-ext
Mc/stub oracle ext
2022-04-03 05:36:24 +02:00
microwavedcola1 ace5df2a85 revert unintended changes
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-04-03 05:21:16 +02:00
microwavedcola1 d7a8c5c91d add todo
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-04-02 21:04:00 +02:00
microwavedcola1 77ddbd4eeb fix test
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-04-02 21:02:48 +02:00
microwavedcola1 c7d3103e6b --wip-- [skip ci] 2022-04-02 20:42:17 +02:00
microwavedcola1 4d1a9e4556 refactor
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-04-02 20:15:56 +02:00
Christian Kamm 9f0a7f67ae Orderbook: Port over unittests 2022-04-02 13:51:26 +02:00
Christian Kamm cbc3cc7bbd MangoAccount: Rename how tokens/serum3/perps data is stored
token_account_map -> tokens
serum3_account_map -> serum3
perp -> perps
2022-04-02 13:51:26 +02:00
microwavedcola1 1d15db37c5 clippy
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-04-02 10:02:12 +02:00
microwavedcola1 9cd08a1355 improve checks
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-04-02 09:52:40 +02:00
microwavedcola1 87bcc538cd compiles
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-04-02 09:05:31 +02:00
microwavedcola1 0bdbd19ddd Make Serum3 ix anchor friendly
Make work with changes in mango account, add no deploy part to release script
Clippy
Fixes from cr

Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-04-02 08:59:07 +02:00
Christian Kamm d26caf1c87 Perp: Rename fields to be explicit about being in lots 2022-04-01 15:47:12 +02:00
Christian Kamm f2607889e3 Perps: Place accounts and open orders in MangoAccount::perp
Also make test_perp succeed by fixing the FillEvent size.
2022-04-01 12:45:01 +02:00
Christian Kamm f48a7f5ed9 Clippy: Address issues 2022-04-01 12:21:19 +02:00
Christian Kamm 833a909aa4 Orderbook: unify new_bid/new_ask 2022-04-01 12:21:19 +02:00
Christian Kamm 6505abcd54 Side: Make inversion function be associated 2022-04-01 12:21:19 +02:00
Christian Kamm 10ab9804d1 Rename perp instructions to have perp_ prefix 2022-04-01 08:01:56 +02:00
Christian Kamm 8038f9e257 Add CloseAccount instruction to make testing easier 2022-03-31 17:22:56 +02:00
microwavedcola1 9e2d5de914 add gt 0 checks
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-03-31 16:02:18 +02:00
microwavedcola1 78df0082c4 Some progress on initial ts example
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-03-31 15:58:18 +02:00
Christian Kamm 56e3bd8740 Rearrange accounts to avoid padding bytes 2022-03-31 14:37:05 +02:00
Christian Kamm 9cf4f1a748 Rearrange MangoAccount to avoid padding bytes 2022-03-31 14:01:08 +02:00
Christian Kamm 85b0b420d4 Disable address lookup tables
Because the ALT program isn't available on devnet yet, so prohibits
testing there.
2022-03-31 09:25:47 +02:00
microwavedcola1 795fa532da update program, and deploy to devnet
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-03-30 17:16:32 +02:00
microwavedcola1 faba5c47bf remove unwanted code
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-03-30 17:03:56 +02:00
microwavedcola1 46cb811c99 Merge branch 'mc/consume_events' 2022-03-30 13:22:31 +02:00
Christian Kamm afbfd3b7f9 serum3_register_market: better validation
Previously we just trusted the base and quote token index to be correct,
now the appropriate banks are validated.
2022-03-30 12:24:49 +02:00
Christian Kamm babbff6bec Add is_bankrupt check to most instructions 2022-03-30 12:24:49 +02:00
microwavedcola1 00ac0dfce9 comments and test
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-03-30 11:58:45 +02:00
Christian Kamm 14d4147efa liq test: Cover more cases 2022-03-30 09:37:31 +02:00
Christian Kamm d6ebffd346 liq: functionality fixes and test 2022-03-29 17:47:19 +02:00
Christian Kamm 69426d6d96 liq: Introduce HealthCache to get init/maint health after liquidation
The concept only works if all serum3 open orders have been fully
cancelled and settled.
2022-03-29 09:18:13 +02:00
microwavedcola1 64e3ba0d7c --wip-- [skip ci] 2022-03-28 21:13:16 +02:00
Christian Kamm a6ff388e20 health: avoid divisions, reducing compute needs 2022-03-27 14:47:42 +02:00
Christian Kamm d9ac178481 liq token: Adjust fee handling
Use the sum of the fees configured for the tokens.
2022-03-27 14:47:42 +02:00
Christian Kamm 82819720e0 liq token: progress
Change bank.deposit()/withdraw() to work with I80F48 values so we don't
need to round during liquidation.
2022-03-27 14:46:51 +02:00
Christian Kamm c391c29347 liq token: Instruction outline 2022-03-27 14:46:51 +02:00
microwavedcola1 b139f6beab ask example test
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-03-26 17:27:50 +01:00
microwavedcola1 b851dd13ad add new ask
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-03-26 17:06:55 +01:00
microwavedcola1 c83be301e4 extend
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-03-26 06:41:39 +01:00
microwavedcola1 1e5a6f90bc extend
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-03-26 06:37:32 +01:00
microwavedcola1 223179b278 basic test to measure cu
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-03-26 06:16:52 +01:00
microwavedcola1 c7bf53659c fix warning
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-03-25 20:44:06 +01:00
microwavedcola1 00da3460ab cleanuo
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-03-25 20:35:19 +01:00
microwavedcola1 860b7aa1d4 cleanup
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-03-25 20:03:44 +01:00
microwavedcola1 27eaa5f8f5 ported fees
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-03-25 09:46:38 +01:00
microwavedcola1 3036ffa45c clippy
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-03-24 19:27:00 +01:00
microwavedcola1 671c06da89 events
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-03-24 19:20:56 +01:00
microwavedcola1 0e953f5e80 more
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-03-24 19:15:46 +01:00
microwavedcola1 f895467bf5 weights
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-03-24 17:29:30 +01:00
microwavedcola1 21073d6b71 cleanup
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-03-24 16:12:55 +01:00
microwavedcola1 de0ce5ad8f cleanup
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-03-24 15:29:42 +01:00
microwavedcola1 baf4b255c8 remove more dead code
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-03-24 14:48:11 +01:00
microwavedcola1 1eaf58812f remove more dead code
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-03-24 14:46:09 +01:00
microwavedcola1 ba4300accc simplify
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-03-24 14:40:08 +01:00
microwavedcola1 4a3d61a0b0 cleanup unused
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-03-24 14:08:10 +01:00
microwavedcola1 e6ee72b8b0 remove unused
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-03-24 13:45:46 +01:00
microwavedcola1 5919a5a1df Merge branch 'main' into mc/clippy 2022-03-23 09:53:50 +01:00
microwavedcola1 f135ca4d9b fix clippy warnings
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-03-23 09:33:51 +01:00
microwavedcola1 fde4bce86f
Merge pull request #29 from blockworks-foundation/mc/event_queue
add event queue
2022-03-23 08:54:11 +01:00
microwavedcola1 b0d6a14d00 fix clippy warnings
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-03-23 08:34:23 +01:00
microwavedcola1 f7fb9b7e35 add event queue
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-03-23 07:53:45 +01:00
Christian Kamm 696806ee77 Add liq_token_with_token file outline 2022-03-22 19:25:33 +01:00
Christian Kamm bfcb672116 Health: allow account order to be fixed, or to scan for accounts
The latter is important when we want to compute health for two different
accounts. Then the remainingAccounts would hold the union of the
necessary accounts, and each health check would need to look for the
accounts that it needs.

This patch al so reduces the compute needs for fixed-layout health
checks significantly (Deposit for an account with 8 tokens and 7 markets
takes 65k instead of 70k cu)
2022-03-22 14:13:07 +01:00
microwavedcola1 3443ab0d70
Merge pull request #27 from blockworks-foundation/mc/ci
checked math
2022-03-22 11:47:10 +01:00
microwavedcola1 237d776e2b fix test cu requirement
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-03-22 11:33:06 +01:00
microwavedcola1 974724cfe1 fix some clippy warnings
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-03-22 11:19:12 +01:00
microwavedcola1 ed9368cb3d checked math
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-03-22 10:39:51 +01:00
Christian Kamm d1a7cd109d Serum: remove some duplicated functions 2022-03-22 09:58:10 +01:00
Christian Kamm 43eba0a529 Serum: Test for force cancel orders 2022-03-22 09:25:13 +01:00
microwavedcola1 b8d84112d7 fix
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-03-22 07:09:49 +01:00
microwavedcola1 ec5e959804 further work on perps
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-03-22 07:06:33 +01:00
Christian Kamm 34d14ef267 Serum: serum3_liq_force_cancel_orders instruction
Still needs a test.
2022-03-21 17:39:52 +01:00
Christian Kamm 27f882a333 Tests: More flexible test context construction 2022-03-21 10:45:55 +01:00
Christian Kamm a6a31f226c Tests: Unify group + tokens setup 2022-03-21 07:49:51 +01:00
Christian Kamm 75ac224b6e Tests: Bank deposit/withdraw/active/dust tests 2022-03-21 07:01:25 +01:00
microwavedcola1 e7b32c6149 clippy
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-03-20 10:16:02 +01:00
microwavedcola1 fbedea9424 reorg, placeholder for place perp order
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-03-20 10:11:36 +01:00
Christian Kamm 1ad0826573 Clippy warnings 2022-03-19 12:53:24 +01:00
Christian Kamm 6f72cd27e8 Serum: Cancel order instruction 2022-03-19 12:19:16 +01:00
Christian Kamm 63050c3661 Serum: No health check needed after settle_funds
It just moves free funds from open_orders to the user account.
2022-03-19 09:05:42 +01:00
Christian Kamm 9fb16f3906 Add comments 2022-03-19 08:54:33 +01:00
microwavedcola1 9475d9545c add comment
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-03-19 08:52:38 +01:00
microwavedcola1 479bd60ecf extend perp market with indices, which make it easier to lookup the perp market and base and quote tokens
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-03-19 07:28:37 +01:00
Christian Kamm 70316fb927 Serum: Settle funds instruction
Also move serum3 cpi helpers to a separate file, to allow reuse of calls
like settle_funds from multiple mango instructions.
2022-03-18 19:27:23 +01:00
microwavedcola1 4987e072cd fix test
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-03-18 17:49:13 +01:00
microwavedcola1 ab61c6b244 remove unused
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-03-18 16:30:18 +01:00
microwavedcola1 ba9bc82df2 Merge branch 'mc/perps' 2022-03-18 15:16:13 +01:00
Christian Kamm 9d05db68f9 Serum: Prefix instructions with serum3_ and related renames 2022-03-18 13:42:20 +01:00
microwavedcola1 b5734e4f97 fix trailing space
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-03-18 13:00:52 +01:00
Christian Kamm a40eb94833 Serum: settle_funds after place_order
Avoid using anchor_spl::dex helpers, because calling serum through these
functions costs significantly more compute, likely because AccountInfos
need to be cloned twice.

Examples:
- new_order_v3: direct 26.8k CU, helpers 37.5k CU
- settle funds: direct 24.9k CU, helpers 31.8k CU
2022-03-18 12:17:09 +01:00
microwavedcola1 4f7e3a5738 create perp market wip
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-03-18 10:14:30 +01:00
Christian Kamm 57c06bc2da Health: add a missing group check for remainingAccount Banks 2022-03-18 07:54:20 +01:00
Christian Kamm 7b3cd9a81f Health: Use split_at_mut to get two element &muts
Previously we re-indexed token_infos every time, now we can just have
mutable references to the base and quote elements at the same time.
2022-03-18 07:44:44 +01:00
Christian Kamm 430d5c85fa Health: compute optimizations
Basic caching of multiplications and divisions.
2022-03-17 21:53:41 +01:00
Christian Kamm af2f4a0923 Health compute tests 2022-03-17 14:17:28 +01:00
Christian Kamm 9351d0652d Serum: health based on worst case order outcome 2022-03-17 12:05:07 +01:00
Christian Kamm 0593aa81f7 Serum: more health computation
Now the open orders are actually read
2022-03-16 18:33:11 +01:00
Christian Kamm 6aa4724b45 Serum: Health computation first steps 2022-03-16 16:45:54 +01:00
Christian Kamm f5d2964f1d Serum: Store base/quote token index in MangoAccount
To avoid having to pass SerumMarket when health needs to be computed.
2022-03-16 13:48:43 +01:00
Christian Kamm 1953d12f0f Health: expect serum open orders accounts 2022-03-16 13:42:29 +01:00
microwavedcola1 7a68aa71e5 simplify
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-03-15 16:38:24 +01:00
microwavedcola1 75721d8f06 fix bug where position mutation was not persisted in margin trade
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-03-15 16:25:44 +01:00
Christian Kamm 3bb94777f3 MangoAccount field renames
indexed_positions -> token_account_map
serum_open_orders_map -> serum_account_map

in the future we should add the perp_account_map
2022-03-15 15:08:53 +01:00
Christian Kamm 54641692fa PlaceSerumOrders: indexed positions are guaranteed to exist 2022-03-15 14:59:15 +01:00
Christian Kamm baa980c659 PlaceSerumOrder: Track vault balances before and after 2022-03-15 14:44:47 +01:00
Christian Kamm 28a26e66da PlaceSerumOrder: More account validation 2022-03-14 21:53:30 +01:00
Christian Kamm 6b342ffeb9 PlaceSerumOrder basic test 2022-03-14 17:21:16 +01:00
Christian Kamm a51fdd42f7 Serialization of new serum order instruction data 2022-03-14 15:28:06 +01:00
Christian Kamm 0b2f691f5b RegisterSerumMarket: pass market_index explicitly 2022-03-14 13:47:34 +01:00
Christian Kamm 07c9b9de7e Further harmonizing of PDA seeds 2022-03-14 13:39:54 +01:00
Christian Kamm 71cd1755ec Stop storing token info in Group
It is just not needed, the individual Bank accounts have all the
necessary info.
2022-03-14 13:35:38 +01:00
Christian Kamm 1cd0f8d6be RegisterToken: Pass token_index explicitly
This guarantees stability when a gov proposal adds a new token and a new
market in one transaction. This way the RegisterMarket instruction knows
exactly what index the new token will have.

Previously, the new token index was generated automatically, meaning
you couldn't be sure what index a new token would get in advance.
2022-03-14 13:19:50 +01:00
Christian Kamm 2502f0ac1b checked_math: use a panic
This reduces compute use further and still produces good error messages.
2022-03-14 12:45:32 +01:00
Christian Kamm 38d239462f checked_math: construct errors lazily
bad benchmark of compute needs for 100 add-assigns of I80F48:
3465 a + b
3465 a.checked_add(b).unwrap()
3465 cm with unwrap()     <- maybe future if we fix panics
4366 cm with ok_or_else() <- now
56494 cm with ok_or()     <- old
2022-03-13 20:55:28 +01:00
Christian Kamm 449fe4dc6d Add checked_math library for convenient overflow checking
Instead of
    x.checked_add(y).ok_or(error!(MangoError::MathError))?
we can write
    cm!(x + y)
2022-03-13 15:45:50 +01:00
Christian Kamm fce2316b03 Simplify health fn call, use in place serum order 2022-03-12 14:13:19 +01:00
Christian Kamm 16c0a95679 PlaceSerumOrder instruction stub 2022-03-12 14:13:19 +01:00
microwavedcola1 e742926ce2 change seeds literals to camelcase, camel case was how mango did in v3, also matches struct names
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-03-11 20:10:15 +01:00
microwavedcola1 241dd6080a
Merge pull request #24 from blockworks-foundation/mc/re-org
move unused to a unused mod, preparation for working on perp markets
2022-03-11 17:51:32 +01:00
Christian Kamm 693ac17996 Serum: Store open orders pubkey in account 2022-03-11 17:50:04 +01:00
microwavedcola1 c2f91489af move unused to a unused mod
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-03-11 17:11:46 +01:00
Christian Kamm c86a6f8d29 Serum: Create OOs is functional and called from a test 2022-03-11 15:28:27 +01:00
Christian Kamm 9be5ad6488 Test: Add CreateSerumOpenOrders test stub 2022-03-11 14:26:42 +01:00
Christian Kamm da31b6317f Drop unnecessary rent accounts 2022-03-11 13:02:20 +01:00
Christian Kamm dbd8409ce8 Test: Add RegisterSerumMarket test stub 2022-03-11 12:59:42 +01:00
Christian Kamm e3960dc5e2 Outlines of RegisterSerumMarket / CreateSerumOpenOrders 2022-03-11 12:40:16 +01:00
microwavedcola1 4dc0262546 reformat
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-03-08 12:45:59 +01:00
microwavedcola1 b3f2ca51fa fixes from cr
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-03-08 11:11:28 +01:00
Christian Kamm f6d2df1ad4 Rename to Bank and Group 2022-03-07 16:16:34 +01:00
Christian Kamm 2d65078c23 Fix margin_trade instruction call 2022-03-07 15:43:29 +01:00
Christian Kamm cea0f9441a Build fixes 2022-03-07 15:29:44 +01:00
microwavedcola1 8921ac0441 todo
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-03-07 15:24:50 +01:00
microwavedcola1 2882476724 clipppy
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-03-07 15:24:50 +01:00
microwavedcola1 dcacadbcbf margin trade test
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-03-07 15:24:50 +01:00
Christian Kamm 425e22a086 Deposit: Compute account health
Even if it's currently unused, it will become useful in the future.

Make a function to get the list of accounts needed for health checks in
tests, which is now shared between deposit and withdraw.
2022-03-07 15:22:23 +01:00
Christian Kamm 98cf8a7cff Position lifetime, dust etc
- withdraw and deposit may deactivate positions explicitly
- adjusting bank positions may collect dust for positions between
  0 and 1 native tokens
- health check always assumes all active and new banks/oracles are
  passed
2022-03-07 15:21:19 +01:00
Christian Kamm 51991d8546 Add global address lookup table test 2022-03-04 20:57:33 +01:00
Christian Kamm c6031acbdb Move to global address lookup tables 2022-03-04 20:57:33 +01:00
Christian Kamm 9692f9976f Compile and warning fixes 2022-03-03 13:10:20 +01:00
microwavedcola1 ce5f2027a1 extract health, flesh out margin trade, todo - test
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-03-03 11:43:56 +01:00
microwavedcola1 6702cdbba6
mc/pyth (#14)
* pyth integration

Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
2022-03-02 21:11:05 +01:00
Christian Kamm 01e8458093 Tests: Read banks/oracles from address lookup table 2022-03-01 15:12:53 +01:00
Christian Kamm fa008a8aa1 Move address map functions into separate module 2022-03-01 15:01:50 +01:00