tests for native bond purchase
Signed-off-by: Uncle Fatso <uncle.fatso@ghostchain.io>
This commit is contained in:
parent
6fec7ed6d8
commit
f2df4f600b
@ -14,31 +14,32 @@ import {WETH9} from "../../src/mocks/WETH9.sol";
|
|||||||
import {GhostBondingCalculator} from "../../src/StandardBondingCalculator.sol";
|
import {GhostBondingCalculator} from "../../src/StandardBondingCalculator.sol";
|
||||||
|
|
||||||
import {ITreasury} from "../../src/interfaces/ITreasury.sol";
|
import {ITreasury} from "../../src/interfaces/ITreasury.sol";
|
||||||
|
import {IERC20} from "@openzeppelin-contracts/token/ERC20/IERC20.sol";
|
||||||
|
|
||||||
contract GhostBondDepositoryTest is Test {
|
contract GhostBondDepositoryTest is Test {
|
||||||
uint256 public constant TOTAL_INITIAL_SUPPLY = 5000000000000000;
|
uint256 public constant TOTAL_INITIAL_SUPPLY = 5000000000000000;
|
||||||
uint256 public constant LARGE_APPROVAL = 100000000000000000000000000000000;
|
uint256 public constant LARGE_APPROVAL = 100000000000000000000000000000000;
|
||||||
uint256 public constant INITIAL_INDEX = 10819917194513808e56;
|
uint256 public constant INITIAL_INDEX = 10819917194513808e56;
|
||||||
uint48 public constant EPOCH_LENGTH = 2200;
|
uint48 public constant EPOCH_LENGTH = 2200;
|
||||||
uint48 public constant EPOCH_NUMBER = 1;
|
uint48 public constant EPOCH_NUMBER = 1;
|
||||||
uint48 public constant EPOCH_END_TIME = 1337;
|
uint48 public constant EPOCH_END_TIME = 1337;
|
||||||
|
|
||||||
uint256 public constant INITIAL_MINT = 1000000000000000000000000;
|
uint256 public constant INITIAL_MINT = 1000000000000000000000000;
|
||||||
uint256 public constant CAPACITY = 10000e9;
|
uint256 public constant CAPACITY = 10000e9;
|
||||||
uint256 public constant INITIAL_PRICE = 400e9;
|
uint256 public constant INITIAL_PRICE = 400e9;
|
||||||
uint256 public constant BUFFER = 2e5;
|
uint256 public constant BUFFER = 2e5;
|
||||||
|
|
||||||
address constant INITIALIZER = 0x0000000000000000000000000000000000000001;
|
address constant INITIALIZER = 0x0000000000000000000000000000000000000001;
|
||||||
address constant GOVERNOR = 0x0000000000000000000000000000000000000003;
|
address constant GOVERNOR = 0x0000000000000000000000000000000000000003;
|
||||||
address constant GUARDIAN = 0x0000000000000000000000000000000000000004;
|
address constant GUARDIAN = 0x0000000000000000000000000000000000000004;
|
||||||
address constant POLICY = 0x0000000000000000000000000000000000000005;
|
address constant POLICY = 0x0000000000000000000000000000000000000005;
|
||||||
address constant VAULT = 0x0000000000000000000000000000000000000006;
|
address constant VAULT = 0x0000000000000000000000000000000000000006;
|
||||||
address constant ALICE = 0x0000000000000000000000000000000000000007;
|
address constant ALICE = 0x0000000000000000000000000000000000000007;
|
||||||
|
|
||||||
uint256 public constant VESTING = 100;
|
uint256 public constant VESTING = 100;
|
||||||
uint256 public constant TIME_TO_CONCLUSION = 60 * 60 * 24;
|
uint256 public constant TIME_TO_CONCLUSION = 60 * 60 * 24;
|
||||||
uint256 public constant DEPOSIT_INTERVAL = 60 * 60 * 4;
|
uint256 public constant DEPOSIT_INTERVAL = 60 * 60 * 4;
|
||||||
uint256 public constant TUNE_INTERVAL = 60 * 60;
|
uint256 public constant TUNE_INTERVAL = 60 * 60;
|
||||||
|
|
||||||
uint256 public conclusion;
|
uint256 public conclusion;
|
||||||
|
|
||||||
@ -121,6 +122,31 @@ contract GhostBondDepositoryTest is Test {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function _createNativeBond() internal returns (uint256) {
|
||||||
|
vm.startPrank(GOVERNOR);
|
||||||
|
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(weth), address(calculator));
|
||||||
|
vm.stopPrank();
|
||||||
|
|
||||||
|
uint256 amount = 69 * 1e18;
|
||||||
|
vm.deal(ALICE, amount);
|
||||||
|
|
||||||
|
conclusion = block.timestamp + TIME_TO_CONCLUSION;
|
||||||
|
|
||||||
|
vm.prank(POLICY);
|
||||||
|
depository.create(
|
||||||
|
[CAPACITY, INITIAL_PRICE, BUFFER],
|
||||||
|
[VESTING, conclusion],
|
||||||
|
address(weth),
|
||||||
|
[uint32(DEPOSIT_INTERVAL), uint32(TUNE_INTERVAL)], // forge-lint: disable-line(unsafe-typecast)
|
||||||
|
[false, true]
|
||||||
|
);
|
||||||
|
|
||||||
|
return amount;
|
||||||
|
}
|
||||||
|
|
||||||
function test_shouldCreateMarket() public view {
|
function test_shouldCreateMarket() public view {
|
||||||
assertEq(depository.isLive(0), true);
|
assertEq(depository.isLive(0), true);
|
||||||
}
|
}
|
||||||
@ -393,4 +419,46 @@ contract GhostBondDepositoryTest is Test {
|
|||||||
(uint256 newCap, , , , , ,) = depository.markets(0);
|
(uint256 newCap, , , , , ,) = depository.markets(0);
|
||||||
assertEq(newCap, 0);
|
assertEq(newCap, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function test_abilityToPurchaseWithNative() public {
|
||||||
|
uint256 amount = _createNativeBond();
|
||||||
|
uint256 halfAmount = amount / 2;
|
||||||
|
|
||||||
|
assertEq(ALICE.balance, amount);
|
||||||
|
assertEq(IERC20(address(weth)).balanceOf(address(treasury)), 0);
|
||||||
|
|
||||||
|
vm.prank(ALICE);
|
||||||
|
depository.deposit{value: halfAmount}(1, halfAmount, halfAmount, ALICE, ALICE);
|
||||||
|
assertEq(ALICE.balance, halfAmount);
|
||||||
|
assertEq(IERC20(address(weth)).balanceOf(address(treasury)), halfAmount);
|
||||||
|
}
|
||||||
|
|
||||||
|
function test_nativeValueWillBeTaken() public {
|
||||||
|
uint256 amount = _createNativeBond();
|
||||||
|
uint256 halfAmount = amount / 2;
|
||||||
|
|
||||||
|
assertEq(ALICE.balance, amount);
|
||||||
|
assertEq(IERC20(address(weth)).balanceOf(address(treasury)), 0);
|
||||||
|
|
||||||
|
vm.prank(ALICE);
|
||||||
|
(uint256 payout,,) = depository.deposit{value: halfAmount}(1, 0, halfAmount, ALICE, ALICE);
|
||||||
|
assertEq(ALICE.balance, halfAmount);
|
||||||
|
assertEq(IERC20(address(weth)).balanceOf(address(treasury)), halfAmount);
|
||||||
|
assertEq(payout, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
function test_nativeValueLessThenAmountFails() public {
|
||||||
|
uint256 amount = _createNativeBond();
|
||||||
|
uint256 halfAmount = amount / 2;
|
||||||
|
|
||||||
|
assertEq(ALICE.balance, amount);
|
||||||
|
assertEq(IERC20(address(weth)).balanceOf(address(treasury)), 0);
|
||||||
|
|
||||||
|
vm.expectRevert();
|
||||||
|
vm.prank(ALICE);
|
||||||
|
depository.deposit{value: halfAmount}(1, amount, amount, ALICE, ALICE);
|
||||||
|
|
||||||
|
assertEq(ALICE.balance, amount);
|
||||||
|
assertEq(IERC20(address(weth)).balanceOf(address(treasury)), 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user