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 {ITreasury} from "../../src/interfaces/ITreasury.sol";
|
||||
import {IERC20} from "@openzeppelin-contracts/token/ERC20/IERC20.sol";
|
||||
|
||||
contract GhostBondDepositoryTest is Test {
|
||||
uint256 public constant TOTAL_INITIAL_SUPPLY = 5000000000000000;
|
||||
uint256 public constant LARGE_APPROVAL = 100000000000000000000000000000000;
|
||||
uint256 public constant INITIAL_INDEX = 10819917194513808e56;
|
||||
uint48 public constant EPOCH_LENGTH = 2200;
|
||||
uint48 public constant EPOCH_NUMBER = 1;
|
||||
uint48 public constant EPOCH_END_TIME = 1337;
|
||||
uint256 public constant LARGE_APPROVAL = 100000000000000000000000000000000;
|
||||
uint256 public constant INITIAL_INDEX = 10819917194513808e56;
|
||||
uint48 public constant EPOCH_LENGTH = 2200;
|
||||
uint48 public constant EPOCH_NUMBER = 1;
|
||||
uint48 public constant EPOCH_END_TIME = 1337;
|
||||
|
||||
uint256 public constant INITIAL_MINT = 1000000000000000000000000;
|
||||
uint256 public constant CAPACITY = 10000e9;
|
||||
uint256 public constant INITIAL_PRICE = 400e9;
|
||||
uint256 public constant BUFFER = 2e5;
|
||||
uint256 public constant INITIAL_MINT = 1000000000000000000000000;
|
||||
uint256 public constant CAPACITY = 10000e9;
|
||||
uint256 public constant INITIAL_PRICE = 400e9;
|
||||
uint256 public constant BUFFER = 2e5;
|
||||
|
||||
address constant INITIALIZER = 0x0000000000000000000000000000000000000001;
|
||||
address constant GOVERNOR = 0x0000000000000000000000000000000000000003;
|
||||
address constant GUARDIAN = 0x0000000000000000000000000000000000000004;
|
||||
address constant POLICY = 0x0000000000000000000000000000000000000005;
|
||||
address constant VAULT = 0x0000000000000000000000000000000000000006;
|
||||
address constant ALICE = 0x0000000000000000000000000000000000000007;
|
||||
address constant INITIALIZER = 0x0000000000000000000000000000000000000001;
|
||||
address constant GOVERNOR = 0x0000000000000000000000000000000000000003;
|
||||
address constant GUARDIAN = 0x0000000000000000000000000000000000000004;
|
||||
address constant POLICY = 0x0000000000000000000000000000000000000005;
|
||||
address constant VAULT = 0x0000000000000000000000000000000000000006;
|
||||
address constant ALICE = 0x0000000000000000000000000000000000000007;
|
||||
|
||||
uint256 public constant VESTING = 100;
|
||||
uint256 public constant TIME_TO_CONCLUSION = 60 * 60 * 24;
|
||||
uint256 public constant DEPOSIT_INTERVAL = 60 * 60 * 4;
|
||||
uint256 public constant TUNE_INTERVAL = 60 * 60;
|
||||
uint256 public constant VESTING = 100;
|
||||
uint256 public constant TIME_TO_CONCLUSION = 60 * 60 * 24;
|
||||
uint256 public constant DEPOSIT_INTERVAL = 60 * 60 * 4;
|
||||
uint256 public constant TUNE_INTERVAL = 60 * 60;
|
||||
|
||||
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 {
|
||||
assertEq(depository.isLive(0), true);
|
||||
}
|
||||
@ -393,4 +419,46 @@ contract GhostBondDepositoryTest is Test {
|
||||
(uint256 newCap, , , , , ,) = depository.markets(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