Commit 2d6bbcb
Merge develop to master (#1047)
* Logging for RewardsManager and PositionManager invariants (#925)
* added logging for positionManager
* added rewards and position logging
* clean up
* updated rewards mapping back to public so tests pass
* how modifier was being called in rewardsPoolHandler
* revised so logging pools is not required when logging positions
* cleanup
* readme cleanup
---------
Co-authored-by: Ian Harvey <[email protected]>
* Invariants Improvement: Add multiple pool support in position and rewards manager invariant testing (#927)
* Add multiple pools in position and rewards manager invariant testing
* Fix RW6 regression test
* Fix rewardsClaimed and updateRewardsClaimed in Rewards manager
* Fix compile error
* PR feedback
* Add configurable number of pools for position and rewards manager invariant testing
* Positions Invariants: Multiple positions, transfer positions (#926)
* added randomness
* added the ability to transfer positions
* increased chance of rewards being claimed in handlers
* cleanup
* responded to comments
---------
Co-authored-by: Ian Harvey <[email protected]>
* Fuzz test additions (#924)
* Add fuzz test for borrower borrows fuzzed amount and getting kick after some time
* Add fuzz test for take fuzzed amount of collateral from auction
* Add fuzz test for settle with fuzzed pool deposit
* Add fuzz test for add and remove collateral in ERC721Pool
* Fuzzed buckets used in borrow and kick fuzz test
* PR feedback
* Invariant Improvements: Position rewards logging for multiple pools (#931)
* Update position and rewards manager invariant logging for multiple pools
* Fix regression test to run for any token precision and Quote token limits
* PR feedback
* Invariants Improvements: Add Multiple position in single handler in Position (#928)
* Update Position invariants handler to memorialize and redeem multiple positions
* PR feedback
* Add partial random positions redeem in redeem position handler
* Add random time skips between epochs in rewards manager
* Add bucket bankruptcy scenario for rewards manager (#930)
* Add bucket bankruptcy scenario for rewards manager
* Fix evm reverts
* PR feedback
* Update prepare test methods to add position in NFT if there is no position in it
* Fixed RewardsManager exchangeRate emit (#941)
* stopped updatedExchangeRates emit when the rates are not updated
* removed epoch check in _updateBucketExchangeRates
---------
Co-authored-by: Ian Harvey <[email protected]>
* Invariant Improvements: Add settle invariant scenario (#933)
* Add settle invariant scenario
* Reduce Loans and skip time to make undercollateralize
* Reduce time to skip in bucket bankruptcy scenario setup to fix regression tests (#936)
* Update unit test to increase test coverage (#938)
* Add unit tests to check deposits and debt limits in pool (#939)
* Add unit test to check exp function limit
* Add unit tests to check pool deposit and debt limits
* PR cleanup
* Add missing external function calls (#946)
* Update Position Manager unit tests to test against both ERC721 subset Pool and Collection Pool (#945)
* Merge changes from private-contracts repo into develop (#950)
* Merge Develop into Master (#934)
* Logging for RewardsManager and PositionManager invariants (#925)
* added logging for positionManager
* added rewards and position logging
* clean up
* updated rewards mapping back to public so tests pass
* how modifier was being called in rewardsPoolHandler
* revised so logging pools is not required when logging positions
* cleanup
* readme cleanup
---------
Co-authored-by: Ian Harvey <[email protected]>
* Invariants Improvement: Add multiple pool support in position and rewards manager invariant testing (#927)
* Add multiple pools in position and rewards manager invariant testing
* Fix RW6 regression test
* Fix rewardsClaimed and updateRewardsClaimed in Rewards manager
* Fix compile error
* PR feedback
* Add configurable number of pools for position and rewards manager invariant testing
* Positions Invariants: Multiple positions, transfer positions (#926)
* added randomness
* added the ability to transfer positions
* increased chance of rewards being claimed in handlers
* cleanup
* responded to comments
---------
Co-authored-by: Ian Harvey <[email protected]>
* Fuzz test additions (#924)
* Add fuzz test for borrower borrows fuzzed amount and getting kick after some time
* Add fuzz test for take fuzzed amount of collateral from auction
* Add fuzz test for settle with fuzzed pool deposit
* Add fuzz test for add and remove collateral in ERC721Pool
* Fuzzed buckets used in borrow and kick fuzz test
* PR feedback
* Invariant Improvements: Position rewards logging for multiple pools (#931)
* Update position and rewards manager invariant logging for multiple pools
* Fix regression test to run for any token precision and Quote token limits
* PR feedback
* Invariants Improvements: Add Multiple position in single handler in Position (#928)
* Update Position invariants handler to memorialize and redeem multiple positions
* PR feedback
* Add partial random positions redeem in redeem position handler
* Add random time skips between epochs in rewards manager
* Add bucket bankruptcy scenario for rewards manager (#930)
* Add bucket bankruptcy scenario for rewards manager
* Fix evm reverts
* PR feedback
* Update prepare test methods to add position in NFT if there is no position in it
---------
Co-authored-by: Ian Harvey <[email protected]>
Co-authored-by: Prateek Gupta <[email protected]>
* manually merged from private-contracts/immutable-kicks
* eliminated alreadyTaken (drawio needs updating)
* annotated failing unit tests
* new limit to induce testAccruePoolInterestRevertDueToExpLimit revert
* fixed testUpdateInterestTuLimit
* fixed testAccrueInterestNewInterestLimit
* removed alreadyTaken from drawios
* updated drawio-generated html
* merged Prateek's post-merge changes
---------
Co-authored-by: grandizzy <[email protected]>
Co-authored-by: Ian Harvey <[email protected]>
Co-authored-by: Ian Harvey <[email protected]>
Co-authored-by: Prateek Gupta <[email protected]>
* Return amount repaid in repayDebt and amount take in take (#947)
* Remove multicall from position manager (#948)
* L2 license grant (#949)
* updated license
* adjustment for public chains
* Pool info utils multicall (#944)
* Add PoolInfoUtilsMulticall contract to call multiple PoolInfoUtils methods in a single call to reduce rpc calls from subgraph
* Add tests for PoolInfoutilsMulticall
* Added comments and code improvements
* altered license
---------
Co-authored-by: Ian Harvey <[email protected]>
* removed mention of momp in testPoolInfoUtilsMulticall (#952)
Co-authored-by: Ian Harvey <[email protected]>
* resolved compilation warnings and removed unused code (#953)
* Reuse _isCollateralized method in repayment (#959)
* this underflows instead of giving expected revert
* move isCollateralized check after updating borrower collateral
* remove local calculation of encumbered collateral
* trying to properly fix testBorrowRepayPrecision
* resolve rounding issue in fuzz test
* testCollateralization improvements
* updated unit tests for new _collateralization implementation
* more collateralization tests
* Revert "Remove multicall from position manager (#948)" (#961)
This reverts commit f540c8a75fe58b9fdb8249da33f271a5f0ad335c.
* PR template (#963)
* changed PR template
* commented out example test, as requested in PR review
* Low-lying fruit (#967)
* added a fenwick OOB test
* unit test to prove 0 loan heap insertions don't break anythnig
* test harness for the auction queue and simple unit tests
* comment to resolve Kirill L-07
* removed redundant code per Kirill L-05
* added SafeCasts
* Fix incorrect lup is used to calculate new interest rate in lenderKick (#972)
* correct reserve auction kick timing logic (#974)
* Add debt and collateral settled returns in settle function (#960)
* Return debt and collateral settled from settle method
* Add isBorrowerSettled return in settle method
* Catch interest accrual and update interest overflow (#954)
* Add try catch for interest accrual and update interest method to avoid pool locking
* PR feedback
* Incorrect(Unscaled) deposits are used to check bucket bankruptcy in forgive bad debt (#971)
* Fix incorrect deposits used to check bucket bankruptcy in forgive bad debt
* PR feedback
* Use bucket price for BPF calculation (#970)
* use bucket price in BPF calc where applicable
* fixed unit tests
* revert CRA kick if a liquidation awaits settlement (#977)
* First borrower (#968)
* this did not work; cannot prevent rate from changing after 12 hours
* fixed issue with _updateInterestState
* fixed unit tests
* removed unused test utility
* Contract size mitigation (#979)
* moved inflator state update logic to PoolHelper
* moved flashLoan impl into PoolCommons
* Memorialize borrower threshold price on kick (#976)
* Memorialize borrower threshold price at time of kick to calculate bpf on take
* Fix tests
* Record borrower threshold price inside _recordAuction method
* Remove redundant conversions
* Fix natspec
* Fix unit tests
* Remove redundant variable
* Borrower with threshold price less than `MIN_PRICE` cannot be kicked. (#973)
* Add test for borrower with tp less than min price cannot be kicked
* Update _isCollateralized method to return borrower is not collateralized if TP < MIN_PRICE and LUP = MIN_PRICE
* Set borrower to be undercollateralized if LUP = MIN_PRICE
* Fix unit tests
* Fix regression test
* Fix regression test
* Optimize stake cost by reducing calls to currentBurnEpoch (#940)
* reduce external calls to burn epoch
* Don't cast epoch
* further reduce gas in stake by casting curBurnEpoch on use
* moved changes off of kirill-L01-dust-test to a fresh branch (#980)
Co-authored-by: Ian Harvey <[email protected]>
* Merge rc9 (#1010)
* Universal deposit fee (#983)
* charge fee on all deposit
* unit tests compile
* test harness updates
* working on ERC20PoolQuoteTokenTest
* removed deposit fee cap
* more work on ERC20PoolQuoteTokenTest
* do not charge deposit fee if moving liquidity to higher price
* Eliminate reserves bad debt allocation and add margin to TP (#962)
* this underflows instead of giving expected revert
* move isCollateralized check after updating borrower collateral
* remove local calculation of encumbered collateral
* trying to properly fix testBorrowRepayPrecision
* resolve rounding issue in fuzz test
* testCollateralization improvements
* updated unit tests for new _collateralization implementation
* more collateralization tests
* Add 1.04 factor in borrower collateralization
* Update nptp ratio to '1 + sqrt(r)/2'
* Remove Settle debt with pool reserves
* Remove 0.995 factor from claimable reserves calculation
* Update bond factor calculation to minimum 0.005
* added testcase where debt exceeds deposit
* updated test so debt exceeds deposit
* allow up to half of current orig fee to be used to settle bad debt
* updated testTakeAndSettle
* more test fixes
* Enabled settling with all reserves if
Deposits.treeSum==0 or 72 hrs pass
* cleanup
* Half orig fee res | Matt example (#966)
* added Matts test as proof that attack no longer works on his branch
* Revert "Remove multicall from position manager (#948)" (#961)
This reverts commit f540c8a75fe58b9fdb8249da33f271a5f0ad335c.
* added test testSpendOrigFeePushBadDebtToBorrowers test
* cleaned up testStealReservesWithMarginm to match minted balances
* responded to Matts comments
---------
Co-authored-by: Ian Harvey <[email protected]>
Co-authored-by: Mike Hathaway <[email protected]>
* Revert "Remove Settle debt with pool reserves"
This reverts commit 290d6cf6f7baa1fb17a66322faf755b78a4a379c.
* Update half origination fees reserves settlement time to 144 hours from kickTime
* Fix alignment and extra spaces
* Fix some unit tests
* PR feedback
* Update encumberance and collateralization method in poolInfoUtils
* Fix some unit tests
---------
Co-authored-by: Ed Noepel <[email protected]>
Co-authored-by: Ian Harvey <[email protected]>
Co-authored-by: mwc <[email protected]>
Co-authored-by: Ian Harvey <[email protected]>
Co-authored-by: Mike Hathaway <[email protected]>
* Fix invariant setup
* Fix some unit tests
* ERC20PoolQuoteTokenTest updated
* updated ERC20PoolPurchaseQuoteTokenTest
* Fixed tests in ERC20PoolReserveAuction.t.sol
* updated ERC20PoolBorrowTest and ERC20PoolBorrowFuzzyTest
* Fix ERC20PoolCollateral and ERC20PoolInfoUtils tests
* Fixed ERC20 arbtake and depositTake tests
* Fix ERC20PoolLiquidationsKickTest, ERC20PoolLiquidationKickFuzzyTest and ERC20PoolLiquidationsLenderKickAuctionTest
* updated ERC20PoolMulticallTest
* cleaned up ERC20PoolDebtExceedsDepositTest
* fixed testTakeLoanColConstraintBpfPosNoResidual
* fixed testTakeCallerColConstraintBpfPosNoResidual
* fixed testTakeCallerColConstraintBpfPosResidual
* fixed testTakeCallerColConstraintBpfNegResidual
* fixed testTakeLoanDebtConstraintBpfPosResidual
* fixed testTakeAndSettle
* cleaned up ERC20PoolDebtExceedsDepositTest
* updated ERC20PoolPrecisionTest
* Update ERC20PoolLiquidationsSettleTest
* Update ERC20PoolLiquidationsMisc
* Update ERC20PoolLiquidationSettleFuzzyTest
* Update ERC20PoolLiquidationTakeFuzzyTest
* fixeed revert tests
* ERC20PoolLiquidationsTake -- fixed rest
* Mh update tests (#985)
* fix most position manager tests
* fix additional pm tests
* fix rewards requiredCollateralRewards setup
* fix ClaimRewards tests
* update additional rewards manager tests
* fix additional tests
* more test fixes
* commit wip bankruptcy tests
* fixed testMoveLiquidityToOverwriteBankruptBucket
* fix additional tests
* fix testMoveLiquidityWithDebtInPool
* fix remaining rewards manager tests
---------
Co-authored-by: Mike <[email protected]>
Co-authored-by: mwc <[email protected]>
* Add 1.04 factor in HTP calculations (#987)
* Add 1.04 factor in HTP calculations
* Add COLLATERALIZATION_FACTOR constant in PoolHelpers
* Add collateralization factor in dwatp
* Fix poolPricesInfo
* Update ERC20PoolBorrowFuzzyTest
* Fix some unit tests
* Fix some unit tests
* Fix some unit tests
* Update ERC20PoolTransferLPs
* fix most rewards manager tests
* update remaining rewards manager tests
* update ERC721SubsetPoolBorrowTest and commit wip changes to testMergeOrRemoveERC721Collateral
* updated testSettlePartialDebtSubsetPool (#988)
* updated testSettlePartialDebtSubsetPool
* re-added teardown
---------
Co-authored-by: Ian Harvey <[email protected]>
* fix ERC721PoolCollateral tests
* fix borrowRepayDebtFuzzy and additional PM tests
* cleaned up testBorrowAndRepayWith4DecimalQuote
---------
Co-authored-by: Mike <[email protected]>
Co-authored-by: Ian Harvey <[email protected]>
Co-authored-by: Ian Harvey <[email protected]>
* Fix some unit tests
* Deployment updates for RC8+ releases (#986)
* cherry-picked from master
* updated README
* Fix ERC721PoolLiquidationsTakeTest
* updated ERC721PoolReserveAuctionTest
* updated testMergeOrRemoveERC721Collateral (#989)
Co-authored-by: Ian Harvey <[email protected]>
* updated ERC721PoolPurchaseQuoteTest and fixed bug in ERC721 tearDown
* cleaned up testLiquidationLenderKickAuction, testLiquidationSingleBorrower, testSettleAuctionWithoutTakes
* updated testMoveLiquidityToOverwriteBankruptBucket
* updated PoolHelperTest
* cleaned up asserts in addLiquidity
* update testMoveLiquidityInBankruptBucket_LP_report_179_494
* updated ERC721PoolEMAsTest
* fixed testKickHighThresholdPriceBorrower
* updated testBorrowerInterestCalculationAfterRepayingAllDebtOnce and testBorrowerInterestCalculation
* updated testMultipleBorrowerInterestAccumulation
* Fix regression tests
* updated RE3, fixed _addQuoteToken
* addQuoteToken - return amount added (#993)
* addQuoteToken now returns amount added
* update unit tests to validate return values
* Fix up add liquidity (#992)
* cleaned up addLiquidity() method in ERC20PoolLiquidationsScaled.t.sol
* remove console
---------
Co-authored-by: Ian Harvey <[email protected]>
* fixed issue with test_regression_fenwick_index_2 in non-18-decimal env
* added regression tests for two failing reserves scenarios
* rename tests such that automake runs them with other regression tests
* UnboundedLiquidationPoolHandler bucketTake fix (#994)
* updated UnboundedLiquidationPoolHandler to handle compensated collateral in bucketTake
* cleanup, trap unhandled use case
* settle event now emits actual debt settled rather than t0 amount (#999)
* settle event now emits actual debt settled rather than t0 amount
* updated test_regression_settle_with_reserves
* Updated auctionInfo (#996)
* add thresholdPrice to auctionInfo; update test iterface usages
* temp fix tests
* remove unneeded comment
* Update auction status (#998)
* wip auction status update w/ stack too deep
* update auctionStatus; add auctionInfo method to poolInfoUtils
---------
Co-authored-by: Mike <[email protected]>
---------
Co-authored-by: Mike <[email protected]>
* updated brownie tests, removed obsolete invariant tests (#1001)
* Block addqt above auction price (#997)
* initial commit
* tweaks to Matt's PR to block adding quote token above auction price (#1000)
* reduce cost of reference price assignment
* reduce pool contract size
* fixed testDepositTakeAndSettleByRegularTakeSubsetPool
* fixed tests in ERC20PoolLiquidationsArbTake.t.sol
* fixed tests in ERC20PoolLiquidationsDepositTake.sol
* fixed two more
* updated testDepositTakeAndSettleSubsetPool
* updated testKickAndSettleSubsetPoolFractionalCollateral
* updated testSettleWithDepositFuzzy
* Fixed final tests
* add "AddAboveAuctionPrice" as expected pool error
* implemented invariant A9: reference prices in liquidation queue shall not decrease
* Update assertAuction to use ThresholdPrice from auctionInfo (#1003)
* use auctionInfo thresholdprice instead of recalculating
* fix most tests
* update remaining tests
---------
Co-authored-by: Mike <[email protected]>
* Contract size mitigation (#1004)
* moved debtInfo to PoolCommons, saving 10 bytes
* moved withdrawBonds to KickerActions
* added unit test showing adding qt above auction price reverts
* updated nit spellings
---------
Co-authored-by: mwc <[email protected]>
Co-authored-by: Ed Noepel <[email protected]>
Co-authored-by: Ed Noepel <[email protected]>
Co-authored-by: Mike Hathaway <[email protected]>
Co-authored-by: Mike <[email protected]>
Co-authored-by: Ian Harvey <[email protected]>
* Invariant testing fixes (#1006)
* initial commit
* tweaks to Matt's PR to block adding quote token above auction price (#1000)
* reduce cost of reference price assignment
* reduce pool contract size
* fixed testDepositTakeAndSettleByRegularTakeSubsetPool
* fixed tests in ERC20PoolLiquidationsArbTake.t.sol
* fixed tests in ERC20PoolLiquidationsDepositTake.sol
* fixed two more
* updated testDepositTakeAndSettleSubsetPool
* updated testKickAndSettleSubsetPoolFractionalCollateral
* updated testSettleWithDepositFuzzy
* Fixed final tests
* add "AddAboveAuctionPrice" as expected pool error
* implemented invariant A9: reference prices in liquidation queue shall not decrease
* Update assertAuction to use ThresholdPrice from auctionInfo (#1003)
* use auctionInfo thresholdprice instead of recalculating
* fix most tests
* update remaining tests
---------
Co-authored-by: Mike <[email protected]>
* Contract size mitigation (#1004)
* moved debtInfo to PoolCommons, saving 10 bytes
* moved withdrawBonds to KickerActions
* documented a sample of invariant failures in regression tests
* added unit test showing adding qt above auction price reverts
* fixed _isCollateralized bug not returning true in all 0-debt use cases
* updated nit spellings
* fixed underflow calculating kicker reward
* _repayDebtByThirdParty should check for expected pool errors
* Round down when reward kicker, round up when kicker is penalized
Fix roundings in tests
* update test comments
* fix and enable A9 invariant
---------
Co-authored-by: mwc <[email protected]>
Co-authored-by: Mike Hathaway <[email protected]>
Co-authored-by: Mike <[email protected]>
Co-authored-by: Ian Harvey <[email protected]>
Co-authored-by: grandizzy <[email protected]>
Co-authored-by: grandizzy <[email protected]>
* RC9 suggested improvements (#1005)
* Revert AuctionNotTakeable in same place, load auction kickTime only once from storage
* Calculate ERC721 collateralTaken only once
cosmetize code (read from result struct in local var and reuse)
Results in shrinking a little bit contract sizes
* Read borrower Np Tp ratio from storage only once when kick
* If block style, proper indentation
* Proposed changes to PR #972:
- avoid calculating current LUP twice in lender kick
- change _kick function to accept proposed LUP (for regular kick proposed LUP is current LUP, for lender kick proposed LUP is calculated based on additional debt)
- in both kick cases return current LUP in kick result
- reduce gas costs by saving a Fenwick traversal
- reduce contract size by removing LUP calculation within Pool
* Cosmetic flashloan code changes, PoolCommons.flashLoan doesn't return false but always reverts if flashloan fails
* PR#983 style, remove redundant line
* PR#999 suggested improvement - calculate current settled debt only once and include in settle result for state update
* PR #962 proposed changes:
- get Fenwick deposits only once when settle with reserves
- define constants for min bond factor and max npTp ratio values
* PR #987 proposed improvement:
- add and reuse _htp helper function (instead duplicated maths)
* Continuation of PR #962: (#1008)
- Record settle amount limmit in Liquidtion struct, at the time of kick (that is instead incrementing accumulator in Borrower struct, each time debt is drawn)
- This way accumulator will be reseted when auction is settled
- fix tests
TODO:
- assert Liquidation.t0ReserveSettleAmount in unit tests (_assertAuction), make sure is set to 0 after auction settled and decreased when partial settles done
- update invariant test to check new introduced accumulator
* Misc test fixes (#1009)
* handle another reward rounding error use case
* fix intermittant fuzz test failure - cannot draw debt from liquidity in bucket 7388
* PositionManager should expect AddAboveAuctionPrice, which can happen in moveLiquidity
* Invariant fix: round up quote tokens calculated from rewarded LP (because LP rewarded are calculated in bucketTake as rewarded quote tokens -> LP rounded down)
* Pr feedback
* Fix failing unit tests
---------
Co-authored-by: Ed Noepel <[email protected]>
Co-authored-by: Prateek Gupta <[email protected]>
Co-authored-by: Ed Noepel <[email protected]>
Co-authored-by: Ian Harvey <[email protected]>
Co-authored-by: mwc <[email protected]>
Co-authored-by: Mike Hathaway <[email protected]>
Co-authored-by: prateek105 <[email protected]>
Co-authored-by: Mike <[email protected]>
Co-authored-by: mattcushman <[email protected]>
Co-authored-by: grandizzy <[email protected]>
Co-authored-by: grandizzy <[email protected]>
* [L-02] Some unit tests are not properly executed
- split priceToIndex and indexToPrice revert tests
* removed several unused errors and one unused event, per Kirill I-03
* eliminated unused TakeLocalVars.factor
* removed unused KickResult.poolDebt
* Remove more unused vars (#1022)
* Remove DrawDebtLocalVars.compensatedCollateral and RepayDebtLocalVars.compensatedCollateral
* remove unused `ConstructTokenURIParams::pool` and `ConstructTokenURIParams::indexes`
* Include 1.04 COLLATERALIZATION_FACTOR (#1021)
* Include 1.04 COLLATERALIZATION_FACTOR
in neutral price used in kicks
* fixed `testDepositTakeAndSettleByBucketTakeSubsetPool`
* fixed testDepositTakeAndSettleByRegularTakeSubsetPool
* Moved `wmul` inside `mulDiv`
* fix position, rewards, and poolInfoUtils tests
* fix pool factory emit; fix borrowAndRepay tests
* updated ERC20PoolBorrowTest, ERC20PoolCollateralTest, and ERC20PoolDebtExceedsDepositTest
* rounding update
* updated ERC20PoolQuoteTokenTest and ERC20PoolPrecisionTest
* Fix ERC721 unit tests
* Fix ERC20PoolLiquidationsArbTakeTest and ERC20PoolLiquidationsDepositTakeTest
* Fix ERC20PoolFactory, ERC20PoolLenderKick and ERC20PoolKick
* Fix ERC20PoolLiquidationSettleFuzzyTest and ERC20PoolLiquidationTakeFuzzyTest
* Fix ERC20PoolLiquidationsMisc
* Fix ERC20PoolLiquidationsLowPriceCollateralTest, ERC20PoolLiquidationsTakeAndRepayAllDebtInPoolTest and PositionManagerERC20PoolTest
* Fix ERC20PoolLiquidationsSettle test
* Fix testTakeWithFlashLoan test
* Fix ERC20PoolLiquidationsTakeTest
* Include COLLATERALIZATION_FACTOR in loanInfo
* Remove redundant code from testTakeAndSettle that was already been tested in other tests
* Update testTakeAndSettle
---------
Co-authored-by: mwc <[email protected]>
Co-authored-by: Mike <[email protected]>
Co-authored-by: Ed Noepel <[email protected]>
Co-authored-by: grandizzy <[email protected]>
Co-authored-by: prateek105 <[email protected]>
* Kirill [M-07] | Liquidation of positions with bad debt can cause losses for `HPB` depositors (#1024)
- Don’t allow calls to `kickReserveAuction` until all pending auctions are fully settled - revert with AuctionNotCleared if so
- update unit test to cover scenario
- apply consistent style for _revertIfAuctionPriceBelow helper (storage param first)
* Fixed Take event emit for ERC721 pools (#1026)
* fixed emit for take
* Fix testDepositTakeAndSettleByRegularTakeSubsetPool
---------
Co-authored-by: Ian Harvey <[email protected]>
Co-authored-by: prateek105 <[email protected]>
* removed COLLATERALIZATION_FACTOR where it was not used (#1018)
* removed collateralization_factor where it was not used
* Import missing COLLATERALIZATION_FACTOR
---------
Co-authored-by: Ian Harvey <[email protected]>
Co-authored-by: prateek105 <[email protected]>
* Address merge-rc9 PR feedback (#1025)
* reuse pendingInflator logic
* better wording
---------
Co-authored-by: prateek105 <[email protected]>
* Expand code coverage (#1013)
* Universal deposit fee (#983)
* charge fee on all deposit
* unit tests compile
* test harness updates
* working on ERC20PoolQuoteTokenTest
* removed deposit fee cap
* more work on ERC20PoolQuoteTokenTest
* do not charge deposit fee if moving liquidity to higher price
* Eliminate reserves bad debt allocation and add margin to TP (#962)
* this underflows instead of giving expected revert
* move isCollateralized check after updating borrower collateral
* remove local calculation of encumbered collateral
* trying to properly fix testBorrowRepayPrecision
* resolve rounding issue in fuzz test
* testCollateralization improvements
* updated unit tests for new _collateralization implementation
* more collateralization tests
* Add 1.04 factor in borrower collateralization
* Update nptp ratio to '1 + sqrt(r)/2'
* Remove Settle debt with pool reserves
* Remove 0.995 factor from claimable reserves calculation
* Update bond factor calculation to minimum 0.005
* added testcase where debt exceeds deposit
* updated test so debt exceeds deposit
* allow up to half of current orig fee to be used to settle bad debt
* updated testTakeAndSettle
* more test fixes
* Enabled settling with all reserves if
Deposits.treeSum==0 or 72 hrs pass
* cleanup
* Half orig fee res | Matt example (#966)
* added Matts test as proof that attack no longer works on his branch
* Revert "Remove multicall from position manager (#948)" (#961)
This reverts commit f540c8a75fe58b9fdb8249da33f271a5f0ad335c.
* added test testSpendOrigFeePushBadDebtToBorrowers test
* cleaned up testStealReservesWithMarginm to match minted balances
* responded to Matts comments
---------
Co-authored-by: Ian Harvey <[email protected]>
Co-authored-by: Mike Hathaway <[email protected]>
* Revert "Remove Settle debt with pool reserves"
This reverts commit 290d6cf6f7baa1fb17a66322faf755b78a4a379c.
* Update half origination fees reserves settlement time to 144 hours from kickTime
* Fix alignment and extra spaces
* Fix some unit tests
* PR feedback
* Update encumberance and collateralization method in poolInfoUtils
* Fix some unit tests
---------
Co-authored-by: Ed Noepel <[email protected]>
Co-authored-by: Ian Harvey <[email protected]>
Co-authored-by: mwc <[email protected]>
Co-authored-by: Ian Harvey <[email protected]>
Co-authored-by: Mike Hathaway <[email protected]>
* Fix invariant setup
* Fix some unit tests
* ERC20PoolQuoteTokenTest updated
* updated ERC20PoolPurchaseQuoteTokenTest
* Fixed tests in ERC20PoolReserveAuction.t.sol
* updated ERC20PoolBorrowTest and ERC20PoolBorrowFuzzyTest
* Fix ERC20PoolCollateral and ERC20PoolInfoUtils tests
* Fixed ERC20 arbtake and depositTake tests
* Fix ERC20PoolLiquidationsKickTest, ERC20PoolLiquidationKickFuzzyTest and ERC20PoolLiquidationsLenderKickAuctionTest
* updated ERC20PoolMulticallTest
* cleaned up ERC20PoolDebtExceedsDepositTest
* fixed testTakeLoanColConstraintBpfPosNoResidual
* fixed testTakeCallerColConstraintBpfPosNoResidual
* fixed testTakeCallerColConstraintBpfPosResidual
* fixed testTakeCallerColConstraintBpfNegResidual
* fixed testTakeLoanDebtConstraintBpfPosResidual
* fixed testTakeAndSettle
* cleaned up ERC20PoolDebtExceedsDepositTest
* updated ERC20PoolPrecisionTest
* Update ERC20PoolLiquidationsSettleTest
* Update ERC20PoolLiquidationsMisc
* Update ERC20PoolLiquidationSettleFuzzyTest
* Update ERC20PoolLiquidationTakeFuzzyTest
* fixeed revert tests
* ERC20PoolLiquidationsTake -- fixed rest
* Mh update tests (#985)
* fix most position manager tests
* fix additional pm tests
* fix rewards requiredCollateralRewards setup
* fix ClaimRewards tests
* update additional rewards manager tests
* fix additional tests
* more test fixes
* commit wip bankruptcy tests
* fixed testMoveLiquidityToOverwriteBankruptBucket
* fix additional tests
* fix testMoveLiquidityWithDebtInPool
* fix remaining rewards manager tests
---------
Co-authored-by: Mike <[email protected]>
Co-authored-by: mwc <[email protected]>
* Add 1.04 factor in HTP calculations (#987)
* Add 1.04 factor in HTP calculations
* Add COLLATERALIZATION_FACTOR constant in PoolHelpers
* Add collateralization factor in dwatp
* Fix poolPricesInfo
* Update ERC20PoolBorrowFuzzyTest
* Fix some unit tests
* Fix some unit tests
* Fix some unit tests
* Update ERC20PoolTransferLPs
* fix most rewards manager tests
* update remaining rewards manager tests
* update ERC721SubsetPoolBorrowTest and commit wip changes to testMergeOrRemoveERC721Collateral
* updated testSettlePartialDebtSubsetPool (#988)
* updated testSettlePartialDebtSubsetPool
* re-added teardown
---------
Co-authored-by: Ian Harvey <[email protected]>
* fix ERC721PoolCollateral tests
* fix borrowRepayDebtFuzzy and additional PM tests
* cleaned up testBorrowAndRepayWith4DecimalQuote
---------
Co-authored-by: Mike <[email protected]>
Co-authored-by: Ian Harvey <[email protected]>
Co-authored-by: Ian Harvey <[email protected]>
* Fix some unit tests
* Deployment updates for RC8+ releases (#986)
* cherry-picked from master
* updated README
* Fix ERC721PoolLiquidationsTakeTest
* updated ERC721PoolReserveAuctionTest
* updated testMergeOrRemoveERC721Collateral (#989)
Co-authored-by: Ian Harvey <[email protected]>
* updated ERC721PoolPurchaseQuoteTest and fixed bug in ERC721 tearDown
* cleaned up testLiquidationLenderKickAuction, testLiquidationSingleBorrower, testSettleAuctionWithoutTakes
* updated testMoveLiquidityToOverwriteBankruptBucket
* updated PoolHelperTest
* cleaned up asserts in addLiquidity
* update testMoveLiquidityInBankruptBucket_LP_report_179_494
* updated ERC721PoolEMAsTest
* fixed testKickHighThresholdPriceBorrower
* updated testBorrowerInterestCalculationAfterRepayingAllDebtOnce and testBorrowerInterestCalculation
* updated testMultipleBorrowerInterestAccumulation
* Fix regression tests
* updated RE3, fixed _addQuoteToken
* addQuoteToken - return amount added (#993)
* addQuoteToken now returns amount added
* update unit tests to validate return values
* Fix up add liquidity (#992)
* cleaned up addLiquidity() method in ERC20PoolLiquidationsScaled.t.sol
* remove console
---------
Co-authored-by: Ian Harvey <[email protected]>
* fixed issue with test_regression_fenwick_index_2 in non-18-decimal env
* added regression tests for two failing reserves scenarios
* rename tests such that automake runs them with other regression tests
* UnboundedLiquidationPoolHandler bucketTake fix (#994)
* updated UnboundedLiquidationPoolHandler to handle compensated collateral in bucketTake
* cleanup, trap unhandled use case
* settle event now emits actual debt settled rather than t0 amount (#999)
* settle event now emits actual debt settled rather than t0 amount
* updated test_regression_settle_with_reserves
* Updated auctionInfo (#996)
* add thresholdPrice to auctionInfo; update test iterface usages
* temp fix tests
* remove unneeded comment
* Update auction status (#998)
* wip auction status update w/ stack too deep
* update auctionStatus; add auctionInfo method to poolInfoUtils
---------
Co-authored-by: Mike <[email protected]>
---------
Co-authored-by: Mike <[email protected]>
* updated brownie tests, removed obsolete invariant tests (#1001)
* Block addqt above auction price (#997)
* initial commit
* tweaks to Matt's PR to block adding quote token above auction price (#1000)
* reduce cost of reference price assignment
* reduce pool contract size
* fixed testDepositTakeAndSettleByRegularTakeSubsetPool
* fixed tests in ERC20PoolLiquidationsArbTake.t.sol
* fixed tests in ERC20PoolLiquidationsDepositTake.sol
* fixed two more
* updated testDepositTakeAndSettleSubsetPool
* updated testKickAndSettleSubsetPoolFractionalCollateral
* updated testSettleWithDepositFuzzy
* Fixed final tests
* add "AddAboveAuctionPrice" as expected pool error
* implemented invariant A9: reference prices in liquidation queue shall not decrease
* Update assertAuction to use ThresholdPrice from auctionInfo (#1003)
* use auctionInfo thresholdprice instead of recalculating
* fix most tests
* update remaining tests
---------
Co-authored-by: Mike <[email protected]>
* Contract size mitigation (#1004)
* moved debtInfo to PoolCommons, saving 10 bytes
* moved withdrawBonds to KickerActions
* added unit test showing adding qt above auction price reverts
* updated nit spellings
---------
Co-authored-by: mwc <[email protected]>
Co-authored-by: Ed Noepel <[email protected]>
Co-authored-by: Ed Noepel <[email protected]>
Co-authored-by: Mike Hathaway <[email protected]>
Co-authored-by: Mike <[email protected]>
Co-authored-by: Ian Harvey <[email protected]>
* Invariant testing fixes (#1006)
* initial commit
* tweaks to Matt's PR to block adding quote token above auction price (#1000)
* reduce cost of reference price assignment
* reduce pool contract size
* fixed testDepositTakeAndSettleByRegularTakeSubsetPool
* fixed tests in ERC20PoolLiquidationsArbTake.t.sol
* fixed tests in ERC20PoolLiquidationsDepositTake.sol
* fixed two more
* updated testDepositTakeAndSettleSubsetPool
* updated testKickAndSettleSubsetPoolFractionalCollateral
* updated testSettleWithDepositFuzzy
* Fixed final tests
* add "AddAboveAuctionPrice" as expected pool error
* implemented invariant A9: reference prices in liquidation queue shall not decrease
* Update assertAuction to use ThresholdPrice from auctionInfo (#1003)
* use auctionInfo thresholdprice instead of recalculating
* fix most tests
* update remaining tests
---------
Co-authored-by: Mike <[email protected]>
* Contract size mitigation (#1004)
* moved debtInfo to PoolCommons, saving 10 bytes
* moved withdrawBonds to KickerActions
* documented a sample of invariant failures in regression tests
* added unit test showing adding qt above auction price reverts
* fixed _isCollateralized bug not returning true in all 0-debt use cases
* updated nit spellings
* fixed underflow calculating kicker reward
* _repayDebtByThirdParty should check for expected pool errors
* Round down when reward kicker, round up when kicker is penalized
Fix roundings in tests
* update test comments
* fix and enable A9 invariant
---------
Co-authored-by: mwc <[email protected]>
Co-authored-by: Mike Hathaway <[email protected]>
Co-authored-by: Mike <[email protected]>
Co-authored-by: Ian Harvey <[email protected]>
Co-authored-by: grandizzy <[email protected]>
Co-authored-by: grandizzy <[email protected]>
* RC9 suggested improvements (#1005)
* Revert AuctionNotTakeable in same place, load auction kickTime only once from storage
* Calculate ERC721 collateralTaken only once
cosmetize code (read from result struct in local var and reuse)
Results in shrinking a little bit contract sizes
* Read borrower Np Tp ratio from storage only once when kick
* If block style, proper indentation
* Proposed changes to PR #972:
- avoid calculating current LUP twice in lender kick
- change _kick function to accept proposed LUP (for regular kick proposed LUP is current LUP, for lender kick proposed LUP is calculated based on additional debt)
- in both kick cases return current LUP in kick result
- reduce gas costs by saving a Fenwick traversal
- reduce contract size by removing LUP calculation within Pool
* Cosmetic flashloan code changes, PoolCommons.flashLoan doesn't return false but always reverts if flashloan fails
* PR#983 style, remove redundant line
* PR#999 suggested improvement - calculate current settled debt only once and include in settle result for state update
* PR #962 proposed changes:
- get Fenwick deposits only once when settle with reserves
- define constants for min bond factor and max npTp ratio values
* PR #987 proposed improvement:
- add and reuse _htp helper function (instead duplicated maths)
* Continuation of PR #962: (#1008)
- Record settle amount limmit in Liquidtion struct, at the time of kick (that is instead incrementing accumulator in Borrower struct, each time debt is drawn)
- This way accumulator will be reseted when auction is settled
- fix tests
TODO:
- assert Liquidation.t0ReserveSettleAmount in unit tests (_assertAuction), make sure is set to 0 after auction settled and decreased when partial settles done
- update invariant test to check new introduced accumulator
* Misc test fixes (#1009)
* handle another reward rounding error use case
* fix intermittant fuzz test failure - cannot draw debt from liquidity in bucket 7388
* PositionManager should expect AddAboveAuctionPrice, which can happen in moveLiquidity
* Invariant fix: round up quote tokens calculated from rewarded LP (because LP rewarded are calculated in bucketTake as rewarded quote tokens -> LP rounded down)
* full coverage of PermitERC20 and poolInfoUtils
* create liquidation in PoolInfoUtils test (#1015)
---------
Co-authored-by: Ed Noepel <[email protected]>
Co-authored-by: Prateek Gupta <[email protected]>
Co-authored-by: Ed Noepel <[email protected]>
Co-authored-by: Ian Harvey <[email protected]>
Co-authored-by: mwc <[email protected]>
Co-authored-by: Ian Harvey <[email protected]>
Co-authored-by: prateek105 <[email protected]>
Co-authored-by: Mike <[email protected]>
Co-authored-by: mattcushman <[email protected]>
Co-authored-by: grandizzy <[email protected]>
Co-authored-by: grandizzy <[email protected]>
* Take high price (#1016)
* Universal deposit fee (#983)
* charge fee on all deposit
* unit tests compile
* test harness updates
* working on ERC20PoolQuoteTokenTest
* removed deposit fee cap
* more work on ERC20PoolQuoteTokenTest
* do not charge deposit fee if moving liquidity to higher price
* Eliminate reserves bad debt allocation and add margin to TP (#962)
* this underflows instead of giving expected revert
* move isCollateralized check after updating borrower collateral
* remove local calculation of encumbered collateral
* trying to properly fix testBorrowRepayPrecision
* resolve rounding issue in fuzz test
* testCollateralization improvements
* updated unit tests for new _collateralization implementation
* more collateralization tests
* Add 1.04 factor in borrower collateralization
* Update nptp ratio to '1 + sqrt(r)/2'
* Remove Settle debt with pool reserves
* Remove 0.995 factor from claimable reserves calculation
* Update bond factor calculation to minimum 0.005
* added testcase where debt exceeds deposit
* updated test so debt exceeds deposit
* allow up to half of current orig fee to be used to settle bad debt
* updated testTakeAndSettle
* more test fixes
* Enabled settling with all reserves if
Deposits.treeSum==0 or 72 hrs pass
* cleanup
* Half orig fee res | Matt example (#966)
* added Matts test as proof that attack no longer works on his branch
* Revert "Remove multicall from position manager (#948)" (#961)
This reverts commit f540c8a75fe58b9fdb8249da33f271a5f0ad335c.
* added test testSpendOrigFeePushBadDebtToBorrowers test
* cleaned up testStealReservesWithMarginm to match minted balances
* responded to Matts comments
---------
Co-authored-by: Ian Harvey <[email protected]>
Co-authored-by: Mike Hathaway <[email protected]>
* Revert "Remove Settle debt with pool reserves"
This reverts commit 290d6cf6f7baa1fb17a66322faf755b78a4a379c.
* Update half origination fees reserves settlement time to 144 hours from kickTime
* Fix alignment and extra spaces
* Fix some unit tests
* PR feedback
* Update encumberance and collateralization method in poolInfoUtils
* Fix some unit tests
---------
Co-authored-by: Ed Noepel <[email protected]>
Co-authored-by: Ian Harvey <[email protected]>
Co-authored-by: mwc <[email protected]>
Co-authored-by: Ian Harvey <[email protected]>
Co-authored-by: Mike Hathaway <[email protected]>
* Fix invariant setup
* Fix some unit tests
* ERC20PoolQuoteTokenTest updated
* updated ERC20PoolPurchaseQuoteTokenTest
* Fixed tests in ERC20PoolReserveAuction.t.sol
* updated ERC20PoolBorrowTest and ERC20PoolBorrowFuzzyTest
* Fix ERC20PoolCollateral and ERC20PoolInfoUtils tests
* Fixed ERC20 arbtake and depositTake tests
* Fix ERC20PoolLiquidationsKickTest, ERC20PoolLiquidationKickFuzzyTest and ERC20PoolLiquidationsLenderKickAuctionTest
* updated ERC20PoolMulticallTest
* cleaned up ERC20PoolDebtExceedsDepositTest
* fixed testTakeLoanColConstraintBpfPosNoResidual
* fixed testTakeCallerColConstraintBpfPosNoResidual
* fixed testTakeCallerColConstraintBpfPosResidual
* fixed testTakeCallerColConstraintBpfNegResidual
* fixed testTakeLoanDebtConstraintBpfPosResidual
* fixed testTakeAndSettle
* cleaned up ERC20PoolDebtExceedsDepositTest
* updated ERC20PoolPrecisionTest
* Update ERC20PoolLiquidationsSettleTest
* Update ERC20PoolLiquidationsMisc
* Update ERC20PoolLiquidationSettleFuzzyTest
* Update ERC20PoolLiquidationTakeFuzzyTest
* fixeed revert tests
* ERC20PoolLiquidationsTake -- fixed rest
* Mh update tests (#985)
* fix most position manager tests
* fix additional pm tests
* fix rewards requiredCollateralRewards setup
* fix ClaimRewards tests
* update additional rewards manager tests
* fix additional tests
* more test fixes
* commit wip bankruptcy tests
* fixed testMoveLiquidityToOverwriteBankruptBucket
* fix additional tests
* fix testMoveLiquidityWithDebtInPool
* fix remaining rewards manager tests
---------
Co-authored-by: Mike <[email protected]>
Co-authored-by: mwc <[email protected]>
* Add 1.04 factor in HTP calculations (#987)
* Add 1.04 factor in HTP calculations
* Add COLLATERALIZATION_FACTOR constant in PoolHelpers
* Add collateralization factor in dwatp
* Fix poolPricesInfo
* Update ERC20PoolBorrowFuzzyTest
* Fix some unit tests
* Fix some unit tests
* Fix some unit tests
* Update ERC20PoolTransferLPs
* fix most rewards manager tests
* update remaining rewards manager tests
* update ERC721SubsetPoolBorrowTest and commit wip changes to testMergeOrRemoveERC721Collateral
* updated testSettlePartialDebtSubsetPool (#988)
* updated testSettlePartialDebtSubsetPool
* re-added teardown
---------
Co-authored-by: Ian Harvey <[email protected]>
* fix ERC721PoolCollateral tests
* fix borrowRepayDebtFuzzy and additional PM tests
* cleaned up testBorrowAndRepayWith4DecimalQuote
---------
Co-authored-by: Mike <[email protected]>
Co-authored-by: Ian Harvey <[email protected]>
Co-authored-by: Ian Harvey <[email protected]>
* Fix some unit tests
* Deployment updates for RC8+ releases (#986)
* cherry-picked from master
* updated README
* Fix ERC721PoolLiquidationsTakeTest
* updated ERC721PoolReserveAuctionTest
* updated testMergeOrRemoveERC721Collateral (#989)
Co-authored-by: Ian Harvey <[email protected]>
* updated ERC721PoolPurchaseQuoteTest and fixed bug in ERC721 tearDown
* cleaned up testLiquidationLenderKickAuction, testLiquidationSingleBorrower, testSettleAuctionWithoutTakes
* updated testMoveLiquidityToOverwriteBankruptBucket
* updated PoolHelperTest
* cleaned up asserts in addLiquidity
* update testMoveLiquidityInBankruptBucket_LP_report_179_494
* updated ERC721PoolEMAsTest
* fixed testKickHighThresholdPriceBorrower
* updated testBorrowerInterestCalculationAfterRepayingAllDebtOnce and testBorrowerInterestCalculation
* updated testMultipleBorrowerInterestAccumulation
* Fix regression tests
* updated RE3, fixed _addQuoteToken
* addQuoteToken - return amount added (#993)
* addQuoteToken now returns amount added
* update unit tests to validate return values
* Fix up add liquidity (#992)
* cleaned up addLiquidity() method in ERC20PoolLiquidationsScaled.t.sol
* remove console
---------
Co-authored-by: Ian Harvey <[email protected]>
* fixed issue with test_regression_fenwick_index_2 in non-18-decimal env
* added regression tests for two failing reserves scenarios
* rename tests such that automake runs them with other regression tests
* UnboundedLiquidationPoolHandler bucketTake fix (#994)
* updated UnboundedLiquidationPoolHandler to handle compensated collateral in bucketTake
* cleanup, trap unhandled use case
* settle event now emits actual debt settled rather than t0 amount (#999)
* settle event now emits actual debt settled rather than t0 amount
* updated test_regression_settle_with_reserves
* Updated auctionInfo (#996)
* add thresholdPrice to auctionInfo; update test iterface usages
* temp fix tests
* remove unneeded comment
* Update auction status (#998)
* wip auction status update w/ stack too deep
* update auctionStatus; add auctionInfo method to poolInfoUtils
---------
Co-authored-by: Mike <[email protected]>
---------
Co-authored-by: Mike <[email protected]>
* updated brownie tests, removed obsolete invariant tests (#1001)
* Block addqt above auction price (#997)
* initial commit
* tweaks to Matt's PR to block adding quote token above auction price (#1000)
* reduce cost of reference price assignment
* reduce pool contract size
* fixed testDepositTakeAndSettleByRegularTakeSubsetPool
* fixed tests in ERC20PoolLiquidationsArbTake.t.sol
* fixed tests in ERC20PoolLiquidationsDepositTake.sol
* fixed two more
* updated testDepositTakeAndSettleSubsetPool
* updated testKickAndSettleSubsetPoolFractionalCollateral
* updated testSettleWithDepositFuzzy
* Fixed final tests
* add "AddAboveAuctionPrice" as expected pool error
* implemented invariant A9: reference prices in liquidation queue shall not decrease
* Update assertAuction to use ThresholdPrice from auctionInfo (#1003)
* use auctionInfo thresholdprice instead of recalculating
* fix most tests
* update remaining tests
---------
Co-authored-by: Mike <[email protected]>
* Contract size mitigation (#1004)
* moved debtInfo to PoolCommons, saving 10 bytes
* moved withdrawBonds to KickerActions
* added unit test showing adding qt above auction price reverts
* updated nit spellings
---------
Co-authored-by: mwc <[email protected]>
Co-authored-by: Ed Noepel <[email protected]>
Co-authored-by: Ed Noepel <[email protected]>
Co-authored-by: Mike Hathaway <[email protected]>
Co-authored-by: Mike <[email protected]>
Co-authored-by: Ian Harvey <[email protected]>
* Invariant testing fixes (#1006)
* initial commit
* tweaks to Matt's PR to block adding quote token above auction price (#1000)
* reduce cost of reference price assignment
* reduce pool contract size
* fixed testDepositTakeAndSettleByRegularTakeSubsetPool
* fixed tests in ERC20PoolLiquidationsArbTake.t.sol
* fixed tests in ERC20PoolLiquidationsDepositTake.sol
* fixed two more
* updated testDepositTakeAndSettleSubsetPool
* updated testKickAndSettleSubsetPoolFractionalCollateral
* updated testSettleWithDepositFuzzy
* Fixed final tests
* add "AddAboveAuctionPrice" as expected pool error
* implemented invariant A9: reference prices in liquidation queue shall not decrease
* Update assertAuction to use ThresholdPrice from auctionInfo (#1003)
* use auctionInfo thresholdprice instead of recalculating
* fix most tests
* update remaining tests
---------
Co-authored-by: Mike <[email protected]>
* Contract size mitigation (#1004)
* moved debtInfo to PoolCommons, saving 10 bytes
* moved withdrawBonds to KickerActions
* documented a sample of invariant failures in regression tests
* added unit test showing adding qt above auction price reverts
* fixed _isCollateralized bug not returning true in all 0-debt use cases
* updated nit spellings
* fixed underflow calculating kicker reward
* _repayDebtByThirdParty should check for expected pool errors
* Round down when reward kicker, round up when kicker is penalized
Fix roundings in tests
* update test comments
* fix and enable A9 invariant
---------
Co-authored-by: mwc <[email protected]>
Co-authored-by: Mike Hathaway <[email protected]>
Co-authored-by: Mike <[email protected]>
Co-authored-by: Ian Harvey <[email protected]>
Co-authored-by: grandizzy <[email protected]>
Co-authored-by: grandizzy <[email protected]>
* RC9 suggested improvements (#1005)
* Revert AuctionNotTakeable in same place, load auction kickTime only once from storage
* Calculate ERC721 collateralTaken only once
cosmetize code (read from result struct in local var and reuse)
Results in shrinking a little bit contract sizes
* Read borrower Np Tp ratio from storage only once when kick
* If block style, proper indentation
* Proposed changes to PR #972:
- avoid calculating current LUP twice in lender kick
- change _kick function to accept proposed LUP (for regular kick proposed LUP is current LUP, for lender kick proposed LUP is calculated based on additional debt)
- in both kick cases return current LUP in kick result
- reduce gas costs by saving a Fenwick traversal
- reduce contract size by removing LUP calculation within Pool
* Cosmetic flashloan code changes, PoolCommons.flashLoan doesn't return false but always reverts if flashloan fails
* PR#983 style, remove redundant line
* PR#999 suggested improvement - calculate current settled debt only once and include in settle result for state update
* PR #962 proposed changes:
- get Fenwick deposits only once when settle with reserves
- define constants for min bond factor and max npTp ratio values
* PR #987 proposed improvement:
- add and reuse _htp helper function (instead duplicated maths)
* Continuation of PR #962: (#1008)
- Record settle amount limmit in Liquidtion struct, at the time of kick (that is instead incrementing accumulator in Borrower struct, each time debt is drawn)
- This way accumulator will be reseted when auction is settled
- fix tests
TODO:
- assert Liquidation.t0ReserveSettleAmount in unit tests (_assertAuction), make sure is set to 0 after auction settled and decreased when partial settles done
- update invariant test to check new introduced accumulator
* Misc test fixes (#1009)
* handle another reward rounding error use case
* fix intermittant fuzz test failure - cannot draw debt from liquidity in bucket 7388
* PositionManager should expect AddAboveAuctionPrice, which can happen in moveLiquidity
* Invariant fix: round up quote tokens calculated from rewarded LP (because LP rewarded are calculated in bucketTake as rewarded quote tokens -> LP rounded down)
* initial commit
* cleaned up, its executing
* updated
* rough draft of tests written
* cleaned up examples added collateral asserts
* borrower change not needed in PR
* added new class inside ERC721PoolLiquidationsTake.t.sol
* updated tests to adjust for take event
---------
Co-authored-by: Ed Noepel <[email protected]>
Co-authored-by: Prateek Gupta <[email protected]>
Co-authored-by: Ed Noepel <[email protected]>
Co-authored-by: Ian Harvey <[email protected]>
Co-authored-by: mwc <[email protected]>
Co-authored-by: Mike Hathaway <[email protected]>
Co-authored-by: prateek105 <[email protected]>
Co-authored-by: Mike <[email protected]>
Co-authored-by: mattcushman <[email protected]>
Co-authored-by: grandizzy <[email protected]>
Co-authored-by: grandizzy <[email protected]>
* Emit subset hash on pool creation (#1029)
* updated unit tests following merge of PR#1013 (#1030)
* Continuation of #1021 - clear TP naming and improved code descriptions (#1027)
* Continuation of #1021 - better naming and improved code descriptions
- change Loan.thresholdPrice and Liquidation.thresholdPrice to unadjustedThresholdPrice naming in order to reflect Collateral factor not applied to these values
- reflect in var names where max unadjusted threshold price is used (Move/Remove param struct)
- natspec update
- rename MAX_NP_TP_RATIO to MAX_BOND_FACTOR
* clear Tp naming
- t0DebtToCollateral : ( t0Debt / collateral )
- debtToCollateral : ( debt / collateral )
- t0ThresholdPrice : ( t0Debt / collateral ) * collateralization factor
- thresholdPrice : ( debt / collateral ) * collateralization factor
* Fix HeapTest
* Update LoansInfo and LoanInfo methods to return maxT0DebtToCollateral and t0DebtToCollateral
* Fix unit tests
* Update assertLoans in tests and fix htp in BaseHandler
* Update loansInfo and threshold Price in Loans library
* Rename thresholdPrice to debtToCollateral in assertAuction in tests
* updated zerothresholdprice error to zerodebttocollateral
* removed unused _htp import in pool.sol
* updated invariants to include ZeroDebtToCollateral
* Use SafeCast in Loans library
---------
Co-authored-by: prateek105 <[email protected]>
Co-authored-by: Ian Harvey <[email protected]>
* Fix unit test (#1034)
* `_revertIfActiveAuctions` helper should revert with `ActiveAuction` error (#1031)
* _revertIfActiveAuctions helper should revert with ActiveAuction error
* Fix comment
* added min protection to restrict underflow on `bucketTake` (#1033)
* added min protection to restrict ability to underflow
* updated repay
---------
Co-authored-by: Ian Harvey <[email protected]>
* Calculate reserve auction price using kicked amount (#1032)
* implement reserve auction pricing as originally described in whitepaper
* bug fixes
* wip updating RewardsManager tests
* disable rewards unit tests
* handle 0 bids on reserve auctions
* updated erc721 reserve auction unit tests
* fixed issue bidding on more than the quote token trading increment
* updated new unit test
* added tearDown to testZeroBid
* removed rayToWad
---------
Co-authored-by: Ian Harvey <[email protected]>
* Modify computation of quotetoken amount in TakerActions.sol (#1035)
* test_regression_exchange_rate_failure
* Modify computation of quotetoken amount in TakerActions.sol
to compute bond reward accurately for collateral constrained
takes with collateral tokens with decimals != 18.
* Fix tests (#1036)
* updated baseline
---------
Co-authored-by: Ed Noepel <[email protected]>
Co-authored-by: mwc <[email protected]>
Co-authored-by: grandizzy <[email protected]>
* Invariants improvements (#955)
* Fix test_regression_failure_A8_5
* Remove repayDebtByThirdParty handler in SettleERC20PoolHandler, as repayment for borrower in auction is restricted
* Add failing regression test_regression_bucket_take_arithmetic_over_underflow
* Fix test_regression_bucket_take_arithmetic_over_underflow
* Invariant RE9 improvement
* Add failing regression test_regression_bucket_take_reserves_failure
* Fix test_regression_bucket_take_reserves_failure
* Add failing regression test_regression_bucket_take_re9_failure
* Move failing regression tests to RegressionTestReservesWith8QuotePrecision12CollateralPrecisionERC20Pool
* Fix test_regression_bucket_take_re9_failure
* Fix regression tests failing due to reserve error margin calculation when auction price is 0
* Universal deposit fee (#983)
* charge fee on all deposit
* unit tests compile
* test harness updates
* working on ERC20PoolQuoteTokenTest
* removed deposit fee cap
* more work on ERC20PoolQuoteTokenTest
* do not charge deposit fee if moving liquidity to higher price
* Eliminate reserves bad debt allocation and add margin to TP (#962)
* this underflows instead of giving expected revert
* move isCollateralized check after updating borrower collateral
* remove local calculation of encumbered collateral
* trying to properly fix testBorrowRepayPrecision
* resolve rounding issue in fuzz test
* testCollateralization improvements
* updated unit tests for new _collateralization implementation
* more collateralization tests
* Add 1.04 factor in borrower collateralization
* Update nptp ratio to '1 + sqrt(r)/2'
* Remove Settle debt with pool reserves
* Remove 0.995 factor from claimable reserves calculation
* Update bond factor calculation to minimum 0.005
* added testcase where debt exceeds deposit
* updated test so debt exceeds deposit
* allow up to half of current orig fee to be used to settle bad debt
* updated testTakeAndSettle
* more test fixes
* Enabled settling with all reserves if
Deposits.treeSum==0 or 72 hrs pass
* cleanup
* Half orig fee res | Matt example (#966)
* added Matts test as proof that attack no longer works on his branch
* Revert "Remove multicall from position manager (#948)" (#961)
This reverts commit f540c8a75fe58b9fdb8249da33f271a5f0ad335c.
* added test testSpendOrigFeePushBadDebtToBorrowers test
* cleaned up testStealReservesWithMarginm to match minted balances
* responded to Matts comments
---------
Co-authored-by: Ian Harvey <[email protected]>
Co-authored-by: Mike Hathaway <[email protected]>
* Revert "Remove Settle debt with pool reserves"
This reverts commit 290d6cf6f7baa1fb17a66322faf755b78a4a379c.
* Update half origination fees reserves settlement time to 144 hours from kickTime
* Fix alignment and extra spaces
* Fix some unit tests
* PR feedback
* Update encumberance and collateralization method in poolInfoUtils
* Fix some unit tests
---------
Co-authored-by: Ed Noepel <[email protected]>
Co-authored-by: Ian Harvey <[email protected]>
Co-authored-by: mwc <[email protected]>
Co-authored-by: Ian Harvey <[email protected]>
Co-authored-by: Mike Hathaway <[email protected]>
* Fix invariant setup
* Fix some unit tests
* ERC20PoolQuoteTokenTest updated
* updated ERC20PoolPurchaseQuoteTokenTest
* Fixed tests in ERC20PoolReserveAuction.t.sol
* updated ERC20PoolBorrowTest and ERC20PoolBorrowFuzzyTest
* Fix ERC20PoolCollateral and ERC20PoolInfoUtils tests
* Fixed ERC20 arbtake and depositTake tests
* Fix ERC20PoolLiquidationsKickTest, ERC20PoolLiquidationKickFuzzyTest and ERC20PoolLiquidationsLenderKickAuctionTest
* updated ERC20PoolMulticallTest
* cleaned up ERC20PoolDebtExceedsDepositTest
* fixed testTakeLoanColConstraintBpfPosNoResidual
* fixed testTakeCallerColConstraintBpfPosNoResidual
* fixed testTakeCallerColConstraintBpfPosResidual
* fixed testTakeCallerColConstraintBpfNegResidual
* fixed testTakeLoanDebtConstraintBpfPosResidual
* fixed testTakeAndSettle
* cleaned up ERC20PoolDebtExceedsDepositTest
* updated ERC20PoolPrecisionTest
* Update ERC20PoolLiquidationsSettleTest
* Update ERC20PoolLiquidationsMisc
* Update ERC20PoolLiquidationSettleFuzzyTest
* Update ERC20PoolLiquidationTakeFuzzyTest
* fixeed revert tests
* ERC20PoolLiquidationsTake -- fixed rest
* Mh update tests (#985)
* fix most position manager tests
* fix additional pm tests
* fix rewards requiredCollateralRewards setup
* fix ClaimRewards tests
* update additional rewards manager tests
* fix additional tests
* more test fixes
* commit wip bankruptcy tests
* fixed testMoveLiquidityToOverwriteBankruptBucket
* fix additional tests
* fix testMoveLiquidityWithDebtInPool
* fix remaining rewards manager tests
---------
Co-authored-by: Mike <[email protected]>
Co-authored-by: mwc <[email protected]>
* Add 1.04 factor in HTP calculations (#987)
* Add 1.04 factor in HTP calculations
* Add COLLATERALIZATION_FACTOR constant in PoolHelpers
* Add collateralization factor in dwatp
* Fix poolPricesInfo
* Update ERC20PoolBorrowFuzzyTest
* Fix some unit tests
* Fix some unit tests
* Fix some unit tests
* Update ERC20PoolTransferLPs
* fix most rewards manager tests
* update remaining rewards manager tests
* update ERC721SubsetPoolBorrowTest and commit wip changes to testMergeOrRemoveERC721Collateral
* updated testSettlePartialDebtSubsetPool (#988)
* updated testSettlePartialDebtSubsetPool
* re-added teardown
---------
Co-authored-by: Ian Harvey <[email protected]>
* fix ERC721PoolCollateral tests
* fix borrowRepayDebtFuzzy and additional PM tests
* cleaned up testBorrowAndRepayWith4DecimalQuote
---------
Co-authored-by: Mike <[email protected]>
Co-authored-by: Ian Harvey <[email protected]>
Co-author…1 parent 4313584 commit 2d6bbcb
File tree
163 files changed
+12857
-14532
lines changed- .github
- workflows
- src
- base
- interfaces
- pool
- commons
- erc721
- position
- rewards
- libraries
- external
- helpers
- internal
- tests
- brownie
- forge
- interactions
- invariants
- ERC20Pool/handlers
- unbounded
- ERC721Pool
- handlers
- unbounded
- PositionManager
- handlers
- unbounded
- PositionsAndRewards
- handlers
- unbounded
- base
- handlers
- unbounded
- interfaces
- regression
- ERC20Pool
- ERC721Pool
- PositionAndRewards
- PositionManager
- unit
- ERC20Pool
- ERC721Pool
- PositionManager
- Rewards
- utils
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
163 files changed
+12857
-14532
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
1 | 2 | | |
2 | | - | |
3 | | - | |
4 | | - | |
5 | | - | |
6 | | - | |
7 | | - | |
8 | | - | |
9 | | - | |
| 3 | + | |
| 4 | + | |
10 | 5 | | |
11 | | - | |
12 | | - | |
13 | | - | |
14 | | - | |
15 | | - | |
16 | | - | |
17 | | - | |
| 6 | + | |
18 | 7 | | |
19 | | - | |
20 | | - | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
21 | 11 | | |
22 | | - | |
23 | | - | |
24 | | - | |
| 12 | + | |
25 | 13 | | |
26 | | - | |
27 | | - | |
28 | | - | |
29 | | - | |
30 | | - | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
31 | 17 | | |
32 | | - | |
33 | | - | |
34 | | - | |
35 | | - | |
36 | | - | |
| 18 | + | |
37 | 19 | | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
8 | 8 | | |
9 | 9 | | |
10 | 10 | | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
11 | 16 | | |
12 | 17 | | |
13 | 18 | | |
| |||
38 | 43 | | |
39 | 44 | | |
40 | 45 | | |
41 | | - | |
42 | | - | |
43 | | - | |
44 | | - | |
45 | | - | |
46 | | - | |
47 | 46 | | |
48 | 47 | | |
49 | 48 | | |
| |||
52 | 51 | | |
53 | 52 | | |
54 | 53 | | |
55 | | - | |
| 54 | + | |
56 | 55 | | |
57 | 56 | | |
58 | 57 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
29 | 29 | | |
30 | 30 | | |
31 | 31 | | |
32 | | - | |
33 | | - | |
34 | 32 | | |
35 | 33 | | |
36 | 34 | | |
| |||
54 | 52 | | |
55 | 53 | | |
56 | 54 | | |
57 | | - | |
58 | 55 | | |
59 | 56 | | |
60 | 57 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
203 | 203 | | |
204 | 204 | | |
205 | 205 | | |
206 | | - | |
| 206 | + | |
207 | 207 | | |
208 | 208 | | |
209 | 209 | | |
| |||
221 | 221 | | |
222 | 222 | | |
223 | 223 | | |
224 | | - | |
| 224 | + | |
225 | 225 | | |
226 | 226 | | |
227 | 227 | | |
228 | 228 | | |
229 | 229 | | |
230 | 230 | | |
231 | 231 | | |
232 | | - | |
| 232 | + | |
233 | 233 | | |
234 | 234 | | |
235 | 235 | | |
| |||
238 | 238 | | |
239 | 239 | | |
240 | 240 | | |
241 | | - | |
| 241 | + | |
242 | 242 | | |
243 | 243 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
221 | 221 | | |
222 | 222 | | |
223 | 223 | | |
224 | | - | |
225 | | - | |
| 224 | + | |
226 | 225 | | |
227 | 226 | | |
228 | 227 | | |
229 | 228 | | |
230 | 229 | | |
| 230 | + | |
| 231 | + | |
231 | 232 | | |
232 | 233 | | |
233 | 234 | | |
| |||
239 | 240 | | |
240 | 241 | | |
241 | 242 | | |
242 | | - | |
| 243 | + | |
243 | 244 | | |
244 | 245 | | |
245 | 246 | | |
246 | 247 | | |
247 | | - | |
| 248 | + | |
248 | 249 | | |
249 | 250 | | |
250 | 251 | | |
| |||
253 | 254 | | |
254 | 255 | | |
255 | 256 | | |
256 | | - | |
257 | | - | |
258 | 257 | | |
259 | 258 | | |
260 | 259 | | |
| |||
345 | 344 | | |
346 | 345 | | |
347 | 346 | | |
348 | | - | |
| 347 | + | |
349 | 348 | | |
350 | 349 | | |
351 | 350 | | |
| |||
363 | 362 | | |
364 | 363 | | |
365 | 364 | | |
| 365 | + | |
| 366 | + | |
| 367 | + | |
366 | 368 | | |
367 | 369 | | |
368 | 370 | | |
| |||
401 | 403 | | |
402 | 404 | | |
403 | 405 | | |
404 | | - | |
| 406 | + | |
| 407 | + | |
| 408 | + | |
405 | 409 | | |
406 | 410 | | |
407 | 411 | | |
408 | | - | |
| 412 | + | |
409 | 413 | | |
410 | 414 | | |
411 | 415 | | |
412 | 416 | | |
413 | 417 | | |
414 | 418 | | |
415 | | - | |
416 | | - | |
417 | 419 | | |
418 | 420 | | |
419 | 421 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
75 | 75 | | |
76 | 76 | | |
77 | 77 | | |
78 | | - | |
| 78 | + | |
79 | 79 | | |
80 | 80 | | |
81 | 81 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
236 | 236 | | |
237 | 237 | | |
238 | 238 | | |
239 | | - | |
240 | | - | |
| 239 | + | |
241 | 240 | | |
242 | 241 | | |
243 | 242 | | |
244 | 243 | | |
245 | 244 | | |
| 245 | + | |
| 246 | + | |
246 | 247 | | |
247 | 248 | | |
248 | 249 | | |
| |||
257 | 258 | | |
258 | 259 | | |
259 | 260 | | |
260 | | - | |
| 261 | + | |
261 | 262 | | |
262 | 263 | | |
263 | 264 | | |
264 | 265 | | |
265 | | - | |
| 266 | + | |
266 | 267 | | |
267 | 268 | | |
268 | 269 | | |
269 | 270 | | |
270 | 271 | | |
271 | | - | |
272 | | - | |
273 | 272 | | |
274 | 273 | | |
275 | 274 | | |
| |||
344 | 343 | | |
345 | 344 | | |
346 | 345 | | |
347 | | - | |
348 | 346 | | |
349 | 347 | | |
350 | 348 | | |
| |||
394 | 392 | | |
395 | 393 | | |
396 | 394 | | |
397 | | - | |
| 395 | + | |
398 | 396 | | |
399 | 397 | | |
400 | 398 | | |
| |||
417 | 415 | | |
418 | 416 | | |
419 | 417 | | |
| 418 | + | |
| 419 | + | |
| 420 | + | |
420 | 421 | | |
421 | 422 | | |
422 | 423 | | |
| |||
449 | 450 | | |
450 | 451 | | |
451 | 452 | | |
| 453 | + | |
452 | 454 | | |
453 | 455 | | |
454 | 456 | | |
455 | | - | |
| 457 | + | |
456 | 458 | | |
457 | 459 | | |
458 | 460 | | |
| |||
473 | 475 | | |
474 | 476 | | |
475 | 477 | | |
476 | | - | |
477 | | - | |
478 | 478 | | |
479 | 479 | | |
480 | 480 | | |
| |||
615 | 615 | | |
616 | 616 | | |
617 | 617 | | |
618 | | - | |
619 | | - | |
| 618 | + | |
| 619 | + | |
620 | 620 | | |
621 | 621 | | |
622 | 622 | | |
623 | | - | |
624 | | - | |
| 623 | + | |
| 624 | + | |
625 | 625 | | |
626 | 626 | | |
627 | 627 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
85 | 85 | | |
86 | 86 | | |
87 | 87 | | |
88 | | - | |
| 88 | + | |
89 | 89 | | |
90 | 90 | | |
91 | 91 | | |
| |||
0 commit comments