DeFiFoundry
20,000 USDC
View results
Submission Details
Severity: high
Invalid

Calculation of claimable points is not fair to all users

Summary

The calcution of claiming points can be incorrect. An user which staked a smaller amount than another can get more points than the other user.

Vulnerability Details

The following test check if the claiming points by bob which staked a lesser amount than amount than alice is inferior to the claiming points of Alice.

function test\_POC(uint256 amountBob, uint256 amountAlice) public {
vm.assume( amountBob < 1 ether);
vm.assume( amountAlice < 1 ether);
vm.assume( amountBob <amountAlice);
vm.assume( 0 <amountAlice);
vm.assume( 0 <amountBob);
uint256 balancePointsAliceBefore = POINTS.balanceOf(alice);
uint256 balancePointsbobBefore = POINTS.balanceOf(bob);
vm.warp(vm.getBlockTimestamp() + POINTS.EPOCH_DURATION());
POINTS.distributePoints();
vm.prank(bob);
fjordStaking.stake(amountBob);
vm.prank(alice);
fjordStaking.stake(amountAlice);
skip(1 weeks);
vm.prank(alice);
POINTS.claimPoints();
vm.prank(bob);
POINTS.claimPoints();
uint256 balancePointsAliceAfter = POINTS.balanceOf(alice);
uint256 balancePointsBobAfter = POINTS.balanceOf(bob);
assert(balancePointsAliceAfter > balancePointsBobAfter);
}

The following assertion is violated :

No files changed, compilation skipped

Ran 1 test for test/integration/points.t.sol:PointsIntegrationTest
[FAIL. Reason: panic: assertion failed (0x01); counterexample: calldata=0xb45fb80a00000000000000000000000000000000000000000000000000000000000023c50000000000000000000000000000000000000000000000000000000000002d40 args=[9157, 11584 [1.158e4]]] test_Dowsers_Points_Accumulate_2_Epochs(uint256,uint256) (runs: 0, μ: 0, ~: 0)
Traces:
[5496994] PointsIntegrationTest::setUp()
├─ [0] VM::createSelectFork("mainnet", 19595905 [1.959e7])
│ └─ ← [Return] 0
├─ [1206823] → new FjordPoints@0x5615dEB798BB3E4dFa0139dFa1b3D433Cc23b72f
│ └─ ← [Return] 5471 bytes of code
├─ [702855] → new MockERC20@0x2e234DAe75C793f67A35089C9d99245E1C58470b
│ └─ ← [Return] 3276 bytes of code
├─ [2756964] → new FjordStaking@0xF62849F9A0B5Bf2913b396098F7c7019b51A820a
│ └─ ← [Return] 13101 bytes of code
├─ [2542] MockERC20::balanceOf(PointsIntegrationTest: [0x7FA9385bE102ac3EAc297483Dd6233D62b3e1496]) [staticcall]
│ └─ ← [Return] 0
├─ [0] VM::record()
│ └─ ← [Return]
├─ [542] MockERC20::balanceOf(PointsIntegrationTest: [0x7FA9385bE102ac3EAc297483Dd6233D62b3e1496]) [staticcall]
│ └─ ← [Return] 0
├─ [0] VM::accesses(MockERC20: [0x2e234DAe75C793f67A35089C9d99245E1C58470b])
│ └─ ← [Return] [0x1da434b76eba4736d6e760bfd78cbf883a0776ee1666a9157f99ab1b97923a3c], []
├─ [0] VM::load(MockERC20: [0x2e234DAe75C793f67A35089C9d99245E1C58470b], 0x1da434b76eba4736d6e760bfd78cbf883a0776ee1666a9157f99ab1b97923a3c) [staticcall]
│ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000000000
├─ emit WARNING_UninitedSlot(who: MockERC20: [0x2e234DAe75C793f67A35089C9d99245E1C58470b], slot: 13407199363679635973052879518465057167389910613330280238043615909335847287356 [1.34e76])
├─ [0] VM::load(MockERC20: [0x2e234DAe75C793f67A35089C9d99245E1C58470b], 0x1da434b76eba4736d6e760bfd78cbf883a0776ee1666a9157f99ab1b97923a3c) [staticcall]
│ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000000000
├─ [542] MockERC20::balanceOf(PointsIntegrationTest: [0x7FA9385bE102ac3EAc297483Dd6233D62b3e1496]) [staticcall]
│ └─ ← [Return] 0
├─ [0] VM::store(MockERC20: [0x2e234DAe75C793f67A35089C9d99245E1C58470b], 0x1da434b76eba4736d6e760bfd78cbf883a0776ee1666a9157f99ab1b97923a3c, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)
│ └─ ← [Return]
├─ [542] MockERC20::balanceOf(PointsIntegrationTest: [0x7FA9385bE102ac3EAc297483Dd6233D62b3e1496]) [staticcall]
│ └─ ← [Return] 115792089237316195423570985008687907853269984665640564039457584007913129639935 [1.157e77]
├─ [0] VM::store(MockERC20: [0x2e234DAe75C793f67A35089C9d99245E1C58470b], 0x1da434b76eba4736d6e760bfd78cbf883a0776ee1666a9157f99ab1b97923a3c, 0x0000000000000000000000000000000000000000000000000000000000000000)
│ └─ ← [Return]
├─ emit SlotFound(who: MockERC20: [0x2e234DAe75C793f67A35089C9d99245E1C58470b], fsig: 0x70a0823100000000000000000000000000000000000000000000000000000000, keysHash: 0x5ff10565516c110180bb9cc111cdbc2b0a68e09ff7fac17290373c3aa4a1bb03, slot: 13407199363679635973052879518465057167389910613330280238043615909335847287356 [1.34e76])
├─ [0] VM::load(MockERC20: [0x2e234DAe75C793f67A35089C9d99245E1C58470b], 0x1da434b76eba4736d6e760bfd78cbf883a0776ee1666a9157f99ab1b97923a3c) [staticcall]
│ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000000000
├─ [0] VM::store(MockERC20: [0x2e234DAe75C793f67A35089C9d99245E1C58470b], 0x1da434b76eba4736d6e760bfd78cbf883a0776ee1666a9157f99ab1b97923a3c, 0x00000000000000000000000000000000000000000000021e19e0c9bab2400000)
│ └─ ← [Return]
├─ [542] MockERC20::balanceOf(PointsIntegrationTest: [0x7FA9385bE102ac3EAc297483Dd6233D62b3e1496]) [staticcall]
│ └─ ← [Return] 10000000000000000000000 [1e22]
├─ [24546] MockERC20::approve(FjordStaking: [0xF62849F9A0B5Bf2913b396098F7c7019b51A820a], 10000000000000000000000 [1e22])
│ ├─ emit Approval(owner: PointsIntegrationTest: [0x7FA9385bE102ac3EAc297483Dd6233D62b3e1496], spender: FjordStaking: [0xF62849F9A0B5Bf2913b396098F7c7019b51A820a], value: 10000000000000000000000 [1e22])
│ └─ ← [Return] true
├─ [2542] MockERC20::balanceOf(minter: [0x030F6a4C5Baa7350405fA8122cF458070Abd1B59]) [staticcall]
│ └─ ← [Return] 0
├─ [0] VM::record()
│ └─ ← [Return]
├─ [542] MockERC20::balanceOf(minter: [0x030F6a4C5Baa7350405fA8122cF458070Abd1B59]) [staticcall]
│ └─ ← [Return] 0
├─ [0] VM::accesses(MockERC20: [0x2e234DAe75C793f67A35089C9d99245E1C58470b])
│ └─ ← [Return] [0xbeb1bfa3a61d5f03a38fcbf9514d07bf4c9973ca3cba9c894af28ab72e2c404f], []
├─ [0] VM::load(MockERC20: [0x2e234DAe75C793f67A35089C9d99245E1C58470b], 0xbeb1bfa3a61d5f03a38fcbf9514d07bf4c9973ca3cba9c894af28ab72e2c404f) [staticcall]
│ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000000000
├─ emit WARNING_UninitedSlot(who: MockERC20: [0x2e234DAe75C793f67A35089C9d99245E1C58470b], slot: 86253495806803854567482623573926311799907068771052091146118304654747499249743 [8.625e76])
├─ [0] VM::load(MockERC20: [0x2e234DAe75C793f67A35089C9d99245E1C58470b], 0xbeb1bfa3a61d5f03a38fcbf9514d07bf4c9973ca3cba9c894af28ab72e2c404f) [staticcall]
│ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000000000
├─ [542] MockERC20::balanceOf(minter: [0x030F6a4C5Baa7350405fA8122cF458070Abd1B59]) [staticcall]
│ └─ ← [Return] 0
├─ [0] VM::store(MockERC20: [0x2e234DAe75C793f67A35089C9d99245E1C58470b], 0xbeb1bfa3a61d5f03a38fcbf9514d07bf4c9973ca3cba9c894af28ab72e2c404f, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)
│ └─ ← [Return]
├─ [542] MockERC20::balanceOf(minter: [0x030F6a4C5Baa7350405fA8122cF458070Abd1B59]) [staticcall]
│ └─ ← [Return] 115792089237316195423570985008687907853269984665640564039457584007913129639935 [1.157e77]
├─ [0] VM::store(MockERC20: [0x2e234DAe75C793f67A35089C9d99245E1C58470b], 0xbeb1bfa3a61d5f03a38fcbf9514d07bf4c9973ca3cba9c894af28ab72e2c404f, 0x0000000000000000000000000000000000000000000000000000000000000000)
│ └─ ← [Return]
├─ emit SlotFound(who: MockERC20: [0x2e234DAe75C793f67A35089C9d99245E1C58470b], fsig: 0x70a0823100000000000000000000000000000000000000000000000000000000, keysHash: 0x413383e7388d41256a735d6098b92fc0ef077b94bc8d4f1ff46f327502034a5b, slot: 86253495806803854567482623573926311799907068771052091146118304654747499249743 [8.625e76])
├─ [0] VM::load(MockERC20: [0x2e234DAe75C793f67A35089C9d99245E1C58470b], 0xbeb1bfa3a61d5f03a38fcbf9514d07bf4c9973ca3cba9c894af28ab72e2c404f) [staticcall]
│ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000000000
├─ [0] VM::store(MockERC20: [0x2e234DAe75C793f67A35089C9d99245E1C58470b], 0xbeb1bfa3a61d5f03a38fcbf9514d07bf4c9973ca3cba9c894af28ab72e2c404f, 0x00000000000000000000000000000000000000000000021e19e0c9bab2400000)
│ └─ ← [Return]
├─ [542] MockERC20::balanceOf(minter: [0x030F6a4C5Baa7350405fA8122cF458070Abd1B59]) [staticcall]
│ └─ ← [Return] 10000000000000000000000 [1e22]
├─ [0] VM::prank(minter: [0x030F6a4C5Baa7350405fA8122cF458070Abd1B59])
│ └─ ← [Return]
├─ [24546] MockERC20::approve(FjordStaking: [0xF62849F9A0B5Bf2913b396098F7c7019b51A820a], 10000000000000000000000 [1e22])
│ ├─ emit Approval(owner: minter: [0x030F6a4C5Baa7350405fA8122cF458070Abd1B59], spender: FjordStaking: [0xF62849F9A0B5Bf2913b396098F7c7019b51A820a], value: 10000000000000000000000 [1e22])
│ └─ ← [Return] true
├─ [2542] MockERC20::balanceOf(alice: [0x328809Bc894f92807417D2dAD6b7C998c1aFdac6]) [staticcall]
│ └─ ← [Return] 0
├─ [0] VM::record()
│ └─ ← [Return]
├─ [542] MockERC20::balanceOf(alice: [0x328809Bc894f92807417D2dAD6b7C998c1aFdac6]) [staticcall]
│ └─ ← [Return] 0
├─ [0] VM::accesses(MockERC20: [0x2e234DAe75C793f67A35089C9d99245E1C58470b])
│ └─ ← [Return] [0x77a21f607f15fa485a5b1fdcd955ccf4f4f8dfc688d7de43a55c923998bfdaac], []
├─ [0] VM::load(MockERC20: [0x2e234DAe75C793f67A35089C9d99245E1C58470b], 0x77a21f607f15fa485a5b1fdcd955ccf4f4f8dfc688d7de43a55c923998bfdaac) [staticcall]
│ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000000000
├─ emit WARNING_UninitedSlot(who: MockERC20: [0x2e234DAe75C793f67A35089C9d99245E1C58470b], slot: 54111674761578131161267510329468278182774220669401243874751569269460945590956 [5.411e76])
├─ [0] VM::load(MockERC20: [0x2e234DAe75C793f67A35089C9d99245E1C58470b], 0x77a21f607f15fa485a5b1fdcd955ccf4f4f8dfc688d7de43a55c923998bfdaac) [staticcall]
│ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000000000
├─ [542] MockERC20::balanceOf(alice: [0x328809Bc894f92807417D2dAD6b7C998c1aFdac6]) [staticcall]
│ └─ ← [Return] 0
├─ [0] VM::store(MockERC20: [0x2e234DAe75C793f67A35089C9d99245E1C58470b], 0x77a21f607f15fa485a5b1fdcd955ccf4f4f8dfc688d7de43a55c923998bfdaac, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)
│ └─ ← [Return]
├─ [542] MockERC20::balanceOf(alice: [0x328809Bc894f92807417D2dAD6b7C998c1aFdac6]) [staticcall]
│ └─ ← [Return] 115792089237316195423570985008687907853269984665640564039457584007913129639935 [1.157e77]
├─ [0] VM::store(MockERC20: [0x2e234DAe75C793f67A35089C9d99245E1C58470b], 0x77a21f607f15fa485a5b1fdcd955ccf4f4f8dfc688d7de43a55c923998bfdaac, 0x0000000000000000000000000000000000000000000000000000000000000000)
│ └─ ← [Return]
├─ emit SlotFound(who: MockERC20: [0x2e234DAe75C793f67A35089C9d99245E1C58470b], fsig: 0x70a0823100000000000000000000000000000000000000000000000000000000, keysHash: 0xd3751b735d9edcdf3462f9493be94138f68ee6a5bfd2c14f7e1a7b0b58f11cca, slot: 54111674761578131161267510329468278182774220669401243874751569269460945590956 [5.411e76])
├─ [0] VM::load(MockERC20: [0x2e234DAe75C793f67A35089C9d99245E1C58470b], 0x77a21f607f15fa485a5b1fdcd955ccf4f4f8dfc688d7de43a55c923998bfdaac) [staticcall]
│ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000000000
├─ [0] VM::store(MockERC20: [0x2e234DAe75C793f67A35089C9d99245E1C58470b], 0x77a21f607f15fa485a5b1fdcd955ccf4f4f8dfc688d7de43a55c923998bfdaac, 0x00000000000000000000000000000000000000000000021e19e0c9bab2400000)
│ └─ ← [Return]
├─ [542] MockERC20::balanceOf(alice: [0x328809Bc894f92807417D2dAD6b7C998c1aFdac6]) [staticcall]
│ └─ ← [Return] 10000000000000000000000 [1e22]
├─ [0] VM::prank(alice: [0x328809Bc894f92807417D2dAD6b7C998c1aFdac6])
│ └─ ← [Return]
├─ [24546] MockERC20::approve(FjordStaking: [0xF62849F9A0B5Bf2913b396098F7c7019b51A820a], 10000000000000000000000 [1e22])
│ ├─ emit Approval(owner: alice: [0x328809Bc894f92807417D2dAD6b7C998c1aFdac6], spender: FjordStaking: [0xF62849F9A0B5Bf2913b396098F7c7019b51A820a], value: 10000000000000000000000 [1e22])
│ └─ ← [Return] true
├─ [2542] MockERC20::balanceOf(bob: [0x1D96F2f6BeF1202E4Ce1Ff6Dad0c2CB002861d3e]) [staticcall]
│ └─ ← [Return] 0
├─ [0] VM::record()
│ └─ ← [Return]
├─ [542] MockERC20::balanceOf(bob: [0x1D96F2f6BeF1202E4Ce1Ff6Dad0c2CB002861d3e]) [staticcall]
│ └─ ← [Return] 0
├─ [0] VM::accesses(MockERC20: [0x2e234DAe75C793f67A35089C9d99245E1C58470b])
│ └─ ← [Return] [0x15c4fbd8bab530f4f95519ad930ceb91bb9186b396b1ab79c8c0e2ffb361362d], []
├─ [0] VM::load(MockERC20: [0x2e234DAe75C793f67A35089C9d99245E1C58470b], 0x15c4fbd8bab530f4f95519ad930ceb91bb9186b396b1ab79c8c0e2ffb361362d) [staticcall]
│ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000000000
├─ emit WARNING_UninitedSlot(who: MockERC20: [0x2e234DAe75C793f67A35089C9d99245E1C58470b], slot: 9846610026289306022809957835700153390121512990137257332978437222393138198061 [9.846e75])
├─ [0] VM::load(MockERC20: [0x2e234DAe75C793f67A35089C9d99245E1C58470b], 0x15c4fbd8bab530f4f95519ad930ceb91bb9186b396b1ab79c8c0e2ffb361362d) [staticcall]
│ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000000000
├─ [542] MockERC20::balanceOf(bob: [0x1D96F2f6BeF1202E4Ce1Ff6Dad0c2CB002861d3e]) [staticcall]
│ └─ ← [Return] 0
├─ [0] VM::store(MockERC20: [0x2e234DAe75C793f67A35089C9d99245E1C58470b], 0x15c4fbd8bab530f4f95519ad930ceb91bb9186b396b1ab79c8c0e2ffb361362d, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)
│ └─ ← [Return]
├─ [542] MockERC20::balanceOf(bob: [0x1D96F2f6BeF1202E4Ce1Ff6Dad0c2CB002861d3e]) [staticcall]
│ └─ ← [Return] 115792089237316195423570985008687907853269984665640564039457584007913129639935 [1.157e77]
├─ [0] VM::store(MockERC20: [0x2e234DAe75C793f67A35089C9d99245E1C58470b], 0x15c4fbd8bab530f4f95519ad930ceb91bb9186b396b1ab79c8c0e2ffb361362d, 0x0000000000000000000000000000000000000000000000000000000000000000)
│ └─ ← [Return]
├─ emit SlotFound(who: MockERC20: [0x2e234DAe75C793f67A35089C9d99245E1C58470b], fsig: 0x70a0823100000000000000000000000000000000000000000000000000000000, keysHash: 0x8dadbabab7d896e1d6e41f8f4b514a810d0074773f74b8ece0bf1f294acff3ad, slot: 9846610026289306022809957835700153390121512990137257332978437222393138198061 [9.846e75])
├─ [0] VM::load(MockERC20: [0x2e234DAe75C793f67A35089C9d99245E1C58470b], 0x15c4fbd8bab530f4f95519ad930ceb91bb9186b396b1ab79c8c0e2ffb361362d) [staticcall]
│ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000000000
├─ [0] VM::store(MockERC20: [0x2e234DAe75C793f67A35089C9d99245E1C58470b], 0x15c4fbd8bab530f4f95519ad930ceb91bb9186b396b1ab79c8c0e2ffb361362d, 0x00000000000000000000000000000000000000000000021e19e0c9bab2400000)
│ └─ ← [Return]
├─ [542] MockERC20::balanceOf(bob: [0x1D96F2f6BeF1202E4Ce1Ff6Dad0c2CB002861d3e]) [staticcall]
│ └─ ← [Return] 10000000000000000000000 [1e22]
├─ [0] VM::prank(bob: [0x1D96F2f6BeF1202E4Ce1Ff6Dad0c2CB002861d3e])
│ └─ ← [Return]
├─ [24546] MockERC20::approve(FjordStaking: [0xF62849F9A0B5Bf2913b396098F7c7019b51A820a], 10000000000000000000000 [1e22])
│ ├─ emit Approval(owner: bob: [0x1D96F2f6BeF1202E4Ce1Ff6Dad0c2CB002861d3e], spender: FjordStaking: [0xF62849F9A0B5Bf2913b396098F7c7019b51A820a], value: 10000000000000000000000 [1e22])
│ └─ ← [Return] true
├─ [22742] FjordPoints::setStakingContract(FjordStaking: [0xF62849F9A0B5Bf2913b396098F7c7019b51A820a])
│ └─ ← [Stop]
└─ ← [Stop]

[671026] PointsIntegrationTest::test_POC(9157, 11584 [1.158e4])
├─ [0] VM::assume(true) [staticcall]
│ └─ ← [Return]
├─ [0] VM::assume(true) [staticcall]
│ └─ ← [Return]
├─ [0] VM::assume(true) [staticcall]
│ └─ ← [Return]
├─ [0] VM::assume(true) [staticcall]
│ └─ ← [Return]
├─ [0] VM::assume(true) [staticcall]
│ └─ ← [Return]
├─ [2608] FjordPoints::balanceOf(alice: [0x328809Bc894f92807417D2dAD6b7C998c1aFdac6]) [staticcall]
│ └─ ← [Return] 0
├─ [2608] FjordPoints::balanceOf(bob: [0x1D96F2f6BeF1202E4Ce1Ff6Dad0c2CB002861d3e]) [staticcall]
│ └─ ← [Return] 0
├─ [262] FjordPoints::EPOCH_DURATION() [staticcall]
│ └─ ← [Return] 604800 [6.048e5]
├─ [0] VM::getBlockTimestamp() [staticcall]
│ └─ ← [Return] 1712397095 [1.712e9]
├─ [0] VM::warp(1713001895 [1.713e9])
│ └─ ← [Return]
├─ [4557] FjordPoints::distributePoints()
│ └─ ← [Stop]
├─ [0] VM::prank(bob: [0x1D96F2f6BeF1202E4Ce1Ff6Dad0c2CB002861d3e])
│ └─ ← [Return]
├─ [278922] FjordStaking::stake(9157)
│ ├─ emit RewardPerTokenChanged(epoch: 1, rewardPerToken: 0)
│ ├─ [35181] MockERC20::transferFrom(bob: [0x1D96F2f6BeF1202E4Ce1Ff6Dad0c2CB002861d3e], FjordStaking: [0xF62849F9A0B5Bf2913b396098F7c7019b51A820a], 9157)
│ │ ├─ emit Transfer(from: bob: [0x1D96F2f6BeF1202E4Ce1Ff6Dad0c2CB002861d3e], to: FjordStaking: [0xF62849F9A0B5Bf2913b396098F7c7019b51A820a], value: 9157)
│ │ └─ ← [Return] true
│ ├─ [54271] FjordPoints::onStaked(bob: [0x1D96F2f6BeF1202E4Ce1Ff6Dad0c2CB002861d3e], 9157)
│ │ ├─ emit Staked(user: bob: [0x1D96F2f6BeF1202E4Ce1Ff6Dad0c2CB002861d3e], amount: 9157)
│ │ └─ ← [Stop]
│ ├─ emit Staked(user: bob: [0x1D96F2f6BeF1202E4Ce1Ff6Dad0c2CB002861d3e], epoch: 2, amount: 9157)
│ └─ ← [Stop]
├─ [0] VM::prank(alice: [0x328809Bc894f92807417D2dAD6b7C998c1aFdac6])
│ └─ ← [Return]
├─ [257573] FjordStaking::stake(11584 [1.158e4])
│ ├─ [13281] MockERC20::transferFrom(alice: [0x328809Bc894f92807417D2dAD6b7C998c1aFdac6], FjordStaking: [0xF62849F9A0B5Bf2913b396098F7c7019b51A820a], 11584 [1.158e4])
│ │ ├─ emit Transfer(from: alice: [0x328809Bc894f92807417D2dAD6b7C998c1aFdac6], to: FjordStaking: [0xF62849F9A0B5Bf2913b396098F7c7019b51A820a], value: 11584 [1.158e4])
│ │ └─ ← [Return] true
│ ├─ [100436] FjordPoints::onStaked(alice: [0x328809Bc894f92807417D2dAD6b7C998c1aFdac6], 11584 [1.158e4])
│ │ ├─ emit PointsDistributed(points: 100000000000000000000 [1e20], pointsPerToken: 10920607185759528229769575188380473 [1.092e34])
│ │ ├─ emit Staked(user: alice: [0x328809Bc894f92807417D2dAD6b7C998c1aFdac6], amount: 11584 [1.158e4])
│ │ └─ ← [Stop]
│ ├─ emit Staked(user: alice: [0x328809Bc894f92807417D2dAD6b7C998c1aFdac6], epoch: 2, amount: 11584 [1.158e4])
│ └─ ← [Stop]
├─ [0] VM::warp(1713606695 [1.713e9])
│ └─ ← [Return]
├─ [0] VM::prank(alice: [0x328809Bc894f92807417D2dAD6b7C998c1aFdac6])
│ └─ ← [Return]
├─ [71389] FjordPoints::claimPoints()
│ ├─ emit PointsDistributed(points: 100000000000000000000 [1e20], pointsPerToken: 15741975490084295598748891518354919 [1.574e34])
│ ├─ emit Transfer(from: 0x0000000000000000000000000000000000000000, to: alice: [0x328809Bc894f92807417D2dAD6b7C998c1aFdac6], value: 55850730437298105202 [5.585e19])
│ ├─ emit PointsClaimed(user: alice: [0x328809Bc894f92807417D2dAD6b7C998c1aFdac6], amount: 55850730437298105202 [5.585e19])
│ └─ ← [Stop]
├─ [0] VM::prank(bob: [0x1D96F2f6BeF1202E4Ce1Ff6Dad0c2CB002861d3e])
│ └─ ← [Return]
├─ [65701] FjordPoints::claimPoints()
│ ├─ emit Transfer(from: 0x0000000000000000000000000000000000000000, to: bob: [0x1D96F2f6BeF1202E4Ce1Ff6Dad0c2CB002861d3e], value: 144149269562701894797 [1.441e20])
│ ├─ emit PointsClaimed(user: bob: [0x1D96F2f6BeF1202E4Ce1Ff6Dad0c2CB002861d3e], amount: 144149269562701894797 [1.441e20])
│ └─ ← [Stop]
├─ [608] FjordPoints::balanceOf(alice: [0x328809Bc894f92807417D2dAD6b7C998c1aFdac6]) [staticcall]
│ └─ ← [Return] 55850730437298105202 [5.585e19]
├─ [608] FjordPoints::balanceOf(bob: [0x1D96F2f6BeF1202E4Ce1Ff6Dad0c2CB002861d3e]) [staticcall]
│ └─ ← [Return] 144149269562701894797 [1.441e20]
└─ ← [Revert] panic: assertion failed (0x01)

Suite result: FAILED. 0 passed; 1 failed; 0 skipped; finished in 675.12ms (5.06ms CPU time)

Ran 1 test suite in 1.38s (675.12ms CPU time): 0 tests passed, 1 failed, 0 skipped (1 total tests)

Failing tests:
Encountered 1 failing test in test/integration/points.t.sol:PointsIntegrationTest
[FAIL. Reason: panic: assertion failed (0x01); counterexample: calldata=0xb45fb80a00000000000000000000000000000000000000000000000000000000000023c50000000000000000000000000000000000000000000000000000000000002d40 args=[9157, 11584 [1.158e4]]] test_POC(uint256,uint256) (runs: 0, μ: 0, ~: 0)

Encountered a total of 1 failing tests, 0 tests succeeded

Impact

Loss of funds for some users.

Tools Used

Foundry

Recommendations

Modify the claimPoints method.

Updates

Lead Judging Commences

inallhonesty Lead Judge about 1 year ago
Submission Judgement Published
Invalidated
Reason: Too generic

Support

FAQs

Can't find an answer? Chat with us on Discord, Twitter or Linkedin.