-
Notifications
You must be signed in to change notification settings - Fork 1
/
RoleProvider.sol
241 lines (223 loc) · 11.5 KB
/
RoleProvider.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
//*~~~> SPDX-License-Identifier: MIT make it better, stronger, faster, else leave it be
/*~~~>
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/access/AccessControl.sol";
import "@openzeppelin/contracts/security/ReentrancyGuard.sol";
contract MarketRoleProvider is AccessControl, ReentrancyGuard {
address public marketplaceAdd;
address public daoAdd;
address public nftAdd;
address public marketMintAdd;
address public offersAdd;
address public tradesAdd;
address public bidsAdd;
address public rewardsAdd;
address public roleAdd;
address public ownerProxyAdd;
address public PHUNKYAdd;
address public devSig;
uint private killswitch;
mapping (bytes32 => address) marketBytes;
/*~~~>
Roles allow for designated accessibility
<~~~*/
bytes32 public constant PROXY_ROLE = keccak256("PROXY_ROLE");
//*~~~> For tracking contract addresses
bytes32 public constant DAO = keccak256("DAO");
bytes32 public constant DEV = keccak256("DEV");
bytes32 public constant NFT = keccak256("NFT");
bytes32 public constant MINT = keccak256("MINT");
bytes32 public constant BIDS = keccak256("BIDS");
bytes32 public constant ROLE = keccak256("ROLE");
bytes32 public constant PROXY = keccak256("PROXY");
bytes32 public constant OFFERS = keccak256("OFFERS");
bytes32 public constant TRADES = keccak256("TRADES");
bytes32 public constant PHUNKY = keccak256("PHUNKY");
bytes32 public constant MARKET = keccak256("MARKET");
bytes32 public constant REWARDS = keccak256("REWARDS");
/*~~~>
Error message for unauthorized access
<~~~*/
string Mess = "Ah Ah Ah, you didn't say the magic word!";
/*~~~>
Sets deployment address as default admin role
<~~~*/
constructor() {
_setupRole(DEFAULT_ADMIN_ROLE,msg.sender);
_setupRole(PROXY_ROLE, msg.sender);
_setupRole(DEV, msg.sender);
killswitch = block.timestamp;
}
// we've got 30 ether days
modifier hasAdmin(){
require(block.timestamp < killswitch + 172800);
require(hasRole(PROXY_ROLE, msg.sender), Mess);
_;
}
modifier hasDevAdmin(){
require(RoleProvider(roleAdd).hasTheRole(DEV, msg.sender), "DOES NOT HAVE DEV ROLE");
_;
}
///@notice For setting new proxy role
/*
address _sig: address of the contract to be assigned the role
*/
function setProxyRoleAddress(address newsig) public hasAdmin returns(bool) {
marketBytes[PROXY_ROLE] = newsig;
return true;
}
function setDaoAdd(address newdaoAdd) hasAdmin public returns(bool){
daoAdd = newdaoAdd;
marketBytes[DAO]= newdaoAdd;
return true;
}
function setMarketAdd(address newmrktAdd) hasAdmin public returns(bool){
marketplaceAdd = newmrktAdd;
marketBytes[MARKET]= newmrktAdd;
return true;
}
function setNftAdd(address newnftAdd) hasAdmin public returns(bool){
nftAdd = newnftAdd;
marketBytes[NFT]= newnftAdd;
return true;
}
function setMarketMintAdd(address newmintAdd) hasAdmin public returns(bool){
marketMintAdd = newmintAdd;
marketBytes[MINT] = newmintAdd;
return true;
}
function setOffersAdd(address newoffAdd) hasAdmin public returns(bool){
offersAdd = newoffAdd;
marketBytes[OFFERS] = newoffAdd;
return true;
}
function setTradesAdd(address newtradAdd) hasAdmin public returns(bool){
tradesAdd = newtradAdd;
marketBytes[TRADES] = newtradAdd;
return true;
}
function setBidsAdd(address newbidsAdd) hasAdmin public returns(bool){
bidsAdd = newbidsAdd;
marketBytes[BIDS] = newbidsAdd;
return true;
}
function setRwdsAdd(address newrwdsAdd) hasAdmin public returns(bool){
rewardsAdd = newrwdsAdd;
marketBytes[REWARDS] = newrwdsAdd;
return true;
}
function setRoleAdd(address newrole) public hasAdmin returns(bool){
roleAdd = newrole;
marketBytes[ROLE] = newrole;
return true;
}
function setOwnerProxyAdd(address newproxyAdd) public hasAdmin returns(bool){
ownerProxyAdd = newproxyAdd;
marketBytes[PROXY]=newproxyAdd;
return true;
}
function setPhunkyAdd(address newphunky) public hasAdmin returns(bool){
PHUNKYAdd = newphunky;
marketBytes[PHUNKY] = newphunky;
return true;
}
function setDevSigAddress(address newsig) public hasAdmin returns(bool){
devSig = newsig;
marketBytes[DEV] = newsig;
return true;
}
function fetchAddress(bytes32 thevar) public view returns(address){
return marketBytes[thevar];
}
function hasTheRole(bytes32 role, address theaddress) public view returns(bool){
return hasRole(role, theaddress);
}
function hasContractRole(address theaddress) public view returns(bool){
if(theaddress == marketBytes[MARKET]
|| theaddress == marketBytes[BIDS]
|| theaddress == marketBytes[OFFERS]
|| theaddress == marketBytes[TRADES]
|| theaddress == marketBytes[MINT]
){
return true;
}
return false;
}
/// @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);
}
/// @notice
/*~~~>
DEV only function for withdrawing stuck funds sent to one of the proxy contracts.
<~~~*/
/// @return Bool
function withdrawEth(address recipient, uint ethvalue) external hasDevAdmin nonReentrant returns(bool){
require(sendEther(recipient, ethvalue));
return(true);
}
/*~~~>
Fallback functions
<~~~*/
receive() external payable {
emit Received(msg.sender, msg.value);
}
}