-
Notifications
You must be signed in to change notification settings - Fork 1
/
OwnerProxy.sol
248 lines (224 loc) · 12.5 KB
/
OwnerProxy.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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
//*~~~> SPDX-License-Identifier: MIT make it better, stronger, faster
/*~~~>
Thank you Phunks for your inspiration and phriendship.
Never stop phighting, never surrender, always stand up for what is right and make the best of all situations towards all people.
Phunks are phreedom phighters!
"When the power of love overcomes the love of power the world will know peace." - Jimi Hendrix <3
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((%%%%%
%%%%%((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((%%%%%
%%%%%((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((%%%%%
%%%%%((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((%%%%%
%%%%%((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((%%%%%
%%%%%((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((%%%%%
%%%%%((((((((((((((((((((((((((((((((((((((((@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@(((((((((((((((((((((((((((((((((((%%%%%
%%%%%((((((((((((((((((((((((((((((((((((((((@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@(((((((((((((((((((((((((((((((((((%%%%%
%%%%%(((((((((((((((((((((((((((((((((((@@@@@##############################%%%%%@@@@@((((((((((((((((((((((((((((((%%%%%
%%%%%(((((((((((((((((((((((((((((((((((@@@@@##############################%%%%%@@@@@((((((((((((((((((((((((((((((%%%%%
%%%%%((((((((((((((((((((((((((((((@@@@@########################################%%%%%@@@@@(((((((((((((((((((((((((%%%%%
%%%%%((((((((((((((((((((((((((((((@@@@@########################################%%%%%@@@@@(((((((((((((((((((((((((%%%%%
%%%%%(((((((((((((((((((((((((@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@###############@@@@@(((((((((((((((((((((((((%%%%%
%%%%%(((((((((((((((((((((((((@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@###############@@@@@(((((((((((((((((((((((((%%%%%
%%%%%((((((((((((((((((((@@@@@%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%@@@@@##########@@@@@(((((((((((((((((((((((((%%%%%
%%%%%((((((((((((((((((((@@PhunkyJON was here programming trustless unstoppable contracts@(((((((((((((((((((((((((%%%%%
%%%%%((((((((((((((((((((@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@(((((((((((((((((((((((((%%%%%
%%%%%((((((((((((((((((((@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@(((((((((((((((((((((((((%%%%%
%%%%%(((((((((((((((SMOKE((((((((((@@@@@/////////////////////////////////////////////@@@@@(((((((((((((((((((((((((%%%%%
%%%%%(((((((((((((((SMOKE((((((((((@@@@@/////////////////////////////////////////////@@@@@(((((((((((((((((((((((((%%%%%
%%%%%(((((((((((((((SMOKE((((((((((@@@@@#PHUNKYJON///////////////#PHUNKYJON//////////@@@@@(((((((((((((((((((((((((%%%%%
%%%%%(((((((((((((((SMOKE((((((((((@@@@@#PHUNKYJON///////////////#PHUNKYJON//////////@@@@@(((((((((((((((((((((((((%%%%%
%%%%%(((((((((((((((SMOKE((((((((((@@@@@/////@EYES////////////////////@EYES///////////////@@@@@((((((((((((((((((((%%%%%
%%%%%(((((((((((((((SMOKE((((((((((@@@@@/////@EYES////////////////////@EYES///////////////EAR@@((((((((((((((((((((%%%%%
%%%%%(((((((((((((((SMOKE((((((((((@@@@@//////////////////////////////////////////////////EAR@@((((((((((((((((((((%%%%%
%%%%%(((((((((((((((SMOKE((((((((((@@@@@//////////////////////////////////////////////////EAR@@((((((((((((((((((((%%%%%
%%%%%(((((((((((((((SMOKE((((((((((@@@@@/////////////////////////////////////////////@@@@@@@@@@((((((((((((((((((((%%%%%
%%%%%(((((((((((((((SMOKE((((((((((@@@@@/////////////////////////////////////////////@@@@@@@@@@((((((((((((((((((((%%%%%
%%%%%(((((((((((((((SMOKE((((((((((@@@@@//////////NOSE@NOSE@////////////////////#####@@@@@(((((((((((((((((((((((((%%%%%
%%%%%(((((((((((((((SMOKE((((((((((@@@@@//////////NOSE@NOSE@////////////////////#####@@@@@(((((((((((((((((((((((((%%%%%
%%%%%((((((((((((((((((((((((((((((@@@@@#####//////////////////////////////##########@@@@@(((((((((((((((((((((((((%%%%%
%%%%%((((((((((((((((((((((((((((((@@@@@#####//////////////////////////////##########@@@@@(((((((((((((((((((((((((%%%%%
%%%%%(((((((((((((((@SPLIFF@SPLIFF@SPLIFF@SPLIFF@@###################################@@@@@(((((((((((((((((((((((((%%%%%
%%%%%(((((((((((((((@SPLIFF@SPLIFF@SPLIFF@SPLIFF@@###################################@@@@@(((((((((((((((((((((((((%%%%%
%%%%%((((((((((EMBER(((((,,,,,,,,,,,,,,,,,,,,,,,,,@@@@@MOUTH&&&&&####################@@@@@(((((((((((((((((((((((((%%%%%
%%%%%((((((((((EMBER(((((,,,,,,,,,,,,,,,,,,,,,,,,,@@@@@MOUTH&&&&&####################@@@@@(((((((((((((((((((((((((%%%%%
%%%%%(((((((((((((((@SPLIFF@SPLIFF@SPLIFF@SPLIFF@@##############################/////@@@@@(((((((((((((((((((((((((%%%%%
%%%%%(((((((((((((((@SPLIFF@SPLIFF@SPLIFF@SPLIFF@@##############################/////@@@@@(((((((((((((((((((((((((%%%%%
%%%%%(((((((((((((((((((((((((((((((((((@@@@@##############################//////////@@@@@(((((((((((((((((((((((((%%%%%
%%%%%(((((((((((((((((((((((((((((((((((@@@@@##############################//////////@@@@@(((((((((((((((((((((((((%%%%%
%%%%%((((((((((((((((((((((((((((((((((((((((@@@@@@@@@@@@@@@@@@@@@@@@@///////////////@@@@@(((((((((((((((((((((((((%%%%%
%%%%%((((((((((((((((((((((((((((((((((((((((@@@@@@@@@@@@@@@@@@@@@@@@@///////////////@@@@@(((((((((((((((((((((((((%%%%%
%%%%%((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((@@@@@///////////////@@@@@(((((((((((((((((((((((((%%%%%
%%%%%((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((@@@@@///////////////@@@@@(((((((((((((((((((((((((%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%@@@@@///////////////@@@@@%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%@@@@@///////////////@@@@@%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
<~~~*/
pragma solidity 0.8.7;
import "@openzeppelin/contracts/security/ReentrancyGuard.sol";
import "./interfaces/IRoleProvider.sol";
import "./interfaces/IRewardsController.sol";
///@notice
/*~~~>
Interface declarations for upgradable contracts accessibility
<~~~*/
interface NFT {
function grantRole(bytes32 role, address account) external;
function revokeRole(bytes32 role, address account) external;
}
interface MarketMint {
function setDeployAmnt(uint deplyAmnt) external;
function setNewRedemption(uint redeemAmount, address contractAdd) external;
function resetRedemptionToken(uint64 redeemAmount, address contractAdd) external;
}
interface RoleProvider is IRoleProvider {
function setMarketMintAdd(address newmintAdd) external returns(bool);
function setNftAdd(address newnftAdd) external returns(bool);
function setOffersAdd(address newoffAdd) external returns(bool);
function setTradesAdd(address newtradAdd) external returns(bool);
function setBidsAdd(address newbidsAdd) external returns(bool);
function setRwdsAdd(address newrwdsAdd) external returns(bool);
function setProxyRoleAddress(address newrole) external returns(bool);
function setOwnerProxyAdd(address newproxyAdd) external returns(bool);
function setPhunkyAdd(address newphunky) external returns(bool);
function setDevSigAddress(address newsig) external returns(bool);
function setMarketAdd(address newmrktAdd) external returns(bool);
}
contract OwnerProxy is ReentrancyGuard {
/*~~~>
State Address Variables
<~~~*/
//*~~~> global address variable from Role Provider contract
bytes32 public constant REWARDS = keccak256("REWARDS");
bytes32 public constant BIDS = keccak256("BIDS");
bytes32 public constant OFFERS = keccak256("OFFERS");
bytes32 public constant TRADES = keccak256("TRADES");
bytes32 public constant NFTADD = keccak256("NFT");
bytes32 public constant MINT = keccak256("MINT");
bytes32 public constant MARKET = keccak256("MARKET");
bytes32 public constant PROXY = keccak256("PROXY");
address public roleAdd;
//*~~~> Roles for designated accessibility
bytes32 public constant PROXY_ROLE = keccak256("PROXY_ROLE");
bytes32 public constant DEV = keccak256("DEV");
modifier hasAdmin(){
require(RoleProvider(roleAdd).hasTheRole(PROXY_ROLE, msg.sender), "DOES NOT HAVE ADMIN ROLE");
_;
}
modifier hasDevAdmin(){
require(RoleProvider(roleAdd).hasTheRole(DEV, msg.sender), "DOES NOT HAVE DEV ROLE");
_;
}
constructor(address role){
roleAdd = role;
}
/// @notice
/*~~~>
For setting the platform fees on RewardsController.sol
Base fee set at 2% (i.e. value * 200 / 10,000)
Future fees can be set by the controlling DAO
<~~~*/
function setFee(uint newFee) public hasAdmin returns (bool) {
address rewardsAdd = RoleProvider(roleAdd).fetchAddress(REWARDS);
IRewardsController(rewardsAdd).setFee(newFee);
return true;
}
///@notice
/*~~~>
For setting the state address variables
<~~~*/
function setMarketAdd(address mrktAdd) hasDevAdmin public returns(bool){
RoleProvider(roleAdd).setMarketAdd(mrktAdd);
return true;
}
function setNftAdd(address nft) hasDevAdmin public returns(bool){
RoleProvider(roleAdd).setNftAdd(nft);
return true;
}
function setMarketMintAdd(address mintAdd) hasDevAdmin public returns(bool){
RoleProvider(roleAdd).setMarketMintAdd(mintAdd);
return true;
}
function setOffersAdd(address offAdd) hasDevAdmin public returns(bool){
RoleProvider(roleAdd).setOffersAdd(offAdd);
return true;
}
function setTradesAdd(address tradAdd) hasDevAdmin public returns(bool){
RoleProvider(roleAdd).setTradesAdd(tradAdd);
return true;
}
function setBidsAdd(address bidsAdd) hasDevAdmin public returns(bool){
RoleProvider(roleAdd).setBidsAdd(bidsAdd);
return true;
}
function setRwdsAdd(address rwdsAdd) hasDevAdmin public returns(bool){
RoleProvider(roleAdd).setRwdsAdd(rwdsAdd);
return true;
}
function setRoleAdd(address role) hasDevAdmin public returns(bool){
roleAdd = role;
return true;
}
function setDevAdd(address devAdd) hasDevAdmin public returns(bool){
RoleProvider(roleAdd).setDevSigAddress(devAdd);
return true;
}
///@notice
/*~~~>
For setting the proxy role in the role provider contract
<~~~*/
function setProxyRole(address sig) hasDevAdmin public returns(bool){
RoleProvider(roleAdd).setProxyRoleAddress(sig);
return true;
}
///@notice
/*~~~>
For controlling MarketMint contract
<~~~*/
function setNewMintRedemption(uint redeemAmount, address contractAdd) hasAdmin public returns(bool){
address marketMintAdd = RoleProvider(roleAdd).fetchAddress(MINT);
MarketMint(marketMintAdd).setNewRedemption(redeemAmount, contractAdd);
return true;
}
function resetMintRedemptionToken(uint64 redeemAmount, address contractAdd) hasAdmin public returns(bool){
address marketMintAdd = RoleProvider(roleAdd).fetchAddress(MINT);
MarketMint(marketMintAdd).resetRedemptionToken(redeemAmount, contractAdd);
return true;
}
function setMintDeployAmnt(uint dplyAmnt) hasAdmin public returns(bool){
address marketMintAdd = RoleProvider(roleAdd).fetchAddress(MINT);
MarketMint(marketMintAdd).setDeployAmnt(dplyAmnt);
return true;
}
/// @notice
/*~~~>
For controlling the NFT contract accessibility roles after initial deployment
<~~~*/
function grantNFTRoles(bytes32 role, address account) hasDevAdmin public returns(bool) {
address nftAdd = RoleProvider(roleAdd).fetchAddress(NFTADD);
NFT(nftAdd).grantRole(role, account);
return true;
}
function revokeNFTRoles(bytes32 role, address account) hasDevAdmin public returns(bool) {
address nftAdd = RoleProvider(roleAdd).fetchAddress(NFTADD);
NFT(nftAdd).revokeRole(role, account);
return true;
}
/// @notice
/*~~~>
Internal function for sending ether
<~~~*/
/// @return Bool
function sendEther(address recipient, uint ethvalue) internal nonReentrant returns (bool){
(bool success, bytes memory data) = address(recipient).call{value: ethvalue}("");
return(success);
}
/*~~~>
Fallback functions
<~~~*/
/*~~~> External ETH transfer forwarded to role provider contract <~~~*/
event FundsForwarded(uint value, address from, address to);
receive() external payable {
require(sendEther(roleAdd, msg.value));
emit FundsForwarded(msg.value, msg.sender, roleAdd);
}
}