/
GaugeFactoryV2_CL.sol
137 lines (105 loc) · 4.37 KB
/
GaugeFactoryV2_CL.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
// SPDX-License-Identifier: MIT
pragma solidity 0.8.13;
import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
import '../interfaces/IPermissionsRegistry.sol';
import '../interfaces/IGaugeFactoryV2.sol';
import '../GaugeV2_CL.sol';
import "../CLFeesVault.sol";
import "hardhat/console.sol";
interface IGauge{
function setDistribution(address _distro) external;
function activateEmergencyMode() external;
function stopEmergencyMode() external;
function setInternalBribe(address intbribe) external;
function setRewarderPid(uint256 pid) external;
function setGaugeRewarder(address _gr) external;
function setFeeVault(address _feeVault) external;
}
contract GaugeFactoryV2_CL is IGaugeFactory, OwnableUpgradeable {
address public last_gauge;
address public last_feeVault;
address public permissionsRegistry;
address public gammaFeeRecipient;
address[] internal __gauges;
constructor() {}
function initialize(address _permissionsRegistry, address _gammaFeeRecipient) initializer public {
__Ownable_init(); //after deploy ownership to multisig
permissionsRegistry = _permissionsRegistry;
gammaFeeRecipient = _gammaFeeRecipient;
}
function gauges() external view returns(address[] memory) {
return __gauges;
}
function length() external view returns(uint) {
return __gauges.length;
}
function createGaugeV2(address _rewardToken,address _ve,address _token,address _distribution, address _internal_bribe, address _external_bribe, bool /*_isPair*/) external returns (address) {
last_feeVault = address( new CLFeesVault(_token, permissionsRegistry, _distribution, gammaFeeRecipient) );
last_gauge = address(new GaugeV2_CL(_rewardToken,_ve,_token,_distribution,_internal_bribe,_external_bribe, last_feeVault) );
__gauges.push(last_gauge);
return last_gauge;
}
modifier onlyAllowed() {
require(IPermissionsRegistry(permissionsRegistry).hasRole("GAUGE_ADMIN",msg.sender), 'ERR: GAUGE_ADMIN');
_;
}
modifier EmergencyCouncil() {
require( msg.sender == IPermissionsRegistry(permissionsRegistry).emergencyCouncil() );
_;
}
function activateEmergencyMode( address[] memory _gauges) external EmergencyCouncil {
uint i = 0;
for ( i ; i < _gauges.length; i++){
IGauge(_gauges[i]).activateEmergencyMode();
}
}
function stopEmergencyMode( address[] memory _gauges) external EmergencyCouncil {
uint i = 0;
for ( i ; i < _gauges.length; i++){
IGauge(_gauges[i]).stopEmergencyMode();
}
}
function setRegistry(address _registry) external onlyAllowed {
require(_registry != address(0));
permissionsRegistry = _registry;
}
function setRewarderPid( address[] memory _gauges, uint[] memory _pids) external onlyAllowed {
require(_gauges.length == _pids.length);
uint i = 0;
for ( i ; i < _gauges.length; i++){
IGauge(_gauges[i]).setRewarderPid(_pids[i]);
}
}
function setGaugeRewarder( address[] memory _gauges, address[] memory _rewarder) external onlyAllowed {
require(_gauges.length == _rewarder.length);
uint i = 0;
for ( i ; i < _gauges.length; i++){
IGauge(_gauges[i]).setGaugeRewarder(_rewarder[i]);
}
}
function setDistribution(address[] memory _gauges, address distro) external onlyAllowed {
uint i = 0;
for ( i ; i < _gauges.length; i++){
IGauge(_gauges[i]).setDistribution(distro);
}
}
function setInternalBribe(address[] memory _gauges, address[] memory int_bribe) external onlyAllowed {
require(_gauges.length == int_bribe.length);
uint i = 0;
for ( i ; i < _gauges.length; i++){
IGauge(_gauges[i]).setInternalBribe(int_bribe[i]);
}
}
function setGaugeFeeVault(address[] memory _gauges, address _vault) external onlyAllowed {
require(_vault != address(0));
uint i = 0;
for ( i ; i < _gauges.length; i++){
require(_gauges[i] != address(0));
IGauge(_gauges[i]).setFeeVault(_vault);
}
}
function setGammaDefaultFeeRecipient(address _rec) external onlyAllowed {
require(_rec != address(0));
gammaFeeRecipient = _rec;
}
}