Skip to content

Commit

Permalink
Remove duplicate method
Browse files Browse the repository at this point in the history
  • Loading branch information
Dylan DesRosier committed Jun 29, 2023
1 parent 8892ac2 commit e0b1b3f
Show file tree
Hide file tree
Showing 5 changed files with 56 additions and 54 deletions.
53 changes: 16 additions & 37 deletions src/abstract/TieredLiquidityDistributor.sol
Original file line number Diff line number Diff line change
Expand Up @@ -651,15 +651,6 @@ contract TieredLiquidityDistributor {
: uint32(TierCalculationLib.prizeCount(_tier));
}

/// @notice Computes the remaining liquidity for the given tier
/// @param _tier The tier to compute the remaining liquidity for
/// @return The remaining liquidity
function getTierRemainingLiquidity(uint8 _tier) external view returns (uint112) {
uint8 numTiers = numberOfTiers;
return
uint104(_remainingTierLiquidity(_getTier(_tier, numTiers), _computeShares(_tier, numTiers)));
}

/// @notice Retrieves an up-to-date Tier struct for the given tier
/// @param _tier The tier to retrieve
/// @param _numberOfTiers The number of tiers, should match the current. Passed explicitly as an optimization
Expand Down Expand Up @@ -717,7 +708,15 @@ contract TieredLiquidityDistributor {
uint104 _liquidity
) internal returns (Tier memory) {
uint8 _shares = _computeShares(_tier, numberOfTiers);
uint104 remainingLiquidity = uint104(_remainingTierLiquidity(_tierStruct, _shares));
uint104 remainingLiquidity = uint104(
fromUD60x18(
_getTierRemainingLiquidity(
_shares,
fromUD34x4toUD60x18(_tierStruct.prizeTokenPerShare),
fromUD34x4toUD60x18(prizeTokenPerShare)
)
)
);
if (_liquidity > remainingLiquidity) {
uint104 excess = _liquidity - remainingLiquidity;
if (excess > _reserve) {
Expand All @@ -735,26 +734,6 @@ contract TieredLiquidityDistributor {
return _tierStruct;
}

/// @notice Computes the total liquidity available to a tier
/// @param _tier The tier to compute the liquidity for
/// @return The total liquidity
function _remainingTierLiquidity(
Tier memory _tier,
uint8 _shares
) internal view returns (uint112) {
UD34x4 _prizeTokenPerShare = prizeTokenPerShare;
if (UD34x4.unwrap(_tier.prizeTokenPerShare) >= UD34x4.unwrap(_prizeTokenPerShare)) {
return 0;
}
UD60x18 delta = fromUD34x4toUD60x18(_prizeTokenPerShare).sub(
fromUD34x4toUD60x18(_tier.prizeTokenPerShare)
);
// delta max int size is (uMAX_UD34x4 / 1e4)
// max share size is 256
// result max = (uMAX_UD34x4 / 1e4) * 256
return uint112(fromUD60x18(delta.mul(toUD60x18(_shares))));
}

/// @notice Computes the prize size of the given tier
/// @param _tier The tier to compute the prize size of
/// @param _numberOfTiers The current number of tiers
Expand Down Expand Up @@ -838,7 +817,7 @@ contract TieredLiquidityDistributor {
for (uint8 i = start; i < end; i++) {
Tier memory tierLiquidity = _tiers[i];
uint8 shares = _computeShares(i, _numberOfTiers);
UD60x18 liq = _getRemainingTierLiquidity(
UD60x18 liq = _getTierRemainingLiquidity(
shares,
fromUD34x4toUD60x18(tierLiquidity.prizeTokenPerShare),
_prizeTokenPerShare
Expand All @@ -848,14 +827,14 @@ contract TieredLiquidityDistributor {
return fromUD60x18(reclaimedLiquidity);
}

/// @notice Computes the total liquidity available to a tier
/// @notice Computes the remaining liquidity available to a tier
/// @param _tier The tier to compute the liquidity for
/// @return The total liquidity
function getRemainingTierLiquidity(uint8 _tier) external view returns (uint256) {
/// @return The remaining liquidity
function getTierRemainingLiquidity(uint8 _tier) external view returns (uint256) {
uint8 _numTiers = numberOfTiers;
return
fromUD60x18(
_getRemainingTierLiquidity(
_getTierRemainingLiquidity(
_computeShares(_tier, _numTiers),
fromUD34x4toUD60x18(_getTier(_tier, _numTiers).prizeTokenPerShare),
fromUD34x4toUD60x18(prizeTokenPerShare)
Expand All @@ -867,8 +846,8 @@ contract TieredLiquidityDistributor {
/// @param _shares The number of shares that the tier has (can be tierShares or canaryShares)
/// @param _tierPrizeTokenPerShare The prizeTokenPerShare of the Tier struct
/// @param _prizeTokenPerShare The global prizeTokenPerShare
/// @return The total available liquidity
function _getRemainingTierLiquidity(
/// @return The remaining available liquidity
function _getTierRemainingLiquidity(
uint256 _shares,
UD60x18 _tierPrizeTokenPerShare,
UD60x18 _prizeTokenPerShare
Expand Down
14 changes: 7 additions & 7 deletions test/PrizePool.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -538,7 +538,7 @@ contract PrizePoolTest is Test {
}

function testGetRemainingTierLiquidity_invalidTier() public {
assertEq(prizePool.getRemainingTierLiquidity(10), 0);
assertEq(prizePool.getTierRemainingLiquidity(10), 0);
}

function testGetRemainingTierLiquidity_grandPrize() public {
Expand All @@ -547,22 +547,22 @@ contract PrizePoolTest is Test {
// 2 tiers at 100 shares each, and 10 for canary and 10 for reserve
// = 100 / 220 = 10 / 22 = 0.45454545454545453
// then take only 10% due to alpha = 0.9
assertEq(prizePool.getRemainingTierLiquidity(0), 0.0454545454545454e18);
assertEq(prizePool.getTierRemainingLiquidity(0), 0.0454545454545454e18);
}

function testGetRemainingTierLiquidity_afterClaim() public {
contribute(100e18);
completeAndStartNextDraw(winningRandomNumber);
uint256 liquidity = 4.5454545454545454e18;
assertEq(prizePool.getRemainingTierLiquidity(1), liquidity, "second tier");
assertEq(prizePool.getTierRemainingLiquidity(1), liquidity, "second tier");

mockTwab(sender1, 1);
uint256 prize = 1.13636363636363635e18;
assertEq(claimPrize(sender1, 1, 0), prize, "second tier prize 1");

// reduce by prize
assertEq(
prizePool.getRemainingTierLiquidity(1),
prizePool.getTierRemainingLiquidity(1),
liquidity - prize,
"second tier liquidity post claim 1"
);
Expand All @@ -571,10 +571,10 @@ contract PrizePoolTest is Test {
function testGetRemainingTierLiquidity_canary() public {
contribute(220e18);
completeAndStartNextDraw(winningRandomNumber);
assertEq(prizePool.getRemainingTierLiquidity(0), 10e18);
assertEq(prizePool.getRemainingTierLiquidity(1), 10e18);
assertEq(prizePool.getTierRemainingLiquidity(0), 10e18);
assertEq(prizePool.getTierRemainingLiquidity(1), 10e18);
// canary tier
assertEq(prizePool.getRemainingTierLiquidity(2), 1e18);
assertEq(prizePool.getTierRemainingLiquidity(2), 1e18);
}

function testSetDrawManager() public {
Expand Down
12 changes: 6 additions & 6 deletions test/abstract/TieredLiquidityDistributor.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ contract TieredLiquidityDistributorTest is Test {

function testGetRemainingTierLiquidity() public {
distributor.nextDraw(3, 220e18);
assertEq(distributor.getRemainingTierLiquidity(0), 100e18);
assertEq(distributor.getTierRemainingLiquidity(0), 100e18);
}

function testGetTierRemainingLiquidity() public {
Expand Down Expand Up @@ -122,11 +122,11 @@ contract TieredLiquidityDistributorTest is Test {

function testExpansionTierLiquidity() public {
distributor.nextDraw(3, 220e18); // canary gets 10e18
assertEq(distributor.getRemainingTierLiquidity(2), 10e18, "canary initial liquidity");
assertEq(distributor.getTierRemainingLiquidity(2), 10e18, "canary initial liquidity");
distributor.nextDraw(5, 420e18); // should be 420 distributed

assertEq(distributor.getRemainingTierLiquidity(3), 100e18, "new tier liquidity");
assertEq(distributor.getRemainingTierLiquidity(4), 10e18, "canary liquidity");
assertEq(distributor.getTierRemainingLiquidity(3), 100e18, "new tier liquidity");
assertEq(distributor.getTierRemainingLiquidity(4), 10e18, "canary liquidity");
}

function testExpansionTierLiquidity_max() public {
Expand All @@ -142,7 +142,7 @@ contract TieredLiquidityDistributorTest is Test {

uint256 summed;
for (uint8 t = 0; t < distributor.numberOfTiers(); t++) {
summed += distributor.getRemainingTierLiquidity(t);
summed += distributor.getTierRemainingLiquidity(t);
}
summed += distributor.reserve();

Expand Down Expand Up @@ -195,7 +195,7 @@ contract TieredLiquidityDistributorTest is Test {
function summedLiquidity() public view returns (uint256) {
uint256 summed;
for (uint8 t = 0; t < distributor.numberOfTiers(); t++) {
summed += distributor.getRemainingTierLiquidity(t);
summed += distributor.getTierRemainingLiquidity(t);
}
summed += distributor.reserve();
return summed;
Expand Down
13 changes: 11 additions & 2 deletions test/abstract/helper/TieredLiquidityDistributorWrapper.sol
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ pragma solidity 0.8.17;

import "forge-std/console2.sol";

import { TieredLiquidityDistributor, Tier, fromUD34x4toUD60x18 } from "src/abstract/TieredLiquidityDistributor.sol";
import { TieredLiquidityDistributor, Tier, fromUD34x4toUD60x18, fromUD60x18 } from "src/abstract/TieredLiquidityDistributor.sol";

contract TieredLiquidityDistributorWrapper is TieredLiquidityDistributor {
constructor(
Expand Down Expand Up @@ -34,7 +34,16 @@ contract TieredLiquidityDistributorWrapper is TieredLiquidityDistributor {
function remainingTierLiquidity(uint8 _tier) external view returns (uint112) {
uint8 shares = _computeShares(_tier, numberOfTiers);
Tier memory tier = _getTier(_tier, numberOfTiers);
return _remainingTierLiquidity(tier, shares);
return
uint112(
fromUD60x18(
_getTierRemainingLiquidity(
shares,
fromUD34x4toUD60x18(tier.prizeTokenPerShare),
fromUD34x4toUD60x18(prizeTokenPerShare)
)
)
);
}

function getTierLiquidityToReclaim(uint8 _nextNumberOfTiers) external view returns (uint256) {
Expand Down
18 changes: 16 additions & 2 deletions test/invariants/helpers/TieredLiquidityDistributorFuzzHarness.sol
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,13 @@ contract TieredLiquidityDistributorFuzzHarness is TieredLiquidityDistributor {
uint256 availableLiquidity;
for (uint8 i = 0; i < numberOfTiers; i++) {
Tier memory tier = _getTier(i, numberOfTiers);
availableLiquidity += _remainingTierLiquidity(tier, _computeShares(i, numberOfTiers));
availableLiquidity += fromUD60x18(
_getTierRemainingLiquidity(
_computeShares(i, numberOfTiers),
fromUD34x4toUD60x18(tier.prizeTokenPerShare),
fromUD34x4toUD60x18(prizeTokenPerShare)
)
);
}
// console2.log("reserve ", _reserve);
availableLiquidity += _reserve;
Expand All @@ -40,7 +46,15 @@ contract TieredLiquidityDistributorFuzzHarness is TieredLiquidityDistributor {

Tier memory tier_ = _getTier(tier, numberOfTiers);
uint8 shares = _computeShares(tier, numberOfTiers);
uint112 liq = _remainingTierLiquidity(tier_, shares);
uint112 liq = uint112(
fromUD60x18(
_getTierRemainingLiquidity(
shares,
fromUD34x4toUD60x18(tier_.prizeTokenPerShare),
fromUD34x4toUD60x18(prizeTokenPerShare)
)
)
);

// half the time consume only half
if (_tier > 128) {
Expand Down

0 comments on commit e0b1b3f

Please sign in to comment.