Skip to content

Commit 1e691d7

Browse files
Update
1 parent 46aa1aa commit 1e691d7

File tree

5 files changed

+94
-18
lines changed

5 files changed

+94
-18
lines changed

contracts/staking/token/LimitedTokenPoolsManager.sol

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,18 @@ import "./LimitedTokenPool.sol";
88
import "../../funds/RewardsBank.sol";
99
import "../../LockKeeper.sol";
1010

11-
contract LimitedTokenPoolsManager is Ownable {
11+
contract LimitedTokenPoolsManager is AccessControl {
1212
LockKeeper lockKeeper;
1313
RewardsBank public bank;
1414
UpgradeableBeacon public limitedTokenPoolBeacon;
1515

1616
address[] public pools;
1717

18-
constructor(RewardsBank bank_, LockKeeper lockKeeper_, UpgradeableBeacon doubleSideBeacon_) Ownable() {
18+
constructor(RewardsBank bank_, LockKeeper lockKeeper_, UpgradeableBeacon doubleSideBeacon_) {
1919
lockKeeper = lockKeeper_;
2020
bank = bank_;
2121
limitedTokenPoolBeacon = doubleSideBeacon_;
22+
_setupRole(DEFAULT_ADMIN_ROLE, msg.sender);
2223
}
2324

2425
event LimitedPoolCreated(address pool);
@@ -27,7 +28,7 @@ contract LimitedTokenPoolsManager is Ownable {
2728
event LimitedPoolActivated(address pool);
2829

2930
// LIMITED POOL METHODS
30-
function createPool(LimitedTokenPool.MainConfig calldata params) public onlyOwner returns (address) {
31+
function createPool(LimitedTokenPool.MainConfig calldata params) public onlyRole(DEFAULT_ADMIN_ROLE) returns (address) {
3132
bytes memory data = abi.encodeWithSignature(
3233
"initialize(address,address,(string,address,address,address))",
3334
bank, lockKeeper, params);
@@ -38,21 +39,21 @@ contract LimitedTokenPoolsManager is Ownable {
3839
return pool;
3940
}
4041

41-
function configurePool(address _pool, LimitedTokenPool.LimitsConfig calldata params) public onlyOwner {
42+
function configurePool(address _pool, LimitedTokenPool.LimitsConfig calldata params) public onlyRole(DEFAULT_ADMIN_ROLE) {
4243
require(_isPool(_pool),"Pool does not exist");
4344
LimitedTokenPool pool = LimitedTokenPool(_pool);
4445
pool.setLimitsConfig(params);
4546
emit LimitedPoolConfigured(_pool, params);
4647
}
4748

48-
function deactivatePool(address _pool) public onlyOwner {
49+
function deactivatePool(address _pool) public onlyRole(DEFAULT_ADMIN_ROLE) {
4950
require(_isPool(_pool),"Pool does not exist");
5051
LimitedTokenPool pool = LimitedTokenPool(_pool);
5152
pool.deactivate();
5253
emit LimitedPoolDeactivated(_pool);
5354
}
5455

55-
function activatePool(address _pool) public onlyOwner {
56+
function activatePool(address _pool) public onlyRole(DEFAULT_ADMIN_ROLE) {
5657
require(_isPool(_pool),"Pool does not exist");
5758
LimitedTokenPool pool = LimitedTokenPool(_pool);
5859
pool.activate();

contracts/staking/token/TokenPoolsManager.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import "./TokenPool.sol";
88
import "../../funds/RewardsBank.sol";
99
import "../../LockKeeper.sol";
1010

11-
contract TokenPoolsManager is AccessControl{
11+
contract TokenPoolsManager is AccessControl {
1212
LockKeeper lockKeeper;
1313
RewardsBank public bank;
1414
UpgradeableBeacon public beacon;
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
import { ethers, upgrades } from "hardhat";
2+
import { deploy } from "@airdao/deployments/deploying";
3+
4+
import { ContractNames } from "../../../src";
5+
6+
import {
7+
LimitedTokenPoolsManager__factory,
8+
RewardsBank__factory,
9+
LockKeeper__factory
10+
} from "../../../typechain-types";
11+
12+
import { wrapProviderToError } from "../../../src/utils/AmbErrorProvider";
13+
import { deployMultisig } from "../../utils/deployMultisig";
14+
15+
export async function main() {
16+
const { chainId } = await ethers.provider.getNetwork();
17+
18+
const [deployer] = await ethers.getSigners();
19+
wrapProviderToError(deployer.provider!);
20+
21+
const multisig = await deployMultisig(ContractNames.Ecosystem_LimitedTokenPoolsManager, deployer);
22+
23+
const rewardsBank = await deploy<RewardsBank__factory>({
24+
contractName: ContractNames.Ecosystem_LimitedTokenPoolsManagerRewardsBank,
25+
artifactName: "RewardsBank",
26+
deployArgs: [],
27+
signer: deployer,
28+
loadIfAlreadyDeployed: true,
29+
});
30+
31+
const lockKeeper = await deploy<LockKeeper__factory>({
32+
contractName: ContractNames.LockKeeper,
33+
artifactName: "LockKeeper",
34+
deployArgs: [],
35+
signer: deployer,
36+
loadIfAlreadyDeployed: true,
37+
isUpgradeableProxy: true,
38+
});
39+
40+
console.log("deploying LimitedTokenPool Beacon");
41+
const limitedTokenPoolFactory = await ethers.getContractFactory("LimitedTokenPool");
42+
const limitedTokenPoolBeacon = await upgrades.deployBeacon(limitedTokenPoolFactory);
43+
await limitedTokenPoolBeacon.deployed();
44+
console.log("LimitedTokenPool Beacon deployed to:", limitedTokenPoolBeacon.address);
45+
46+
console.log("deploying TokenPoolsManager");
47+
const poolsManager = await deploy<LimitedTokenPoolsManager__factory>({
48+
contractName: ContractNames.Ecosystem_TokenPoolsManager,
49+
artifactName: "TokenPoolsManager",
50+
deployArgs: [rewardsBank.address, lockKeeper.address, limitedTokenPoolBeacon.address],
51+
signer: deployer,
52+
loadIfAlreadyDeployed: true,
53+
});
54+
55+
console.log("Grant poolsManager rewardsBank admin roles");
56+
await (await rewardsBank.grantRole(await rewardsBank.DEFAULT_ADMIN_ROLE(), poolsManager.address)).wait();
57+
58+
console.log("Grant multisig rewardsBank admin role");
59+
await (await rewardsBank.grantRole(await rewardsBank.DEFAULT_ADMIN_ROLE(), multisig.address)).wait();
60+
61+
console.log("Grant multisig poolsManager admin role");
62+
await (await poolsManager.grantRole(await poolsManager.DEFAULT_ADMIN_ROLE(), multisig.address)).wait();
63+
64+
if (chainId != 16718) return; // continue only on prod
65+
66+
console.log("Revoking roles from deployer");
67+
68+
console.log("Revoke rewardsBank admin role from deployer");
69+
await (await rewardsBank.revokeRole(await rewardsBank.DEFAULT_ADMIN_ROLE(), deployer.address)).wait();
70+
71+
console.log("Revoke poolsManager admin role from deployer");
72+
await (await poolsManager.revokeRole(await poolsManager.DEFAULT_ADMIN_ROLE(), deployer.address)).wait();
73+
74+
}
75+
76+
if (require.main === module) {
77+
main().catch((error) => {
78+
console.error(error);
79+
process.exitCode = 1;
80+
});
81+
}

scripts/ecosystem/token_staking/deploy.ts renamed to scripts/ecosystem/token_staking/deploy_token_manager.ts

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -44,17 +44,11 @@ export async function main() {
4444
await tokenPoolBeacon.deployed();
4545
console.log("TokenPool Beacon deployed to:", tokenPoolBeacon.address);
4646

47-
console.log("deploying LimitedTokenPool Beacon");
48-
const limitedTokenPoolFactory = await ethers.getContractFactory("LimitedTokenPool");
49-
const limitedTokenPoolBeacon = await upgrades.deployBeacon(limitedTokenPoolFactory);
50-
await limitedTokenPoolBeacon.deployed();
51-
console.log("LimitedTokenPool Beacon deployed to:", limitedTokenPoolBeacon.address);
52-
5347
console.log("deploying TokenPoolsManager");
5448
const poolsManager = await deploy<TokenPoolsManager__factory>({
5549
contractName: ContractNames.Ecosystem_TokenPoolsManager,
5650
artifactName: "TokenPoolsManager",
57-
deployArgs: [rewardsBank.address, lockKeeper.address, tokenPoolBeacon.address, limitedTokenPoolBeacon.address],
51+
deployArgs: [rewardsBank.address, lockKeeper.address, tokenPoolBeacon.address],
5852
signer: deployer,
5953
loadIfAlreadyDeployed: true,
6054
});

src/contracts/names.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -86,13 +86,12 @@ export enum ContractNames {
8686

8787
Ecosystem_GovernmentMultisig = "Ecosystem_Government_Multisig",
8888

89-
Ecosystem_SingleSidePool = "Ecosystem_SingleSidePool",
90-
Ecosystem_SingleSidePoolBeacon = "Ecosystem_SingleSidePool_Beacon",
91-
Ecosystem_DoubleSidePool = "Ecosystem_DoubleSidePool",
92-
Ecosystem_DoubleSidePoolBeacon = "Ecosystem_DoubleSidePool_Beacon",
9389
Ecosystem_TokenPoolsManager = "Ecosystem_TokenPoolsManager",
9490
Ecosystem_TokenPoolsManagerMultisig = "Ecosystem_TokenPoolsManager_Multisig",
9591
Ecosystem_TokenPoolsManagerRewardsBank = "Ecosystem_TokenPoolsManager_RewardsBank",
92+
Ecosystem_LimitedTokenPoolsManager = "Ecosystem_LimitedTokenPoolsManager",
93+
Ecosystem_LimitedTokenPoolsManagerMultisig = "Ecosystem_LimitedTokenPoolsManager_Multisig",
94+
Ecosystem_LimitedTokenPoolsManagerRewardsBank = "Ecosystem_LimitedTokenPoolsManager_RewardsBank",
9695
Ecosystem_HBRToken = "Ecosystem_HBRToken",
9796
}
9897

@@ -130,6 +129,7 @@ export const MULTISIGS_ECOSYSTEM = {
130129
[ContractNames.Ecosystem_LiquidPoolStAMB]: ContractNames.Ecosystem_LiquidPoolMultisig,
131130
[ContractNames.Ecosystem_LiquidPoolStakingTiers]: ContractNames.Ecosystem_LiquidPoolMultisig,
132131
[ContractNames.Ecosystem_TokenPoolsManager]: ContractNames.Ecosystem_TokenPoolsManagerMultisig,
132+
[ContractNames.Ecosystem_LimitedTokenPoolsManagerMultisig]: ContractNames.Ecosystem_LimitedTokenPoolsManagerMultisig,
133133
};
134134

135135
export const MULTISIGS = {...MULTISIGS_COMMON, ...MULTISIGS_ECOSYSTEM};

0 commit comments

Comments
 (0)