Skip to content

Commit 70e0ff2

Browse files
AnyhowclickilanDoron
authored andcommitted
Move permission modifiers from a separte contract into kyberDao and kyberFeeHandler. Later this will be updated to use sepearte daoOperator contract. Can ignore this commit.
- Exclude mock files from coverage
1 parent 989e290 commit 70e0ff2

File tree

3 files changed

+83
-100
lines changed

3 files changed

+83
-100
lines changed

.solcover.js

+1
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ module.exports = {
2828
"default_balance_ether": 100000000000000,
2929
"total_accounts": 20
3030
},
31+
skipFiles: ['Dao/mock/', 'mock/', 'utils/zeppelin/'],
3132
istanbulReporter: ['html','json'],
3233
onCompileComplete: moveFiles,
3334
onIstanbulComplete: removeArtifactsDir

contracts/sol6/Dao/KyberDAO.sol

+51-57
Original file line numberDiff line numberDiff line change
@@ -16,69 +16,14 @@ interface IFeeHandler {
1616
) external returns (bool);
1717
}
1818

19-
20-
contract CampPermissionGroups {
21-
address public campaignCreator;
22-
address public pendingCampaignCreator;
23-
24-
event TransferCampaignCreatorPending(address pendingCampaignCreator);
25-
event CampaignCreatorClaimed(address newCampaignCreator, address previousCampaignCreator);
26-
27-
constructor(address _campaignCreator) public {
28-
require(_campaignCreator != address(0), "campaignCreator is 0");
29-
campaignCreator = _campaignCreator;
30-
}
31-
32-
modifier onlyCampaignCreator() {
33-
require(msg.sender == campaignCreator, "only campaign creator");
34-
_;
35-
}
36-
37-
/**
38-
* @dev Allows the current campaignCreator to set the pendingCampaignCreator address.
39-
* @param newCampaignCreator The address to transfer ownership to.
40-
*/
41-
function transferCampaignCreator(address newCampaignCreator) external onlyCampaignCreator {
42-
require(newCampaignCreator != address(0), "newCampaignCreator is 0");
43-
emit TransferCampaignCreatorPending(newCampaignCreator);
44-
pendingCampaignCreator = newCampaignCreator;
45-
}
46-
47-
/**
48-
* @dev Allows the current campCcampaignCreatorreator to set the campaignCreator in one tx.
49-
Useful initial deployment.
50-
* @param newCampaignCreator The address to transfer ownership to.
51-
*/
52-
function transferCampaignCreatorQuickly(address newCampaignCreator)
53-
external
54-
onlyCampaignCreator
55-
{
56-
require(newCampaignCreator != address(0), "newCampaignCreator is 0");
57-
emit TransferCampaignCreatorPending(newCampaignCreator);
58-
emit CampaignCreatorClaimed(newCampaignCreator, campaignCreator);
59-
campaignCreator = newCampaignCreator;
60-
}
61-
62-
/**
63-
* @dev Allows the pendingCampaignCreator address to finalize the change campaign creator process.
64-
*/
65-
function claimCampaignCreator() external {
66-
require(pendingCampaignCreator == msg.sender, "only pending campaign creator");
67-
emit CampaignCreatorClaimed(pendingCampaignCreator, campaignCreator);
68-
campaignCreator = pendingCampaignCreator;
69-
pendingCampaignCreator = address(0);
70-
}
71-
}
72-
73-
7419
/**
7520
* @notice This contract is using SafeMath for uint, which is inherited from EpochUtils
7621
Some events are moved to interface, easier for public uses
7722
* @dev Network fee campaign: options are fee in bps
7823
* BRR fee handler campaign: options are combined of rebate (left most 128 bits) + reward (right most 128 bits)
7924
* General campaign: options are from 1 to num_options
8025
*/
81-
contract KyberDAO is IKyberDAO, EpochUtils, ReentrancyGuard, CampPermissionGroups, Utils5 {
26+
contract KyberDAO is IKyberDAO, EpochUtils, ReentrancyGuard, Utils5 {
8227
/* Constants */
8328
// max number of campaigns for each epoch
8429
uint256 public constant MAX_EPOCH_CAMPAIGNS = 10;
@@ -122,6 +67,10 @@ contract KyberDAO is IKyberDAO, EpochUtils, ReentrancyGuard, CampPermissionGroup
12267
IKyberStaking public staking;
12368
IFeeHandler public feeHandler;
12469

70+
// campaign creator permissions
71+
address public campaignCreator;
72+
address public pendingCampaignCreator;
73+
12574
/* Mapping from campaign ID => data */
12675
// use to generate increasing campaign ID
12776
uint256 public numberCampaigns = 0;
@@ -148,6 +97,9 @@ contract KyberDAO is IKyberDAO, EpochUtils, ReentrancyGuard, CampPermissionGroup
14897
// epoch => campaignID for brr campaigns
14998
mapping(uint256 => uint256) public brrCampaigns;
15099

100+
event TransferCampaignCreatorPending(address pendingCampaignCreator);
101+
event CampaignCreatorClaimed(address newCampaignCreator, address previousCampaignCreator);
102+
151103
event NewCampaignCreated(
152104
CampaignType campaignType,
153105
uint256 indexed campaignID,
@@ -172,12 +124,13 @@ contract KyberDAO is IKyberDAO, EpochUtils, ReentrancyGuard, CampPermissionGroup
172124
uint256 _defaultRewardBps,
173125
uint256 _defaultRebateBps,
174126
address _campaignCreator
175-
) public CampPermissionGroups(_campaignCreator) {
127+
) public {
176128
require(_epochPeriod > 0, "ctor: epoch period is 0");
177129
require(_startTimestamp >= now, "ctor: start in the past");
178130
require(_staking != address(0), "ctor: staking is missing");
179131
require(_feeHandler != address(0), "ctor: feeHandler is missing");
180132
require(_knc != address(0), "ctor: knc token is missing");
133+
require(_campaignCreator != address(0), "campaignCreator is 0");
181134
// in Network, maximum fee that can be taken from 1 tx is (platform fee + 2 * network fee)
182135
// so network fee should be less than 50%
183136
require(_defaultNetworkFeeBps < BPS / 2, "ctor: network fee high");
@@ -200,13 +153,54 @@ contract KyberDAO is IKyberDAO, EpochUtils, ReentrancyGuard, CampPermissionGroup
200153
rewardInBps: _defaultRewardBps,
201154
rebateInBps: _defaultRebateBps
202155
});
156+
campaignCreator = _campaignCreator;
157+
}
158+
159+
modifier onlyCampaignCreator() {
160+
require(msg.sender == campaignCreator, "only campaign creator");
161+
_;
203162
}
204163

205164
modifier onlyStakingContract {
206165
require(msg.sender == address(staking), "only staking contract");
207166
_;
208167
}
209168

169+
/**
170+
* @dev Allows the current campaignCreator to set the pendingCampaignCreator address.
171+
* @param newCampaignCreator The address to transfer ownership to.
172+
*/
173+
function transferCampaignCreator(address newCampaignCreator) external onlyCampaignCreator {
174+
require(newCampaignCreator != address(0), "newCampaignCreator is 0");
175+
emit TransferCampaignCreatorPending(newCampaignCreator);
176+
pendingCampaignCreator = newCampaignCreator;
177+
}
178+
179+
/**
180+
* @dev Allows the current campCcampaignCreatorreator to set the campaignCreator in one tx.
181+
Useful initial deployment.
182+
* @param newCampaignCreator The address to transfer ownership to.
183+
*/
184+
function transferCampaignCreatorQuickly(address newCampaignCreator)
185+
external
186+
onlyCampaignCreator
187+
{
188+
require(newCampaignCreator != address(0), "newCampaignCreator is 0");
189+
emit TransferCampaignCreatorPending(newCampaignCreator);
190+
emit CampaignCreatorClaimed(newCampaignCreator, campaignCreator);
191+
campaignCreator = newCampaignCreator;
192+
}
193+
194+
/**
195+
* @dev Allows the pendingCampaignCreator address to finalize the change campaign creator process.
196+
*/
197+
function claimCampaignCreator() external {
198+
require(pendingCampaignCreator == msg.sender, "only pending campaign creator");
199+
emit CampaignCreatorClaimed(pendingCampaignCreator, campaignCreator);
200+
campaignCreator = pendingCampaignCreator;
201+
pendingCampaignCreator = address(0);
202+
}
203+
210204
/**
211205
* @dev called by staking contract when staker wanted to withdraw
212206
* @param staker address of staker to reduce reward

contracts/sol6/Dao/KyberFeeHandler.sol

+31-43
Original file line numberDiff line numberDiff line change
@@ -31,46 +31,7 @@ import "../utils/zeppelin/SafeMath.sol";
3131
* 2. Network Fee distribtuion. per epoch Kyber fee Handler reads current distribution from Kyber DAO.
3232
* Expiry timestamp for data is set. when data expires. Fee handler reads new data from DAO.
3333
*/
34-
contract BurnConfigPermission {
35-
address public burnConfigSetter;
36-
address public pendingBurnConfigSetter;
37-
38-
event TransferBurnConfigSetter(address pendingBurnConfigSetter);
39-
event BurnConfigSetterClaimed(address newBurnConfigSetter, address previousBurnConfigSetter);
40-
41-
constructor(address _burnConfigSetter) public {
42-
require(_burnConfigSetter != address(0), "burnConfigSetter is 0");
43-
burnConfigSetter = _burnConfigSetter;
44-
}
45-
46-
modifier onlyBurnConfigSetter() {
47-
require(msg.sender == burnConfigSetter, "only burnConfigSetter");
48-
_;
49-
}
50-
51-
/**
52-
* @dev Allows the current burnConfigSetter to set the pendingBurnConfigSetter address.
53-
* @param newSetter The address to transfer ownership to.
54-
*/
55-
function transferBurnConfigSetter(address newSetter) external onlyBurnConfigSetter {
56-
require(newSetter != address(0), "newSetter is 0");
57-
emit TransferBurnConfigSetter(newSetter);
58-
pendingBurnConfigSetter = newSetter;
59-
}
60-
61-
/**
62-
* @dev Allows the pendingBurnConfigSetter address to finalize the change burn config setter process.
63-
*/
64-
function claimBurnConfigSetter() external {
65-
require(pendingBurnConfigSetter == msg.sender, "only pending burn config setter");
66-
emit BurnConfigSetterClaimed(pendingBurnConfigSetter, burnConfigSetter);
67-
burnConfigSetter = pendingBurnConfigSetter;
68-
pendingBurnConfigSetter = address(0);
69-
}
70-
}
71-
72-
73-
contract KyberFeeHandler is IKyberFeeHandler, Utils5, BurnConfigPermission {
34+
contract KyberFeeHandler is IKyberFeeHandler, Utils5 {
7435
using SafeMath for uint256;
7536

7637
uint256 internal constant BITS_PER_PARAM = 64;
@@ -94,7 +55,9 @@ contract KyberFeeHandler is IKyberFeeHandler, Utils5, BurnConfigPermission {
9455
uint256 public lastBurnBlock;
9556

9657
BRRData public brrAndEpochData;
58+
address public burnConfigSetter;
9759
address public daoSetter;
60+
address public pendingBurnConfigSetter;
9861

9962
/// @dev amount of eth to burn for each burn KNC call
10063
uint256 public weiToBurn = 2 * 10**ETH_DECIMALS;
@@ -131,6 +94,8 @@ contract KyberFeeHandler is IKyberFeeHandler, Utils5, BurnConfigPermission {
13194
event KyberDaoAddressSet(IKyberDAO kyberDAO);
13295
event BurnConfigSet(ISanityRate sanityRate, uint256 weiToBurn);
13396
event RewardsRemovedToBurn(uint256 indexed epoch, uint256 rewardsWei);
97+
event TransferBurnConfigSetter(address pendingBurnConfigSetter);
98+
event BurnConfigSetterClaimed(address newBurnConfigSetter, address previousBurnConfigSetter);
13499

135100
constructor(
136101
address _daoSetter,
@@ -139,13 +104,15 @@ contract KyberFeeHandler is IKyberFeeHandler, Utils5, BurnConfigPermission {
139104
IERC20 _knc,
140105
uint256 _burnBlockInterval,
141106
address _burnConfigSetter
142-
) public BurnConfigPermission(_burnConfigSetter) {
143-
require(address(_daoSetter) != address(0), "daoSetter 0");
107+
) public {
108+
require(_burnConfigSetter != address(0), "burnConfigSetter is 0");
109+
require(_daoSetter != address(0), "daoSetter 0");
144110
require(address(_networkProxy) != address(0), "KyberNetworkProxy 0");
145-
require(address(_kyberNetwork) != address(0), "KyberNetwork 0");
111+
require(_kyberNetwork != address(0), "KyberNetwork 0");
146112
require(address(_knc) != address(0), "knc 0");
147113
require(_burnBlockInterval != 0, "_burnBlockInterval 0");
148114

115+
burnConfigSetter = _burnConfigSetter;
149116
daoSetter = _daoSetter;
150117
networkProxy = _networkProxy;
151118
kyberNetwork = _kyberNetwork;
@@ -156,6 +123,11 @@ contract KyberFeeHandler is IKyberFeeHandler, Utils5, BurnConfigPermission {
156123
updateBRRData(DEFAULT_REWARD_BPS, DEFAULT_REBATE_BPS, now, 0);
157124
}
158125

126+
modifier onlyBurnConfigSetter() {
127+
require(msg.sender == burnConfigSetter, "only burnConfigSetter");
128+
_;
129+
}
130+
159131
modifier onlyDAO {
160132
require(msg.sender == address(kyberDAO), "only DAO");
161133
_;
@@ -315,6 +287,22 @@ contract KyberFeeHandler is IKyberFeeHandler, Utils5, BurnConfigPermission {
315287
return amount;
316288
}
317289

290+
/// @dev Allows the pendingBurnConfigSetter address to finalize the change burn config setter process.
291+
function claimBurnConfigSetter() external {
292+
require(pendingBurnConfigSetter == msg.sender, "only pending burn config setter");
293+
emit BurnConfigSetterClaimed(pendingBurnConfigSetter, burnConfigSetter);
294+
burnConfigSetter = pendingBurnConfigSetter;
295+
pendingBurnConfigSetter = address(0);
296+
}
297+
298+
/// @dev Allows the current burnConfigSetter to set the pendingBurnConfigSetter address.
299+
/// @param newSetter The address to transfer ownership to.
300+
function transferBurnConfigSetter(address newSetter) external onlyBurnConfigSetter {
301+
require(newSetter != address(0), "newSetter is 0");
302+
emit TransferBurnConfigSetter(newSetter);
303+
pendingBurnConfigSetter = newSetter;
304+
}
305+
318306
/// @dev set dao contract address once and set setter address to zero.
319307
/// @param _kyberDAO Dao address.
320308
function setDaoContract(IKyberDAO _kyberDAO) external {

0 commit comments

Comments
 (0)