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

Invariant testing campaign #29

Merged
merged 87 commits into from
Oct 16, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
87 commits
Select commit Hold shift + click to select a range
57af261
chore: add solmate.
clement-ux Sep 29, 2024
f815e9d
feat: add mock for stETH.
clement-ux Sep 29, 2024
6b62791
feat: add mock for Lido Withdraw.
clement-ux Sep 29, 2024
0110c96
fix: cleanup variables
clement-ux Sep 29, 2024
c3c82ec
feat: create shared contract for invariant.
clement-ux Sep 29, 2024
888b991
[WIP] feat: add handler logic.
clement-ux Sep 29, 2024
482de71
feat: add more users.
clement-ux Sep 29, 2024
ad87bc7
[WIP] feat: add distribution handler.
clement-ux Sep 29, 2024
192bdaa
chore: add invariant config
clement-ux Sep 30, 2024
ac3181d
fix: address null user bug.
clement-ux Sep 30, 2024
e42946b
feat: add LP Handler.
clement-ux Sep 30, 2024
79e1a85
[WIP]: feat: swapHandler.
clement-ux Sep 30, 2024
fb388bc
feat: add swapTokensForExactTokens to handler.
clement-ux Oct 1, 2024
82c5f5b
fix: adjust handler weight.
clement-ux Oct 1, 2024
36aeabf
fix: set default verbosity to 3.
clement-ux Oct 1, 2024
378fce0
fix: adjust console log
clement-ux Oct 1, 2024
3140ca1
feat: add Owner handler.
clement-ux Oct 1, 2024
89ed62a
fix: account withdraw queue in available liquidity.
clement-ux Oct 1, 2024
95d2c27
fix: adjust failing tx.
clement-ux Oct 1, 2024
5471e89
fix: use vm to send ETH instead of .call.
clement-ux Oct 1, 2024
3e275e5
feat: add Lido Liquidity Manager Handler.
clement-ux Oct 1, 2024
b9b45d9
feat: check preview return corerct amount.
clement-ux Oct 1, 2024
9ab66ef
Merge remote-tracking branch 'origin/nicka/lp' into clement/invariant…
clement-ux Oct 2, 2024
797decf
fix: use correct price
clement-ux Oct 2, 2024
add868a
fix: adjust new availableTotalAssets
clement-ux Oct 2, 2024
2ec3534
chore: use --fail-fast for test
clement-ux Oct 2, 2024
50ad339
[WIP] feat: add first invariants.
clement-ux Oct 2, 2024
609bf7e
[WIP] feat: add more invariants.
clement-ux Oct 2, 2024
77f5c70
Merge remote-tracking branch 'origin/nicka/lp' into clement/invariant…
clement-ux Oct 2, 2024
bf4533d
[WIP] feat: adjust handler and add more invariants.
clement-ux Oct 2, 2024
0a4518a
[WIP] feat: add invariant for lido liquidity manager.
clement-ux Oct 2, 2024
033b816
feat: add donation handler.
clement-ux Oct 2, 2024
2bc43a1
test: add new concrete scenario test.
clement-ux Oct 3, 2024
aa7ee5f
Merge remote-tracking branch 'origin/nicka/lp' into clement/invariant…
clement-ux Oct 3, 2024
f499fb7
test: fix CI.
clement-ux Oct 3, 2024
257468e
try to fix CI.
clement-ux Oct 3, 2024
084a0ba
Merge remote-tracking branch 'origin/nicka/lp' into clement/invariant…
clement-ux Oct 3, 2024
17f7aaf
test[invariant]: ensure enough liquiidty before claiming fees.
clement-ux Oct 3, 2024
5217b50
Merge remote-tracking branch 'origin/nicka/lp' into clement/invariant…
clement-ux Oct 3, 2024
6d2f18e
chore: add --show-progress for `make test`
clement-ux Oct 3, 2024
863d33a
test[invariant]: adjust `withdrawsClaimable` removal.
clement-ux Oct 3, 2024
43c4d01
fix: use aproxEq instead of Eq due to rounding error
clement-ux Oct 3, 2024
3359465
chore: remove --show-progress
clement-ux Oct 3, 2024
808fe6f
test[invariant]: only request when there is enough liquidity
clement-ux Oct 3, 2024
f4b7c6f
test[invariant]: add more invariant.
clement-ux Oct 3, 2024
9c50d5f
fix: remove wrong invariant.
clement-ux Oct 3, 2024
4137acd
Merge remote-tracking branch 'origin/nicka/lp' into clement/invariant…
clement-ux Oct 4, 2024
e6b19a8
fix: adjust with latest update.
clement-ux Oct 4, 2024
44069d7
Merge remote-tracking branch 'origin/nicka/lp' into clement/invariant…
clement-ux Oct 4, 2024
b6368a8
test: adjust with lastest update.
clement-ux Oct 4, 2024
2ceabe2
Merge remote-tracking branch 'origin/nicka/lp' into clement/invariant…
clement-ux Oct 7, 2024
4653e19
test[invariant]: use owner to set price.
clement-ux Oct 7, 2024
1c32e3b
Merge remote-tracking branch 'origin/nicka/lp' into clement/invariant…
clement-ux Oct 8, 2024
71f7da6
chore: add --show-progress for tests.
clement-ux Oct 8, 2024
8bce679
fix: use new claimDelay.
clement-ux Oct 8, 2024
f10eb60
docs: adjust comments.
clement-ux Oct 8, 2024
e29e8da
Merge remote-tracking branch 'origin/nicka/lp' into clement/invariant…
clement-ux Oct 9, 2024
1901361
test[invariant]: add setCrossPrice to handlers.
clement-ux Oct 9, 2024
3e9d7ce
test[invariant]: adjust test.
clement-ux Oct 9, 2024
2097537
forge fmt
clement-ux Oct 9, 2024
e338a17
feat: add stats for invariants.
clement-ux Oct 9, 2024
aef364e
Merge remote-tracking branch 'origin/nicka/lp' into clement/invariant…
clement-ux Oct 10, 2024
de7aaa0
chore: ignore warning in Proxy.sol.
clement-ux Oct 10, 2024
1957347
fix: adjust with new variable name.
clement-ux Oct 10, 2024
12065c0
test[invariant]: adjust swap handler with latest update.
clement-ux Oct 10, 2024
a366d84
fix: import console.
clement-ux Oct 10, 2024
05daa7d
fix: adjust claimResquest for invariant.
clement-ux Oct 11, 2024
18a9081
test[invariant]: WIP.
clement-ux Oct 11, 2024
dcce7aa
test[invariant]: add LLM to invariant.
clement-ux Oct 11, 2024
d939532
test[invariant]: adjust owner handler.
clement-ux Oct 11, 2024
9827f82
perf: optimize calls for logs.
clement-ux Oct 11, 2024
da78f33
perf: adjust % for call distribution.
clement-ux Oct 11, 2024
2bd4a90
feat: add skip %.
clement-ux Oct 11, 2024
c1c6497
test[invariant]: adjust last invariant.
clement-ux Oct 11, 2024
a64ffe6
Merge remote-tracking branch 'origin/nicka/lp' into clement/invariant…
clement-ux Oct 14, 2024
953f61a
fix: log stat bool.
clement-ux Oct 14, 2024
b67985a
test[invariant]: up only shares values invariant.
clement-ux Oct 14, 2024
23d45e6
Merge remote-tracking branch 'origin/nicka/lp' into clement/invariant…
clement-ux Oct 15, 2024
e61ff25
fix: adjust type uint120 to uint128
clement-ux Oct 15, 2024
5e685b1
fix: prevetn setCrossPrice to revert.
clement-ux Oct 15, 2024
5df7718
feat: remove all user funds after invariants.
clement-ux Oct 15, 2024
7e74fca
test[invariant]: add approx up-only invariant [WIP]
clement-ux Oct 15, 2024
fd029b6
Merge remote-tracking branch 'origin/nicka/lp' into clement/invariant…
clement-ux Oct 15, 2024
c2ea676
test[invariant]: add invariant for approx up-only.
clement-ux Oct 15, 2024
fd99b10
docs: adjust natspec and description.
clement-ux Oct 15, 2024
d2a6f16
forge fmt
clement-ux Oct 15, 2024
879081e
fix: increase error tolerance.
clement-ux Oct 15, 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
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ snapshot:

# Tests
test:
@forge test --summary
@forge test --summary --fail-fast --show-progress

test-f-%:
@FOUNDRY_MATCH_TEST=$* make test
Expand Down
9 changes: 9 additions & 0 deletions foundry.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ auto_detect_remappings = false
gas_reports = ["OEthARM", "Proxy"]
fs_permissions = [{ access = "read-write", path = "./build" }]
extra_output_files = ["metadata"]
ignored_warnings_from = ["src/contracts/Proxy.sol"]
remappings = [
"contracts/=./src/contracts",
"script/=./script",
Expand All @@ -17,15 +18,23 @@ remappings = [
"forge-std/=dependencies/forge-std-1.9.2/src/",
"@openzeppelin/contracts/=dependencies/@openzeppelin-contracts-5.0.2/",
"@openzeppelin/contracts-upgradeable/=dependencies/@openzeppelin-contracts-upgradeable-5.0.2/",
"@solmate/=dependencies/solmate-6.7.0/src/",
]

[fuzz]
runs = 1_000

[invariant]
runs = 256
depth = 500
fail_on_revert = true
shrink_run_limit = 5_000

[dependencies]
"@openzeppelin-contracts" = "5.0.2"
"@openzeppelin-contracts-upgradeable" = "5.0.2"
forge-std = { version = "1.9.2", git = "https://github.com/foundry-rs/forge-std.git", rev = "5a802d7c10abb4bbfb3e7214c75052ef9e6a06f8" }
solmate = "6.7.0"

[soldeer]
recursive_deps = false
Expand Down
49 changes: 48 additions & 1 deletion test/Base.sol
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@ abstract contract Base_Test_ is Test {
Proxy public proxy;
Proxy public lpcProxy;
Proxy public lidoProxy;
Proxy public lidoOwnerProxy;
OethARM public oethARM;
LidoARM public lidoARM;
CapManager public capManager;
Expand All @@ -51,11 +50,20 @@ abstract contract Base_Test_ is Test {
/// --- Governance, multisigs and EOAs
//////////////////////////////////////////////////////
address public alice;
address public bob;
address public charlie;
address public dave;
address public eve;
address public frank;
address public george;
address public harry;

address public deployer;
address public governor;
address public operator;
address public oethWhale;
address public feeCollector;
address public lidoWithdraw;

//////////////////////////////////////////////////////
/// --- DEFAULT VALUES
Expand All @@ -70,4 +78,43 @@ abstract contract Base_Test_ is Test {
function setUp() public virtual {
resolver = new AddressResolver();
}

/// @notice Better if called once all contract have been depoyed.
function labelAll() public virtual {
// Contracts
_labelNotNull(address(proxy), "DEFAULT PROXY");
_labelNotNull(address(lpcProxy), "LPC PROXY");
_labelNotNull(address(lidoProxy), "LIDO ARM PROXY");
_labelNotNull(address(oethARM), "OETH ARM");
_labelNotNull(address(lidoARM), "LIDO ARM");
_labelNotNull(address(capManager), "CAP MANAGER");

_labelNotNull(address(oeth), "OETH");
_labelNotNull(address(weth), "WETH");
_labelNotNull(address(steth), "STETH");
_labelNotNull(address(wsteth), " WRAPPED STETH");
_labelNotNull(address(badToken), "BAD TOKEN");
_labelNotNull(address(vault), "OETH VAULT");

// Governance, multisig and EOAs
_labelNotNull(alice, "Alice");
_labelNotNull(bob, "Bob");
_labelNotNull(charlie, "Charlie");
_labelNotNull(dave, "Dave");
_labelNotNull(eve, "Eve");
_labelNotNull(frank, "Frank");
_labelNotNull(george, "George");
_labelNotNull(harry, "Harry");

_labelNotNull(deployer, "Deployer");
_labelNotNull(governor, "Governor");
_labelNotNull(operator, "Operator");
_labelNotNull(oethWhale, "OETH Whale");
_labelNotNull(feeCollector, "Fee Collector");
_labelNotNull(lidoWithdraw, "Lido Withdraw");
}

function _labelNotNull(address _address, string memory _name) internal {
if (_address != address(0)) vm.label(_address, _name);
}
}
1 change: 0 additions & 1 deletion test/fork/shared/Shared.sol
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,6 @@ abstract contract Fork_Shared_Test_ is Modifiers {
proxy = new Proxy();
lpcProxy = new Proxy();
lidoProxy = new Proxy();
lidoOwnerProxy = new Proxy();

// --- Deploy OethARM implementation ---
// Deploy OethARM implementation.
Expand Down
Loading