From 8f9db7097ed819be0903d3ced4120e748fe16b2d Mon Sep 17 00:00:00 2001 From: grandizzy <38490174+grandizzy@users.noreply.github.com> Date: Thu, 21 Dec 2023 19:08:39 +0200 Subject: [PATCH 1/3] Continuation of PR #1040 - code cleanup and comments (#1048) * Continuation of PR #1040 - code cleanup and comments - remove unused errors from Kicker and Taker actions libraries - improve natspec with revert error on CRA * Update Pool natspec --- src/base/Pool.sol | 1 + src/libraries/external/KickerActions.sol | 3 +-- src/libraries/external/TakerActions.sol | 4 +--- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/base/Pool.sol b/src/base/Pool.sol index df23f08e2..8d66973f3 100644 --- a/src/base/Pool.sol +++ b/src/base/Pool.sol @@ -394,6 +394,7 @@ abstract contract Pool is Clone, ReentrancyGuard, Multicall, IPool { * @dev increment `latestBurnEpoch` counter * @dev update `reserveAuction.latestBurnEventEpoch` and burn event `timestamp` state * @dev === Reverts on === + * @dev no reserves to claim `NoReserves()` * @dev 5 days not passed `ReserveAuctionTooSoon()` * @dev unsettled liquidation `AuctionActive()` * @dev === Emit events === diff --git a/src/libraries/external/KickerActions.sol b/src/libraries/external/KickerActions.sol index 9570cab35..5f219118b 100644 --- a/src/libraries/external/KickerActions.sol +++ b/src/libraries/external/KickerActions.sol @@ -96,8 +96,6 @@ library KickerActions { error AuctionActive(); error BorrowerOk(); error InsufficientLiquidity(); - error InsufficientLP(); - error InvalidAmount(); error NoReserves(); error PriceBelowLUP(); error ReserveAuctionTooSoon(); @@ -210,6 +208,7 @@ library KickerActions { * @dev update `reserveAuction.kicked` timestamp state * @dev === Reverts on === * @dev no reserves to claim `NoReserves()` + * @dev 5 days not passed `ReserveAuctionTooSoon()` * @dev === Emit events === * @dev - `KickReserveAuction` */ diff --git a/src/libraries/external/TakerActions.sol b/src/libraries/external/TakerActions.sol index 50847bb87..debb5c9cf 100644 --- a/src/libraries/external/TakerActions.sol +++ b/src/libraries/external/TakerActions.sol @@ -117,9 +117,7 @@ library TakerActions { error InsufficientCollateral(); error InvalidAmount(); error NoAuction(); - error NoReserves(); error NoReservesAuction(); - error ReserveAuctionTooSoon(); /***************************/ /*** External Functions ***/ @@ -273,7 +271,7 @@ library TakerActions { * @dev === Write state === * @dev decrement `reserveAuction.unclaimed` accumulator * @dev === Reverts on === - * @dev not kicked or `72` hours didn't pass `NoReservesAuction()` + * @dev not kicked or `72` hours passed `NoReservesAuction()` * @dev 0 take amount or 0 AJNA burned `InvalidAmount()` * @dev === Emit events === * @dev - `ReserveAuction` From 7578280e426c9bb5566dfd980bb2281fd6be000a Mon Sep 17 00:00:00 2001 From: grandizzy <38490174+grandizzy@users.noreply.github.com> Date: Wed, 27 Dec 2023 16:14:14 +0200 Subject: [PATCH 2/3] Fix slither CI - install forge in flow to compile (#1051) * Fix slither CI - install forge to be able to compile * Fix slither for external libraries, remove unused IERC20Token.transfer* functions to fix https://github.com/crytic/slither/wiki/Detector-Documentation#incorrect-erc20-interface warning --- .github/workflows/slither.yml | 7 ++++++- src/interfaces/pool/IPool.sol | 6 ------ 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/.github/workflows/slither.yml b/.github/workflows/slither.yml index 16da76741..d6fcb869d 100644 --- a/.github/workflows/slither.yml +++ b/.github/workflows/slither.yml @@ -8,6 +8,11 @@ jobs: with: submodules: recursive + - name: Install Foundry + uses: foundry-rs/foundry-toolchain@v1 + with: + version: nightly + - name: Install and set solc version run: | pip install solc-select && solc-select install 0.8.18 && solc-select use 0.8.18 @@ -46,7 +51,7 @@ jobs: - name: Analyze Libraries run: | - slither src/libraries/external/. + slither src/libraries/external/ continue-on-error: true id: libraries-analyzer diff --git a/src/interfaces/pool/IPool.sol b/src/interfaces/pool/IPool.sol index 7cb8c6c66..3d7d12ba9 100644 --- a/src/interfaces/pool/IPool.sol +++ b/src/interfaces/pool/IPool.sol @@ -44,12 +44,6 @@ interface IERC20Token { function balanceOf(address account) external view returns (uint256); function burn(uint256 amount) external; function decimals() external view returns (uint8); - function transfer(address to, uint256 amount) external returns (bool); - function transferFrom( - address from, - address to, - uint256 amount - ) external returns (bool); } /// @dev `ERC721` token interface. From e39f93af631833662ca8b1eb995a0834a013c94f Mon Sep 17 00:00:00 2001 From: Prateek Gupta Date: Thu, 28 Dec 2023 00:08:45 +0530 Subject: [PATCH 3/3] Revert with `InvalidAmount` if unscaled amount to add / remove in `Deposit` library (#1049) * add test_regression_B2_failure_moveQuote test * Revert when unscaled quote token amount to move is 0 * Remove redundant import * Update natspec doc * Add 'InvalidAmount' revert in Deposits library when amount to add / remove is zero, add check to remove only non-zero deposits in settleActions * added comment to test * added min protection to restrict underflow and cleaned up comments in settle flows * revised imp per Dizzy's request * comment clean up --------- Co-authored-by: grandizzy Co-authored-by: Ian Harvey --- src/libraries/external/LenderActions.sol | 11 +- src/libraries/external/SettlerActions.sol | 13 +- src/libraries/external/TakerActions.sol | 2 + src/libraries/internal/Deposits.sol | 19 + .../RegressionTestReservesERC20Pool.t.sol | 374 ++++++++++++++++++ tests/forge/utils/FenwickTreeInstance.sol | 11 +- 6 files changed, 413 insertions(+), 17 deletions(-) diff --git a/src/libraries/external/LenderActions.sol b/src/libraries/external/LenderActions.sol index 5e373af14..bc4242072 100644 --- a/src/libraries/external/LenderActions.sol +++ b/src/libraries/external/LenderActions.sol @@ -187,11 +187,7 @@ library LenderActions { // revert if (due to rounding) the awarded LP is 0 if (bucketLP_ == 0) revert InsufficientLP(); - uint256 unscaledAmount = Maths.wdiv(addedAmount_, bucketScale); - // revert if unscaled amount is 0 - if (unscaledAmount == 0) revert InvalidAmount(); - - Deposits.unscaledAdd(deposits_, params_.index, unscaledAmount); + Deposits.unscaledAdd(deposits_, params_.index, Maths.wdiv(addedAmount_, bucketScale)); // update lender LP Buckets.addLenderLP(bucket, bankruptcyTime, msg.sender, bucketLP_); @@ -227,6 +223,7 @@ library LenderActions { * @dev dust amount `DustAmountNotExceeded()` * @dev invalid index `InvalidIndex()` * @dev no LP awarded in to bucket `InsufficientLP()` + * @dev calculated unscaled amount to move is 0 `InvalidAmount()` * @dev === Emit events === * @dev - `BucketBankruptcy` * @dev - `MoveQuoteToken` @@ -735,7 +732,7 @@ library LenderActions { * @dev update `values` array state * @dev === Reverts on === * @dev no `LP` redeemed `InsufficientLP()` - * @dev no unscaled amount removed` `InvalidAmount()` + * @dev no unscaled amount removed `InvalidAmount()` * @return removedAmount_ Amount of scaled deposit removed. * @return redeemedLP_ Amount of bucket `LP` corresponding for calculated scaled deposit amount. * @return unscaledRemaining_ Amount of unscaled deposit remaining. @@ -824,8 +821,6 @@ library LenderActions { // revert if (due to rounding) required LP is 0 if (redeemedLP_ == 0) revert InsufficientLP(); - // revert if calculated amount of quote to remove is 0 - if (unscaledRemovedAmount == 0) revert InvalidAmount(); // update FenwickTree Deposits.unscaledRemove(deposits_, params_.index, unscaledRemovedAmount); diff --git a/src/libraries/external/SettlerActions.sol b/src/libraries/external/SettlerActions.sol index 7d3fc2fe1..1458c08d7 100644 --- a/src/libraries/external/SettlerActions.sol +++ b/src/libraries/external/SettlerActions.sol @@ -405,7 +405,8 @@ library SettlerActions { vars.hpbUnscaledDeposit -= vars.unscaledDeposit; // remove amount to settle debt from bucket (could be entire deposit or only the settled debt) - Deposits.unscaledRemove(deposits_, vars.index, vars.unscaledDeposit); + // when unscaledDeposit == 0 the amount of debt is very small and worth forgiving versus having settle revert + if (vars.unscaledDeposit != 0) Deposits.unscaledRemove(deposits_, vars.index, vars.unscaledDeposit); // check if bucket healthy - set bankruptcy if collateral is 0 and entire deposit was used to settle and there's still LP if (vars.hpbCollateral == 0 && vars.hpbUnscaledDeposit == 0 && vars.hpbLP != 0) { @@ -476,11 +477,12 @@ library SettlerActions { // no remaining debt to forgive remainingt0Debt_ = 0; - uint256 depositUsed = Maths.wdiv(debt, scale); - depositRemaining = unscaledDeposit - depositUsed; + uint256 depositUsed = Maths.min(Maths.wdiv(debt, scale), unscaledDeposit); + depositRemaining = unscaledDeposit - depositUsed; // Remove deposit used to forgive bad debt from bucket - Deposits.unscaledRemove(deposits_, index, depositUsed); + // when depositUsed == 0 the amount of debt is very small and worth forgiving versus having settle revert + if (depositUsed != 0) Deposits.unscaledRemove(deposits_, index, depositUsed); // 2) loan debt to settle exceeds bucket deposit, bucket deposit is the constraint } else { @@ -488,7 +490,8 @@ library SettlerActions { remainingt0Debt_ -= Maths.floorWdiv(depositToRemove, inflator_); // Remove all deposit from bucket - Deposits.unscaledRemove(deposits_, index, unscaledDeposit); + // when unscaledDeposit == 0 the amount of debt is very small and worth forgiving versus having settle revert + if (unscaledDeposit != 0) Deposits.unscaledRemove(deposits_, index, unscaledDeposit); } Bucket storage hpbBucket = buckets_[index]; diff --git a/src/libraries/external/TakerActions.sol b/src/libraries/external/TakerActions.sol index debb5c9cf..3be037bab 100644 --- a/src/libraries/external/TakerActions.sol +++ b/src/libraries/external/TakerActions.sol @@ -590,6 +590,8 @@ library TakerActions { * @dev - increment `bucket.collateral` and `bucket.lps` accumulator * @dev === Emit events === * @dev - `BucketTakeLPAwarded` + * @dev === Reverts on === + * @dev calculated unscaled amount to remove is 0 `InvalidAmount()` * @param auctions_ Struct for pool auctions state. * @param deposits_ Struct for pool deposits state. * @param buckets_ Struct for pool buckets state. diff --git a/src/libraries/internal/Deposits.sol b/src/libraries/internal/Deposits.sol index 428997f05..6b2f0bedb 100644 --- a/src/libraries/internal/Deposits.sol +++ b/src/libraries/internal/Deposits.sol @@ -20,9 +20,18 @@ library Deposits { /// @dev Max index supported in the `Fenwick` tree uint256 internal constant SIZE = 8192; + /**************/ + /*** Errors ***/ + /**************/ + + // See `IPoolErrors` for descriptions + error InvalidAmount(); + /** * @notice Increase a value in the FenwickTree at an index. * @dev Starts at leaf/target and moved up towards root + * @dev === Reverts on === + * @dev unscaled amount to add is 0 `InvalidAmount()` * @param deposits_ Deposits state struct. * @param index_ The deposit index. * @param unscaledAddAmount_ The unscaled amount to increase deposit by. @@ -32,6 +41,10 @@ library Deposits { uint256 index_, uint256 unscaledAddAmount_ ) internal { + + // revert if 0 amount is added. + if (unscaledAddAmount_ == 0) revert InvalidAmount(); + // price buckets are indexed starting at 0, Fenwick bit logic is more elegant starting at 1 ++index_; @@ -289,6 +302,8 @@ library Deposits { /** * @notice Decrease a node in the `FenwickTree` at an index. * @dev Starts at leaf/target and moved up towards root. + * @dev === Reverts on === + * @dev unscaled amount to remove is 0 `InvalidAmount()` * @param deposits_ Deposits state struct. * @param index_ The deposit index. * @param unscaledRemoveAmount_ Unscaled amount to decrease deposit by. @@ -298,6 +313,10 @@ library Deposits { uint256 index_, uint256 unscaledRemoveAmount_ ) internal { + + // revert if 0 amount is removed. + if (unscaledRemoveAmount_ == 0) revert InvalidAmount(); + // price buckets are indexed starting at 0, Fenwick bit logic is more elegant starting at 1 ++index_; diff --git a/tests/forge/regression/ERC20Pool/RegressionTestReservesERC20Pool.t.sol b/tests/forge/regression/ERC20Pool/RegressionTestReservesERC20Pool.t.sol index 2c0073aa9..0909226d5 100644 --- a/tests/forge/regression/ERC20Pool/RegressionTestReservesERC20Pool.t.sol +++ b/tests/forge/regression/ERC20Pool/RegressionTestReservesERC20Pool.t.sol @@ -1500,4 +1500,378 @@ contract RegressionTestReservesWith8QuotePrecision12CollateralPrecisionERC20Pool invariant_reserves(); } +} + +contract RegressionTestReservesWith18QuotePrecision6CollateralPrecisionERC20Pool is ReserveERC20PoolInvariants { + + function setUp() public override { + vm.setEnv("QUOTE_PRECISION", "18"); + vm.setEnv("COLLATERAL_PRECISION", "6"); + vm.setEnv("NO_OF_BUCKETS", "30"); + vm.setEnv("NO_OF_ACTORS", "50"); + super.setUp(); + } + /** + Test was failing in moveQuoteToken due to Lps getting added to toBucket without any deposit being added. + This situation arises when toBucketScale is large enough to make unscaled amount to move 0. moveQuoteToken did not have unscaledAmount == 0 check. + */ + function test_regression_B2_failure_moveQuote() external { + _reserveERC20PoolHandler.withdrawBonds(115792089237316195423570985008687907853269984665640564039457584007913129639935, 2, 115792089237316195423570985008687907853269984665640564039457584007913129639934); + _reserveERC20PoolHandler.removeQuoteToken(3, 115792089237316195423570985008687907853269984665640564039457584007913129639935, 115792089237316195423570985008687907853269984665640564039457584007913129639935, 115792089237316195423570985008687907853269984665640564039457584007913129639933); + _reserveERC20PoolHandler.transferLps(37642562402173750010, 2904559723264204341469701706, 10656653005746874933472811298, 1331491774496795422259020499820184178725565528690773573301367964081480684, 1999999999999999999); + _reserveERC20PoolHandler.moveQuoteToken(49046620449355538574108822723048473721226797556007972061207479861126558122005, 23784, 19123881933102896477378198103061, 1000414154273075144, 619264012354860144763880256225); + _reserveERC20PoolHandler.withdrawBonds(1004883798352154948, 11947170379806477397732457006311, 1477952512257156998936012715837); + _reserveERC20PoolHandler.pledgeCollateral(115792089237316195423570985008687907853269984665640564039457584007913129639935, 0, 3); + _reserveERC20PoolHandler.stampLoan(34268240363921090802, 2803486243230681708692); + _reserveERC20PoolHandler.repayDebt(335178484623288505236146247200177153211434750469, 1000304350203678961561749662328, 1116826706101508024); + _reserveERC20PoolHandler.withdrawBonds(115792089237316195423570985008687907853269984665640564039457584007913129639933, 265665595536910455721419627680330128971263024672346167033455279634443, 2); + _reserveERC20PoolHandler.moveQuoteToken(1657691958460652257817721055, 128072191243841582442294925179764165397182820830493893418841, 4694922462231054608489220624937610780, 2, 0); + _reserveERC20PoolHandler.drawDebt(1008192421263265380, 4517225061142593990014708057357, 24141); + _reserveERC20PoolHandler.removeCollateral(1001129709185447992, 3220690943477987049807033010837445643371744885401272976673118302376935, 3412186810, 111979); + _reserveERC20PoolHandler.kickAuction(3, 1, 115792089237316195423570985008687907853269984665640564039457584007913129639932, 3); + _reserveERC20PoolHandler.kickAuction(468454966848660, 0, 30126653398953890458934504947574, 0); + _reserveERC20PoolHandler.takeAuction(3, 730026890361279402974108678930380999203467765412415979, 628041607447162342701529524618502585069671378829099310, 52037600594867); + _reserveERC20PoolHandler.takeAuction(3, 9093784184160867955, 115792089237316195423570985008687907853269984665640564039457584007913129639935, 49426735425491859878574883153968); + _reserveERC20PoolHandler.takeAuction(999999999999999999000000000002, 8787640851723169, 67635, 1079264131468941241); + _reserveERC20PoolHandler.takeReserves(115699975290581306710287262372735, 4108, 3926293078); + _reserveERC20PoolHandler.pullCollateral(4855, 45164, 552702555689170837845113726412); + _reserveERC20PoolHandler.kickAuction(31543111575, 206641648502291266814166441135001345683324218028137, 2, 270860970868659); + _reserveERC20PoolHandler.stampLoan(158717467331416019238731332649, 1000001343893597087); + _reserveERC20PoolHandler.kickReserveAuction(97983926411679345474877640016, 798876146163542422425948018); + _reserveERC20PoolHandler.kickAuction(1, 302963010203563217045817940832058, 1018385263215619388112308840704950032215637115163284158368967134127049893, 859382230981419552422); + _reserveERC20PoolHandler.takeAuction(115792089237316195423570985008687907853269984665640564039457584007913129639933, 0, 1, 2250829479793965043112393498212445003681726733267413737114608); + _reserveERC20PoolHandler.pullCollateral(3550, 2699, 2999999999999999999999999998212019379567521146); + _reserveERC20PoolHandler.pledgeCollateral(7654031896205520683367911145188232047526991468011916645644996268959881, 115792089237316195423570985008687907853269984665640564039457584007913129639933, 115792089237316195423570985008687907853269984665640564039457584007913129639932); + _reserveERC20PoolHandler.bucketTake(1242909492826417758811595914240, 33679, true, 110541095857117588638158761720577, 15090945451208801725994427988659); + _reserveERC20PoolHandler.addCollateral(115792089237316195423570985008687907853269984665640564039457584007913129639935, 1206649867156059110626296550961611770411460037634181640022, 734256886560207259070567292421738811835983360067867745873368356977, 17036220675); + _reserveERC20PoolHandler.lenderKickAuction(45662835087424134003642092876268526009069159, 115792089237316195423570985008687907853269984665640564039457584007913129639934, 115792089237316195423570985008687907853269984665640564039457584007913129639935); + _reserveERC20PoolHandler.bucketTake(3429551819, 28974, true, 1014624400228610056, 260202225170683118622930860078); + _reserveERC20PoolHandler.addQuoteToken(0, 0, 368643525370126122865174898240876890193114741888, 115792089237316195423570985008687907853269984665640564039457584007913129639933); + _reserveERC20PoolHandler.stampLoan(805173009076241759333109768105647925108786848870165244419235965052322, 115792089237316195423570985008687907853269984665640564039457584007913129639934); + _reserveERC20PoolHandler.drawDebt(9102494126705912136391635961552, 3783032520536094598000000000001, 5517466683162027208627184808741); + _reserveERC20PoolHandler.drawDebt(8698646, 9601730769805593290860718038343291222144, 3); + _reserveERC20PoolHandler.bucketTake(0, 1130076866133441653066968291313836924919464218002922083969963093118603, true, 1453951219834897560228, 1); + _reserveERC20PoolHandler.removeQuoteToken(30482178350208701079706415428092, 783745149037624386585550186429, 2795441907963653198291, 1423930419712560391149071321229601042172357165885); + _reserveERC20PoolHandler.takeAuction(16385, 23002506274057403217924980440245, 1001755824294256451, 206598265514633648164257454674); + _reserveERC20PoolHandler.moveQuoteToken(808115637510339346987980910484201554880049403535211888190553939708394, 21172862412434827254487486033637085907171942794544723144205227622806764660184, 13128073886717853735365553573950572258, 115792089237316195423570985008687907853269984665640564039457584007913129639934, 115792089237316195423570985008687907853269984665640564039457584007913129639934); + _reserveERC20PoolHandler.pullCollateral(115792089237316195423570985008687907853269984665640564039457584007913129639934, 0, 115792089237316195423570985008687907853269984665640564039457584007913129639932); + _reserveERC20PoolHandler.removeCollateral(3437495112021185144385124595850567190038499942, 2, 115792089237316195423570985008687907853269984665640564039457584007913129639932, 1040266413224669020577137878616); + _reserveERC20PoolHandler.takeAuction(115792089237316195423570985008687907853269984665640564039457584007913129639935, 3, 115792089237316195423570985008687907853269984665640564039457584007913129639932, 1); + _reserveERC20PoolHandler.removeCollateral(3393789201, 9608831946164913767718400489, 999999999999999999999999999201, 1605448412177742017393657805308134475240492878800451229462083898729962615); + _reserveERC20PoolHandler.settleAuction(4947397177099301994545275559682766421540051743403377838144943962898171, 7077350928441221692629041404760, 606953422376098533486721405816942628, 32655172178692766299189013481534823734255); + _reserveERC20PoolHandler.pullCollateral(115792089237316195423570985008687907853269984665640564039457584007913129639934, 64730736141699810042774821578321223102332167752990, 8976690007292448925274126127498162327370402409); + _reserveERC20PoolHandler.settleAuction(10883036741901438467671283079619319366495184230539472516244, 3185905162002335798, 563955895685323566436, 115792089237316195423570985008687907853269984665640564039457584007913129639932); + _reserveERC20PoolHandler.transferLps(73747, 114611474448027634600235153839231428197375546068683912824050264275057755995777, 12311, 10619131837839703049437348328893, 22012); + _reserveERC20PoolHandler.repayDebt(19490886905839046258464553234529721528219501433787277461396, 115792089237316195423570985008687907853269984665640564039457584007913129639935, 570007); + _reserveERC20PoolHandler.addQuoteToken(1265313062124193198383171657268, 1243001927474216841017985775689, 985089034643502570822661366260662125519262487346007265687326441378381025, 7307508186654514697178579174800087908573304337235669764959155204); + _reserveERC20PoolHandler.transferLps(102323218402893140170627926756610, 35031638351875250549314648274754, 13201805297746991487306948870425, 65506, 1004959814542778579); + _reserveERC20PoolHandler.lenderKickAuction(32135, 32730, 107470); + _reserveERC20PoolHandler.addQuoteToken(1327002774761628913, 242093659266990, 9154582369034587240099145864183, 161236133566149516607); + _reserveERC20PoolHandler.kickAuction(148557178105758739342827405062, 8948708374796104827009952068367, 752169688703724029254139174841, 1000000756439655791); + _reserveERC20PoolHandler.addQuoteToken(435381640401452025213453281633010, 66767, 1009448195722588492, 999999086799978261); + _reserveERC20PoolHandler.bucketTake(42312, 65701, true, 7447, 2811304608608972325004825982661); + _reserveERC20PoolHandler.settleAuction(12956816065578107839247440075762, 999999086757990867999999, 1000001211168019496, 23698725416021562432343); + _reserveERC20PoolHandler.settleAuction(19991245651642183268611022153239, 1011591174700694233, 3814303885, 1000000000000063210); + _reserveERC20PoolHandler.stampLoan(16539192824490576482748390831, 8281296564376035766467088646693); + _reserveERC20PoolHandler.takeReserves(14565095858257663638699725926166, 1000000000000000000041718611022505469277808624, 911321890203952912632825386082); + _reserveERC20PoolHandler.removeCollateral(5779366742256304708421587141374585525761955778578667, 115792089237316195423570985008687907853269984665640564039457584007913129639935, 1, 1); + _reserveERC20PoolHandler.repayDebt(115792089237316195423570985008687907853269984665640564039457584007913129639933, 5155301903333177813187407445257, 115792089237316195423570985008687907853269984665640564039457584007913129639934); + _reserveERC20PoolHandler.addCollateral(849780763312488485060831590510943022473868827588529262994477515, 115792089237316195423570985008687907853269984665640564039457584007913129639934, 115792089237316195423570985008687907853269984665640564039457584007913129639933, 115792089237316195423570985008687907853269984665640564039457584007913129639932); + _reserveERC20PoolHandler.addCollateral(62666, 9088, 208020036141733040205661275829730, 999999999999998271017861409466459208446109031); + _reserveERC20PoolHandler.repayDebt(7868577833854263930192586982, 3563002411641593701328959, 10891865741082687010180273565300653035242); + _reserveERC20PoolHandler.kickReserveAuction(1879907284943600302271676779538912202678430602361590080741174876821, 248895193586379677219567192); + _reserveERC20PoolHandler.removeCollateral(133680764873922822756190603948146, 110660, 1019592565429153066, 7148285978104482052351783146738); + _reserveERC20PoolHandler.removeQuoteToken(1013329759075270666, 23603, 28338, 1656577080148706243515945988903227336335290961084842538604814590319019397); + _reserveERC20PoolHandler.takeAuction(38894353378845987341618976303304, 60765031729827910697264621403588316182529570832670969853587621380681188599459, 6930913201466847726605195767, 535787026336045316158); + _reserveERC20PoolHandler.pledgeCollateral(29327, 11568561597607592499663512289, 1009574318481086187); + _reserveERC20PoolHandler.takeReserves(3, 115792089237316195423570985008687907853269984665640564039457584007913129639932, 32875608929003656732409563256255270173000690756790604154154765902089); + _reserveERC20PoolHandler.addCollateral(57066391561490679429183, 2620549433, 25199, 2721998507640457551634); + _reserveERC20PoolHandler.drawDebt(1519078156999656, 813579973302756680480149516, 115792089237316195423570985008687907853269984665640564039457584007913129639934); + _reserveERC20PoolHandler.lenderKickAuction(115792089237316195423570985008687907853269984665640564039457584007913129639933, 115792089237316195423570985008687907853269984665640564039457584007913129639934, 1); + _reserveERC20PoolHandler.addCollateral(528, 115792089237316195423570985008687907853269984665640564039457584007913129639934, 115792089237316195423570985008687907853269984665640564039457584007913129639934, 12649531341451027788733775487531317052733264410855707776259774028839721891245); + _reserveERC20PoolHandler.lenderKickAuction(22870134816715254542, 1000495951970901317, 2731098368592330690347); + _reserveERC20PoolHandler.pledgeCollateral(10480041655596534477067348276, 999999999999999999, 5105785804282851597299358); + _reserveERC20PoolHandler.settleAuction(1002307562575186330, 1000001513653347112, 22326, 8765023676929777074842298717063); + _reserveERC20PoolHandler.stampLoan(471092998655196430928608440551563, 1001482550522661429); + _reserveERC20PoolHandler.kickReserveAuction(61278, 110219346685965629431127252685990); + _reserveERC20PoolHandler.addQuoteToken(63315346304, 3, 449278986525604713461838959729536350729891841560390803014266023140, 1); + _reserveERC20PoolHandler.addQuoteToken(3331177199897255798180870934121854726320588161, 200561952950447534563084340465571467859975897154594701937434473315, 115792089237316195423570985008687907853269984665640564039457584007913129639935, 0); + _reserveERC20PoolHandler.addQuoteToken(107313943396321279, 4354, 2960676613341336214750882016916372955814956783131838494492275121780237281586, 801430277); + _reserveERC20PoolHandler.lenderKickAuction(513000690732841263173137480623008926431091, 612966676564642387450372950135290335931056463540439818292804211041478264, 0); + _reserveERC20PoolHandler.addQuoteToken(0, 9412483891784853232140403482147173715844914735605, 113105, 34040953374575350554885607936359418782220944521168475597499828913950); + _reserveERC20PoolHandler.settleAuction(23692408661812949240509199833019908544561567, 115792089237316195423570985008687907853269984665640564039457584007913129639935, 1, 95678290146660062092521468854715429169198101799256228142450663789287286); + _reserveERC20PoolHandler.transferLps(39696749383364, 65408921622587276955158111476109032153487, 13230439651832198145925122897082692199902791266240664101309010456783, 0, 1); + _reserveERC20PoolHandler.addCollateral(4866571773599597323073280738491957842303226836355542297, 39507803870579064094886642393054041886729837330651058635864834772657192, 115792089237316195423570985008687907853269984665640564039457584007913129639933, 2); + _reserveERC20PoolHandler.kickAuction(3, 1640393408711571831278012374245309190272560588971969114725903019391379479508, 1, 49099713126206153766918915302778488708409121398864970); + _reserveERC20PoolHandler.repayDebt(2310750510964915051772069797, 26749642396964445071760299012097834124871951554895328004511, 157364102255400017021090902636532); + _reserveERC20PoolHandler.settleAuction(1005004639975889978, 26484756821432353403, 50934, 1598); + _reserveERC20PoolHandler.bucketTake(36723352870165744101490067551753, 29999999999999999996992153671023349590036929699, false, 1244218290121641516566129454299, 182347436658528950166783055164); + _reserveERC20PoolHandler.stampLoan(321283919923302127827651535692360833, 19060753360392311487367913649547993834974770); + _reserveERC20PoolHandler.drawDebt(21303948393223722113894409624126011458800457027465268380346, 8555879868757976, 22679772829915516); + _reserveERC20PoolHandler.pullCollateral(115792089237316195423570985008687907853269984665640564039457584007913129639934, 1227942203380083748950489549470399962062293398243381, 1155799463349376169508034099912612302653); + _reserveERC20PoolHandler.takeReserves(237577795, 2, 115792089237316195423570985008687907853269984665640564039457584007913129639934); + _reserveERC20PoolHandler.moveQuoteToken(20506545835752511071357364287303845120702130358586552335616349704230610, 3, 115792089237316195423570985008687907853269984665640564039457584007913129639934, 0, 20413550225262709567690483231485411759438345326437); + _reserveERC20PoolHandler.pledgeCollateral(52259880980899591075, 3039187888688329424622223400, 46397); + _reserveERC20PoolHandler.takeAuction(266191614232983735273531424042748544828814887992188925425709627500, 0, 52734024458083523376939533786, 1); + _reserveERC20PoolHandler.settleAuction(9581048927186226716462701011669838112662249515723843361767313929, 2, 2, 159241700633030894736691560839636343000081781140081957140); + _reserveERC20PoolHandler.stampLoan(2, 115792089237316195423570985008687907853269984665640564039457584007913129639932); + _reserveERC20PoolHandler.takeReserves(162091225819886074282265645406479, 1113764505660524106059049549, 25484631824974318792552030396188); + _reserveERC20PoolHandler.moveQuoteToken(440285, 6707171850224462230981678560180266, 115792089237316195423570985008687907853269984665640564039457584007913129639933, 2, 2089092911515627639225770981079750247211708444515815583794292384886193439876); + _reserveERC20PoolHandler.removeCollateral(3, 2, 129227258927295388987248866788, 1464862990398809085970946208982073492262649291597626); + _reserveERC20PoolHandler.takeReserves(151825533062943134678968467797, 1005805586963047391, 60474); + _reserveERC20PoolHandler.transferLps(2, 57761224243784787561344570225552824510000512389305957022924835597, 33366272169494077962065618389905493264940838073091749686335991280255328480, 1226818929467483340591540834562215, 1332961435155); + _reserveERC20PoolHandler.lenderKickAuction(61901, 828690949286925292619996904703, 15889); + _reserveERC20PoolHandler.withdrawBonds(2, 1, 115792089237316195423570985008687907853269984665640564039457584007913129639933); + _reserveERC20PoolHandler.takeReserves(874805045645121022161038807764265009368600282240241857, 0, 17720312084534551378860430555493350986496361679747065); + _reserveERC20PoolHandler.kickAuction(20934389433568744551682743208671428341, 132784861374357203627, 3539655290530870770641134323909153551, 201842449063661854271887456681588482628926830153205022946646067036422639280); + _reserveERC20PoolHandler.stampLoan(217243868418377587294947853288, 40567); + _reserveERC20PoolHandler.bucketTake(15715, 1554725875711707770767950505583153845856543474257580574701613959727947300, false, 132216000022272890670522990538803, 93482255546821967179368472644093); + _reserveERC20PoolHandler.bucketTake(2, 115792089237316195423570985008687907853269984665640564039457584007913129639935, true, 2, 170621813772); + _reserveERC20PoolHandler.removeCollateral(87490533647440741978588420437, 25562824512819651455981106, 1140, 31458102413749128203168669442379583768342123816499442600768499782045907262955); + _reserveERC20PoolHandler.lenderKickAuction(41948, 165626280612697807445299649001, 63600); + _reserveERC20PoolHandler.repayDebt(4031580380570000000000000, 27119208480505162084295542925794, 8149813563845175705473886410959); + _reserveERC20PoolHandler.moveQuoteToken(7265906890149654301553923086986081269601, 115792089237316195423570985008687907853269984665640564039457584007913129639935, 2, 115792089237316195423570985008687907853269984665640564039457584007913129639935, 3); + _reserveERC20PoolHandler.removeQuoteToken(1002794652257663592, 66427, 331289518930283463063659, 1081147448723587352998723800314); + _reserveERC20PoolHandler.stampLoan(300627896167326717360449894904635, 885074771731775037716699045323); + _reserveERC20PoolHandler.stampLoan(16403964070271, 0); + _reserveERC20PoolHandler.settleAuction(0, 168077, 0, 1); + _reserveERC20PoolHandler.removeQuoteToken(3457977281120486778631088697804834975942780262, 1790328617839458354922133029, 115792089237316195423570985008687907853269984665640564039457584007913129639935, 115792089237316195423570985008687907853269984665640564039457584007913129639935); + _reserveERC20PoolHandler.bucketTake(115792089237316195423570985008687907853269984665640564039457584007913129639934, 3023292620685400832968761508412468627255105608696139783807140885579903, true, 4289025951144843502085586, 22319015879820); + _reserveERC20PoolHandler.moveQuoteToken(51691035972005835021466812008782954569123243552460976272387667840500936753, 247484642356638951512311, 13158202699308040253526828, 180235146753, 3209645578481866603); + _reserveERC20PoolHandler.settleAuction(7352, 64468, 105511, 14014498020178142167331212366990); + _reserveERC20PoolHandler.moveQuoteToken(102307567027383396996945386526120, 1000000000000000000011005443597518796068450771, 1830932055144360344882198952, 5062177514995020730630162831, 42115); + _reserveERC20PoolHandler.kickAuction(6269365082754440092150371671065279083767901414, 115792089237316195423570985008687907853269984665640564039457584007913129639935, 2, 2); + _reserveERC20PoolHandler.takeReserves(14, 33025669033967679085337134805565432952424673935025527829, 19); + _reserveERC20PoolHandler.removeQuoteToken(1248373319972090440955060850468, 5148171369684007845147895, 31639, 1477761581075761248195590384780); + _reserveERC20PoolHandler.withdrawBonds(2566642505619323625452, 1000496764916959457, 45462967837399988873); + _reserveERC20PoolHandler.pledgeCollateral(3185, 1076614429971412031, 45848); + _reserveERC20PoolHandler.pledgeCollateral(0, 115792089237316195423570985008687907853269984665640564039457584007913129639935, 0); + _reserveERC20PoolHandler.transferLps(115792089237316195423570985008687907853269984665640564039457584007913129639933, 115792089237316195423570985008687907853269984665640564039457584007913129639934, 115792089237316195423570985008687907853269984665640564039457584007913129639933, 115792089237316195423570985008687907853269984665640564039457584007913129639932, 115792089237316195423570985008687907853269984665640564039457584007913129639935); + _reserveERC20PoolHandler.takeReserves(320544368494042163789501884158905807856035129761, 115792089237316195423570985008687907853269984665640564039457584007913129639934, 201725855268263696016334502905780987923701378953573255817596); + _reserveERC20PoolHandler.kickAuction(1000336252515461664061178680418, 1000388912084206393, 1011107483287844312, 8647554820919410630913313); + _reserveERC20PoolHandler.removeCollateral(115792089237316195423570985008687907853269984665640564039457584007913129639935, 115792089237316195423570985008687907853269984665640564039457584007913129639934, 50516976808537535276520446862304273644178309499903228413903745364358581683643, 2709945513107189127374088721782); + _reserveERC20PoolHandler.pledgeCollateral(3, 1, 0); + _reserveERC20PoolHandler.takeReserves(45133607575449095221162705762361305703977888819293869079201865091516795206737, 67924, 37831519418663083787231971931191); + _reserveERC20PoolHandler.lenderKickAuction(21504, 25904012845427761905660936435078, 703796362287742271184012329235); + _reserveERC20PoolHandler.bucketTake(0, 923157514371, true, 15939348515356431548564813731594466613300344692, 115792089237316195423570985008687907853269984665640564039457584007913129639935); + _reserveERC20PoolHandler.addCollateral(311493687718760788907972546738070, 1003382908177787998, 25483683918669391252516475347431, 24095534617878564822985881587326); + _reserveERC20PoolHandler.repayDebt(1000000195838638578, 62700607572090009959044442730, 1013743625667428849); + _reserveERC20PoolHandler.moveQuoteToken(42243698908707807441142106725951938117714223383204145877705, 1, 344271984601285246088324004893632267232258416064, 226798177494562158840374418128613468952892815953691457, 69091831791289); + _reserveERC20PoolHandler.repayDebt(70825, 14311, 1000018060925952915); + _reserveERC20PoolHandler.settleAuction(27902, 1002315564201303771, 1410727007152286014988461060895632509636857067929492447640832835235947347, 1076279560591369416); + _reserveERC20PoolHandler.removeQuoteToken(115792089237316195423570985008687907853269984665640564039457584007913129639933, 115792089237316195423570985008687907853269984665640564039457584007913129639934, 2, 7337531939039374587624013433241677478892187); + _reserveERC20PoolHandler.stampLoan(9766504153929369500501, 0); + _reserveERC20PoolHandler.addQuoteToken(196612, 316754078648004981429079537060114, 515586298794801886086389215830, 10771); + _reserveERC20PoolHandler.moveQuoteToken(1, 0, 115792089237316195423570985008687907853269984665640564039457584007913129639935, 3, 115792089237316195423570985008687907853269984665640564039457584007913129639933); + _reserveERC20PoolHandler.kickAuction(999999999999999983610855053382054071431657002, 782869510780044216, 147904853523810421167973112497, 1002307562575186332); + _reserveERC20PoolHandler.settleAuction(6152000316526416423777116062445, 8067, 1082752700483537290, 8392332001693122074120278752); + _reserveERC20PoolHandler.transferLps(0, 209280954247275939967640, 5681831508296658455609949266639286507386343604, 1, 115792089237316195423570985008687907853269984665640564039457584007913129639933); + _reserveERC20PoolHandler.takeAuction(1, 115792089237316195423570985008687907853269984665640564039457584007913129639935, 115792089237316195423570985008687907853269984665640564039457584007913129639932, 115792089237316195423570985008687907853269984665640564039457584007913129639932); + _reserveERC20PoolHandler.addCollateral(256567610969183668446, 1, 115792089237316195423570985008687907853269984665640564039457584007913129639933, 45170453239180066788622436771378006982965484086762); + _reserveERC20PoolHandler.bucketTake(3, 457088375466998054138001988676565293909861727929272636081353670143559736, true, 115792089237316195423570985008687907853269984665640564039457584007913129639932, 835976); + _reserveERC20PoolHandler.withdrawBonds(248815858138124671995198568086, 9539107926198722622144144750, 1121791448779424628); + _reserveERC20PoolHandler.withdrawBonds(785459014183016041080171388548, 4207753022934017992685049010435169736822549657056613192716, 819781724580373785897549492928263221293701171572180914318064930); + _reserveERC20PoolHandler.takeReserves(115792089237316195423570985008687907853269984665640564039457584007913129639934, 115792089237316195423570985008687907853269984665640564039457584007913129639934, 28286868439485262801881579577300838); + _reserveERC20PoolHandler.removeQuoteToken(788075175180922013605003676684, 1768883582671251530427600188, 185172084216812873727314557153, 250099953452202106808943824181); + _reserveERC20PoolHandler.repayDebt(6869632414, 17725816229298487260494994916246610858103139, 1); + _reserveERC20PoolHandler.removeQuoteToken(64412, 206729188359503517697120877766, 4042, 51145); + _reserveERC20PoolHandler.takeAuction(702328495478510399361134893568247096170626256348510874367812337395998722, 80682, 8548501529095673, 25464396258606087115516263003); + _reserveERC20PoolHandler.pullCollateral(115792089237316195423570985008687907853269984665640564039457584007913129639932, 115792089237316195423570985008687907853269984665640564039457584007913129639935, 17190); + _reserveERC20PoolHandler.settleAuction(1168116, 16273236328583616777187303799280033699882910875418772142057668443193, 1, 95907608729712974033845641730550030873983681581863381934000446); + _reserveERC20PoolHandler.pledgeCollateral(1, 2, 76395220357970578660528990579202996); + _reserveERC20PoolHandler.bucketTake(176323869261540227, 1095857549145040623196306462960190874722398, false, 512016453946223100396062517108676400709, 115792089237316195423570985008687907853269984665640564039457584007913129639933); + _reserveERC20PoolHandler.settleAuction(10426618351812971479895053579369315415, 5995484015394200729390334915003256603209905896738288, 1, 1937185812841271108950898153859296435919250286257258264239); + _reserveERC20PoolHandler.settleAuction(88343, 1000265629002775292, 231199676786891224341929645591039, 180570412974716531429860573824); + _reserveERC20PoolHandler.kickAuction(10332259793965506937787795115299, 1265751175713444793974412761641, 40036, 2999999999999999999999999998791516656669546344); + _reserveERC20PoolHandler.lenderKickAuction(1619938437346215026589817086810127556251032478854444047863517962733924299, 2839873154970308008234296806, 46946); + _reserveERC20PoolHandler.takeReserves(3, 115792089237316195423570985008687907853269984665640564039457584007913129639932, 115792089237316195423570985008687907853269984665640564039457584007913129639932); + _reserveERC20PoolHandler.pledgeCollateral(1532, 120941509555693416, 528179580389567238); + _reserveERC20PoolHandler.withdrawBonds(1925993008253225052386425605002958154500588089050593030286768082511958863, 115792089237316195423570985008687907853269984665640564039457584007913129639934, 8220097918269); + _reserveERC20PoolHandler.repayDebt(2, 115792089237316195423570985008687907853269984665640564039457584007913129639935, 115792089237316195423570985008687907853269984665640564039457584007913129639932); + _reserveERC20PoolHandler.moveQuoteToken(115792089237316195423570985008687907853269984665640564039457584007913129639935, 500656100541793027148256947969126414091417128156899777791044630627, 3, 1243401316126576, 115792089237316195423570985008687907853269984665640564039457584007913129639932); + _reserveERC20PoolHandler.moveQuoteToken(86942, 1265750446449220436328574557536, 1000413802927987948, 1095070231982735282, 680241183587742519486963119369); + _reserveERC20PoolHandler.kickAuction(1403160938973468662433328512684493640631441203426254, 115792089237316195423570985008687907853269984665640564039457584007913129639934, 1278671339437257582264011126928523351192550123453283116381962, 115792089237316195423570985008687907853269984665640564039457584007913129639934); + _reserveERC20PoolHandler.settleAuction(858334688744263212517969720651, 1502114183356369806990088864306140636000206456355426700120405923606, 1002316954421934877, 521284031086467773149282088859153); + _reserveERC20PoolHandler.withdrawBonds(85440, 5829558243977283653706875843, 1004564639911162661); + _reserveERC20PoolHandler.repayDebt(1013926692820087722, 43885, 1005066474529536345); + _reserveERC20PoolHandler.addQuoteToken(17068621575404744873408466497490, 8174119886589104431536733128383526304274022365823554547283207377401020731580, 1726403099, 14362146246559834); + _reserveERC20PoolHandler.kickAuction(36021074946477834952556604650090188025165083141525898485882, 2, 1783014443306263471138234076064783875497601074416025, 20040917666669467911411967548879194898758435694121); + _reserveERC20PoolHandler.repayDebt(115792089237316195423570985008687907853269984665640564039457584007913129639935, 3, 0); + _reserveERC20PoolHandler.pullCollateral(3377305976, 1074951622983408273, 139300); + _reserveERC20PoolHandler.withdrawBonds(317671201421223616359609830, 107996983368437750089608313, 695313403486802436259104419118737155300690926564443914559798964544353279); + _reserveERC20PoolHandler.bucketTake(1227285541857866039, 37634845416349922903265732298955, false, 2045, 1678564923759951382809566858230352269477920505053496482024116495452246765); + _reserveERC20PoolHandler.addQuoteToken(61225, 4727824468742766134130739439, 1000612048935576642, 33999999999999999997378823527212266014901212612); + _reserveERC20PoolHandler.repayDebt(0, 3, 3); + _reserveERC20PoolHandler.kickAuction(7148337669010547658102894777428, 1832269711415118445953104329272, 83641212795071297144657292158, 11453); + _reserveERC20PoolHandler.transferLps(361066307962041057839371068891113210433188379775487, 115792089237316195423570985008687907853269984665640564039457584007913129639935, 115792089237316195423570985008687907853269984665640564039457584007913129639935, 2647891532951931849301096779287103964639222095103318115680174, 453); + _reserveERC20PoolHandler.stampLoan(561851286928478301651777396627094, 26136925387601172257176572093); + _reserveERC20PoolHandler.removeCollateral(1357911508, 40669226675172648967649613275638505482481605391973065, 10114, 115792089237316195423570985008687907853269984665640564039457584007913129639934); + _reserveERC20PoolHandler.kickReserveAuction(5698628467688021004693473709553685, 737503206173290832007003921); + _reserveERC20PoolHandler.removeCollateral(26362, 111681, 421432787363630303958429504176614, 3009846230); + _reserveERC20PoolHandler.settleAuction(1163322980549754391906331783, 2471, 746055792553944623905408808008163043479145321569849473122862140185736161, 2182934151); + _reserveERC20PoolHandler.removeQuoteToken(194393439, 239, 87794916794198497504518085799777021196157872904632158883258484838161107050625, 1); + _reserveERC20PoolHandler.stampLoan(4323714631672351967941377588805351316488618339, 1); + _reserveERC20PoolHandler.addQuoteToken(4, 115792089237316195423570985008687907853269984665640564039457584007913129639935, 0, 3); + _reserveERC20PoolHandler.moveQuoteToken(115792089237316195423570985008687907853269984665640564039457584007913129639934, 3, 2, 115792089237316195423570985008687907853269984665640564039457584007913129639934, 142396890438868895911322645915413100162); + _reserveERC20PoolHandler.settleAuction(2, 3, 1, 0); + _reserveERC20PoolHandler.withdrawBonds(1000494930413731302, 854, 1092240860809360803); + _reserveERC20PoolHandler.transferLps(1007676985037977280, 5293258438020529061018764950, 1248335723118177042950426359461, 12776645595352149080460901309030, 78596); + _reserveERC20PoolHandler.addQuoteToken(1, 7451696, 115792089237316195423570985008687907853269984665640564039457584007913129639935, 0); + _reserveERC20PoolHandler.takeAuction(758870, 115792089237316195423570985008687907853269984665640564039457584007913129639932, 1, 15259711926701774562354058076); + _reserveERC20PoolHandler.takeAuction(68300521005251880246452791586826171749687841469, 24841240213455985834065941206835974642248317233510365559867572506411668, 229846574968679831347910311874661214380742, 3); + _reserveERC20PoolHandler.pullCollateral(115792089237316195423570985008687907853269984665640564039457584007913129639935, 115792089237316195423570985008687907853269984665640564039457584007913129639932, 3043377535935618555168921421700797787592); + _reserveERC20PoolHandler.takeReserves(18768478360894681510639123648408, 46465, 25709); + _reserveERC20PoolHandler.kickAuction(0, 2, 2480583108832384988850663758126095532, 115792089237316195423570985008687907853269984665640564039457584007913129639933); + _reserveERC20PoolHandler.kickAuction(2999999999999999999999999998832944857863450655000000000000, 45771, 62164652039633627497761335594, 1000412999688154238); + _reserveERC20PoolHandler.removeQuoteToken(364124028237392395823485921795702436499240256094033384013569265, 766794, 209920245295243436357988601, 0); + _reserveERC20PoolHandler.pledgeCollateral(115792089237316195423570985008687907853269984665640564039457584007913129639932, 787329402, 1257696470804019100618795990194408990721); + _reserveERC20PoolHandler.removeCollateral(115792089237316195423570985008687907853269984665640564039457584007913129639932, 115792089237316195423570985008687907853269984665640564039457584007913129639933, 4053656901589611, 1088323855928526383948658326959621445942462247919947474977085118384548552); + _reserveERC20PoolHandler.removeCollateral(43746300961571560222695335, 1, 73104762038534377972956331144940063380731, 32005289702807842917); + _reserveERC20PoolHandler.repayDebt(115792089237316195423570985008687907853269984665640564039457584007913129639934, 115792089237316195423570985008687907853269984665640564039457584007913129639932, 53640541721121094535786842282666422); + _reserveERC20PoolHandler.addQuoteToken(17930, 65364, 21424201609023557872897895, 65169); + _reserveERC20PoolHandler.addQuoteToken(11129136906090464421688409, 1004882573745034412, 566740377654384793379900958627, 697909370195495554682103581227); + _reserveERC20PoolHandler.drawDebt(115792089237316195423570985008687907853269984665640564039457584007913129639933, 2, 670812358273298997332299658489574541630814267702641469872828); + _reserveERC20PoolHandler.kickReserveAuction(2, 115792089237316195423570985008687907853269984665640564039457584007913129639935); + _reserveERC20PoolHandler.lenderKickAuction(2, 115792089237316195423570985008687907853269984665640564039457584007913129639932, 3); + _reserveERC20PoolHandler.addQuoteToken(3, 3, 52994323227034722517026788793221, 115792089237316195423570985008687907853269984665640564039457584007913129639932); + _reserveERC20PoolHandler.addQuoteToken(356658, 4002645144088, 283607950439582862, 17575592972854422142521200722802988130147471569026817571); + _reserveERC20PoolHandler.stampLoan(5292118026705223940621493194469609859902, 115792089237316195423570985008687907853269984665640564039457584007913129639934); + _reserveERC20PoolHandler.lenderKickAuction(115792089237316195423570985008687907853269984665640564039457584007913129639932, 5637719028705938094613057980003920632228362239960818596087167581698, 149663380017310880799301848750329729135678); + _reserveERC20PoolHandler.repayDebt(84646, 17068973606930406543461471864112, 1658169940155884404636872799202); + _reserveERC20PoolHandler.withdrawBonds(45848, 22902933191168752524363784035744, 243370212847735416119340093428313); + _reserveERC20PoolHandler.lenderKickAuction(3, 0, 18693740270024255256353128200198867720368767039990324141528978069657609363); + _reserveERC20PoolHandler.moveQuoteToken(1077932344807860496661023241385451544061536009765871866009027124302947793, 15404321346282745254837437752201, 212021975738761452000000000001, 45733, 27372); + _reserveERC20PoolHandler.lenderKickAuction(10772, 25684490465543465598622839641963, 3516562160); + _reserveERC20PoolHandler.removeCollateral(2, 0, 1261110872917145498336054997256195374298813780262635957388146, 1); + _reserveERC20PoolHandler.settleAuction(308790479427827097093414287795563613099418796787330813476570771124147369521, 41937512108748567561271878845283173549273450225213447793727, 2594009395137, 1108985995010584891692958476338544269229253321282932512058479830315); + _reserveERC20PoolHandler.kickReserveAuction(104304, 40121); + _reserveERC20PoolHandler.addQuoteToken(27254769792208, 14728135472046120105947691358953727973, 115792089237316195423570985008687907853269984665640564039457584007913129639934, 414074603574257187594813653314786085248036044181296); + _reserveERC20PoolHandler.bucketTake(115792089237316195423570985008687907853269984665640564039457584007913129639933, 26819261768520169880354, true, 1024207814034120719023254733992264446908751020948981602359162, 115792089237316195423570985008687907853269984665640564039457584007913129639933); + _reserveERC20PoolHandler.bucketTake(225449455045750393516697802271623587, 379395147962784744929851461809016976230202517958726242337, true, 14987615034806441423318840327422929530625185827, 4040179615492931169152063238091551429323738126497584396033880382607073752); + _reserveERC20PoolHandler.removeQuoteToken(187043526874134524125439, 364361703638417027207762019617, 3029381477, 334920009); + _reserveERC20PoolHandler.bucketTake(49283, 31996, true, 187319881898299587936593602479, 71364); + _reserveERC20PoolHandler.settleAuction(6724766265165202572707125761304, 45950, 20619937592141215250617270925845, 8731769574088027342937595963); + _reserveERC20PoolHandler.takeAuction(459529748357880933295684526074722294936591580127441009, 8034022, 1621613887985455559486663220302841631472, 531511394625370522269062968138110073240611995289300121605); + _reserveERC20PoolHandler.withdrawBonds(0, 10273410149368262918604204407481270728310441147521355069800363529006222351977, 115792089237316195423570985008687907853269984665640564039457584007913129639932); + _reserveERC20PoolHandler.removeCollateral(110927, 1100805399391925133, 48003, 1000000000000000000322692305421796163426770896); + _reserveERC20PoolHandler.withdrawBonds(20669874709518817084117328704566, 124388, 8470); + _reserveERC20PoolHandler.repayDebt(3, 282686084833603209384994385410506337825847396, 8415832879083357414309353687053); + _reserveERC20PoolHandler.kickAuction(115792089237316195423570985008687907853269984665640564039457584007913129639935, 3, 0, 3); + _reserveERC20PoolHandler.moveQuoteToken(34188901757821696207622661946833363324866106317905452880060918, 115792089237316195423570985008687907853269984665640564039457584007913129639934, 115792089237316195423570985008687907853269984665640564039457584007913129639935, 1035617650014072675852318, 3); + _reserveERC20PoolHandler.takeReserves(274406664943235117086784513592956983012372, 115792089237316195423570985008687907853269984665640564039457584007913129639935, 8617136832384491533658272711596966111860464992224748656538834); + _reserveERC20PoolHandler.addQuoteToken(1000001224098999069, 2839679941389620469279570145, 80563, 605292630262187992982164189513291); + _reserveERC20PoolHandler.pullCollateral(16525315361870218541662910573, 26668098136978149102200185881746, 23908693653862604245305948749918); + _reserveERC20PoolHandler.withdrawBonds(3, 115792089237316195423570985008687907853269984665640564039457584007913129639932, 9720113484669977941275495814081336554741668476427922839); + _reserveERC20PoolHandler.removeCollateral(9975223748825412976, 137666747966811415336537241598848, 102232, 3760225786814919945871494487); + _reserveERC20PoolHandler.kickAuction(39873320586386381747935560, 122531174816258389940952633077, 312754648700940034189150358845, 197015248597177779732041103971); + _reserveERC20PoolHandler.takeReserves(550327587341396418113442426482473368172354202166467605515597, 115792089237316195423570985008687907853269984665640564039457584007913129639932, 5378414617282011); + _reserveERC20PoolHandler.kickAuction(115792089237316195423570985008687907853269984665640564039457584007913129639934, 76704223007645381848533964, 2989295166587199630472259289574023115102072081091076628344373, 2); + _reserveERC20PoolHandler.removeQuoteToken(37181118954123498058827724728759540431280774160109, 162880783811840809576544019999565668848599601292232504, 3, 3); + _reserveERC20PoolHandler.takeReserves(115792089237316195423570985008687907853269984665640564039457584007913129639933, 115792089237316195423570985008687907853269984665640564039457584007913129639933, 115792089237316195423570985008687907853269984665640564039457584007913129639934); + _reserveERC20PoolHandler.settleAuction(63951, 698042199636437701613021151659, 181193326967639420601532109916979, 1942388279439325804845541280672085); + _reserveERC20PoolHandler.lenderKickAuction(217069806720235164462828155661559288363505001, 2507854891533295798525218167479041183901856349455, 33684000194086958010952090942433215994263524578705); + _reserveERC20PoolHandler.transferLps(1046441305387625662597463052593463024805405659909488160299287852636012362440, 115792089237316195423570985008687907853269984665640564039457584007913129639935, 426990, 386339339861320912379163548255847692504955581827202199771033590, 4264502); + _reserveERC20PoolHandler.takeReserves(3, 115792089237316195423570985008687907853269984665640564039457584007913129639935, 1244380445815265300290424909629); + _reserveERC20PoolHandler.kickAuction(3868815119376793321270432, 0, 115792089237316195423570985008687907853269984665640564039457584007913129639935, 2); + _reserveERC20PoolHandler.transferLps(81038991567309101942298831064504506635316972004340312, 728263367831447802663022419452107983820867884908287984997, 3, 14616673771250365029336653135294799951, 3610659149201249); + _reserveERC20PoolHandler.removeCollateral(1008659107280896015, 25684565925806238885960863252889, 1246907430534059181649793719220, 1453760141959572198809329243504752204044784772340654024539144126852327869); + _reserveERC20PoolHandler.kickReserveAuction(3079448458, 27020); + _reserveERC20PoolHandler.addCollateral(67504, 2999999999999999999999999998395666292593104303000000000000, 304789501076683498785500565544, 26655); + _reserveERC20PoolHandler.addCollateral(33070607865448996391677382450092, 4817, 64303091678591619398658692, 165545431690605441445193617915); + _reserveERC20PoolHandler.settleAuction(219272121391720049052785912887, 202372, 107539, 1259222536371095951704122248256); + _reserveERC20PoolHandler.moveQuoteToken(4226339283529880005235081977497059176318, 2, 3, 80573667099614927968070749098246587002614583772646796960009837605869456, 56206763583062125365650269926); + _reserveERC20PoolHandler.settleAuction(1, 115792089237316195423570985008687907853269984665640564039457584007913129639935, 4259808685362135412510, 115792089237316195423570985008687907853269984665640564039457584007913129639932); + _reserveERC20PoolHandler.repayDebt(0, 115792089237316195423570985008687907853269984665640564039457584007913129639932, 3); + _reserveERC20PoolHandler.kickAuction(3, 1, 115792089237316195423570985008687907853269984665640564039457584007913129639935, 2); + _reserveERC20PoolHandler.removeCollateral(2424, 5815844568382205718572605055779, 1000415121112551425, 22707); + _reserveERC20PoolHandler.removeQuoteToken(2478362699497177756823438308987, 4524, 2097753911867000000000001, 302535661762914815953425538); + _reserveERC20PoolHandler.pullCollateral(1000000647930848959, 1079265096880598286, 999999999999999787978178697424804260644670040); + _reserveERC20PoolHandler.addCollateral(3, 3, 15464016793217984080619500455673, 2096321054298263505191806691575828); + _reserveERC20PoolHandler.settleAuction(0, 69884254105117009237169950473721157747344125822667100354376139072094743, 11157280518427, 115792089237316195423570985008687907853269984665640564039457584007913129639932); + _reserveERC20PoolHandler.pullCollateral(23023482542025090509697110475415, 193310468519771436229827928905398, 1004959814542778578); + _reserveERC20PoolHandler.settleAuction(115792089237316195423570985008687907853269984665640564039457584007913129639935, 115792089237316195423570985008687907853269984665640564039457584007913129639934, 115792089237316195423570985008687907853269984665640564039457584007913129639935, 635612452667334223889532538208728714915569502); + _reserveERC20PoolHandler.addCollateral(115792089237316195423570985008687907853269984665640564039457584007913129639935, 0, 115792089237316195423570985008687907853269984665640564039457584007913129639932, 8849866460938602434954923491789552498321462002); + _reserveERC20PoolHandler.removeCollateral(112354727, 115792089237316195423570985008687907853269984665640564039457584007913129639932, 46824672475304343660747922541, 115792089237316195423570985008687907853269984665640564039457584007913129639932); + _reserveERC20PoolHandler.pledgeCollateral(15161544393497970544694448330117, 148508071034, 0); + _reserveERC20PoolHandler.settleAuction(214595417689583821821708243244, 10767774944191314417, 1480468673499319982280444215130, 1830418325320784729570014184990413); + _reserveERC20PoolHandler.takeReserves(42779, 680615193576865714993949811771, 1247595155467516918356465863266); + _reserveERC20PoolHandler.pledgeCollateral(3, 14221, 2); + _reserveERC20PoolHandler.takeReserves(8149943126032542426363686555808, 5156487572628113916240950987395, 5398158092292792042301424552); + _reserveERC20PoolHandler.drawDebt(3, 324909647022423772446029338722506866264064563831446516797108357819670803, 155736824835024377724150678558200858678828068298678257654499875); + _reserveERC20PoolHandler.addCollateral(1000000046957399279, 2229, 1030678810626900139, 1000913771878549061); + _reserveERC20PoolHandler.takeReserves(1, 1, 1); + _reserveERC20PoolHandler.pullCollateral(1000000000000000000000724154850294891711106750, 4517289146388704965100937630716, 182175782142048266405241356619888); + _reserveERC20PoolHandler.addQuoteToken(212793583610236286407085218364, 1000004617338661820, 1000415356282146006, 1063412126048251293638411074775); + _reserveERC20PoolHandler.pullCollateral(187043526874134524125438, 2758444253116117714950, 27317869685263531832910082); + _reserveERC20PoolHandler.removeQuoteToken(24394251342143757423523068060, 999999999999998770927144311811858149952877220, 12958212858061802986037998930618, 757631288446767689778895838135); + _reserveERC20PoolHandler.addQuoteToken(159153929464331243860907639134526, 83647, 24837823711160238249644417238137, 23747); + _reserveERC20PoolHandler.drawDebt(2, 53479616970447100318317956235652287630486308915492071519718315723240625619109, 21220844398222577293228960174226516159228602863693732551515446937186055); + _reserveERC20PoolHandler.stampLoan(1, 12360611860611904401132514090390808941842387183929599585514434048630953396); + _reserveERC20PoolHandler.addQuoteToken(70453061646243781023137540415052790969222547, 0, 45704328117538080181603751285195, 239069960298218131643444639395312566342717); + _reserveERC20PoolHandler.transferLps(99849106210251962292217516890134324060406114483530688447605087058686161977344, 213261225223039492594928345286, 54371896216364216315144, 1641, 235110167985618229737971491639); + _reserveERC20PoolHandler.kickReserveAuction(1, 115792089237316195423570985008687907853269984665640564039457584007913129639935); + _reserveERC20PoolHandler.pledgeCollateral(115792089237316195423570985008687907853269984665640564039457584007913129639935, 84477341561364564797927, 3); + _reserveERC20PoolHandler.moveQuoteToken(13222037868358691772417333476592, 42658, 797503568287196479551833978311921703885323190872455505548800131652942311, 7307508186654514651052143348725931723414803985536627394412473519, 181742790038400985603263544582); + _reserveERC20PoolHandler.addQuoteToken(213331870056339802732459268202, 37160, 555432583631581335779854870431033, 66700); + _reserveERC20PoolHandler.settleAuction(2999999999999999999999999999999999926505306290, 27343, 73500, 175685770571166520057630591832891); + _reserveERC20PoolHandler.kickAuction(1434984569798987926389026614, 2308606772406874338782701906048, 1094569861733533410, 3166357129); + _reserveERC20PoolHandler.removeCollateral(3861629492987822375044724005525, 23898378975206453320824142624212, 21684, 112309); + _reserveERC20PoolHandler.lenderKickAuction(115792089237316195423570985008687907853269984665640564039457584007913129639935, 115792089237316195423570985008687907853269984665640564039457584007913129639934, 594328637173348223726873919565); + _reserveERC20PoolHandler.lenderKickAuction(556590835820984707504310, 115792089237316195423570985008687907853269984665640564039457584007913129639935, 17038721957146518819845918158812396506); + _reserveERC20PoolHandler.withdrawBonds(2, 357815, 40173321747036321479114210026353); + _reserveERC20PoolHandler.repayDebt(1001301038492587188167215, 25922595819627310095875789985928, 4768); + _reserveERC20PoolHandler.kickReserveAuction(364361788568438744169425873609, 1919941759989464784736612817); + _reserveERC20PoolHandler.addCollateral(115792089237316195423570985008687907853269984665640564039457584007913129639933, 25916706075052986, 0, 490939888498923310604409636113244364021768873931875738523928957340042264); + _reserveERC20PoolHandler.takeAuction(0, 3207930927813510360899004243613, 0, 0); + _reserveERC20PoolHandler.drawDebt(3, 0, 1283667111418718087796291966876565887433874593); + _reserveERC20PoolHandler.pledgeCollateral(115792089237316195423570985008687907853269984665640564039457584007913129639933, 115792089237316195423570985008687907853269984665640564039457584007913129639934, 257114171049142); + _reserveERC20PoolHandler.kickAuction(121185233046284138765747851798394, 80956, 25456841541876740591638385692388, 22903399683611245794465726923382); + _reserveERC20PoolHandler.kickAuction(2, 115792089237316195423570985008687907853269984665640564039457584007913129639935, 3146087493362025485456634570388991892138960559065528250867987, 3); + _reserveERC20PoolHandler.kickAuction(27917, 33, 1076624857584926170, 5156487716742719175950734057963); + _reserveERC20PoolHandler.takeAuction(670849153287343969214678211759060818715541995, 0, 3, 115792089237316195423570985008687907853269984665640564039457584007913129639932); + _reserveERC20PoolHandler.removeCollateral(2, 115792089237316195423570985008687907853269984665640564039457584007913129639932, 115792089237316195423570985008687907853269984665640564039457584007913129639935, 1); + _reserveERC20PoolHandler.lenderKickAuction(3722334349747999999999999, 48343, 50000000000000007504303752959825611976512280598); + _reserveERC20PoolHandler.takeAuction(1000340529300183112, 47710206376465708889933240, 5018, 181126239049979700687565631484); + _reserveERC20PoolHandler.bucketTake(2409366757, 23002954912918706766198791036354, false, 50939, 1000412061623064483); + _reserveERC20PoolHandler.stampLoan(10038642563730541577199535612742778051, 9698534279298534305147337931389984356900229360077831); + _reserveERC20PoolHandler.kickReserveAuction(115792089237316195423570985008687907853269984665640564039457584007913129639933, 1); + _reserveERC20PoolHandler.removeQuoteToken(71094324159498917522013718702335135089513235, 13141568091044380048587864726819017200440542469173020977587, 0, 3); + _reserveERC20PoolHandler.bucketTake(110085366235979786081204608033485736878, 83745251865189916065501826746505425924697254154156675779668050990766503442806, false, 702354538163824341119229886114778021838386542029996, 18495950251378053046); + _reserveERC20PoolHandler.pledgeCollateral(5830151280553770893151673901, 90422, 23260271307333828048688045213089); + _reserveERC20PoolHandler.bucketTake(1, 54165140633945936323260, false, 31729524913428508011369928804179107971239289, 1); + _reserveERC20PoolHandler.bucketTake(350, 172028884179301626986812297349147, true, 155068527509982663351982944, 391213332076953784547440999366343275433278579); + _reserveERC20PoolHandler.removeQuoteToken(19238831902045882735062513727701, 44929, 24555887753064651927618422994581, 4949); + _reserveERC20PoolHandler.takeAuction(13426756550166227675159765290117636083703358051860562648971, 285136459782859427135537456836, 3, 115792089237316195423570985008687907853269984665640564039457584007913129639933); + _reserveERC20PoolHandler.stampLoan(1009956823385802949, 5341); + _reserveERC20PoolHandler.transferLps(184633414508257339692296072860122, 203671446610984328294118107730201, 34642553713628299033, 135339917753179699999999764236, 110220424372011764574622562304641); + _reserveERC20PoolHandler.bucketTake(115792089237316195423570985008687907853269984665640564039457584007913129639935, 3829549741322560625, true, 194146934987766163254349730117507128335504831810102719534851677221, 4732480241160878860425351979843049115515657935334802409699209074); + _reserveERC20PoolHandler.drawDebt(1, 115792089237316195423570985008687907853269984665640564039457584007913129639934, 195015028747880205316); + _reserveERC20PoolHandler.repayDebt(1480868866677973373563266629413, 302535661762914815953425538, 289604); + _reserveERC20PoolHandler.repayDebt(0, 115792089237316195423570985008687907853269984665640564039457584007913129639933, 115792089237316195423570985008687907853269984665640564039457584007913129639934); + _reserveERC20PoolHandler.settleAuction(2, 17153443478984101453401473025503395950732154159263, 3, 115792089237316195423570985008687907853269984665640564039457584007913129639933); + _reserveERC20PoolHandler.moveQuoteToken(115792089237316195423570985008687907853269984665640564039457584007913129639932, 105284856040705965826, 6, 115792089237316195423570985008687907853269984665640564039457584007913129639934, 115792089237316195423570985008687907853269984665640564039457584007913129639933); + _reserveERC20PoolHandler.pledgeCollateral(2, 40372681414098997932695643926645341076, 1); + _reserveERC20PoolHandler.drawDebt(45397, 29188809947358369997448329265, 1007827835052967256); + _reserveERC20PoolHandler.withdrawBonds(115792089237316195423570985008687907853269984665640564039457584007913129639934, 1148463503258880063377287873, 115792089237316195423570985008687907853269984665640564039457584007913129639934); + _reserveERC20PoolHandler.transferLps(0, 115792089237316195423570985008687907853269984665640564039457584007913129639933, 115792089237316195423570985008687907853269984665640564039457584007913129639932, 2, 1107871027141048045133446387536639399931); + _reserveERC20PoolHandler.repayDebt(210935835279891127479743655755, 31863663357592309638107226236833, 1264267125038486463229116936428); + _reserveERC20PoolHandler.removeQuoteToken(8111140262636269, 8879830156995870052991830976146, 45007, 7923268532088155483236204599548); + _reserveERC20PoolHandler.takeReserves(1823429416922747175532290196335891742112593527337518, 115792089237316195423570985008687907853269984665640564039457584007913129639932, 3); + _reserveERC20PoolHandler.kickReserveAuction(58970, 9783579015620699457012557129966); + _reserveERC20PoolHandler.transferLps(99813174211410456412845501360406, 1004698353172002056, 1004737060669881051, 1029316220890589580896344985, 1920398515164486257491273481); + _reserveERC20PoolHandler.addQuoteToken(1000002042017559293, 22001942759548186429207367283122, 32995, 122996746994842049905607927396792); + _reserveERC20PoolHandler.lenderKickAuction(42112388736146970996063877372687611472797385160773, 115792089237316195423570985008687907853269984665640564039457584007913129639934, 1830101812163257760035167237765727934453589369140548201538682896591); + _reserveERC20PoolHandler.pledgeCollateral(873997526269342972853729445, 212700214750724126705590695253, 699261128069635571950161724125); + _reserveERC20PoolHandler.stampLoan(20779858960809402604253349649621298456956778212692456138360400488091592818, 2); + _reserveERC20PoolHandler.withdrawBonds(89, 3, 270488841223974585568668370825700061196236645569024596625414266); + _reserveERC20PoolHandler.pledgeCollateral(4810686267623913331987481056958474436468823, 115792089237316195423570985008687907853269984665640564039457584007913129639935, 0); + _reserveERC20PoolHandler.removeQuoteToken(243059034441394937316222229163, 20155, 10598, 105237); + _reserveERC20PoolHandler.takeAuction(353095914745614344874854296826074246381784484285761170, 108676431757798502254327317752387019137928469130723472373786313872276353, 115792089237316195423570985008687907853269984665640564039457584007913129639935, 115792089237316195423570985008687907853269984665640564039457584007913129639934); + _reserveERC20PoolHandler.pledgeCollateral(82533955199386265420994751578339381566578590, 2, 46326290204754911406110575716876805); + _reserveERC20PoolHandler.settleAuction(115792089237316195423570985008687907853269984665640564039457584007913129639932, 1190965943378146, 120136135420991, 115792089237316195423570985008687907853269984665640564039457584007913129639933); + _reserveERC20PoolHandler.bucketTake(3867328119, 964830386728456017255972493047, true, 200885187904806267189995644375, 1078427058759624748642471453711568385622119423127247172852269821812293567); + _reserveERC20PoolHandler.moveQuoteToken(2743718832, 22536, 1020443781884248669, 45444, 8948708199492119143187143781099); + invariant_bucket(); + } + } \ No newline at end of file diff --git a/tests/forge/utils/FenwickTreeInstance.sol b/tests/forge/utils/FenwickTreeInstance.sol index 733464b72..eec9d3e6e 100644 --- a/tests/forge/utils/FenwickTreeInstance.sol +++ b/tests/forge/utils/FenwickTreeInstance.sol @@ -95,10 +95,13 @@ contract FenwickTreeInstance is DSTestPlus { amount = insertions_ == 1 ? amount_ : (amount_ % insertions_) * randomInRange(1_000, 1 * 1e10, true); // Update values - add(i, amount); - amount_ -= amount; - insertions_ -= 1; - cumulativeAmount += amount; + if (amount != 0) { + add(i, amount); + amount_ -= amount; + cumulativeAmount += amount; + } + + insertions_ -= 1; // Verify tree sum assertEq(deposits.treeSum(), cumulativeAmount);