new tests for gatekeeper on staking
Signed-off-by: Uncle Fatso <uncle.fatso@ghostchain.io>
This commit is contained in:
parent
62c70893a9
commit
162b3e357a
@ -139,6 +139,7 @@ contract GhostStaking is IStaking, GhostAccessControlled {
|
||||
bytes32 receiver,
|
||||
uint256 amount
|
||||
) external override {
|
||||
IGHST(ghst).burn(msg.sender, amount);
|
||||
IGatekeeper(gatekeeper).ghost(receiver, amount);
|
||||
}
|
||||
|
||||
@ -149,6 +150,7 @@ contract GhostStaking is IStaking, GhostAccessControlled {
|
||||
uint256 s
|
||||
) external override {
|
||||
IGatekeeper(gatekeeper).materialize(receiver, amount, rx, s);
|
||||
IGHST(ghst).mint(receiver, amount);
|
||||
}
|
||||
|
||||
function rebase() public override returns (uint256 bounty) {
|
||||
|
@ -10,6 +10,7 @@ import "../../src/StakingDistributor.sol";
|
||||
import "../../src/Treasury.sol";
|
||||
import "../../src/Staking.sol";
|
||||
import "../../src/mocks/ERC20Mock.sol";
|
||||
import "../../src/Gatekeeper.sol";
|
||||
|
||||
contract StakingTest is Test {
|
||||
address constant initializer = 0x0000000000000000000000000000000000000001;
|
||||
@ -33,8 +34,10 @@ contract StakingTest is Test {
|
||||
GhostStaking staking;
|
||||
GhostTreasury treasury;
|
||||
GhostAuthority authority;
|
||||
Gatekeeper gatekeeper;
|
||||
|
||||
uint256 public constant amount = 69;
|
||||
uint256 public constant bigAmount = amount * 1e9;
|
||||
|
||||
event DistributorSet(address distributor);
|
||||
event WarmupSet(uint256 warmup);
|
||||
@ -62,6 +65,7 @@ contract StakingTest is Test {
|
||||
treasury = new GhostTreasury(address(ftso), 69, address(authority));
|
||||
stnk.initialize(address(staking), address(treasury), address(ghst));
|
||||
ghst.initialize(address(staking));
|
||||
gatekeeper = new Gatekeeper(address(staking), 0);
|
||||
vm.stopPrank();
|
||||
}
|
||||
|
||||
@ -507,6 +511,74 @@ contract StakingTest is Test {
|
||||
assertEq(ftso.balanceOf(address(staking)), 2 * postBounty + bounty);
|
||||
}
|
||||
|
||||
function test_arbitraryAddressCouldNotAddGatekeeper(address someone, address maybeGatekeeper) public {
|
||||
vm.assume(maybeGatekeeper != address(0) && someone != governor);
|
||||
vm.expectRevert();
|
||||
vm.prank(someone);
|
||||
staking.setDistributor(maybeGatekeeper);
|
||||
}
|
||||
|
||||
function test_governorCouldSetGatekeeper(address maybeGatekeeper) public {
|
||||
vm.assume(maybeGatekeeper != address(0));
|
||||
assertEq(staking.gatekeeper(), address(0));
|
||||
vm.prank(governor);
|
||||
staking.setGatekeeperAddress(maybeGatekeeper);
|
||||
assertEq(staking.gatekeeper(), maybeGatekeeper);
|
||||
}
|
||||
|
||||
function test_couldNotGhostIfNoGatekeeper() public {
|
||||
assertEq(staking.ghostedSupply(), 0);
|
||||
vm.expectRevert();
|
||||
staking.ghost(bytes32(abi.encodePacked(alice)), amount);
|
||||
assertEq(staking.ghostedSupply(), 0);
|
||||
}
|
||||
|
||||
function test_couldNotMaterializeIfNoGatekeeper() public {
|
||||
assertEq(staking.ghostedSupply(), 0);
|
||||
vm.expectRevert();
|
||||
staking.materialize(alice, amount, 0, 0); // dummy rx and s
|
||||
assertEq(staking.ghostedSupply(), 0);
|
||||
}
|
||||
|
||||
function test_couldNotGhostTokensIfNoGhst() public {
|
||||
assertEq(staking.gatekeeper(), address(0));
|
||||
vm.prank(governor);
|
||||
staking.setGatekeeperAddress(address(gatekeeper));
|
||||
assertEq(staking.gatekeeper(), address(gatekeeper));
|
||||
|
||||
assertEq(staking.ghostedSupply(), 0);
|
||||
vm.expectRevert();
|
||||
vm.prank(alice);
|
||||
staking.ghost(bytes32(abi.encodePacked(alice)), amount);
|
||||
assertEq(staking.ghostedSupply(), 0);
|
||||
}
|
||||
|
||||
function test_correctlyGhostTokens() public {
|
||||
assertEq(staking.gatekeeper(), address(0));
|
||||
vm.prank(governor);
|
||||
staking.setGatekeeperAddress(address(gatekeeper));
|
||||
assertEq(staking.gatekeeper(), address(gatekeeper));
|
||||
|
||||
_prepareAndRoll(alice, bigAmount, true, true);
|
||||
uint256 aliceBalance = stnk.balanceOf(alice);
|
||||
|
||||
vm.startPrank(alice);
|
||||
stnk.approve(address(staking), aliceBalance);
|
||||
uint256 ghstBalance = staking.wrap(alice, aliceBalance);
|
||||
vm.stopPrank();
|
||||
|
||||
assertEq(staking.ghostedSupply(), 0);
|
||||
assertEq(stnk.circulatingSupply(), bigAmount - 1); // precision fix
|
||||
assertEq(ghst.totalSupply(), ghstBalance);
|
||||
|
||||
vm.prank(alice);
|
||||
staking.ghost(bytes32(abi.encodePacked(alice)), ghstBalance);
|
||||
|
||||
assertEq(staking.ghostedSupply(), ghstBalance);
|
||||
assertEq(stnk.circulatingSupply(), bigAmount - 1); // precision fix
|
||||
assertEq(ghst.totalSupply(), 0);
|
||||
}
|
||||
|
||||
function _mintAndApprove(address who, uint256 value) internal {
|
||||
vm.prank(vault);
|
||||
ftso.mint(who, value);
|
||||
|
Loading…
Reference in New Issue
Block a user