make reserve dependant on calculator in tests and add testing script
Signed-off-by: Uncle Fatso <uncle.fatso@ghostchain.io>
This commit is contained in:
		
							parent
							
								
									9dfd10aff7
								
							
						
					
					
						commit
						d4c6583e12
					
				| @ -11,6 +11,7 @@ import "../../src/Treasury.sol"; | ||||
| import "../../src/Staking.sol"; | ||||
| import "../../src/BondDepository.sol"; | ||||
| import "../../src/mocks/ERC20Mock.sol"; | ||||
| import "../../src/StandardBondingCalculator.sol"; | ||||
| 
 | ||||
| contract GhostBondDepositoryTest is Test { | ||||
|     uint256 public constant TOTAL_INITIAL_SUPPLY = 5000000000000000; | ||||
| @ -20,8 +21,8 @@ contract GhostBondDepositoryTest is Test { | ||||
|     uint48 public constant EPOCH_NUMBER      = 1; | ||||
|     uint48 public constant EPOCH_END_TIME    = 1337; | ||||
| 
 | ||||
|     uint256 public constant initialMint      = 10000000000000000000000000; | ||||
|     uint256 public constant initialDeposit   = 1000000000000000000000000; | ||||
|     uint256 public constant initialMint      = 1000000000000000000000000; | ||||
|     uint256 public constant initialDeposit   = 100000000000000000000000; | ||||
|     uint256 public constant capacity         = 10000e9; | ||||
|     uint256 public constant initialPrice     = 400e9; | ||||
|     uint256 public constant buffer           = 2e5; | ||||
| @ -49,6 +50,7 @@ contract GhostBondDepositoryTest is Test { | ||||
|     GhostTreasury treasury; | ||||
|     GhostAuthority authority; | ||||
|     GhostBondDepository depository; | ||||
|     GhostBondingCalculator calculator; | ||||
| 
 | ||||
|     function setUp() public { | ||||
|         vm.startPrank(initializer); | ||||
| @ -72,6 +74,7 @@ contract GhostBondDepositoryTest is Test { | ||||
|             address(authority) | ||||
|         ); | ||||
|         treasury = new GhostTreasury(address(ftso), 69, address(authority)); | ||||
|         calculator = new GhostBondingCalculator(address(ftso), 1, 1); | ||||
|         stnk.initialize(address(staking), address(treasury), address(ghst)); | ||||
|         ghst.initialize(address(staking)); | ||||
|         depository = new GhostBondDepository( | ||||
| @ -90,7 +93,7 @@ contract GhostBondDepositoryTest is Test { | ||||
|         authority.pushVault(address(treasury)); | ||||
|         treasury.enable(ITreasury.STATUS.REWARDMANAGER, address(depository), address(0)); | ||||
|         treasury.enable(ITreasury.STATUS.RESERVEDEPOSITOR, alice, address(0)); | ||||
|         treasury.enable(ITreasury.STATUS.RESERVETOKEN, address(reserve), address(0)); | ||||
|         treasury.enable(ITreasury.STATUS.RESERVETOKEN, address(reserve), address(calculator)); | ||||
|         vm.stopPrank(); | ||||
| 
 | ||||
|         vm.startPrank(alice); | ||||
|  | ||||
| @ -11,6 +11,7 @@ import "../../src/Treasury.sol"; | ||||
| import "../../src/Staking.sol"; | ||||
| import "../../src/mocks/ERC20Mock.sol"; | ||||
| import "../../src/Gatekeeper.sol"; | ||||
| import "../../src/StandardBondingCalculator.sol"; | ||||
| 
 | ||||
| contract StakingTest is Test { | ||||
|     address constant initializer       = 0x0000000000000000000000000000000000000001; | ||||
| @ -35,6 +36,7 @@ contract StakingTest is Test { | ||||
|     GhostTreasury treasury; | ||||
|     GhostAuthority authority; | ||||
|     Gatekeeper gatekeeper; | ||||
|     GhostBondingCalculator calculator; | ||||
| 
 | ||||
|     uint256 public constant amount = 69; | ||||
|     uint256 public constant bigAmount = amount * 1e9; | ||||
| @ -67,6 +69,7 @@ contract StakingTest is Test { | ||||
|         stnk.initialize(address(staking), address(treasury), address(ghst)); | ||||
|         ghst.initialize(address(staking)); | ||||
|         gatekeeper = new Gatekeeper(address(staking), 0); | ||||
|         calculator = new GhostBondingCalculator(address(ftso), 1, 1); | ||||
|         vm.stopPrank(); | ||||
|     } | ||||
| 
 | ||||
| @ -423,7 +426,7 @@ contract StakingTest is Test { | ||||
|         treasury.enable(ITreasury.STATUS.REWARDMANAGER, address(distributor), address(0)); | ||||
|         treasury.enable(ITreasury.STATUS.RESERVEDEPOSITOR, alice, address(0)); | ||||
|         treasury.enable(ITreasury.STATUS.RESERVEDEPOSITOR, bob, address(0)); | ||||
|         treasury.enable(ITreasury.STATUS.RESERVETOKEN, address(reserve), address(0)); | ||||
|         treasury.enable(ITreasury.STATUS.RESERVETOKEN, address(reserve), address(calculator)); | ||||
|         vm.stopPrank(); | ||||
| 
 | ||||
|         vm.startPrank(bob); | ||||
| @ -479,7 +482,7 @@ contract StakingTest is Test { | ||||
|         distributor.setBounty(bounty); | ||||
|         treasury.enable(ITreasury.STATUS.REWARDMANAGER, address(distributor), address(0)); | ||||
|         treasury.enable(ITreasury.STATUS.RESERVEDEPOSITOR, alice, address(0)); | ||||
|         treasury.enable(ITreasury.STATUS.RESERVETOKEN, address(reserve), address(0)); | ||||
|         treasury.enable(ITreasury.STATUS.RESERVETOKEN, address(reserve), address(calculator)); | ||||
|         vm.stopPrank(); | ||||
| 
 | ||||
|         vm.startPrank(alice); | ||||
|  | ||||
| @ -10,6 +10,7 @@ import "../../src/StakingDistributor.sol"; | ||||
| import "../../src/Treasury.sol"; | ||||
| import "../../src/Staking.sol"; | ||||
| import "../../src/mocks/ERC20Mock.sol"; | ||||
| import "../../src/StandardBondingCalculator.sol"; | ||||
| 
 | ||||
| contract StakingDistributorTest is Test { | ||||
|     address public constant owner    = 0x0000000000000000000000000000000000000001; | ||||
| @ -35,6 +36,7 @@ contract StakingDistributorTest is Test { | ||||
|     GhostStaking staking; | ||||
|     GhostDistributor distributor; | ||||
|     GhostAuthority authority; | ||||
|     GhostBondingCalculator calculator; | ||||
| 
 | ||||
|     uint256 public constant TEN_PERCENT = 1e5; | ||||
| 
 | ||||
| @ -60,6 +62,7 @@ contract StakingDistributorTest is Test { | ||||
|             address(authority) | ||||
|         ); | ||||
|         treasury = new GhostTreasury(address(ftso), 69, address(authority)); | ||||
|         calculator = new GhostBondingCalculator(address(ftso), 1, 1); | ||||
|         distributor = new GhostDistributor( | ||||
|             address(treasury), | ||||
|             address(ftso), | ||||
| @ -250,7 +253,7 @@ contract StakingDistributorTest is Test { | ||||
|         treasury.enable(ITreasury.STATUS.REWARDMANAGER, address(distributor), address(0)); | ||||
|         treasury.enable(ITreasury.STATUS.RESERVEDEPOSITOR, alice, address(0)); | ||||
|         treasury.enable(ITreasury.STATUS.RESERVEDEPOSITOR, bob, address(0)); | ||||
|         treasury.enable(ITreasury.STATUS.RESERVETOKEN, address(reserve), address(0)); | ||||
|         treasury.enable(ITreasury.STATUS.RESERVETOKEN, address(reserve), address(calculator)); | ||||
|         vm.stopPrank(); | ||||
| 
 | ||||
|         vm.startPrank(alice); | ||||
|  | ||||
| @ -1,6 +1,7 @@ | ||||
| pragma solidity 0.8.20; | ||||
| 
 | ||||
| import {Test} from "forge-std/Test.sol"; | ||||
| import {StdChains} from "forge-std/StdChains.sol"; | ||||
| 
 | ||||
| import "../../src/FatsoERC20.sol"; | ||||
| import "../../src/GhostAuthority.sol"; | ||||
| @ -63,7 +64,7 @@ contract GhostTreasuryTest is Test { | ||||
|         treasury.deposit(address(reserve), amount, 0); | ||||
| 
 | ||||
|         vm.prank(governor); | ||||
|         treasury.enable(ITreasury.STATUS.RESERVETOKEN, address(reserve), address(0)); | ||||
|         treasury.enable(ITreasury.STATUS.RESERVETOKEN, address(reserve), address(calculator)); | ||||
|         vm.prank(alice); | ||||
|         uint256 send = treasury.deposit(address(reserve), amount, 0); | ||||
| 
 | ||||
| @ -74,7 +75,7 @@ contract GhostTreasuryTest is Test { | ||||
|     function test_withdraw_onlyIfApprovedTokenAndApprovedAddress() public { | ||||
|         vm.startPrank(governor); | ||||
|         treasury.enable(ITreasury.STATUS.RESERVEDEPOSITOR, alice, address(0)); | ||||
|         treasury.enable(ITreasury.STATUS.RESERVETOKEN, address(reserve), address(0)); | ||||
|         treasury.enable(ITreasury.STATUS.RESERVETOKEN, address(reserve), address(calculator)); | ||||
|         vm.stopPrank(); | ||||
| 
 | ||||
|         vm.prank(alice); | ||||
| @ -98,7 +99,7 @@ contract GhostTreasuryTest is Test { | ||||
|     function test_manage_onlyIfApprovedTokenAndApprovedAddress() public { | ||||
|         vm.startPrank(governor); | ||||
|         treasury.enable(ITreasury.STATUS.RESERVEDEPOSITOR, alice, address(0)); | ||||
|         treasury.enable(ITreasury.STATUS.RESERVETOKEN, address(reserve), address(0)); | ||||
|         treasury.enable(ITreasury.STATUS.RESERVETOKEN, address(reserve), address(calculator)); | ||||
|         vm.stopPrank(); | ||||
| 
 | ||||
|         uint256 tokenValue = treasury.tokenValue(address(reserve), amount); | ||||
| @ -123,7 +124,7 @@ contract GhostTreasuryTest is Test { | ||||
|     function test_mint_onlyIfApprovedTokenAndApprovedAddress() public { | ||||
|         vm.startPrank(governor); | ||||
|         treasury.enable(ITreasury.STATUS.RESERVEDEPOSITOR, alice, address(0)); | ||||
|         treasury.enable(ITreasury.STATUS.RESERVETOKEN, address(reserve), address(0)); | ||||
|         treasury.enable(ITreasury.STATUS.RESERVETOKEN, address(reserve), address(calculator)); | ||||
|         vm.stopPrank(); | ||||
| 
 | ||||
|         uint256 tokenValue = treasury.tokenValue(address(reserve), amount); | ||||
| @ -147,7 +148,7 @@ contract GhostTreasuryTest is Test { | ||||
|     function test_auditTreasuryReserves() public { | ||||
|         vm.startPrank(governor); | ||||
|         treasury.enable(ITreasury.STATUS.RESERVEDEPOSITOR, alice, address(0)); | ||||
|         treasury.enable(ITreasury.STATUS.RESERVETOKEN, address(reserve), address(0)); | ||||
|         treasury.enable(ITreasury.STATUS.RESERVETOKEN, address(reserve), address(calculator)); | ||||
|         vm.stopPrank(); | ||||
| 
 | ||||
|         uint256 tokenValue = treasury.tokenValue(address(reserve), amount); | ||||
| @ -182,7 +183,7 @@ contract GhostTreasuryTest is Test { | ||||
| 
 | ||||
|     function test_enableStatusAndCalculator() public { | ||||
|         vm.startPrank(governor); | ||||
|         treasury.enable(ITreasury.STATUS.RESERVETOKEN, address(reserve), address(0)); | ||||
|         treasury.enable(ITreasury.STATUS.RESERVETOKEN, address(reserve), address(calculator)); | ||||
|         treasury.enable(ITreasury.STATUS.LIQUIDITYTOKEN, address(liquidity), address(calculator)); | ||||
|         treasury.enable(ITreasury.STATUS.RESERVEDEPOSITOR, msg.sender, address(0)); | ||||
|         vm.stopPrank(); | ||||
| @ -202,7 +203,7 @@ contract GhostTreasuryTest is Test { | ||||
|         vm.assume(who != governor && who != guardian); | ||||
| 
 | ||||
|         vm.startPrank(governor); | ||||
|         treasury.enable(ITreasury.STATUS.RESERVETOKEN, address(reserve), address(0)); | ||||
|         treasury.enable(ITreasury.STATUS.RESERVETOKEN, address(reserve), address(calculator)); | ||||
|         treasury.enable(ITreasury.STATUS.LIQUIDITYTOKEN, address(liquidity), address(calculator)); | ||||
|         treasury.enable(ITreasury.STATUS.RESERVEDEPOSITOR, msg.sender, address(0)); | ||||
|         vm.stopPrank(); | ||||
| @ -222,7 +223,7 @@ contract GhostTreasuryTest is Test { | ||||
| 
 | ||||
|     function test_disableStatusByAddress() public { | ||||
|         vm.startPrank(governor); | ||||
|         treasury.enable(ITreasury.STATUS.RESERVETOKEN, address(reserve), address(0)); | ||||
|         treasury.enable(ITreasury.STATUS.RESERVETOKEN, address(reserve), address(calculator)); | ||||
|         treasury.enable(ITreasury.STATUS.LIQUIDITYTOKEN, address(liquidity), address(calculator)); | ||||
|         treasury.enable(ITreasury.STATUS.RESERVEDEPOSITOR, msg.sender, address(0)); | ||||
|         vm.stopPrank(); | ||||
| @ -239,13 +240,23 @@ contract GhostTreasuryTest is Test { | ||||
|     } | ||||
| 
 | ||||
|     function test_tokenValueIsCorret() public { | ||||
|         address realDexPair = 0xB20bd5D04BE54f870D5C0d3cA85d82b34B836405; | ||||
| 
 | ||||
|         vm.startPrank(governor); | ||||
|         treasury.enable(ITreasury.STATUS.RESERVETOKEN, address(reserve), address(0)); | ||||
|         treasury.enable(ITreasury.STATUS.LIQUIDITYTOKEN, 0xB20bd5D04BE54f870D5C0d3cA85d82b34B836405, address(calculator)); | ||||
|         treasury.enable(ITreasury.STATUS.RESERVETOKEN, address(reserve), address(calculator)); | ||||
|         treasury.enable(ITreasury.STATUS.LIQUIDITYTOKEN, realDexPair, address(calculator)); | ||||
|         vm.stopPrank(); | ||||
| 
 | ||||
|         uint256 totalSupply = IUniswapV2Pair(realDexPair).totalSupply(); | ||||
|         assertEq(treasury.tokenValue(address(reserve), 1e18), 1e9); | ||||
|         assertEq(treasury.tokenValue(address(liquidity), 1e18), 1e9); | ||||
| 
 | ||||
|         (uint256 reserve0, uint256 reserve1,) = IUniswapV2Pair(realDexPair).getReserves(); | ||||
|         uint256 reserves = reserve0 * reserve1 / 1e6; | ||||
|         uint256 reserveEps = reserves * 1e5 / 1e7; // 1% | ||||
|         uint256 liquidityValue = (treasury.tokenValue(realDexPair, totalSupply) / 2)**2; | ||||
| 
 | ||||
|         assertEq(liquidityValue + reserveEps >= reserves, true); | ||||
|         assertEq(liquidityValue - reserveEps <= reserves, true); | ||||
|     } | ||||
| 
 | ||||
|     function test_randomAddressCouldNotTriggerTimelock(address who) public { | ||||
|  | ||||
							
								
								
									
										14
									
								
								tester.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								tester.sh
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,14 @@ | ||||
| # exclude all tests dependant on rpc | ||||
| forge test --no-match-test test_tokenValueIsCorret | ||||
| 
 | ||||
| echo "" | ||||
| echo "#####################################" | ||||
| echo "## Running mainnet dependant tests ##" | ||||
| echo "#####################################" | ||||
| echo "" | ||||
| 
 | ||||
| # url from the foundry, forge-std/StdChains.sol | ||||
| FORK_URL="${1:-https://eth-mainnet.alchemyapi.io/v2/pwc5rmJhrdoaSEfimoKEmsvOjKSmPDrP}" | ||||
| 
 | ||||
| # run tests where rpc to the mainnet is needed | ||||
| forge test --match-test test_tokenValueIsCorret --fork-url $FORK_URL | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user