Created
November 21, 2023 15:21
-
-
Save Dliteofficial/c8ee40ff9661b8fac09738c25d0ffe9e to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//SPDX-License-Identifier: UNLICENSED | |
pragma solidity 0.8.20; | |
import "forge-std/Test.sol"; | |
import {Portal} from "contracts/Portal.sol"; | |
import {MintBurnToken} from "contracts/MintBurnToken.sol"; | |
import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; | |
contract PortalTest is Test { | |
Portal portal; | |
MintBurnToken bToken; | |
MintBurnToken portalEnergy; | |
IERC20 principalToken; | |
IERC20 PSM; | |
address public constant OWNER = address(1); | |
uint256 FUNDING_PHASE_DURATION = 432000; | |
uint256 FUNDING_EXCHANGE_RATIO = 550; | |
uint256 FUNDING_REWARD_RATE = 10; | |
address PRINCIPAL_TOKEN_ADDRESS = 0x4307fbDCD9Ec7AEA5a1c2958deCaa6f316952bAb; //(HLP token) | |
address PSM_ADDRESS = 0x17A8541B82BF67e10B0874284b4Ae66858cb1fd5; //(Possum PSM token) | |
address B_TOKEN = address(new MintBurnToken(OWNER, "BToken", "BToken")); | |
address PORTAL_ENERGY = address(new MintBurnToken(OWNER, "Portal Energy", "PortalEnergy")); | |
uint256 TERMINAL_MAX_LOCK_DURATION = 157_680_000; | |
uint256 AMOUNT_TO_CONVERT = 100_000 ether; | |
address FUNDER_1; | |
address USER_1; | |
address USER_2; | |
function setUp() public { | |
bToken = MintBurnToken(B_TOKEN); | |
portalEnergy = MintBurnToken(PORTAL_ENERGY); | |
PSM = IERC20(PSM_ADDRESS); | |
principalToken = IERC20(PRINCIPAL_TOKEN_ADDRESS); | |
portal = new Portal( | |
FUNDING_PHASE_DURATION, | |
FUNDING_EXCHANGE_RATIO, | |
FUNDING_REWARD_RATE, | |
PRINCIPAL_TOKEN_ADDRESS, | |
PSM_ADDRESS, | |
B_TOKEN, | |
PORTAL_ENERGY, | |
TERMINAL_MAX_LOCK_DURATION, | |
AMOUNT_TO_CONVERT | |
); | |
vm.label(address(portal), "Possum Portal Contract"); | |
vm.prank(OWNER); | |
bToken.transferOwnership(address(portal)); | |
vm.prank(OWNER); | |
portalEnergy.transferOwnership(address(portal)); | |
assertEq(portal.PRINCIPAL_TOKEN_ADDRESS(), PRINCIPAL_TOKEN_ADDRESS); | |
FUNDER_1 = makeAddr("Funder One"); | |
vm.label(FUNDER_1, "FUNDER ONE"); | |
deal(PSM_ADDRESS, FUNDER_1, 100_000 ether); | |
assertEq(PSM.balanceOf(FUNDER_1), 100_000 ether); | |
USER_1 = makeAddr("User One"); | |
vm.label(USER_1, "USER ONE"); | |
deal(PRINCIPAL_TOKEN_ADDRESS, USER_1, 1_000 ether); | |
assertEq(principalToken.balanceOf(USER_1), 1_000 ether); | |
USER_2 = makeAddr("User Two"); | |
vm.label(USER_2, "USER TWO"); | |
deal(PRINCIPAL_TOKEN_ADDRESS, USER_2, 100 ether); | |
assertEq(principalToken.balanceOf(USER_2), 100 ether); | |
} | |
function _fundPortal() internal { | |
vm.startPrank(FUNDER_1); | |
PSM.approve(address(portal), PSM.balanceOf(FUNDER_1)); | |
portal.contributeFunding(PSM.balanceOf(FUNDER_1)); | |
assertEq(PSM.balanceOf(FUNDER_1), 0); | |
console.log("FUNDER_1 now has %s Btokens", bToken.balanceOf(FUNDER_1)/1 ether); | |
} | |
function _user1Stake() internal { | |
_fundPortal(); | |
vm.warp(block.timestamp + FUNDING_PHASE_DURATION); | |
portal.activatePortal(); | |
changePrank(USER_1); | |
principalToken.approve(address(portal), principalToken.balanceOf(USER_1)); | |
portal.stake(principalToken.balanceOf(USER_1)); | |
( , , , , , uint PEValue, ) = portal.accounts(USER_1); | |
console.log("USER_1 now has %s portal Energy", PEValue); | |
} | |
function test__burnBTokens() public { | |
_user1Stake(); | |
changePrank(FUNDER_1); | |
console.log("Funding Reward Pool has %s value in it", portal.fundingRewardPool()); | |
bToken.approve(address(portal), bToken.balanceOf(FUNDER_1)); | |
portal.burnBtokens(bToken.balanceOf(FUNDER_1)); | |
assertEq(bToken.balanceOf(FUNDER_1), 0); | |
assertEq(PSM.balanceOf(FUNDER_1), 0); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment