Skip to content

Commit

Permalink
test(ubiquity-pool-facet): add collateral, ceiling, redeem, and dolla…
Browse files Browse the repository at this point in the history
…r price manipulation tests
  • Loading branch information
alexandr-masl committed Aug 27, 2024
1 parent 42d739a commit 6689906
Show file tree
Hide file tree
Showing 2 changed files with 92 additions and 26 deletions.
113 changes: 88 additions & 25 deletions packages/contracts/test/invariant/diamond/facets/PoolFacetHandler.sol
Original file line number Diff line number Diff line change
Expand Up @@ -2,53 +2,116 @@
pragma solidity 0.8.19;

import "forge-std/Test.sol";
import "forge-std/console.sol";
import {UbiquityPoolFacet} from "../../../../src/dollar/facets/UbiquityPoolFacet.sol";
import {MockChainLinkFeed} from "../../../../src/dollar/mocks/MockChainLinkFeed.sol";
import {MockCurveStableSwapNG} from "../../../../src/dollar/mocks/MockCurveStableSwapNG.sol";

contract PoolFacetHandler is Test {
MockChainLinkFeed collateralTokenPriceFeed;
UbiquityPoolFacet ubiquityPoolFacet;
address admin;
address user;
MockCurveStableSwapNG curveDollarPlainPool;

event MintSuccess(uint256 dollarAmount);
event MintFailed(bytes reason);

constructor(
MockChainLinkFeed _collateralTokenPriceFeed,
UbiquityPoolFacet _ubiquityPoolFacet
UbiquityPoolFacet _ubiquityPoolFacet,
address _admin,
address _user,
MockCurveStableSwapNG _curveDollarPlainPool
) {
collateralTokenPriceFeed = _collateralTokenPriceFeed;
ubiquityPoolFacet = _ubiquityPoolFacet;
admin = _admin;
user = _user;
curveDollarPlainPool = _curveDollarPlainPool;
}

function setCollateralRatio(uint256 newRatio) public {
ubiquityPoolFacet.setCollateralRatio(newRatio);
// Dollar price manipulations
//========================
function setDollarPriceAboveThreshold() public {
vm.prank(admin);
curveDollarPlainPool.updateMockParams(1.02e18);
}

function updateCollateralPrice(uint256 newPrice) public {
uint256 timestamp = block.timestamp;
function setDollarPriceBelowThreshold() public {
vm.prank(admin);
curveDollarPlainPool.updateMockParams(0.98e18);
}

collateralTokenPriceFeed.updateMockParams(
1,
int256(newPrice),
timestamp,
timestamp,
1
);
// Redeem manipulations
//========================
function setMintAndRedeemFees(uint256 mintFee, uint256 redeemFee) public {
vm.prank(admin);
ubiquityPoolFacet.setFees(0, mintFee, redeemFee);
}

ubiquityPoolFacet.updateChainLinkCollateralPrice(0);
function setRedemptionDelay(uint256 delay) public {
vm.prank(admin);
ubiquityPoolFacet.setRedemptionDelayBlocks(delay);
}

function mintUbiquityDollars(
uint256 dollarAmount,
uint256 dollarOutMin,
uint256 maxCollateralIn,
uint256 maxGovernanceIn,
bool isOneToOne
function collectRedemption() public {
ubiquityPoolFacet.collectRedemption(0);
}

function redeemDollar(
uint256 _dollarAmount,
uint256 _governanceOutMin,
uint256 _collateralOutMin
) public {
ubiquityPoolFacet.mintDollar(
vm.prank(user);
ubiquityPoolFacet.redeemDollar(
0,
dollarAmount,
dollarOutMin,
maxCollateralIn,
maxGovernanceIn,
isOneToOne
_dollarAmount,
_governanceOutMin,
_collateralOutMin
);
}

// Ceiling manipulations
//========================
function setPoolCeiling(uint256 newCeiling) public {
vm.prank(admin);
ubiquityPoolFacet.setPoolCeiling(0, newCeiling);
}

// Collateral manipulations
//========================
function updateCollateralRatio(uint256 newRatio) public {
vm.prank(admin);
ubiquityPoolFacet.setCollateralRatio(newRatio);
}

function mintUbiquityDollars(
uint256 _dollarAmount,
uint256 _dollarOutMin,
uint256 _maxCollateralIn,
uint256 _maxGovernanceIn,
bool _isOneToOne
) public {
vm.prank(user);

uint256 dollarPrice = ubiquityPoolFacet.getDollarPriceUsd();
console.log("::::::: DOLLAR PRICE:", dollarPrice);

try
ubiquityPoolFacet.mintDollar(
0,
_dollarAmount,
_dollarOutMin,
_maxCollateralIn,
_maxGovernanceIn,
_isOneToOne
)
{
emit MintSuccess(_dollarAmount);
} catch (bytes memory reason) {
emit MintFailed(reason);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,10 @@ contract UbiquityPoolFacetInvariantTest is DiamondTestSetup {

handler = new PoolFacetHandler(
collateralTokenPriceFeed,
ubiquityPoolFacet
ubiquityPoolFacet,
admin,
user,
curveDollarPlainPool
);
targetContract(address(handler));
}
Expand Down

0 comments on commit 6689906

Please sign in to comment.