Skip to content

Commit 017d7c3

Browse files
Merge pull request #103 from lista-dao/feature/lunchPoolOperator
fea: ClisBNBLaunchPoolDistributor add operator role
2 parents 524ed23 + 4a8f50f commit 017d7c3

2 files changed

Lines changed: 51 additions & 7 deletions

File tree

contracts/dao/ClisBNBLaunchPoolDistributor.sol

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,9 @@ contract ClisBNBLaunchPoolDistributor is Initializable, AccessControlUpgradeable
5757
// token => unclaimedAmount
5858
mapping(address => uint256) public totalUnclaimedAmount;
5959

60+
// OPERATOR role
61+
bytes32 public constant OPERATOR = keccak256("OPERATOR");
62+
6063
/// @custom:oz-upgrades-unsafe-allow constructor
6164
constructor() {
6265
_disableInitializers();
@@ -111,7 +114,7 @@ contract ClisBNBLaunchPoolDistributor is Initializable, AccessControlUpgradeable
111114
* @param _totalAmount Total amount of the reward epoch
112115
*/
113116
function setEpochMerkleRoot(uint64 _epochId, bytes32 _merkleRoot, address _token, uint256 _startTime, uint256 _endTime, uint256 _totalAmount)
114-
external onlyRole(DEFAULT_ADMIN_ROLE)
117+
external onlyRole(OPERATOR)
115118
{
116119
require(_epochId == nextEpochId, "Invalid epochId");
117120
require(_merkleRoot != bytes32(0), "Invalid merkle root");
@@ -136,7 +139,7 @@ contract ClisBNBLaunchPoolDistributor is Initializable, AccessControlUpgradeable
136139
* @dev Revoke the reward of the given epoch;
137140
* @param _epochId Id of epoch
138141
*/
139-
function revokeEpoch(uint64 _epochId) external onlyRole(DEFAULT_ADMIN_ROLE) {
142+
function revokeEpoch(uint64 _epochId) external onlyRole(OPERATOR) {
140143
Epoch storage epoch = epochs[_epochId];
141144
require(epoch.startTime > block.timestamp, "Epoch already started");
142145
require(epoch.totalAmount > 0, "Invalid epochId");

test/dao/ClisBNBLaunchPoolDistributor.t.sol

Lines changed: 46 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ contract ClisBNBLaunchPoolDistributorTest is Test {
1717
address defaultReceiver = 0x78Ab74C7EC3592B5298CB912f31bD8Fb80A57DC0;
1818
address proxyAdminOwner = 0x8d388136d578dCD791D081c6042284CED6d9B0c6;
1919
address oneInchRouter = 0x111111125421cA6dc452d289314280a0f8842A65;
20+
address operator;
2021

2122
ClisBNBLaunchPoolDistributor cliBNBLaunchPoolDistributor;
2223

@@ -33,6 +34,7 @@ contract ClisBNBLaunchPoolDistributorTest is Test {
3334
bytes32[] public l2;
3435

3536
function setUp() public {
37+
operator = makeAddr("operator");
3638
mainnet = vm.createSelectFork("https://bsc-dataseed.binance.org");
3739

3840
chainid = block.chainid;
@@ -70,6 +72,10 @@ contract ClisBNBLaunchPoolDistributorTest is Test {
7072
);
7173

7274
cliBNBLaunchPoolDistributor = ClisBNBLaunchPoolDistributor(payable(address(clisBNBLPDistributorProxy)));
75+
76+
vm.startPrank(admin);
77+
cliBNBLaunchPoolDistributor.grantRole(cliBNBLaunchPoolDistributor.OPERATOR(), operator);
78+
vm.stopPrank();
7379
}
7480

7581
function test_setUp() public {
@@ -91,7 +97,7 @@ contract ClisBNBLaunchPoolDistributorTest is Test {
9197
ClisBNBLaunchPoolDistributor.Epoch[] memory before = cliBNBLaunchPoolDistributor.getEpochs(epochIds);
9298
assertEq(0, before[0].startTime);
9399

94-
vm.startPrank(admin);
100+
vm.startPrank(operator);
95101
cliBNBLaunchPoolDistributor.setEpochMerkleRoot(0, root, address(lista), block.timestamp + 10, block.timestamp + 1000, 1737e18);
96102
vm.stopPrank();
97103

@@ -109,7 +115,7 @@ contract ClisBNBLaunchPoolDistributorTest is Test {
109115
ClisBNBLaunchPoolDistributor.Epoch[] memory before = cliBNBLaunchPoolDistributor.getEpochs(epochIds);
110116
assertEq(0, before[0].startTime);
111117

112-
vm.startPrank(admin);
118+
vm.startPrank(operator);
113119
cliBNBLaunchPoolDistributor.setEpochMerkleRoot(0, root, address(0), block.timestamp + 10, block.timestamp + 1000, 1737e18);
114120
vm.stopPrank();
115121

@@ -122,23 +128,58 @@ contract ClisBNBLaunchPoolDistributorTest is Test {
122128
}
123129

124130
function test_setEpochMerkleRoot_invalid_epochId() public {
125-
vm.startPrank(admin);
131+
vm.startPrank(operator);
126132
vm.expectRevert("Invalid epochId");
127133
cliBNBLaunchPoolDistributor.setEpochMerkleRoot(1, root, address(lista), block.timestamp + 10, block.timestamp + 1000, 1737e18);
128134
vm.stopPrank();
129135
}
130136

131137
function test_setEpochMerkleRoot_acl() public {
132138
vm.startPrank(bot);
133-
vm.expectRevert("AccessControl: account 0x00000000000000000000000000000000003a11aa is missing role 0x0000000000000000000000000000000000000000000000000000000000000000");
139+
vm.expectRevert("AccessControl: account 0x00000000000000000000000000000000003a11aa is missing role 0x523a704056dcd17bcf83bed8b68c59416dac1119be77755efe3bde0a64e46e0c");
134140
cliBNBLaunchPoolDistributor.setEpochMerkleRoot(0, root, address(lista), block.timestamp + 10, block.timestamp + 1000, 1737e18);
135141
vm.stopPrank();
136142
}
137143

138144
function test_revokeEpoch_ok() public {
139145
test_setEpochMerkleRoot_ok();
140146

141-
vm.startPrank(admin);
147+
vm.startPrank(operator);
148+
cliBNBLaunchPoolDistributor.revokeEpoch(0);
149+
vm.stopPrank();
150+
151+
uint64[] memory epochIds = new uint64[](1);
152+
epochIds[0] = 0;
153+
ClisBNBLaunchPoolDistributor.Epoch[] memory actual = cliBNBLaunchPoolDistributor.getEpochs(epochIds);
154+
155+
assertEq(bytes32(0), actual[0].merkleRoot);
156+
assertEq(0, actual[0].startTime);
157+
assertEq(0, actual[0].endTime);
158+
assertEq(0, actual[0].totalAmount);
159+
}
160+
161+
function test_operatorSetEpochMerkleRoot_ok() public {
162+
uint64[] memory epochIds = new uint64[](1);
163+
epochIds[0] = 0;
164+
ClisBNBLaunchPoolDistributor.Epoch[] memory before = cliBNBLaunchPoolDistributor.getEpochs(epochIds);
165+
assertEq(0, before[0].startTime);
166+
167+
vm.startPrank(operator);
168+
cliBNBLaunchPoolDistributor.setEpochMerkleRoot(0, root, address(lista), block.timestamp + 10, block.timestamp + 1000, 1737e18);
169+
vm.stopPrank();
170+
171+
ClisBNBLaunchPoolDistributor.Epoch[] memory actual = cliBNBLaunchPoolDistributor.getEpochs(epochIds);
172+
assertEq(root, actual[0].merkleRoot);
173+
assertEq(address(lista), actual[0].token);
174+
assertEq(block.timestamp + 10, actual[0].startTime);
175+
assertEq(block.timestamp + 1000, actual[0].endTime);
176+
assertEq(1737e18, actual[0].totalAmount);
177+
}
178+
179+
function test_operatorRevokeEpoch_ok() public {
180+
test_setEpochMerkleRoot_ok();
181+
182+
vm.startPrank(operator);
142183
cliBNBLaunchPoolDistributor.revokeEpoch(0);
143184
vm.stopPrank();
144185

0 commit comments

Comments
 (0)