-
Notifications
You must be signed in to change notification settings - Fork 8
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 TEST #83
base: temp-invariant
Are you sure you want to change the base?
INVARIANT TEST #83
Conversation
Fixes CS-V2Gov-020.
As value now encodes timestamp, it would never be zero, we need to decode and then check.
Both LUSD and LQTY are already safe.
Needed for `vm.expectPartialRevert()`
The fetched state doesn't change much depending on fuzz inputs, so having a different seed each time won't result in drastically increased RPC usage. That is, once we fix the tests, because the Foundry action only saves the RPC cache if the tests are passing. (Why though)?
Fixes IR-02.
It was taking 20 minutes for a single test run.
fix: Remove safeTransfer from UserProxy
fix: Remove ForwardBribe contract
If you pass any amount higher than your stake, and LQTYStaking will internally truncate it to the maximum withdrawable amount.
Recon Campaign Started
|
Recon Job CompletedRecon Recap for liquity/V2-gov/mainFuzzer overview
|
Property | Status |
---|---|
property_initiative_ts_matches_user_when_non_zero() | ✅ |
check_unregisterable_consistecy(uint8) | ❌ |
property_resetting_never_reverts() | ✅ |
check_claimable_solvency() | ✅ |
excludeSenders() | ✅ |
property_shouldNeverRevertgetInitiativeState(uint8) | ✅ |
check_realized_claiming_solvency() | ✅ |
targetInterfaces() | ✅ |
property_shouldNeverRevertgetInitiativeSnapshotAndState(uint8) | ✅ |
governance_allocateLQTY_clamped_single_initiative(uint8,uint96,uint96) | ✅ |
property_BI02() | ✅ |
property_computingGlobalPowerNeverReverts() | ✅ |
governance_resetAllocations() | ✅ |
property_global_ts_is_always_greater_than_start() | ✅ |
governance_depositLQTYViaPermit(uint88) | ✅ |
targetSenders() | ✅ |
targetContracts() | ✅ |
property_shouldGetTotalVotesAndState() | ✅ |
property_BI10() | ✅ |
property_shouldNeverRevertcalculateVotingThreshold() | ✅ |
depositTsIsRational(uint88) | ✅ |
helper_accrueBold(uint88) | ✅ |
property_sum_of_user_voting_weights_strict() | ✅ |
property_sum_of_user_initiative_allocations() | ✅ |
depositMustFailOnNonZeroAlloc(uint88) | ✅ |
property_summingInitiativesPowerNeverReverts() | ✅ |
withdrwaMustFailOnNonZeroAcc(uint88) | ✅ |
governance_allocateLQTY_clamped_single_initiative_2nd_user(uint8,uint96,uint96) | ✅ |
helper_deployInitiative() | ✅ |
property_sum_of_lqty_global_user_matches() | ✅ |
property_sum_of_votes_in_bribes_match() | ✅ |
governance_withdrawLQTY_shouldRevertWhenClamped(uint88) | ❌ |
targetArtifactSelectors() | ✅ |
property_sum_of_lqty_initiative_user_matches() | ✅ |
initiative_depositBribe(uint128,uint128,uint16,uint8) | ✅ |
property_GV01() | ✅ |
property_viewCalculateVotingThreshold() | ✅ |
governance_registerInitiative(uint8) | ✅ |
governance_withdrawLQTY(uint88) | ✅ |
property_shouldNeverRevertsnapshotVotesForInitiative(uint8) | ✅ |
property_BI07() | ✅ |
governance_resetAllocations_user_2() | ✅ |
targetArtifacts() | ✅ |
governance_allocateLQTY(int88[],int88[]) | ✅ |
property_sum_of_initatives_matches_total_votes_bounded() | ✅ |
property_BI04() | ✅ |
targetSelectors() | ✅ |
governance_depositLQTY(uint88) | ✅ |
check_warmup_unregisterable_consistency(uint8) | ✅ |
property_ensure_user_alloc_cannot_dos() | ✅ |
property_BI08() | ✅ |
property_sum_of_initatives_matches_total_votes_insolvency_assertion() | ✅ |
property_shouldNeverRevertgetLatestVotingThreshold() | ✅ |
governance_claimForInitiativeDoesntRevert(uint8) | ✅ |
property_BI03() | ✅ |
excludeSelectors() | ✅ |
excludeArtifacts() | ✅ |
check_claim_soundness() | ✅ |
property_shouldNeverRevertsecondsWithinEpoch() | ✅ |
failed() | ✅ |
property_sum_of_user_voting_weights_bounded() | ✅ |
property_BI01() | ✅ |
property_shouldNeverRevertepochStart(uint8) | ✅ |
property_BI09() | ✅ |
property_shouldNeverRevertSnapshotAndState(uint8) | ✅ |
property_shouldNeverRevertlqtyToVotes() | ✅ |
governance_snapshotVotesForInitiative(address) | ✅ |
governance_deployUserProxy() | ✅ |
governance_depositLQTY_2(uint88) | ✅ |
property_allocations_are_never_dangerously_high() | ✅ |
property_alloc_deposit_reset_is_idempotent(uint8,uint96,uint96,uint88) | ✅ |
property_shouldNeverRevertgetTotalVotesAndState() | ✅ |
clamped_claimBribes(uint8) | ✅ |
property_shouldNeverRevertepoch() | ✅ |
governance_claimForInitiative(uint8) | ✅ |
property_GV_09() | ✅ |
excludeContracts() | ✅ |
governance_claimForInitiativeFuzzTest(uint8) | ✅ |
property_user_ts_is_always_greater_than_start() | ✅ |
property_viewTotalVotesAndStateEquivalency() | ✅ |
check_skip_consistecy(uint8) | ✅ |
governance_unregisterInitiative(uint8) | ✅ |
governance_claimFromStakingV1(uint8) | ✅ |
IS_TEST() | ✅ |
initiative_claimBribes(uint16,uint16,uint16,uint8) | ✅ |
property_shouldNeverRevertgetInitiativeState_arbitrary(address) | ✅ |
property_sum_of_initatives_matches_total_votes_strict() | ❌ |
AssertionFailed(..) | ✅ |
Broken Properties
Broken property:
governance_withdrawLQTY_shouldRevertWhenClamped
Sequence
// forge test --match-test test_governance_withdrawLQTY_shouldRevertWhenClamped_ -vv
function test_governance_withdrawLQTY_shouldRevertWhenClamped_() public {
vm.roll(block.number + 10043);
vm.warp(block.timestamp + 526196);
vm.prank(0x0000000000000000000000000000000000020000);
check_claim_soundness();
vm.roll(block.number + 15513);
vm.warp(block.timestamp + 571162);
vm.prank(0x0000000000000000000000000000000000010000);
canary_bribeWasThere(15);
vm.roll(block.number + 45695);
vm.warp(block.timestamp + 482712);
vm.prank(0x0000000000000000000000000000000000020000);
depositTsIsRational(5893831015362);
vm.roll(block.number + 14467);
vm.warp(block.timestamp + 142334);
vm.prank(0x0000000000000000000000000000000000020000);
check_claim_soundness();
vm.roll(block.number + 13867);
vm.warp(block.timestamp + 282471);
vm.prank(0x0000000000000000000000000000000000020000);
property_shouldNeverRevertgetInitiativeSnapshotAndState(7);
vm.roll(block.number + 20123);
vm.warp(block.timestamp + 14273);
vm.prank(0x0000000000000000000000000000000000010000);
property_sum_of_user_voting_weights_strict();
vm.roll(block.number + 60450);
vm.warp(block.timestamp + 111);
vm.prank(0x0000000000000000000000000000000000030000);
property_shouldNeverRevertgetInitiativeState(150);
vm.roll(block.number + 4974);
vm.warp(block.timestamp + 199265);
vm.prank(0x0000000000000000000000000000000000030000);
property_sum_of_user_voting_weights_bounded();
vm.roll(block.number + 34552);
vm.warp(block.timestamp + 242902);
vm.prank(0x0000000000000000000000000000000000010000);
canary_has_claimed();
vm.roll(block.number + 38663);
vm.warp(block.timestamp + 222374);
vm.prank(0x0000000000000000000000000000000000030000);
property_shouldNeverRevertgetTotalVotesAndState();
vm.roll(block.number + 4985);
vm.warp(block.timestamp + 570946);
vm.prank(0x0000000000000000000000000000000000030000);
property_BI09();
vm.roll(block.number + 9674);
vm.warp(block.timestamp + 289812);
vm.prank(0x0000000000000000000000000000000000010000);
governance_claimFromStakingV1(110);
vm.roll(block.number + 7448);
vm.warp(block.timestamp + 89);
vm.prank(0x0000000000000000000000000000000000010000);
initiative_depositBribe(340282366920938463463374607431768211454,126336084046100069511419215169487983921,11,252);
vm.roll(block.number + 20705);
vm.warp(block.timestamp + 570946);
vm.prank(0x0000000000000000000000000000000000020000);
depositMustFailOnNonZeroAlloc(1579010);
vm.roll(block.number + 2977);
vm.warp(block.timestamp + 150875);
vm.prank(0x0000000000000000000000000000000000020000);
governance_unregisterInitiative(33);
vm.roll(block.number + 22699);
vm.warp(block.timestamp + 322379);
vm.prank(0x0000000000000000000000000000000000010000);
property_sum_of_initatives_matches_total_votes_bounded();
vm.roll(block.number + 17602);
vm.warp(block.timestamp + 243876);
vm.prank(0x0000000000000000000000000000000000010000);
property_sum_of_lqty_initiative_user_matches();
vm.roll(block.number + 59713);
vm.warp(block.timestamp + 9968);
vm.prank(0x0000000000000000000000000000000000030000);
property_resetting_never_reverts();
vm.roll(block.number + 4817);
vm.warp(block.timestamp + 35001);
vm.prank(0x0000000000000000000000000000000000030000);
property_shouldNeverRevertsecondsWithinEpoch();
vm.roll(block.number + 4512);
vm.warp(block.timestamp + 35);
vm.prank(0x0000000000000000000000000000000000010000);
governance_deployUserProxy();
vm.roll(block.number + 17174);
vm.warp(block.timestamp + 166300);
vm.prank(0x0000000000000000000000000000000000020000);
property_sum_of_lqty_initiative_user_matches();
vm.roll(block.number + 21116);
vm.warp(block.timestamp + 182772);
vm.prank(0x0000000000000000000000000000000000010000);
property_BI02();
vm.roll(block.number + 44984);
vm.warp(block.timestamp + 322357);
vm.prank(0x0000000000000000000000000000000000030000);
check_skip_consistecy(53);
vm.roll(block.number + 60461);
vm.warp(block.timestamp + 321854);
vm.prank(0x0000000000000000000000000000000000020000);
initiative_claimBribes(35001,183,14196,62);
vm.roll(block.number + 60450);
vm.warp(block.timestamp + 586021);
vm.prank(0x0000000000000000000000000000000000030000);
property_viewTotalVotesAndStateEquivalency();
vm.roll(block.number + 47144);
vm.warp(block.timestamp + 137557);
vm.prank(0x0000000000000000000000000000000000030000);
property_BI02();
vm.roll(block.number + 23985);
vm.warp(block.timestamp + 488787);
vm.prank(0x0000000000000000000000000000000000020000);
governance_withdrawLQTY_shouldRevertWhenClamped(49999);
vm.roll(block.number + 50);
vm.warp(block.timestamp + 322070);
vm.prank(0x0000000000000000000000000000000000010000);
property_sum_of_votes_in_bribes_match();
vm.roll(block.number + 59712);
vm.warp(block.timestamp + 153417);
vm.prank(0x0000000000000000000000000000000000020000);
property_shouldNeverRevertcalculateVotingThreshold();
vm.roll(block.number + 3070);
vm.warp(block.timestamp + 555293);
vm.prank(0x0000000000000000000000000000000000010000);
governance_claimForInitiativeDoesntRevert(160);
vm.roll(block.number + 50329);
vm.warp(block.timestamp + 579336);
vm.prank(0x0000000000000000000000000000000000010000);
property_sum_of_initatives_matches_total_votes_bounded();
vm.roll(block.number + 41172);
vm.warp(block.timestamp + 556295);
vm.prank(0x0000000000000000000000000000000000010000);
governance_allocateLQTY_clamped_single_initiative(33,79228162514264337593543950331,4766066913258368482198917101);
vm.roll(block.number + 51879);
vm.warp(block.timestamp + 110826);
vm.prank(0x0000000000000000000000000000000000020000);
property_ensure_user_alloc_cannot_dos();
vm.roll(block.number + 3907);
vm.warp(block.timestamp + 406790);
vm.prank(0x0000000000000000000000000000000000010000);
property_shouldNeverRevertgetLatestVotingThreshold();
vm.roll(block.number + 32);
vm.warp(block.timestamp + 322248);
vm.prank(0x0000000000000000000000000000000000030000);
property_sum_of_lqty_global_user_matches();
vm.roll(block.number + 25985);
vm.warp(block.timestamp + 586023);
vm.prank(0x0000000000000000000000000000000000020000);
property_BI03();
vm.roll(block.number + 17636);
vm.warp(block.timestamp + 27959);
vm.prank(0x0000000000000000000000000000000000010000);
property_sum_of_lqty_global_user_matches();
vm.roll(block.number + 51798);
vm.warp(block.timestamp + 40);
vm.prank(0x0000000000000000000000000000000000010000);
governance_withdrawLQTY(248001436536186066808471196);
vm.roll(block.number + 24964);
vm.warp(block.timestamp + 322377);
vm.prank(0x0000000000000000000000000000000000020000);
property_initiative_ts_matches_user_when_non_zero();
vm.roll(block.number + 23276);
vm.warp(block.timestamp + 221143);
vm.prank(0x0000000000000000000000000000000000030000);
property_shouldNeverRevertsecondsWithinEpoch();
vm.roll(block.number + 44524);
vm.warp(block.timestamp + 499804);
vm.prank(0x0000000000000000000000000000000000010000);
helper_accrueBold(3000000000000000000000);
vm.roll(block.number + 25204);
vm.warp(block.timestamp + 562087);
vm.prank(0x0000000000000000000000000000000000030000);
governance_claimForInitiative(20);
vm.roll(block.number + 176);
vm.warp(block.timestamp + 262143);
vm.prank(0x0000000000000000000000000000000000010000);
property_allocations_are_never_dangerously_high();
vm.roll(block.number + 1953);
vm.warp(block.timestamp + 490163);
vm.prank(0x0000000000000000000000000000000000020000);
property_shouldNeverRevertSnapshotAndState(121);
vm.roll(block.number + 55645);
vm.warp(block.timestamp + 236465);
vm.prank(0x0000000000000000000000000000000000010000);
governance_depositLQTY_2(98642700719436913720620091);
vm.roll(block.number + 16636);
vm.warp(block.timestamp + 40000);
vm.prank(0x0000000000000000000000000000000000010000);
property_shouldGetTotalVotesAndState();
vm.roll(block.number + 64);
vm.warp(block.timestamp + 459103);
vm.prank(0x0000000000000000000000000000000000030000);
property_allocations_are_never_dangerously_high();
vm.roll(block.number + 32546);
vm.warp(block.timestamp + 477604);
vm.prank(0x0000000000000000000000000000000000010000);
property_sum_of_votes_in_bribes_match();
vm.roll(block.number + 37432);
vm.warp(block.timestamp + 349999);
vm.prank(0x0000000000000000000000000000000000010000);
property_BI08();
vm.roll(block.number + 2162);
vm.warp(block.timestamp + 203010);
vm.prank(0x0000000000000000000000000000000000030000);
property_GV_09();
vm.roll(block.number + 25064);
vm.warp(block.timestamp + 543587);
vm.prank(0x0000000000000000000000000000000000020000);
property_user_ts_is_always_greater_than_start();
vm.roll(block.number + 7923);
vm.warp(block.timestamp + 322356);
vm.prank(0x0000000000000000000000000000000000010000);
governance_withdrawLQTY_shouldRevertWhenClamped(3000000000000000000);
}
Broken property:
check_unregisterable_consistecy
Sequence
// forge test --match-test test_check_unregisterable_consistecy_ -vv
function test_check_unregisterable_consistecy_() public {
vm.warp(block.timestamp + 575926);
vm.roll(block.number + 1);
vm.roll(block.number + 1);
vm.warp(block.timestamp + 332122);
governance_depositLQTY(1);
vm.warp(block.timestamp + 243934);
vm.roll(block.number + 1);
governance_allocateLQTY_clamped_single_initiative(0,0,1);
vm.roll(block.number + 1);
vm.warp(block.timestamp + 57961);
governance_resetAllocations();
check_unregisterable_consistecy(0);
}
Broken property:
property_sum_of_initatives_matches_total_votes_strict
Sequence
// forge test --match-test test_property_sum_of_initatives_matches_total_votes_strict_ -vv
function test_property_sum_of_initatives_matches_total_votes_strict_() public {
vm.warp(block.timestamp + 577015);
vm.roll(block.number + 1);
governance_depositLQTY(1);
vm.warp(block.timestamp + 57312);
vm.roll(block.number + 1);
governance_allocateLQTY_clamped_single_initiative(0,1,0);
vm.warp(block.timestamp + 80212);
vm.roll(block.number + 1);
governance_depositLQTY_2(4);
helper_deployInitiative();
governance_registerInitiative(1);
vm.warp(block.timestamp + 496283);
vm.roll(block.number + 1);
governance_allocateLQTY_clamped_single_initiative_2nd_user(1,7941814928907757554,0);
property_sum_of_initatives_matches_total_votes_strict();
}
1 similar comment
Recon Job CompletedRecon Recap for liquity/V2-gov/mainFuzzer overview
|
Property | Status |
---|---|
property_initiative_ts_matches_user_when_non_zero() | ✅ |
check_unregisterable_consistecy(uint8) | ❌ |
property_resetting_never_reverts() | ✅ |
check_claimable_solvency() | ✅ |
excludeSenders() | ✅ |
property_shouldNeverRevertgetInitiativeState(uint8) | ✅ |
check_realized_claiming_solvency() | ✅ |
targetInterfaces() | ✅ |
property_shouldNeverRevertgetInitiativeSnapshotAndState(uint8) | ✅ |
governance_allocateLQTY_clamped_single_initiative(uint8,uint96,uint96) | ✅ |
property_BI02() | ✅ |
property_computingGlobalPowerNeverReverts() | ✅ |
governance_resetAllocations() | ✅ |
property_global_ts_is_always_greater_than_start() | ✅ |
governance_depositLQTYViaPermit(uint88) | ✅ |
targetSenders() | ✅ |
targetContracts() | ✅ |
property_shouldGetTotalVotesAndState() | ✅ |
property_BI10() | ✅ |
property_shouldNeverRevertcalculateVotingThreshold() | ✅ |
depositTsIsRational(uint88) | ✅ |
helper_accrueBold(uint88) | ✅ |
property_sum_of_user_voting_weights_strict() | ✅ |
property_sum_of_user_initiative_allocations() | ✅ |
depositMustFailOnNonZeroAlloc(uint88) | ✅ |
property_summingInitiativesPowerNeverReverts() | ✅ |
withdrwaMustFailOnNonZeroAcc(uint88) | ✅ |
governance_allocateLQTY_clamped_single_initiative_2nd_user(uint8,uint96,uint96) | ✅ |
helper_deployInitiative() | ✅ |
property_sum_of_lqty_global_user_matches() | ✅ |
property_sum_of_votes_in_bribes_match() | ✅ |
governance_withdrawLQTY_shouldRevertWhenClamped(uint88) | ❌ |
targetArtifactSelectors() | ✅ |
property_sum_of_lqty_initiative_user_matches() | ✅ |
initiative_depositBribe(uint128,uint128,uint16,uint8) | ✅ |
property_GV01() | ✅ |
property_viewCalculateVotingThreshold() | ✅ |
governance_registerInitiative(uint8) | ✅ |
governance_withdrawLQTY(uint88) | ✅ |
property_shouldNeverRevertsnapshotVotesForInitiative(uint8) | ✅ |
property_BI07() | ✅ |
governance_resetAllocations_user_2() | ✅ |
targetArtifacts() | ✅ |
governance_allocateLQTY(int88[],int88[]) | ✅ |
property_sum_of_initatives_matches_total_votes_bounded() | ✅ |
property_BI04() | ✅ |
targetSelectors() | ✅ |
governance_depositLQTY(uint88) | ✅ |
check_warmup_unregisterable_consistency(uint8) | ✅ |
property_ensure_user_alloc_cannot_dos() | ✅ |
property_BI08() | ✅ |
property_sum_of_initatives_matches_total_votes_insolvency_assertion() | ✅ |
property_shouldNeverRevertgetLatestVotingThreshold() | ✅ |
governance_claimForInitiativeDoesntRevert(uint8) | ✅ |
property_BI03() | ✅ |
excludeSelectors() | ✅ |
excludeArtifacts() | ✅ |
check_claim_soundness() | ✅ |
property_shouldNeverRevertsecondsWithinEpoch() | ✅ |
failed() | ✅ |
property_sum_of_user_voting_weights_bounded() | ✅ |
property_BI01() | ✅ |
property_shouldNeverRevertepochStart(uint8) | ✅ |
property_BI09() | ✅ |
property_shouldNeverRevertSnapshotAndState(uint8) | ✅ |
property_shouldNeverRevertlqtyToVotes() | ✅ |
governance_snapshotVotesForInitiative(address) | ✅ |
governance_deployUserProxy() | ✅ |
governance_depositLQTY_2(uint88) | ✅ |
property_allocations_are_never_dangerously_high() | ✅ |
property_alloc_deposit_reset_is_idempotent(uint8,uint96,uint96,uint88) | ✅ |
property_shouldNeverRevertgetTotalVotesAndState() | ✅ |
clamped_claimBribes(uint8) | ✅ |
property_shouldNeverRevertepoch() | ✅ |
governance_claimForInitiative(uint8) | ✅ |
property_GV_09() | ✅ |
excludeContracts() | ✅ |
governance_claimForInitiativeFuzzTest(uint8) | ✅ |
property_user_ts_is_always_greater_than_start() | ✅ |
property_viewTotalVotesAndStateEquivalency() | ✅ |
check_skip_consistecy(uint8) | ✅ |
governance_unregisterInitiative(uint8) | ✅ |
governance_claimFromStakingV1(uint8) | ✅ |
IS_TEST() | ✅ |
initiative_claimBribes(uint16,uint16,uint16,uint8) | ✅ |
property_shouldNeverRevertgetInitiativeState_arbitrary(address) | ✅ |
property_sum_of_initatives_matches_total_votes_strict() | ❌ |
AssertionFailed(..) | ✅ |
Broken Properties
Broken property:
governance_withdrawLQTY_shouldRevertWhenClamped
Sequence
// forge test --match-test test_governance_withdrawLQTY_shouldRevertWhenClamped_ -vv
function test_governance_withdrawLQTY_shouldRevertWhenClamped_() public {
vm.roll(block.number + 10043);
vm.warp(block.timestamp + 526196);
vm.prank(0x0000000000000000000000000000000000020000);
check_claim_soundness();
vm.roll(block.number + 15513);
vm.warp(block.timestamp + 571162);
vm.prank(0x0000000000000000000000000000000000010000);
canary_bribeWasThere(15);
vm.roll(block.number + 45695);
vm.warp(block.timestamp + 482712);
vm.prank(0x0000000000000000000000000000000000020000);
depositTsIsRational(5893831015362);
vm.roll(block.number + 14467);
vm.warp(block.timestamp + 142334);
vm.prank(0x0000000000000000000000000000000000020000);
check_claim_soundness();
vm.roll(block.number + 13867);
vm.warp(block.timestamp + 282471);
vm.prank(0x0000000000000000000000000000000000020000);
property_shouldNeverRevertgetInitiativeSnapshotAndState(7);
vm.roll(block.number + 20123);
vm.warp(block.timestamp + 14273);
vm.prank(0x0000000000000000000000000000000000010000);
property_sum_of_user_voting_weights_strict();
vm.roll(block.number + 60450);
vm.warp(block.timestamp + 111);
vm.prank(0x0000000000000000000000000000000000030000);
property_shouldNeverRevertgetInitiativeState(150);
vm.roll(block.number + 4974);
vm.warp(block.timestamp + 199265);
vm.prank(0x0000000000000000000000000000000000030000);
property_sum_of_user_voting_weights_bounded();
vm.roll(block.number + 34552);
vm.warp(block.timestamp + 242902);
vm.prank(0x0000000000000000000000000000000000010000);
canary_has_claimed();
vm.roll(block.number + 38663);
vm.warp(block.timestamp + 222374);
vm.prank(0x0000000000000000000000000000000000030000);
property_shouldNeverRevertgetTotalVotesAndState();
vm.roll(block.number + 4985);
vm.warp(block.timestamp + 570946);
vm.prank(0x0000000000000000000000000000000000030000);
property_BI09();
vm.roll(block.number + 9674);
vm.warp(block.timestamp + 289812);
vm.prank(0x0000000000000000000000000000000000010000);
governance_claimFromStakingV1(110);
vm.roll(block.number + 7448);
vm.warp(block.timestamp + 89);
vm.prank(0x0000000000000000000000000000000000010000);
initiative_depositBribe(340282366920938463463374607431768211454,126336084046100069511419215169487983921,11,252);
vm.roll(block.number + 20705);
vm.warp(block.timestamp + 570946);
vm.prank(0x0000000000000000000000000000000000020000);
depositMustFailOnNonZeroAlloc(1579010);
vm.roll(block.number + 2977);
vm.warp(block.timestamp + 150875);
vm.prank(0x0000000000000000000000000000000000020000);
governance_unregisterInitiative(33);
vm.roll(block.number + 22699);
vm.warp(block.timestamp + 322379);
vm.prank(0x0000000000000000000000000000000000010000);
property_sum_of_initatives_matches_total_votes_bounded();
vm.roll(block.number + 17602);
vm.warp(block.timestamp + 243876);
vm.prank(0x0000000000000000000000000000000000010000);
property_sum_of_lqty_initiative_user_matches();
vm.roll(block.number + 59713);
vm.warp(block.timestamp + 9968);
vm.prank(0x0000000000000000000000000000000000030000);
property_resetting_never_reverts();
vm.roll(block.number + 4817);
vm.warp(block.timestamp + 35001);
vm.prank(0x0000000000000000000000000000000000030000);
property_shouldNeverRevertsecondsWithinEpoch();
vm.roll(block.number + 4512);
vm.warp(block.timestamp + 35);
vm.prank(0x0000000000000000000000000000000000010000);
governance_deployUserProxy();
vm.roll(block.number + 17174);
vm.warp(block.timestamp + 166300);
vm.prank(0x0000000000000000000000000000000000020000);
property_sum_of_lqty_initiative_user_matches();
vm.roll(block.number + 21116);
vm.warp(block.timestamp + 182772);
vm.prank(0x0000000000000000000000000000000000010000);
property_BI02();
vm.roll(block.number + 44984);
vm.warp(block.timestamp + 322357);
vm.prank(0x0000000000000000000000000000000000030000);
check_skip_consistecy(53);
vm.roll(block.number + 60461);
vm.warp(block.timestamp + 321854);
vm.prank(0x0000000000000000000000000000000000020000);
initiative_claimBribes(35001,183,14196,62);
vm.roll(block.number + 60450);
vm.warp(block.timestamp + 586021);
vm.prank(0x0000000000000000000000000000000000030000);
property_viewTotalVotesAndStateEquivalency();
vm.roll(block.number + 47144);
vm.warp(block.timestamp + 137557);
vm.prank(0x0000000000000000000000000000000000030000);
property_BI02();
vm.roll(block.number + 23985);
vm.warp(block.timestamp + 488787);
vm.prank(0x0000000000000000000000000000000000020000);
governance_withdrawLQTY_shouldRevertWhenClamped(49999);
vm.roll(block.number + 50);
vm.warp(block.timestamp + 322070);
vm.prank(0x0000000000000000000000000000000000010000);
property_sum_of_votes_in_bribes_match();
vm.roll(block.number + 59712);
vm.warp(block.timestamp + 153417);
vm.prank(0x0000000000000000000000000000000000020000);
property_shouldNeverRevertcalculateVotingThreshold();
vm.roll(block.number + 3070);
vm.warp(block.timestamp + 555293);
vm.prank(0x0000000000000000000000000000000000010000);
governance_claimForInitiativeDoesntRevert(160);
vm.roll(block.number + 50329);
vm.warp(block.timestamp + 579336);
vm.prank(0x0000000000000000000000000000000000010000);
property_sum_of_initatives_matches_total_votes_bounded();
vm.roll(block.number + 41172);
vm.warp(block.timestamp + 556295);
vm.prank(0x0000000000000000000000000000000000010000);
governance_allocateLQTY_clamped_single_initiative(33,79228162514264337593543950331,4766066913258368482198917101);
vm.roll(block.number + 51879);
vm.warp(block.timestamp + 110826);
vm.prank(0x0000000000000000000000000000000000020000);
property_ensure_user_alloc_cannot_dos();
vm.roll(block.number + 3907);
vm.warp(block.timestamp + 406790);
vm.prank(0x0000000000000000000000000000000000010000);
property_shouldNeverRevertgetLatestVotingThreshold();
vm.roll(block.number + 32);
vm.warp(block.timestamp + 322248);
vm.prank(0x0000000000000000000000000000000000030000);
property_sum_of_lqty_global_user_matches();
vm.roll(block.number + 25985);
vm.warp(block.timestamp + 586023);
vm.prank(0x0000000000000000000000000000000000020000);
property_BI03();
vm.roll(block.number + 17636);
vm.warp(block.timestamp + 27959);
vm.prank(0x0000000000000000000000000000000000010000);
property_sum_of_lqty_global_user_matches();
vm.roll(block.number + 51798);
vm.warp(block.timestamp + 40);
vm.prank(0x0000000000000000000000000000000000010000);
governance_withdrawLQTY(248001436536186066808471196);
vm.roll(block.number + 24964);
vm.warp(block.timestamp + 322377);
vm.prank(0x0000000000000000000000000000000000020000);
property_initiative_ts_matches_user_when_non_zero();
vm.roll(block.number + 23276);
vm.warp(block.timestamp + 221143);
vm.prank(0x0000000000000000000000000000000000030000);
property_shouldNeverRevertsecondsWithinEpoch();
vm.roll(block.number + 44524);
vm.warp(block.timestamp + 499804);
vm.prank(0x0000000000000000000000000000000000010000);
helper_accrueBold(3000000000000000000000);
vm.roll(block.number + 25204);
vm.warp(block.timestamp + 562087);
vm.prank(0x0000000000000000000000000000000000030000);
governance_claimForInitiative(20);
vm.roll(block.number + 176);
vm.warp(block.timestamp + 262143);
vm.prank(0x0000000000000000000000000000000000010000);
property_allocations_are_never_dangerously_high();
vm.roll(block.number + 1953);
vm.warp(block.timestamp + 490163);
vm.prank(0x0000000000000000000000000000000000020000);
property_shouldNeverRevertSnapshotAndState(121);
vm.roll(block.number + 55645);
vm.warp(block.timestamp + 236465);
vm.prank(0x0000000000000000000000000000000000010000);
governance_depositLQTY_2(98642700719436913720620091);
vm.roll(block.number + 16636);
vm.warp(block.timestamp + 40000);
vm.prank(0x0000000000000000000000000000000000010000);
property_shouldGetTotalVotesAndState();
vm.roll(block.number + 64);
vm.warp(block.timestamp + 459103);
vm.prank(0x0000000000000000000000000000000000030000);
property_allocations_are_never_dangerously_high();
vm.roll(block.number + 32546);
vm.warp(block.timestamp + 477604);
vm.prank(0x0000000000000000000000000000000000010000);
property_sum_of_votes_in_bribes_match();
vm.roll(block.number + 37432);
vm.warp(block.timestamp + 349999);
vm.prank(0x0000000000000000000000000000000000010000);
property_BI08();
vm.roll(block.number + 2162);
vm.warp(block.timestamp + 203010);
vm.prank(0x0000000000000000000000000000000000030000);
property_GV_09();
vm.roll(block.number + 25064);
vm.warp(block.timestamp + 543587);
vm.prank(0x0000000000000000000000000000000000020000);
property_user_ts_is_always_greater_than_start();
vm.roll(block.number + 7923);
vm.warp(block.timestamp + 322356);
vm.prank(0x0000000000000000000000000000000000010000);
governance_withdrawLQTY_shouldRevertWhenClamped(3000000000000000000);
}
Broken property:
check_unregisterable_consistecy
Sequence
// forge test --match-test test_check_unregisterable_consistecy_ -vv
function test_check_unregisterable_consistecy_() public {
vm.warp(block.timestamp + 575926);
vm.roll(block.number + 1);
vm.roll(block.number + 1);
vm.warp(block.timestamp + 332122);
governance_depositLQTY(1);
vm.warp(block.timestamp + 243934);
vm.roll(block.number + 1);
governance_allocateLQTY_clamped_single_initiative(0,0,1);
vm.roll(block.number + 1);
vm.warp(block.timestamp + 57961);
governance_resetAllocations();
check_unregisterable_consistecy(0);
}
Broken property:
property_sum_of_initatives_matches_total_votes_strict
Sequence
// forge test --match-test test_property_sum_of_initatives_matches_total_votes_strict_ -vv
function test_property_sum_of_initatives_matches_total_votes_strict_() public {
vm.warp(block.timestamp + 577015);
vm.roll(block.number + 1);
governance_depositLQTY(1);
vm.warp(block.timestamp + 57312);
vm.roll(block.number + 1);
governance_allocateLQTY_clamped_single_initiative(0,1,0);
vm.warp(block.timestamp + 80212);
vm.roll(block.number + 1);
governance_depositLQTY_2(4);
helper_deployInitiative();
governance_registerInitiative(1);
vm.warp(block.timestamp + 496283);
vm.roll(block.number + 1);
governance_allocateLQTY_clamped_single_initiative_2nd_user(1,7941814928907757554,0);
property_sum_of_initatives_matches_total_votes_strict();
}
Shrunken Logshttps://gist.github.com/GalloDaSballo/85f0b75a7c3a1e2b2384c47e2f10014a We're pushing a fix for this soon |
fix: Make LQTY staking claiming consistent across endpoints
fix: Prevent NOPs on allacation and resetting
Just to trigger invariants
Recon Campaign Started
|
Recon Job CompletedRecon Recap for liquity/V2-gov/mainFuzzer overview
|
Property | Status |
---|---|
property_initiative_ts_matches_user_when_non_zero() | ✅ |
check_unregisterable_consistecy(uint8) | ❌ |
check_claimable_solvency() | ✅ |
excludeSenders() | ✅ |
property_shouldNeverRevertgetInitiativeState(uint8) | ✅ |
check_realized_claiming_solvency() | ✅ |
targetInterfaces() | ✅ |
property_shouldNeverRevertgetInitiativeSnapshotAndState(uint8) | ✅ |
governance_allocateLQTY_clamped_single_initiative(uint8,uint96,uint96) | ✅ |
property_BI02() | ✅ |
property_computingGlobalPowerNeverReverts() | ✅ |
governance_resetAllocations() | ✅ |
property_global_ts_is_always_greater_than_start() | ✅ |
governance_depositLQTYViaPermit(uint88) | ✅ |
targetSenders() | ✅ |
targetContracts() | ✅ |
property_shouldGetTotalVotesAndState() | ✅ |
property_BI10() | ✅ |
property_shouldNeverRevertcalculateVotingThreshold() | ✅ |
depositTsIsRational(uint88) | ✅ |
helper_accrueBold(uint88) | ✅ |
property_sum_of_user_voting_weights_strict() | ✅ |
property_sum_of_user_initiative_allocations() | ✅ |
depositMustFailOnNonZeroAlloc(uint88) | ✅ |
property_summingInitiativesPowerNeverReverts() | ✅ |
withdrwaMustFailOnNonZeroAcc(uint88) | ✅ |
governance_allocateLQTY_clamped_single_initiative_2nd_user(uint8,uint96,uint96) | ✅ |
helper_deployInitiative() | ✅ |
property_sum_of_lqty_global_user_matches() | ✅ |
property_sum_of_votes_in_bribes_match() | ✅ |
governance_withdrawLQTY_shouldRevertWhenClamped(uint88) | ❌ |
targetArtifactSelectors() | ✅ |
property_sum_of_lqty_initiative_user_matches() | ✅ |
initiative_depositBribe(uint128,uint128,uint16,uint8) | ✅ |
property_GV01() | ✅ |
property_viewCalculateVotingThreshold() | ✅ |
governance_registerInitiative(uint8) | ✅ |
governance_withdrawLQTY(uint88) | ✅ |
property_shouldNeverRevertsnapshotVotesForInitiative(uint8) | ✅ |
property_BI07() | ✅ |
governance_resetAllocations_user_2() | ✅ |
targetArtifacts() | ✅ |
governance_allocateLQTY(int88[],int88[]) | ✅ |
property_sum_of_initatives_matches_total_votes_bounded() | ✅ |
property_BI04() | ✅ |
targetSelectors() | ✅ |
property_resetting_never_reverts(address[]) | ❌ |
governance_depositLQTY(uint88) | ✅ |
check_warmup_unregisterable_consistency(uint8) | ✅ |
property_ensure_user_alloc_cannot_dos() | ✅ |
property_BI08() | ✅ |
property_sum_of_initatives_matches_total_votes_insolvency_assertion() | ✅ |
property_shouldNeverRevertgetLatestVotingThreshold() | ✅ |
governance_claimForInitiativeDoesntRevert(uint8) | ✅ |
property_BI03() | ✅ |
excludeSelectors() | ✅ |
excludeArtifacts() | ✅ |
check_claim_soundness() | ✅ |
property_shouldNeverRevertsecondsWithinEpoch() | ✅ |
failed() | ✅ |
property_sum_of_user_voting_weights_bounded() | ✅ |
property_BI01() | ✅ |
property_shouldNeverRevertepochStart(uint8) | ✅ |
property_BI09() | ✅ |
property_shouldNeverRevertSnapshotAndState(uint8) | ✅ |
property_shouldNeverRevertlqtyToVotes() | ✅ |
governance_snapshotVotesForInitiative(address) | ✅ |
governance_deployUserProxy() | ✅ |
governance_depositLQTY_2(uint88) | ✅ |
property_allocations_are_never_dangerously_high() | ✅ |
property_alloc_deposit_reset_is_idempotent(uint8,uint96,uint96,uint88) | ✅ |
property_shouldNeverRevertgetTotalVotesAndState() | ✅ |
clamped_claimBribes(uint8) | ✅ |
property_shouldNeverRevertepoch() | ✅ |
governance_claimForInitiative(uint8) | ✅ |
property_GV_09() | ✅ |
excludeContracts() | ✅ |
governance_claimForInitiativeFuzzTest(uint8) | ✅ |
property_user_ts_is_always_greater_than_start() | ✅ |
property_viewTotalVotesAndStateEquivalency() | ✅ |
check_skip_consistecy(uint8) | ✅ |
governance_unregisterInitiative(uint8) | ✅ |
governance_claimFromStakingV1(uint8) | ✅ |
IS_TEST() | ✅ |
initiative_claimBribes(uint16,uint16,uint16,uint8) | ✅ |
property_shouldNeverRevertgetInitiativeState_arbitrary(address) | ✅ |
property_sum_of_initatives_matches_total_votes_strict() | ❌ |
AssertionFailed(..) | ✅ |
Broken Properties
Broken property:
check_unregisterable_consistecy
Sequence
// forge test --match-test test_check_unregisterable_consistecy_ -vv
function test_check_unregisterable_consistecy_() public {
vm.warp(block.timestamp + 575926);
vm.roll(block.number + 1);
vm.roll(block.number + 1);
vm.warp(block.timestamp + 331969);
governance_depositLQTY(1);
vm.warp(block.timestamp + 243934);
vm.roll(block.number + 1);
governance_allocateLQTY_clamped_single_initiative(0,0,1);
vm.roll(block.number + 1);
vm.warp(block.timestamp + 57814);
governance_resetAllocations();
check_unregisterable_consistecy(0);
}
Broken property:
governance_withdrawLQTY_shouldRevertWhenClamped
Sequence
// forge test --match-test test_governance_withdrawLQTY_shouldRevertWhenClamped_ -vv
function test_governance_withdrawLQTY_shouldRevertWhenClamped_() public {
governance_withdrawLQTY_shouldRevertWhenClamped(0);
}
Broken property:
property_resetting_never_reverts
Sequence
// forge test --match-test test_property_resetting_never_reverts_ -vv
function test_property_resetting_never_reverts_() public {
property_resetting_never_reverts([0x0000000000000000000000000000000000000000]);
}
Broken property:
property_sum_of_initatives_matches_total_votes_strict
Sequence
// forge test --match-test test_property_sum_of_initatives_matches_total_votes_strict_ -vv
function test_property_sum_of_initatives_matches_total_votes_strict_() public {
vm.warp(block.timestamp + 577015);
vm.roll(block.number + 1);
governance_depositLQTY(1);
vm.warp(block.timestamp + 57054);
vm.roll(block.number + 1);
governance_allocateLQTY_clamped_single_initiative(0,1,0);
vm.warp(block.timestamp + 79514);
vm.roll(block.number + 1);
governance_depositLQTY_2(3);
helper_deployInitiative();
governance_registerInitiative(1);
vm.warp(block.timestamp + 496283);
vm.roll(block.number + 1);
governance_allocateLQTY_clamped_single_initiative_2nd_user(1,2,0);
property_sum_of_initatives_matches_total_votes_strict();
}
1 similar comment
Recon Job CompletedRecon Recap for liquity/V2-gov/mainFuzzer overview
|
Property | Status |
---|---|
property_initiative_ts_matches_user_when_non_zero() | ✅ |
check_unregisterable_consistecy(uint8) | ❌ |
check_claimable_solvency() | ✅ |
excludeSenders() | ✅ |
property_shouldNeverRevertgetInitiativeState(uint8) | ✅ |
check_realized_claiming_solvency() | ✅ |
targetInterfaces() | ✅ |
property_shouldNeverRevertgetInitiativeSnapshotAndState(uint8) | ✅ |
governance_allocateLQTY_clamped_single_initiative(uint8,uint96,uint96) | ✅ |
property_BI02() | ✅ |
property_computingGlobalPowerNeverReverts() | ✅ |
governance_resetAllocations() | ✅ |
property_global_ts_is_always_greater_than_start() | ✅ |
governance_depositLQTYViaPermit(uint88) | ✅ |
targetSenders() | ✅ |
targetContracts() | ✅ |
property_shouldGetTotalVotesAndState() | ✅ |
property_BI10() | ✅ |
property_shouldNeverRevertcalculateVotingThreshold() | ✅ |
depositTsIsRational(uint88) | ✅ |
helper_accrueBold(uint88) | ✅ |
property_sum_of_user_voting_weights_strict() | ✅ |
property_sum_of_user_initiative_allocations() | ✅ |
depositMustFailOnNonZeroAlloc(uint88) | ✅ |
property_summingInitiativesPowerNeverReverts() | ✅ |
withdrwaMustFailOnNonZeroAcc(uint88) | ✅ |
governance_allocateLQTY_clamped_single_initiative_2nd_user(uint8,uint96,uint96) | ✅ |
helper_deployInitiative() | ✅ |
property_sum_of_lqty_global_user_matches() | ✅ |
property_sum_of_votes_in_bribes_match() | ✅ |
governance_withdrawLQTY_shouldRevertWhenClamped(uint88) | ❌ |
targetArtifactSelectors() | ✅ |
property_sum_of_lqty_initiative_user_matches() | ✅ |
initiative_depositBribe(uint128,uint128,uint16,uint8) | ✅ |
property_GV01() | ✅ |
property_viewCalculateVotingThreshold() | ✅ |
governance_registerInitiative(uint8) | ✅ |
governance_withdrawLQTY(uint88) | ✅ |
property_shouldNeverRevertsnapshotVotesForInitiative(uint8) | ✅ |
property_BI07() | ✅ |
governance_resetAllocations_user_2() | ✅ |
targetArtifacts() | ✅ |
governance_allocateLQTY(int88[],int88[]) | ✅ |
property_sum_of_initatives_matches_total_votes_bounded() | ✅ |
property_BI04() | ✅ |
targetSelectors() | ✅ |
property_resetting_never_reverts(address[]) | ❌ |
governance_depositLQTY(uint88) | ✅ |
check_warmup_unregisterable_consistency(uint8) | ✅ |
property_ensure_user_alloc_cannot_dos() | ✅ |
property_BI08() | ✅ |
property_sum_of_initatives_matches_total_votes_insolvency_assertion() | ✅ |
property_shouldNeverRevertgetLatestVotingThreshold() | ✅ |
governance_claimForInitiativeDoesntRevert(uint8) | ✅ |
property_BI03() | ✅ |
excludeSelectors() | ✅ |
excludeArtifacts() | ✅ |
check_claim_soundness() | ✅ |
property_shouldNeverRevertsecondsWithinEpoch() | ✅ |
failed() | ✅ |
property_sum_of_user_voting_weights_bounded() | ✅ |
property_BI01() | ✅ |
property_shouldNeverRevertepochStart(uint8) | ✅ |
property_BI09() | ✅ |
property_shouldNeverRevertSnapshotAndState(uint8) | ✅ |
property_shouldNeverRevertlqtyToVotes() | ✅ |
governance_snapshotVotesForInitiative(address) | ✅ |
governance_deployUserProxy() | ✅ |
governance_depositLQTY_2(uint88) | ✅ |
property_allocations_are_never_dangerously_high() | ✅ |
property_alloc_deposit_reset_is_idempotent(uint8,uint96,uint96,uint88) | ✅ |
property_shouldNeverRevertgetTotalVotesAndState() | ✅ |
clamped_claimBribes(uint8) | ✅ |
property_shouldNeverRevertepoch() | ✅ |
governance_claimForInitiative(uint8) | ✅ |
property_GV_09() | ✅ |
excludeContracts() | ✅ |
governance_claimForInitiativeFuzzTest(uint8) | ✅ |
property_user_ts_is_always_greater_than_start() | ✅ |
property_viewTotalVotesAndStateEquivalency() | ✅ |
check_skip_consistecy(uint8) | ✅ |
governance_unregisterInitiative(uint8) | ✅ |
governance_claimFromStakingV1(uint8) | ✅ |
IS_TEST() | ✅ |
initiative_claimBribes(uint16,uint16,uint16,uint8) | ✅ |
property_shouldNeverRevertgetInitiativeState_arbitrary(address) | ✅ |
property_sum_of_initatives_matches_total_votes_strict() | ❌ |
AssertionFailed(..) | ✅ |
Broken Properties
Broken property:
check_unregisterable_consistecy
Sequence
// forge test --match-test test_check_unregisterable_consistecy_ -vv
function test_check_unregisterable_consistecy_() public {
vm.warp(block.timestamp + 575926);
vm.roll(block.number + 1);
vm.roll(block.number + 1);
vm.warp(block.timestamp + 331969);
governance_depositLQTY(1);
vm.warp(block.timestamp + 243934);
vm.roll(block.number + 1);
governance_allocateLQTY_clamped_single_initiative(0,0,1);
vm.roll(block.number + 1);
vm.warp(block.timestamp + 57814);
governance_resetAllocations();
check_unregisterable_consistecy(0);
}
Broken property:
governance_withdrawLQTY_shouldRevertWhenClamped
Sequence
// forge test --match-test test_governance_withdrawLQTY_shouldRevertWhenClamped_ -vv
function test_governance_withdrawLQTY_shouldRevertWhenClamped_() public {
governance_withdrawLQTY_shouldRevertWhenClamped(0);
}
Broken property:
property_resetting_never_reverts
Sequence
// forge test --match-test test_property_resetting_never_reverts_ -vv
function test_property_resetting_never_reverts_() public {
property_resetting_never_reverts([0x0000000000000000000000000000000000000000]);
}
Broken property:
property_sum_of_initatives_matches_total_votes_strict
Sequence
// forge test --match-test test_property_sum_of_initatives_matches_total_votes_strict_ -vv
function test_property_sum_of_initatives_matches_total_votes_strict_() public {
vm.warp(block.timestamp + 577015);
vm.roll(block.number + 1);
governance_depositLQTY(1);
vm.warp(block.timestamp + 57054);
vm.roll(block.number + 1);
governance_allocateLQTY_clamped_single_initiative(0,1,0);
vm.warp(block.timestamp + 79514);
vm.roll(block.number + 1);
governance_depositLQTY_2(3);
helper_deployInitiative();
governance_registerInitiative(1);
vm.warp(block.timestamp + 496283);
vm.roll(block.number + 1);
governance_allocateLQTY_clamped_single_initiative_2nd_user(1,2,0);
property_sum_of_initatives_matches_total_votes_strict();
}
Leave interfaces and utils floating, so they can be used by 3rd parties.
fix: Fix some Natspec header comments
Minor tweak to initiatives initialization
Just triggering invariants
Recon Campaign Started
|
Recon Job CompletedRecon Recap for liquity/V2-gov/mainFuzzer overview
|
Property | Status |
---|---|
property_initiative_ts_matches_user_when_non_zero() | ✅ |
check_unregisterable_consistecy(uint8) | ❌ |
check_claimable_solvency() | ✅ |
excludeSenders() | ✅ |
property_shouldNeverRevertgetInitiativeState(uint8) | ✅ |
check_realized_claiming_solvency() | ✅ |
targetInterfaces() | ✅ |
property_shouldNeverRevertgetInitiativeSnapshotAndState(uint8) | ✅ |
governance_allocateLQTY_clamped_single_initiative(uint8,uint96,uint96) | ✅ |
property_BI02() | ✅ |
property_computingGlobalPowerNeverReverts() | ✅ |
governance_resetAllocations() | ✅ |
property_global_ts_is_always_greater_than_start() | ✅ |
governance_depositLQTYViaPermit(uint88) | ✅ |
targetSenders() | ✅ |
targetContracts() | ✅ |
property_shouldGetTotalVotesAndState() | ✅ |
property_BI10() | ✅ |
property_shouldNeverRevertcalculateVotingThreshold() | ✅ |
depositTsIsRational(uint88) | ✅ |
helper_accrueBold(uint88) | ✅ |
property_sum_of_user_voting_weights_strict() | ✅ |
property_sum_of_user_initiative_allocations() | ✅ |
depositMustFailOnNonZeroAlloc(uint88) | ✅ |
property_summingInitiativesPowerNeverReverts() | ✅ |
withdrwaMustFailOnNonZeroAcc(uint88) | ✅ |
governance_allocateLQTY_clamped_single_initiative_2nd_user(uint8,uint96,uint96) | ✅ |
helper_deployInitiative() | ✅ |
property_sum_of_lqty_global_user_matches() | ✅ |
property_sum_of_votes_in_bribes_match() | ✅ |
governance_withdrawLQTY_shouldRevertWhenClamped(uint88) | ❌ |
targetArtifactSelectors() | ✅ |
property_sum_of_lqty_initiative_user_matches() | ✅ |
initiative_depositBribe(uint128,uint128,uint16,uint8) | ✅ |
property_GV01() | ✅ |
property_viewCalculateVotingThreshold() | ✅ |
governance_registerInitiative(uint8) | ✅ |
governance_withdrawLQTY(uint88) | ✅ |
property_shouldNeverRevertsnapshotVotesForInitiative(uint8) | ✅ |
property_BI07() | ✅ |
governance_resetAllocations_user_2() | ✅ |
targetArtifacts() | ✅ |
governance_allocateLQTY(int88[],int88[]) | ✅ |
property_sum_of_initatives_matches_total_votes_bounded() | ✅ |
property_BI04() | ✅ |
targetSelectors() | ✅ |
property_resetting_never_reverts(address[]) | ❌ |
governance_depositLQTY(uint88) | ✅ |
check_warmup_unregisterable_consistency(uint8) | ✅ |
property_ensure_user_alloc_cannot_dos() | ✅ |
property_BI08() | ✅ |
property_sum_of_initatives_matches_total_votes_insolvency_assertion() | ✅ |
property_shouldNeverRevertgetLatestVotingThreshold() | ✅ |
governance_claimForInitiativeDoesntRevert(uint8) | ✅ |
property_BI03() | ✅ |
excludeSelectors() | ✅ |
excludeArtifacts() | ✅ |
check_claim_soundness() | ✅ |
property_shouldNeverRevertsecondsWithinEpoch() | ✅ |
failed() | ✅ |
property_sum_of_user_voting_weights_bounded() | ✅ |
property_BI01() | ✅ |
property_shouldNeverRevertepochStart(uint8) | ✅ |
property_BI09() | ✅ |
property_shouldNeverRevertSnapshotAndState(uint8) | ✅ |
property_shouldNeverRevertlqtyToVotes() | ✅ |
governance_snapshotVotesForInitiative(address) | ✅ |
governance_deployUserProxy() | ✅ |
governance_depositLQTY_2(uint88) | ✅ |
property_allocations_are_never_dangerously_high() | ✅ |
property_alloc_deposit_reset_is_idempotent(uint8,uint96,uint96,uint88) | ✅ |
property_shouldNeverRevertgetTotalVotesAndState() | ✅ |
clamped_claimBribes(uint8) | ✅ |
property_shouldNeverRevertepoch() | ✅ |
governance_claimForInitiative(uint8) | ✅ |
property_GV_09() | ✅ |
excludeContracts() | ✅ |
governance_claimForInitiativeFuzzTest(uint8) | ✅ |
property_user_ts_is_always_greater_than_start() | ✅ |
property_viewTotalVotesAndStateEquivalency() | ✅ |
check_skip_consistecy(uint8) | ✅ |
governance_unregisterInitiative(uint8) | ✅ |
governance_claimFromStakingV1(uint8) | ✅ |
IS_TEST() | ✅ |
initiative_claimBribes(uint16,uint16,uint16,uint8) | ✅ |
property_shouldNeverRevertgetInitiativeState_arbitrary(address) | ✅ |
property_sum_of_initatives_matches_total_votes_strict() | ❌ |
AssertionFailed(..) | ✅ |
Broken Properties
Broken property:
check_unregisterable_consistecy
Sequence
// forge test --match-test test_check_unregisterable_consistecy_ -vv
function test_check_unregisterable_consistecy_() public {
vm.warp(block.timestamp + 575926);
vm.roll(block.number + 1);
vm.roll(block.number + 1);
vm.warp(block.timestamp + 332122);
governance_depositLQTY(1);
vm.warp(block.timestamp + 243933);
vm.roll(block.number + 1);
governance_allocateLQTY_clamped_single_initiative(0,0,1);
vm.roll(block.number + 1);
vm.warp(block.timestamp + 57677);
governance_resetAllocations();
check_unregisterable_consistecy(0);
}
Broken property:
governance_withdrawLQTY_shouldRevertWhenClamped
Sequence
// forge test --match-test test_governance_withdrawLQTY_shouldRevertWhenClamped_ -vv
function test_governance_withdrawLQTY_shouldRevertWhenClamped_() public {
governance_withdrawLQTY_shouldRevertWhenClamped(0);
}
Broken property:
property_resetting_never_reverts
Sequence
// forge test --match-test test_property_resetting_never_reverts_ -vv
function test_property_resetting_never_reverts_() public {
property_resetting_never_reverts([0x0000000000000000000000000000000000000000]);
}
Broken property:
property_sum_of_initatives_matches_total_votes_strict
Sequence
// forge test --match-test test_property_sum_of_initatives_matches_total_votes_strict_ -vv
function test_property_sum_of_initatives_matches_total_votes_strict_() public {
vm.warp(block.timestamp + 577015);
vm.roll(block.number + 1);
governance_depositLQTY(1);
vm.warp(block.timestamp + 56778);
vm.roll(block.number + 1);
governance_allocateLQTY_clamped_single_initiative(0,1,0);
vm.warp(block.timestamp + 79538);
vm.roll(block.number + 1);
governance_depositLQTY_2(3);
helper_deployInitiative();
governance_registerInitiative(1);
vm.warp(block.timestamp + 496283);
vm.roll(block.number + 1);
governance_allocateLQTY_clamped_single_initiative_2nd_user(1,2,0);
property_sum_of_initatives_matches_total_votes_strict();
}
1 similar comment
Recon Job CompletedRecon Recap for liquity/V2-gov/mainFuzzer overview
|
Property | Status |
---|---|
property_initiative_ts_matches_user_when_non_zero() | ✅ |
check_unregisterable_consistecy(uint8) | ❌ |
check_claimable_solvency() | ✅ |
excludeSenders() | ✅ |
property_shouldNeverRevertgetInitiativeState(uint8) | ✅ |
check_realized_claiming_solvency() | ✅ |
targetInterfaces() | ✅ |
property_shouldNeverRevertgetInitiativeSnapshotAndState(uint8) | ✅ |
governance_allocateLQTY_clamped_single_initiative(uint8,uint96,uint96) | ✅ |
property_BI02() | ✅ |
property_computingGlobalPowerNeverReverts() | ✅ |
governance_resetAllocations() | ✅ |
property_global_ts_is_always_greater_than_start() | ✅ |
governance_depositLQTYViaPermit(uint88) | ✅ |
targetSenders() | ✅ |
targetContracts() | ✅ |
property_shouldGetTotalVotesAndState() | ✅ |
property_BI10() | ✅ |
property_shouldNeverRevertcalculateVotingThreshold() | ✅ |
depositTsIsRational(uint88) | ✅ |
helper_accrueBold(uint88) | ✅ |
property_sum_of_user_voting_weights_strict() | ✅ |
property_sum_of_user_initiative_allocations() | ✅ |
depositMustFailOnNonZeroAlloc(uint88) | ✅ |
property_summingInitiativesPowerNeverReverts() | ✅ |
withdrwaMustFailOnNonZeroAcc(uint88) | ✅ |
governance_allocateLQTY_clamped_single_initiative_2nd_user(uint8,uint96,uint96) | ✅ |
helper_deployInitiative() | ✅ |
property_sum_of_lqty_global_user_matches() | ✅ |
property_sum_of_votes_in_bribes_match() | ✅ |
governance_withdrawLQTY_shouldRevertWhenClamped(uint88) | ❌ |
targetArtifactSelectors() | ✅ |
property_sum_of_lqty_initiative_user_matches() | ✅ |
initiative_depositBribe(uint128,uint128,uint16,uint8) | ✅ |
property_GV01() | ✅ |
property_viewCalculateVotingThreshold() | ✅ |
governance_registerInitiative(uint8) | ✅ |
governance_withdrawLQTY(uint88) | ✅ |
property_shouldNeverRevertsnapshotVotesForInitiative(uint8) | ✅ |
property_BI07() | ✅ |
governance_resetAllocations_user_2() | ✅ |
targetArtifacts() | ✅ |
governance_allocateLQTY(int88[],int88[]) | ✅ |
property_sum_of_initatives_matches_total_votes_bounded() | ✅ |
property_BI04() | ✅ |
targetSelectors() | ✅ |
property_resetting_never_reverts(address[]) | ❌ |
governance_depositLQTY(uint88) | ✅ |
check_warmup_unregisterable_consistency(uint8) | ✅ |
property_ensure_user_alloc_cannot_dos() | ✅ |
property_BI08() | ✅ |
property_sum_of_initatives_matches_total_votes_insolvency_assertion() | ✅ |
property_shouldNeverRevertgetLatestVotingThreshold() | ✅ |
governance_claimForInitiativeDoesntRevert(uint8) | ✅ |
property_BI03() | ✅ |
excludeSelectors() | ✅ |
excludeArtifacts() | ✅ |
check_claim_soundness() | ✅ |
property_shouldNeverRevertsecondsWithinEpoch() | ✅ |
failed() | ✅ |
property_sum_of_user_voting_weights_bounded() | ✅ |
property_BI01() | ✅ |
property_shouldNeverRevertepochStart(uint8) | ✅ |
property_BI09() | ✅ |
property_shouldNeverRevertSnapshotAndState(uint8) | ✅ |
property_shouldNeverRevertlqtyToVotes() | ✅ |
governance_snapshotVotesForInitiative(address) | ✅ |
governance_deployUserProxy() | ✅ |
governance_depositLQTY_2(uint88) | ✅ |
property_allocations_are_never_dangerously_high() | ✅ |
property_alloc_deposit_reset_is_idempotent(uint8,uint96,uint96,uint88) | ✅ |
property_shouldNeverRevertgetTotalVotesAndState() | ✅ |
clamped_claimBribes(uint8) | ✅ |
property_shouldNeverRevertepoch() | ✅ |
governance_claimForInitiative(uint8) | ✅ |
property_GV_09() | ✅ |
excludeContracts() | ✅ |
governance_claimForInitiativeFuzzTest(uint8) | ✅ |
property_user_ts_is_always_greater_than_start() | ✅ |
property_viewTotalVotesAndStateEquivalency() | ✅ |
check_skip_consistecy(uint8) | ✅ |
governance_unregisterInitiative(uint8) | ✅ |
governance_claimFromStakingV1(uint8) | ✅ |
IS_TEST() | ✅ |
initiative_claimBribes(uint16,uint16,uint16,uint8) | ✅ |
property_shouldNeverRevertgetInitiativeState_arbitrary(address) | ✅ |
property_sum_of_initatives_matches_total_votes_strict() | ❌ |
AssertionFailed(..) | ✅ |
Broken Properties
Broken property:
check_unregisterable_consistecy
Sequence
// forge test --match-test test_check_unregisterable_consistecy_ -vv
function test_check_unregisterable_consistecy_() public {
vm.warp(block.timestamp + 575926);
vm.roll(block.number + 1);
vm.roll(block.number + 1);
vm.warp(block.timestamp + 332122);
governance_depositLQTY(1);
vm.warp(block.timestamp + 243933);
vm.roll(block.number + 1);
governance_allocateLQTY_clamped_single_initiative(0,0,1);
vm.roll(block.number + 1);
vm.warp(block.timestamp + 57677);
governance_resetAllocations();
check_unregisterable_consistecy(0);
}
Broken property:
governance_withdrawLQTY_shouldRevertWhenClamped
Sequence
// forge test --match-test test_governance_withdrawLQTY_shouldRevertWhenClamped_ -vv
function test_governance_withdrawLQTY_shouldRevertWhenClamped_() public {
governance_withdrawLQTY_shouldRevertWhenClamped(0);
}
Broken property:
property_resetting_never_reverts
Sequence
// forge test --match-test test_property_resetting_never_reverts_ -vv
function test_property_resetting_never_reverts_() public {
property_resetting_never_reverts([0x0000000000000000000000000000000000000000]);
}
Broken property:
property_sum_of_initatives_matches_total_votes_strict
Sequence
// forge test --match-test test_property_sum_of_initatives_matches_total_votes_strict_ -vv
function test_property_sum_of_initatives_matches_total_votes_strict_() public {
vm.warp(block.timestamp + 577015);
vm.roll(block.number + 1);
governance_depositLQTY(1);
vm.warp(block.timestamp + 56778);
vm.roll(block.number + 1);
governance_allocateLQTY_clamped_single_initiative(0,1,0);
vm.warp(block.timestamp + 79538);
vm.roll(block.number + 1);
governance_depositLQTY_2(3);
helper_deployInitiative();
governance_registerInitiative(1);
vm.warp(block.timestamp + 496283);
vm.roll(block.number + 1);
governance_allocateLQTY_clamped_single_initiative_2nd_user(1,2,0);
property_sum_of_initatives_matches_total_votes_strict();
}
fix: Remove unused (and kind of redundant) REGISTRATION_WAPM_UP_PERIOD
chore: Pin solidity version of main contracts to 0.8.24
This is just a way for our tool to detected pushes to
main
and paste the result of the Invariant Testing Run