Commit Graph

108 Commits

Author SHA1 Message Date
Jon Cinque 5d16d5b926 token-swap: Update withdraw-one fee calculation 2022-12-09 00:51:55 +01:00
Jon Cinque 8d0a2e1000
token-2022: Add PermanentDelegate extension (#3725)
* token-2022: Add PermanentDelegate extension

* Address feedback

* Refactor getting permanent delegate

* Rename function

* More cleanup

* Fix ATA
2022-11-15 14:10:59 +01:00
Jon Cinque f97a3dc7cf
clippy: Deny integer arithmetic, add allows where needed (#3606) 2022-09-15 13:16:53 +02:00
Jon Cinque 8a3a6ebf60 Step 2: Add processor check to prevent a mint close authority 2022-09-07 01:56:17 +02:00
Jon Cinque 482656bb66 Step 1: Add a failing test with mint close authority 2022-09-07 01:56:17 +02:00
Jon Cinque bb468d2ce7 Step 2: Calculate the expected transfer fee 2022-09-07 01:56:17 +02:00
Jon Cinque 9abaf9c90d Step 1: Add a failing test using transfer fees 2022-09-07 01:56:17 +02:00
Jon Cinque deeb02deff Step 3: Change `transfer` to `transfer_checked` 2022-09-01 20:12:12 +02:00
Jon Cinque 1d27ca5ced Step 2: Add mints to instructions that use `transfer` 2022-09-01 20:12:12 +02:00
Jon Cinque 1b6173cb4e Step 1: Add transfer fee extension to Token-2022 tests 2022-09-01 20:12:12 +02:00
Jon Cinque 685e957ba9
token-swap: Remove stable swap (#3556) 2022-08-31 15:18:10 +02:00
Jon Cinque 180d80be7d
token-swap: Remove stable-swap simulation tests (#3555) 2022-08-31 14:34:25 +02:00
Justin Malčić e8bafb4b3f
Handle invalid fee account in `token-swap` (#3484)
* Add pool fee account checking

* Add checks for closed account

* Fix clippy warning

* Fix clippy warnings (again)

* Remove assertions
2022-08-17 15:56:43 +02:00
Jon Cinque 25556ce680 Step 4: Use appropriate token program 2022-08-15 23:53:26 +02:00
Jon Cinque e77efb3927 Step 3: Write tests using multiple token programs at once 2022-08-15 23:53:26 +02:00
Jon Cinque b13a7cab89 Step 2: Update instruction processors 2022-08-15 23:53:26 +02:00
Jon Cinque 16b441edb8 Step 1: Update all instruction interfaces 2022-08-15 23:53:26 +02:00
Jon Cinque fdf7786be0 Step 6: Use `StateWithExtensions` instead of `Mint` and `Account` 2022-08-05 20:42:41 +02:00
Jon Cinque b3c432a0f3 Step 5: Add extensions to tests 2022-08-05 20:42:41 +02:00
Jon Cinque 4b4214e1aa Step 4: Replace spl_token::id() with a parameter 2022-08-05 20:42:41 +02:00
Jon Cinque 3955c3f994 Step 3: Update instruction creators to use spl_token_2022 2022-08-05 20:42:41 +02:00
Jon Cinque a07ec0a615 Step 2: Update all tests to test cases for token and token-2022 2022-08-05 20:42:41 +02:00
Justin Malčić d4bd86e162
Improve token error messages in token-swap (#3357)
* Move PrintProgramError impls

* Add wrapper function

* Add PrintProgramError to use declaration
2022-07-26 13:59:37 +02:00
Jon Cinque 042da2b687
token-swap: Allow for huge swaps that almost entirely drain one side (#3334) 2022-07-19 19:08:12 +02:00
Jon Cinque 5b1b87ed48
token-swap: Prepare v3.0.0 release for testnet and devnet (#3227) 2022-06-07 16:31:18 +02:00
kampung-tech 6487cde537
fix typo remove_liquidty to remove_liquidity (#3010) 2022-03-14 18:07:18 +01:00
Jon Cinque d557474ff9
token-swap: Ceiling stable curve division (#2942) 2022-02-23 15:27:16 -05:00
Mykola Vasylchyshyn d6896a9715 Fix a typo in instruction.rs 2022-02-22 23:58:32 -07:00
Anurag Gupta 95cd64ce02
token-swap: Making Arc struct as Sync (#2896)
* box changed to arc

* Imported Arc in all files

* warnings removed

* Updated fuzz

* Removed useless Arc
2022-02-11 13:18:06 +01:00
Anurag Gupta 78e29e9238
token-swap: Changed Wrap SwapCurve's calculator field into Arc instead of Box (#2860)
* box changed to arc

* Imported Arc in all files

* warnings removed

* Updated fuzz
2022-02-03 20:22:51 +01:00
Phạm Văn Dũng a6a1ce4290
fix account list in token_swap instructions docs (#2648) 2021-12-17 13:05:23 +01:00
Michael Vines 1a0155e34b Update to Rust 1.57.0 2021-12-09 23:56:47 -08:00
Jon Cinque f83240a868
token-swap: Prevent single deposits for curves that don't allow it (#2590) 2021-11-17 23:41:55 +01:00
Jon Cinque fcbc0d3501
token-swap: Add comment for stable curve A calculation (#2556) 2021-11-03 19:48:25 +01:00
Jon Cinque 867417306a
token-swap: Use `find_program_address` on-chain during init (#2363) 2021-08-31 23:09:42 +02:00
Brian Anderson 8fbb54bf5f
Eliminate doc warnings (#2058)
* Add URL autolinks to docs in spl-math

* Autolink URLs in doc comments

* Surround 'account references' doc items with code spans to avoid warnings
2021-07-15 17:58:37 -05:00
Jon Cinque 21f8af34e7
Update all solana dependencies to 1.7.3, fix issues (#1958)
* Update all dependencies to 1.7.3, fix issues

* Remove esm from mocha

* Fix missed token test

* Also update rust version

* token-swap: update tolerance on sim test

* Run `cargo clippy --fix` for needless_borrow errors

* Rerun cargo fmt
2021-06-25 00:39:08 +02:00
Jon Cinque 929dd59e50
token-swap: Fuzz all curves (#1796) 2021-05-25 22:10:31 +00:00
Jon Cinque 5f692a0b61
token-swap: Make single token withdrawal fair with better calcs (#1794)
* Separate deposit and withdraw single side calcs

* token-swap: Make single token withdrawal fair with better calcs

* Fix JS test calcs
2021-05-25 22:05:06 +02:00
akamutsu 4915c0910a
Implementation of stable curve methods (#1488)
* WIP: Implementation of the remainder of stablecurve methods

* Edits based on PR feedback

* revert SwapVersion

* PR fixes

* checked add / sub

* reverted to using RoundDirection instead of LiquidityProviderOperaiton

* removed LiquidityProviderOperation enum

* Revert flipped parameters

* initial attempt at noramlized_value

* use d for noramlize value for stable curve

* TradeDirection instead of RoundDirection for trading_tokens_to_pool_tokens

* reimplemented the trading_tokens_to_pool tokens function for stable

* Typo

* fix rounding errors in pool_tokens_to_trading_tokens

* try different values of amplification factor in test for stable curve

* fixed broken tests, use constant_product normalized_value function

* use cubic solver

* fix noramlize_value function bad maths

* redid noramlized value for one last time

* added more proptests

* Get tests to work

* Fixup for prod usage

Co-authored-by: Yutaro Mori <me@yutaromori.com>
Co-authored-by: Jon Cinque <jon.cinque@gmail.com>
2021-05-19 02:44:01 +02:00
Elliott Benisty 58221fc9ae
Fix potential vulnerabilities in programs using spl-token CPIs by adding program id checks (#1714)
* Add spl-token program id check helper function. Add program id to instruction bindings.

* Run cargo fmt

* Fixup tests

* Skip ATA tests when custom token program-id

Co-authored-by: Tyera Eulberg <tyera@solana.com>
2021-05-12 22:36:41 +00:00
Jon Cinque 0f4f2b8de9
token-swap: Fix slippage on withdraw tokens (#1637)
* token-swap: Fix withdrawal all tokens slippage

When withdrawing, the slippage check is done before `min`ing the token a
and b amounts, which makes it possible to ignore the desired slippage,
and lose out on a lot more than expected.

This has an additional knock-on effect. When burning all of the pool
tokens, it becomes impossible to ever use it again.

* Check for slippage after getting the actual amount that would be
  traded
* Re-initialize the pool token amount on the next deposit if all pool
  tokens were burned

Fixes #1629

* Fmt + clippy

* Deposit one side on 0 pool tokens just gives new supply back
2021-04-29 14:26:47 +02:00
B 9281b6e828
feat: adjust fee constraints (#1596) 2021-04-14 13:33:34 -05:00
Michael Vines 448be67cfa Update to Solana 1.6.2 2021-03-30 09:38:04 -07:00
Jon Cinque d336b8b714
stake-pool: Use checked_ceil_div for withdraw calc (#1482)
* stake-pool: Use checked_ceil_div for withdraw calc

When a stake account is totally removed from a stake pool by the
manager, there's a chance that the operation would not take enough of
the manager's pool tokens by 1 due to truncation.

Do a ceiling division instead, and refactor ceiling division into the
math library.

* Use new function name on CLI

* Cargo fmt
2021-03-23 00:33:51 +01:00
Michael Vines 626376653d Clippy 2021-03-16 18:33:37 -07:00
Jon Cinque beb4aa7e7f
spl-math: Add separate package to test instruction usage (#1205)
* Refactor to use spl-math

* Run cargo fmt

* Fixup fuzz

* Add spl math program

* Add u64-based approximation

* Cleanup

* Downgrade solana sdk for CI

* Move U256 impl to stable curve

* Remove generic newtonian, use traits

* Cargo fmt

* Move math/program -> libraries/math

* Revert Cargo.lock changes

* Add u128 instruction count tests

* cargo fmt
2021-02-10 17:40:54 +01:00
Jon Cinque b26491552f
token-swap: Add version to state (#985)
* Add version to token swap state

* Fix fuzz

* Cargo fmt

* Revert solana localnet version

* Update enum dispatch
2021-02-04 15:22:33 +01:00
Jon Cinque d16da5b913
Update rust stable to 1.49 (and add token swap program id) (#1158)
* Update token swap program id

* Update rust stable to 1.49
2021-02-04 14:20:15 +01:00
Jon Cinque 40b7690a58
swap: Add rounding correction for deposit / withdraw (#1061)
* Add rounding specification for deposit / withdraw

The fuzzing test was improved to make sure that the value of pool tokens
(minus fees) never changed, which revealed a calc bug with deposits and
withdrawals.  If someone withdraws, they can take additional small
value out of the pool in the form of truncated value.

Before, deposit and withdrawal used the same calculation, rounding up the token
A and B amounts.  Remember that deposit / withdrawal specify the pool
token amount, and calculate the amount of A / B required to get to that
many pool tokens.  On withdrawal, we were giving back a little bit too
much.  The concept is that everything would even out since a deposit is
required for a withdrawal, which makes everything a wash.

Fuzzing found this issue very quickly! The change is to introduce a
rounding parameter to avoid ever giving away too much value, either
during deposit or withdrawal.

* Cleanup

* Add withdraw test

* Cleanup

* Cargo fmt

* Remove curve tests from fuzzing cfg

* Update JS test

* Cleanup test

* Update honggfuzz again

* Fix fee on JS test

* Force correct version of honggfuzz for CI (remove later)

* Improve value tests using PreciseNumber everywhere

* Fix ceiling

* Add comment for 0 tokens

* Fix ceiling div, add in constant price calc

* Revert ceiling division as template and use trait, too much boilerplate

* Run cargo fmt
2021-01-15 18:17:27 +01:00