mirror of
https://github.com/logos-messaging/logos-messaging-rlnv2-contract.git
synced 2026-05-04 01:13:10 +00:00
Renaming of mapping and add events for minter add/remove
This commit is contained in:
parent
da9ec0e08b
commit
d33900d3a6
@ -11,23 +11,28 @@ error AccountAlreadyMinter();
|
||||
error AccountNotInMinterList();
|
||||
|
||||
contract TestStableToken is ERC20, ERC20Permit, Ownable {
|
||||
mapping(address => bool) public minterRole;
|
||||
mapping(address => bool) public isMinter;
|
||||
|
||||
event MinterAdded(address indexed account);
|
||||
event MinterRemoved(address indexed account);
|
||||
|
||||
modifier onlyOwnerOrMinter() {
|
||||
if (msg.sender != owner() && !minterRole[msg.sender]) revert AccountNotMinter();
|
||||
if (msg.sender != owner() && !isMinter[msg.sender]) revert AccountNotMinter();
|
||||
_;
|
||||
}
|
||||
|
||||
constructor() ERC20("TestStableToken", "TST") ERC20Permit("TestStableToken") Ownable() { }
|
||||
|
||||
function addMinterRole(address account) external onlyOwner {
|
||||
if (minterRole[account]) revert AccountAlreadyMinter();
|
||||
minterRole[account] = true;
|
||||
function addMinter(address account) external onlyOwner {
|
||||
if (isMinter[account]) revert AccountAlreadyMinter();
|
||||
isMinter[account] = true;
|
||||
emit MinterAdded(account);
|
||||
}
|
||||
|
||||
function removeMinterRole(address account) external onlyOwner {
|
||||
if (!minterRole[account]) revert AccountNotInMinterList();
|
||||
minterRole[account] = false;
|
||||
function removeMinter(address account) external onlyOwner {
|
||||
if (!isMinter[account]) revert AccountNotInMinterList();
|
||||
isMinter[account] = false;
|
||||
emit MinterRemoved(account);
|
||||
}
|
||||
|
||||
function mint(address to, uint256 amount) external onlyOwnerOrMinter {
|
||||
|
||||
@ -20,20 +20,20 @@ contract TestStableTokenTest is Test {
|
||||
}
|
||||
|
||||
function test__OwnerCanAddMinterRole() external {
|
||||
assertFalse(token.minterRole(user1));
|
||||
assertFalse(token.isMinter(user1));
|
||||
|
||||
token.addMinterRole(user1);
|
||||
token.addMinter(user1);
|
||||
|
||||
assertTrue(token.minterRole(user1));
|
||||
assertTrue(token.isMinter(user1));
|
||||
}
|
||||
|
||||
function test__OwnerCanRemoveMinterRole() external {
|
||||
token.addMinterRole(user1);
|
||||
assertTrue(token.minterRole(user1));
|
||||
token.addMinter(user1);
|
||||
assertTrue(token.isMinter(user1));
|
||||
|
||||
token.removeMinterRole(user1);
|
||||
token.removeMinter(user1);
|
||||
|
||||
assertFalse(token.minterRole(user1));
|
||||
assertFalse(token.isMinter(user1));
|
||||
}
|
||||
|
||||
function test__OwnerCanMintWithoutMinterRole() external {
|
||||
@ -47,32 +47,32 @@ contract TestStableTokenTest is Test {
|
||||
function test__NonOwnerCannotAddMinterRole() external {
|
||||
vm.prank(user1);
|
||||
vm.expectRevert("Ownable: caller is not the owner");
|
||||
token.addMinterRole(user1);
|
||||
token.addMinter(user1);
|
||||
}
|
||||
|
||||
function test__NonOwnerCannotRemoveMinterRole() external {
|
||||
token.addMinterRole(user1);
|
||||
token.addMinter(user1);
|
||||
|
||||
vm.prank(user1);
|
||||
vm.expectRevert("Ownable: caller is not the owner");
|
||||
token.removeMinterRole(user1);
|
||||
token.removeMinter(user1);
|
||||
}
|
||||
|
||||
function test__CannotAddAlreadyMinterRole() external {
|
||||
token.addMinterRole(user1);
|
||||
token.addMinter(user1);
|
||||
|
||||
vm.expectRevert(abi.encodeWithSelector(AccountAlreadyMinter.selector));
|
||||
token.addMinterRole(user1);
|
||||
token.addMinter(user1);
|
||||
}
|
||||
|
||||
function test__CannotRemoveNonMinterRole() external {
|
||||
vm.expectRevert(abi.encodeWithSelector(AccountNotInMinterList.selector));
|
||||
token.removeMinterRole(user1);
|
||||
token.removeMinter(user1);
|
||||
}
|
||||
|
||||
function test__MinterRoleCanMint() external {
|
||||
uint256 mintAmount = 1000 ether;
|
||||
token.addMinterRole(user1);
|
||||
token.addMinter(user1);
|
||||
|
||||
vm.prank(user1);
|
||||
token.mint(user2, mintAmount);
|
||||
@ -90,8 +90,8 @@ contract TestStableTokenTest is Test {
|
||||
|
||||
function test__MultipleMinterRolesCanMint() external {
|
||||
uint256 mintAmount = 500 ether;
|
||||
token.addMinterRole(user1);
|
||||
token.addMinterRole(user2);
|
||||
token.addMinter(user1);
|
||||
token.addMinter(user2);
|
||||
|
||||
vm.prank(user1);
|
||||
token.mint(owner, mintAmount);
|
||||
@ -104,8 +104,8 @@ contract TestStableTokenTest is Test {
|
||||
|
||||
function test__RemovedMinterRoleCannotMint() external {
|
||||
uint256 mintAmount = 1000 ether;
|
||||
token.addMinterRole(user1);
|
||||
token.removeMinterRole(user1);
|
||||
token.addMinter(user1);
|
||||
token.removeMinter(user1);
|
||||
|
||||
vm.prank(user1);
|
||||
vm.expectRevert(abi.encodeWithSelector(AccountNotMinter.selector));
|
||||
@ -116,30 +116,30 @@ contract TestStableTokenTest is Test {
|
||||
uint256 mintAmount = 500 ether;
|
||||
|
||||
// Owner is not in minter role but should still be able to mint
|
||||
assertFalse(token.minterRole(address(this)));
|
||||
assertFalse(token.isMinter(address(this)));
|
||||
token.mint(user1, mintAmount);
|
||||
assertEq(token.balanceOf(user1), mintAmount);
|
||||
}
|
||||
|
||||
function test__CheckMinterRoleMapping() external {
|
||||
assertFalse(token.minterRole(user1));
|
||||
assertFalse(token.minterRole(user2));
|
||||
assertFalse(token.isMinter(user1));
|
||||
assertFalse(token.isMinter(user2));
|
||||
|
||||
token.addMinterRole(user1);
|
||||
assertTrue(token.minterRole(user1));
|
||||
assertFalse(token.minterRole(user2));
|
||||
token.addMinter(user1);
|
||||
assertTrue(token.isMinter(user1));
|
||||
assertFalse(token.isMinter(user2));
|
||||
|
||||
token.addMinterRole(user2);
|
||||
assertTrue(token.minterRole(user1));
|
||||
assertTrue(token.minterRole(user2));
|
||||
token.addMinter(user2);
|
||||
assertTrue(token.isMinter(user1));
|
||||
assertTrue(token.isMinter(user2));
|
||||
|
||||
token.removeMinterRole(user1);
|
||||
assertFalse(token.minterRole(user1));
|
||||
assertTrue(token.minterRole(user2));
|
||||
token.removeMinter(user1);
|
||||
assertFalse(token.isMinter(user1));
|
||||
assertTrue(token.isMinter(user2));
|
||||
}
|
||||
|
||||
function test__ERC20BasicFunctionality() external {
|
||||
token.addMinterRole(user1);
|
||||
token.addMinter(user1);
|
||||
uint256 mintAmount = 1000 ether;
|
||||
|
||||
vm.prank(user1);
|
||||
@ -154,4 +154,23 @@ contract TestStableTokenTest is Test {
|
||||
assertEq(token.balanceOf(user2), 800 ether);
|
||||
assertEq(token.balanceOf(owner), 200 ether);
|
||||
}
|
||||
|
||||
function test__MinterAddedEventEmitted() external {
|
||||
vm.expectEmit(true, true, false, false);
|
||||
emit MinterAdded(user1);
|
||||
|
||||
token.addMinter(user1);
|
||||
}
|
||||
|
||||
function test__MinterRemovedEventEmitted() external {
|
||||
token.addMinter(user1);
|
||||
|
||||
vm.expectEmit(true, true, false, false);
|
||||
emit MinterRemoved(user1);
|
||||
|
||||
token.removeMinter(user1);
|
||||
}
|
||||
|
||||
event MinterAdded(address indexed account);
|
||||
event MinterRemoved(address indexed account);
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user