/
GaugeFactoryV2.sol
114 lines (87 loc) · 3.58 KB
/
GaugeFactoryV2.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
// 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.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 is IGaugeFactory, OwnableUpgradeable {
address public last_gauge;
address public permissionsRegistry;
address[] internal __gauges;
constructor() {}
function initialize(address _permissionRegistry) initializer public {
__Ownable_init(); //after deploy ownership to multisig
permissionsRegistry = _permissionRegistry;
}
function setRegistry(address _registry) external {
require(owner() == msg.sender, 'not owner');
permissionsRegistry = _registry;
}
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_gauge = address(new GaugeV2(_rewardToken,_ve,_token,_distribution,_internal_bribe,_external_bribe,_isPair) );
__gauges.push(last_gauge);
return last_gauge;
}
modifier onlyAllowed() {
require(owner() == msg.sender || 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 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]);
}
}
}