Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* 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-authored…
- Loading branch information