Skip to content

Commit

Permalink
Merge pull request #77 from liquity/cs-039
Browse files Browse the repository at this point in the history
fix: Move lqty allocation checks
  • Loading branch information
bingen authored Nov 21, 2024
2 parents c1ebe7a + 0a7eefa commit d6d3edf
Show file tree
Hide file tree
Showing 3 changed files with 8 additions and 5 deletions.
7 changes: 4 additions & 3 deletions src/BribeInitiative.sol
Original file line number Diff line number Diff line change
Expand Up @@ -88,19 +88,19 @@ contract BribeInitiative is IInitiative, IBribeInitiative {
lqtyAllocationByUserAtEpoch[_user].getItem(_prevLQTYAllocationEpoch);

require(
lqtyAllocation.value != 0 && _prevLQTYAllocationEpoch <= _epoch
&& (lqtyAllocation.next > _epoch || lqtyAllocation.next == 0),
_prevLQTYAllocationEpoch <= _epoch && (lqtyAllocation.next > _epoch || lqtyAllocation.next == 0),
"BribeInitiative: invalid-prev-lqty-allocation-epoch"
);
DoubleLinkedList.Item memory totalLQTYAllocation =
totalLQTYAllocationByEpoch.getItem(_prevTotalLQTYAllocationEpoch);
require(
totalLQTYAllocation.value != 0 && _prevTotalLQTYAllocationEpoch <= _epoch
_prevTotalLQTYAllocationEpoch <= _epoch
&& (totalLQTYAllocation.next > _epoch || totalLQTYAllocation.next == 0),
"BribeInitiative: invalid-prev-total-lqty-allocation-epoch"
);

(uint88 totalLQTY, uint120 totalAverageTimestamp) = _decodeLQTYAllocation(totalLQTYAllocation.value);
require(totalLQTY > 0, "BribeInitiative: total-lqty-allocation-zero");

// NOTE: SCALING!!! | The timestamp will work until type(uint32).max | After which the math will eventually overflow
uint120 scaledEpochEnd = (
Expand All @@ -113,6 +113,7 @@ contract BribeInitiative is IInitiative, IBribeInitiative {
uint240 totalVotes = governance.lqtyToVotes(totalLQTY, scaledEpochEnd, totalAverageTimestamp);
if (totalVotes != 0) {
(uint88 lqty, uint120 averageTimestamp) = _decodeLQTYAllocation(lqtyAllocation.value);
require(lqty > 0, "BribeInitiative: lqty-allocation-zero");

/// @audit Governance Invariant
assert(averageTimestamp <= scaledEpochEnd);
Expand Down
4 changes: 2 additions & 2 deletions test/BribeInitiative.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -570,7 +570,7 @@ contract BribeInitiativeTest is Test {
// user2 should receive no bribes if they try to claim
claimEpoch = governance.epoch() - 1; // claim for epoch 3
prevAllocationEpoch = governance.epoch() - 1; // epoch 3
(boldAmount, bribeTokenAmount) = _claimBribe(user2, claimEpoch, prevAllocationEpoch, prevAllocationEpoch);
(boldAmount, bribeTokenAmount) = _claimBribe(user2, claimEpoch, prevAllocationEpoch, prevAllocationEpoch, true);
assertEq(boldAmount, 0, "vetoer receives bold bribe amount");
assertEq(bribeTokenAmount, 0, "vetoer receives bribe amount");
}
Expand Down Expand Up @@ -857,7 +857,7 @@ contract BribeInitiativeTest is Test {
epochs[0].epoch = governance.epoch() - 1;
epochs[0].prevLQTYAllocationEpoch = governance.epoch() - 2;
epochs[0].prevTotalLQTYAllocationEpoch = governance.epoch() - 2;
vm.expectRevert("BribeInitiative: invalid-prev-total-lqty-allocation-epoch");
vm.expectRevert("BribeInitiative: total-lqty-allocation-zero");
(uint256 boldAmount, uint256 bribeTokenAmount) = bribeInitiative.claimBribes(epochs);
vm.stopPrank();

Expand Down
2 changes: 2 additions & 0 deletions test/BribeInitiativeAllocate.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -281,6 +281,7 @@ contract BribeInitiativeAllocateTest is Test {
claimData[0].epoch = 2;
claimData[0].prevLQTYAllocationEpoch = 2;
claimData[0].prevTotalLQTYAllocationEpoch = 2;
vm.expectRevert("BribeInitiative: total-lqty-allocation-zero");
(uint256 boldAmount, uint256 bribeTokenAmount) = bribeInitiative.claimBribes(claimData);
assertEq(boldAmount, 0, "boldAmount nonzero");
assertEq(bribeTokenAmount, 0, "bribeTokenAmount nonzero");
Expand Down Expand Up @@ -707,6 +708,7 @@ contract BribeInitiativeAllocateTest is Test {
claimData[0].epoch = 1;
claimData[0].prevLQTYAllocationEpoch = 1;
claimData[0].prevTotalLQTYAllocationEpoch = 1;
vm.expectRevert("BribeInitiative: lqty-allocation-zero");
(uint256 boldAmount, uint256 bribeTokenAmount) = bribeInitiative.claimBribes(claimData);
assertEq(boldAmount, 0);
assertEq(bribeTokenAmount, 0);
Expand Down

0 comments on commit d6d3edf

Please sign in to comment.