add forfeit reserves functionality
Signed-off-by: Uncle Fatso <uncle.fatso@ghostchain.io>
This commit is contained in:
parent
bc85560b40
commit
55b463dc6d
@ -221,6 +221,34 @@ contract GhostTreasury is GhostAccessControlled, ITreasury {
|
||||
return (y2 - y1) * 1000 / 1994;
|
||||
}
|
||||
|
||||
function forfeitReserves(
|
||||
address router,
|
||||
uint256 liquidity,
|
||||
bool destroyerMode
|
||||
) external onlyGovernor {
|
||||
address weth = IUniswapV2Router01(router).WETH();
|
||||
address pair = IUniswapV2Factory(IUniswapV2Router01(router).factory()).getPair(ftso, weth);
|
||||
|
||||
IUniswapV2Pair(pair).transfer(pair, liquidity);
|
||||
(uint256 amount0, uint256 amount1) = IUniswapV2Pair(pair).burn(address(this));
|
||||
|
||||
if (destroyerMode) {
|
||||
uint256 amountToDestroy;
|
||||
address token0 = IUniswapV2Pair(pair).token0();
|
||||
address token1 = IUniswapV2Pair(pair).token1();
|
||||
|
||||
if (token0 == ftso) {
|
||||
amountToDestroy = amount0;
|
||||
}
|
||||
|
||||
if (token1 == ftso) {
|
||||
amountToDestroy = amount1;
|
||||
}
|
||||
|
||||
IFTSO(ftso).burn(amountToDestroy);
|
||||
}
|
||||
}
|
||||
|
||||
function redeemReserve(
|
||||
address router, // could be an issue
|
||||
uint256 amount
|
||||
|
||||
@ -15,8 +15,8 @@ contract GhostTreasuryRedemptionTest is Test {
|
||||
address public constant guardian = 0x0000000000000000000000000000000000000003;
|
||||
|
||||
uint256 public constant amount = 69 * 1e18;
|
||||
address public constant usdc = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48;
|
||||
address public constant pair = 0xB4e16d0168e52d35CaCD2c6185b44281Ec28C9Dc;
|
||||
address public constant dai = 0x6B175474E89094C44Da98b954EedeAC495271d0F;
|
||||
address public constant pair = 0xA478c2975Ab1Ea89e8196811F51A7B7Ade33eB11;
|
||||
address public constant router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
|
||||
address public constant weth = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
|
||||
|
||||
@ -32,8 +32,8 @@ contract GhostTreasuryRedemptionTest is Test {
|
||||
owner,
|
||||
owner
|
||||
);
|
||||
treasury = new GhostTreasury(usdc, 69, address(authority));
|
||||
calculator = new GhostBondingCalculator(usdc, 4000, 1);
|
||||
treasury = new GhostTreasury(dai, 69, address(authority));
|
||||
calculator = new GhostBondingCalculator(dai, 4000, 1);
|
||||
vm.stopPrank();
|
||||
|
||||
vm.startPrank(governor);
|
||||
@ -63,12 +63,16 @@ contract GhostTreasuryRedemptionTest is Test {
|
||||
vm.prank(governor);
|
||||
treasury.redeemReserve(router, amount);
|
||||
|
||||
assertEq(IERC20(usdc).balanceOf(address(treasury)), 0);
|
||||
assertEq(IERC20(dai).balanceOf(address(treasury)), 0);
|
||||
assertEq(IERC20(weth).balanceOf(address(treasury)), 0);
|
||||
assertEq(IERC20(pair).balanceOf(address(treasury)) > 0, true);
|
||||
|
||||
uint256 liquidity = IERC20(pair).balanceOf(address(treasury));
|
||||
vm.prank(governor);
|
||||
treasury.auditReserves();
|
||||
assertEq(treasury.totalReserves() > prevTotalReserves, true);
|
||||
treasury.forfeitReserves(router, liquidity, false);
|
||||
|
||||
assertEq(IERC20(dai).balanceOf(address(treasury)) > 0, true);
|
||||
assertEq(IERC20(weth).balanceOf(address(treasury)) > 0, true);
|
||||
assertEq(IERC20(pair).balanceOf(address(treasury)), 0);
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user