Skip to content

Commit

Permalink
Merge branch 'main' into cs-014
Browse files Browse the repository at this point in the history
  • Loading branch information
bingen committed Nov 21, 2024
2 parents 24deef5 + 1926488 commit 609f024
Show file tree
Hide file tree
Showing 6 changed files with 12 additions and 40 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
29 changes: 0 additions & 29 deletions src/ForwardBribe.sol

This file was deleted.

8 changes: 3 additions & 5 deletions src/UserProxy.sol
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,12 @@ pragma solidity ^0.8.24;

import {IERC20} from "openzeppelin/contracts/interfaces/IERC20.sol";
import {IERC20Permit} from "openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol";
import {SafeERC20} from "openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";

import {IUserProxy} from "./interfaces/IUserProxy.sol";
import {ILQTYStaking} from "./interfaces/ILQTYStaking.sol";
import {PermitParams} from "./utils/Types.sol";

contract UserProxy is IUserProxy {
using SafeERC20 for IERC20;

/// @inheritdoc IUserProxy
IERC20 public immutable lqty;
/// @inheritdoc IUserProxy
Expand Down Expand Up @@ -43,7 +40,7 @@ contract UserProxy is IUserProxy {
uint256 initialLUSDAmount = lusd.balanceOf(address(this));
uint256 initialETHAmount = address(this).balance;

lqty.safeTransferFrom(_lqtyFrom, address(this), _amount);
lqty.transferFrom(_lqtyFrom, address(this), _amount);
lqty.approve(address(stakingV1), _amount);
stakingV1.stake(_amount);
emit Stake(_amount, _lqtyFrom);
Expand Down Expand Up @@ -88,6 +85,7 @@ contract UserProxy is IUserProxy {
onlyStakingV2
returns (uint256 lusdAmount, uint256 ethAmount)
{
uint256 initialLQTYAmount = lqty.balanceOf(address(this));
uint256 initialLUSDAmount = lusd.balanceOf(address(this));
uint256 initialETHAmount = address(this).balance;

Expand All @@ -96,7 +94,7 @@ contract UserProxy is IUserProxy {
uint256 lqtyAmount = lqty.balanceOf(address(this));
if (lqtyAmount > 0) lqty.transfer(_recipient, lqtyAmount);

emit Unstake(_recipient, _amount, lqtyAmount);
emit Unstake(_recipient, lqtyAmount - initialLQTYAmount, lqtyAmount);

if (_doSendRewards) {
(lusdAmount, ethAmount) = _sendRewards(_recipient, initialLUSDAmount, initialETHAmount);
Expand Down
2 changes: 1 addition & 1 deletion src/interfaces/IUserProxy.sol
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import {PermitParams} from "../utils/Types.sol";

interface IUserProxy {
event Stake(uint256 amount, address lqtyFrom);
event Unstake(address indexed lqtyRecipient, uint256 lqtyUnstaked, uint256 lqtySent);
event Unstake(address indexed lqtyRecipient, uint256 lqtyReceived, uint256 lqtySent);
event SendRewards(
address indexed recipient,
uint256 lusdAmountReceived,
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 609f024

Please sign in to comment.