Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

test: Add rate setting logic (SC-483) #15

Merged
merged 115 commits into from
Jul 3, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
115 commits
Select commit Hold shift + click to select a range
822694a
feat: first test working
lucas-manuel May 18, 2024
d6530e1
feat: use larger numbers:
lucas-manuel May 18, 2024
8f11df4
feat: test with initial burn amount passing
lucas-manuel May 18, 2024
78fb4ad
feat: update tests to work with updated burn logic, move conversion f…
lucas-manuel May 21, 2024
d32fd2f
feat: remove todos
lucas-manuel May 21, 2024
2290417
fix: update to remove console and update comment
lucas-manuel May 21, 2024
1fe351b
feat: get swap tests working
lucas-manuel May 22, 2024
cbea0ee
feat: get all swap tests working
lucas-manuel May 22, 2024
7d1101d
fix: update for three assets in logic
lucas-manuel May 22, 2024
80440e0
feat: all tests passing
lucas-manuel May 22, 2024
51b980d
fix: rm commented out test
lucas-manuel May 22, 2024
e6b67c6
feat: add preview swap tests
lucas-manuel May 22, 2024
ffa4513
feat: move logic out of single use internal and use conversion rate e…
lucas-manuel May 22, 2024
e9c519b
feat: move divRoundUp out of single use internal
lucas-manuel May 22, 2024
6ec2b23
feat: add full coverage for conversion tests
lucas-manuel May 22, 2024
2be5afc
feat: add more preview cases
lucas-manuel May 22, 2024
4299e03
feat: refactor PSM to use three assets
lucas-manuel May 22, 2024
64c9939
fix: rm comment
lucas-manuel May 22, 2024
2c43f92
feat: add interface, natspec, events, referral code, tests passing
lucas-manuel May 22, 2024
57c65d6
fix: update to rm consolegp
lucas-manuel May 22, 2024
c0616bf
Merge branch 'sc-447-build-threeway-swap' into sc-448-add-referral-code
lucas-manuel May 22, 2024
416034f
feat: add events testing
lucas-manuel May 23, 2024
114f92b
feat: make precisions internal and add state var natspec
lucas-manuel May 23, 2024
8c2f83b
feat: finish natspec
lucas-manuel May 23, 2024
61443c8
feat: add readme
lucas-manuel May 23, 2024
6ca25a8
feat: add referral code note
lucas-manuel May 23, 2024
c4f8c78
fix: update constructor test
lucas-manuel May 23, 2024
b070a44
fix: update links
lucas-manuel May 23, 2024
6947398
fix: reformatting
lucas-manuel May 23, 2024
9bdcfc5
fix: update testing section
lucas-manuel May 23, 2024
d69bc8b
fix: improve overview
lucas-manuel May 23, 2024
04cc6ac
feat: add emojis
lucas-manuel May 23, 2024
54a4afe
feat: remove all share burn logic, get all non inflation attack tests…
May 30, 2024
ce5653d
fix: cleanup diff
May 30, 2024
259cf16
fix: update to use initial deposit instead of burn
May 30, 2024
62ef5c2
feat: add readme section explaining attack
May 30, 2024
0720150
fix: minimize diff
May 30, 2024
5a03fde
feat: fix conflicts
May 30, 2024
c5f7cf0
feat: rm all references to initial burn, update tests
May 30, 2024
e6c654d
fix: address bartek comments
May 30, 2024
e540afa
feat: update all tests to work with new interfaces
May 30, 2024
c41b010
feat: add deposit failure mode tests
May 30, 2024
847a1db
feat: update to add assertions for return in deposit
May 30, 2024
ecbf99b
feat: add withdraw failure tests
May 30, 2024
44a5d52
feat: update to address comments outside sharesToBurn
Jun 3, 2024
9c3958e
feat: update inflation attack test and readme
Jun 3, 2024
4c9cf09
fix: update readme
Jun 3, 2024
cb9931a
feat: update test to constrain deposit/withdraw
Jun 3, 2024
e576672
feat: update to add both cases
Jun 3, 2024
e994287
fix: merge conflicts
Jun 3, 2024
9688892
fix: merge conflicts
Jun 3, 2024
b80ed6e
fix: merge conflicts
Jun 3, 2024
108624a
fix: merge conflicts
Jun 4, 2024
73d8c8c
feat: update per review
lucas-manuel Jun 4, 2024
d6c6f03
fix: merge conflicts
lucas-manuel Jun 4, 2024
5319255
Merge branch 'sc-448-add-referral-code' into sc-453-add-receiver-depo…
lucas-manuel Jun 4, 2024
0f182b2
feat: update to use underscore bound, fix test
lucas-manuel Jun 5, 2024
dfab7ec
Merge branch 'sc-447-build-threeway-swap' into sc-448-add-referral-code
lucas-manuel Jun 5, 2024
b288568
fix: merge conflicts
lucas-manuel Jun 5, 2024
ba44086
fix: typo
lucas-manuel Jun 5, 2024
62f5423
fix: merge conflicts
lucas-manuel Jun 5, 2024
9a243f9
feat: add overrides, remove referrals, update referral type
lucas-manuel Jun 10, 2024
cc68ed3
fix: update expect emit
lucas-manuel Jun 10, 2024
9862a53
feat: update name and remove todos
lucas-manuel Jun 10, 2024
376fa83
feat: move files and set up structure
lucas-manuel Jun 10, 2024
73cb854
feat: update to rename files, contracts, and errors
lucas-manuel Jun 10, 2024
f711954
fix: merge conflicts
lucas-manuel Jun 10, 2024
23c870d
fix: merge conflicts
lucas-manuel Jun 10, 2024
ce0949f
fix: merge conflicts
lucas-manuel Jun 10, 2024
81d2e37
fix: rm dup file, update toml
lucas-manuel Jun 10, 2024
fbff8d3
feat: get deposits working
lucas-manuel Jun 10, 2024
3e5a3eb
chore: refactor into proper inheritance structure
lucas-manuel Jun 10, 2024
2e60593
feat: get all functions working with reverts
lucas-manuel Jun 10, 2024
14fdf08
fix: cofnlicts
lucas-manuel Jun 13, 2024
defc84e
feat: update conversion
lucas-manuel Jun 13, 2024
bbc3e8e
feat: get swaps working without reverts
lucas-manuel Jun 13, 2024
4c04863
feat: add fully working deposit/withdraw/swaps, invariant_B failing
lucas-manuel Jun 13, 2024
d23bfbe
ci: update for ci
lucas-manuel Jun 13, 2024
7ba3e16
fix: update name
lucas-manuel Jun 13, 2024
499afae
chore: rm basly cased file
lucas-manuel Jun 13, 2024
d1daf4b
chore: re add
lucas-manuel Jun 13, 2024
84c3787
fix: re add invariant
lucas-manuel Jun 13, 2024
3814067
ci: experiment with 2 million total calls
lucas-manuel Jun 13, 2024
9215a29
ci: add show progress flag
lucas-manuel Jun 13, 2024
9caf3c6
fix: move file back
lucas-manuel Jun 13, 2024
094d613
ci: update verbosity
lucas-manuel Jun 13, 2024
2085360
ci: add PR profile
lucas-manuel Jun 13, 2024
0605586
fix: rm redundant files
lucas-manuel Jun 13, 2024
74dba88
feat: update from review changes
lucas-manuel Jun 14, 2024
fa3a232
feat: add afterInvariant hook
lucas-manuel Jun 19, 2024
ba9b5fe
Merge branch 'master' into sc-459-add-basic-invariant-testing
lucas-manuel Jun 20, 2024
608daf5
Merge branch 'master' into sc-459-add-basic-invariant-testing
lucas-manuel Jun 20, 2024
c4bf0cc
fix: update invariant
lucas-manuel Jun 20, 2024
df65c1b
fix: add fuzz failure
lucas-manuel Jun 20, 2024
42581aa
chore: rm indexing comment
lucas-manuel Jun 21, 2024
49fdc1f
Merge branch 'sc-459-add-basic-invariant-testing' into sc-481-add-inv…
lucas-manuel Jun 21, 2024
1b07d93
feat: refactor structure
lucas-manuel Jun 21, 2024
e5153a0
feat: both invariants working
lucas-manuel Jun 21, 2024
c664f2c
fix: update comment
lucas-manuel Jun 21, 2024
3bcb0d0
feat: add rate setting logic
lucas-manuel Jun 21, 2024
54e8ae9
fix: update toml
lucas-manuel Jun 21, 2024
f982ff3
fix: rm redundant files from merge
lucas-manuel Jun 21, 2024
1c3c450
Merge branch 'sc-459-add-basic-invariant-testing' into sc-481-add-inv…
lucas-manuel Jun 21, 2024
ffa6eee
fix: update tolerances
lucas-manuel Jun 21, 2024
a2e6f05
feat: update to add seeding as part of invariants
lucas-manuel Jun 21, 2024
68f41ab
fix: merge branch
lucas-manuel Jun 21, 2024
adf11a5
fix: update toml
lucas-manuel Jun 21, 2024
07d372e
fix: rm redundant files from merge
lucas-manuel Jun 21, 2024
7b1bf35
fix: update tolerances
lucas-manuel Jun 21, 2024
6ed0f85
Merge branch 'sc-481-add-invariant-hooks-more-suites' into sc-483-add…
lucas-manuel Jun 21, 2024
d78c024
fix: rm invariant logs
lucas-manuel Jun 21, 2024
e358437
fix: update tolerance
lucas-manuel Jun 24, 2024
2a9fe49
fix: merge conflicts
lucas-manuel Jul 2, 2024
92cfdf6
fix: formatting
lucas-manuel Jul 2, 2024
77132c7
fix: update test name
lucas-manuel Jul 3, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
88 changes: 77 additions & 11 deletions test/invariant/Invariants.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,17 @@ import "forge-std/Test.sol";

import { PSMTestBase } from "test/PSMTestBase.sol";

import { LpHandler } from "test/invariant/handlers/LpHandler.sol";
import { SwapperHandler } from "test/invariant/handlers/SwapperHandler.sol";
import { TransferHandler } from "test/invariant/handlers/TransferHandler.sol";
import { LpHandler } from "test/invariant/handlers/LpHandler.sol";
import { RateSetterHandler } from "test/invariant/handlers/RateSetterHandler.sol";
import { SwapperHandler } from "test/invariant/handlers/SwapperHandler.sol";
import { TransferHandler } from "test/invariant/handlers/TransferHandler.sol";

abstract contract PSMInvariantTestBase is PSMTestBase {

LpHandler public lpHandler;
SwapperHandler public swapperHandler;
TransferHandler public transferHandler;
LpHandler public lpHandler;
RateSetterHandler public rateSetterHandler;
SwapperHandler public swapperHandler;
TransferHandler public transferHandler;

address BURN_ADDRESS = makeAddr("burn-address");

Expand Down Expand Up @@ -45,7 +47,7 @@ abstract contract PSMInvariantTestBase is PSMTestBase {
assertApproxEqAbs(
psm.getPsmTotalValue(),
psm.convertToAssetValue(psm.totalShares()),
2
3
);
}

Expand All @@ -69,12 +71,14 @@ abstract contract PSMInvariantTestBase is PSMTestBase {
console.log("withdrawCount ", lpHandler.withdrawCount());
console.log("swapCount ", swapperHandler.swapCount());
console.log("zeroBalanceCount", swapperHandler.zeroBalanceCount());
console.log("setRateCount ", rateSetterHandler.setRateCount());
console.log(
"sum ",
lpHandler.depositCount() +
lpHandler.withdrawCount() +
swapperHandler.swapCount() +
swapperHandler.zeroBalanceCount()
swapperHandler.zeroBalanceCount() +
rateSetterHandler.setRateCount()
);
}

Expand Down Expand Up @@ -196,8 +200,6 @@ contract PSMInvariants_ConstantRate_NoTransfer is PSMInvariantTestBase {
lpHandler = new LpHandler(psm, dai, usdc, sDai, 3);
swapperHandler = new SwapperHandler(psm, dai, usdc, sDai, 3);

rateProvider.__setConversionRate(1.25e27);

targetContract(address(lpHandler));
targetContract(address(swapperHandler));
}
Expand Down Expand Up @@ -229,9 +231,73 @@ contract PSMInvariants_ConstantRate_WithTransfers is PSMInvariantTestBase {
swapperHandler = new SwapperHandler(psm, dai, usdc, sDai, 3);
transferHandler = new TransferHandler(psm, dai, usdc, sDai);

rateProvider.__setConversionRate(1.25e27);
targetContract(address(lpHandler));
targetContract(address(swapperHandler));
targetContract(address(transferHandler));
}

function invariant_A() public view {
_checkInvariant_A();
}

function invariant_B() public view {
_checkInvariant_B();
}

function invariant_C() public view {
_checkInvariant_C();
}

function afterInvariant() public {
_withdrawAllPositions();
}

}

contract PSMInvariants_RateSetting_NoTransfer is PSMInvariantTestBase {

function setUp() public override {
super.setUp();

lpHandler = new LpHandler(psm, dai, usdc, sDai, 3);
rateSetterHandler = new RateSetterHandler(rateProvider, 1.25e27);
swapperHandler = new SwapperHandler(psm, dai, usdc, sDai, 3);

targetContract(address(lpHandler));
targetContract(address(rateSetterHandler));
targetContract(address(swapperHandler));
}

function invariant_A() public view {
_checkInvariant_A();
}

function invariant_B() public view {
_checkInvariant_B();
}

function invariant_C() public view {
_checkInvariant_C();
}

function afterInvariant() public {
_withdrawAllPositions();
}

}

contract PSMInvariants_RateSetting_WithTransfers is PSMInvariantTestBase {

function setUp() public override {
super.setUp();

lpHandler = new LpHandler(psm, dai, usdc, sDai, 3);
rateSetterHandler = new RateSetterHandler(rateProvider, 1.25e27);
swapperHandler = new SwapperHandler(psm, dai, usdc, sDai, 3);
transferHandler = new TransferHandler(psm, dai, usdc, sDai);

targetContract(address(lpHandler));
targetContract(address(rateSetterHandler));
targetContract(address(swapperHandler));
targetContract(address(transferHandler));
}
Expand Down
30 changes: 30 additions & 0 deletions test/invariant/handlers/RateSetterHandler.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
pragma solidity ^0.8.13;

import { StdUtils } from "forge-std/StdUtils.sol";

import { MockRateProvider } from "test/mocks/MockRateProvider.sol";

contract RateSetterHandler is StdUtils {

uint256 public rate;

MockRateProvider public rateProvider;

uint256 public setRateCount;

constructor(MockRateProvider rateProvider_, uint256 initialRate) {
rateProvider = rateProvider_;
rate = initialRate;
}

function setRate(uint256 rateIncrease) external {
// Increase the rate by up to 100%
rate += _bound(rateIncrease, 0, 1e27);

rateProvider.__setConversionRate(rate);

setRateCount++;
}

}
Loading