-
Notifications
You must be signed in to change notification settings - Fork 1
/
PrizePoolRegistry.json
277 lines (277 loc) · 35.8 KB
/
PrizePoolRegistry.json
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
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
{
"address": "0x8817bB292941e1A69F12879B274c8A15D315ABb1",
"abi": [
{
"inputs": [],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "previousOwner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "OwnershipTransferred",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "prizePool",
"type": "address"
}
],
"name": "PrizePoolAdded",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "prizePool",
"type": "address"
}
],
"name": "PrizePoolRemoved",
"type": "event"
},
{
"inputs": [
{
"internalType": "address[]",
"name": "_prizePools",
"type": "address[]"
}
],
"name": "addPrizePools",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "getPrizePools",
"outputs": [
{
"internalType": "address[]",
"name": "",
"type": "address[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "owner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_previousPrizePool",
"type": "address"
},
{
"internalType": "address",
"name": "_prizePool",
"type": "address"
}
],
"name": "removePrizePool",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "renounceOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "transferOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
],
"transactionHash": "0x37bc0e8d91e7d87c41da83ca7f55560734dd8b8584d709a402f21b1b5e40d26b",
"receipt": {
"to": null,
"from": "0x8a6897bc4965cB3FA6a2DB3283Be068908064D13",
"contractAddress": "0x8817bB292941e1A69F12879B274c8A15D315ABb1",
"transactionIndex": 19,
"gasUsed": "626641",
"logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000001000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000008000000020000000000000000000000000000000000000000000000000000000000000060000000000000100000000000000000000000000000000000000000000000000000",
"blockHash": "0xa0b6d062315a3a7acf8bbc1d60a628113b1a377cb5d7a0c2d1f6d40eeae82746",
"transactionHash": "0x37bc0e8d91e7d87c41da83ca7f55560734dd8b8584d709a402f21b1b5e40d26b",
"logs": [
{
"transactionIndex": 19,
"blockNumber": 23842806,
"transactionHash": "0x37bc0e8d91e7d87c41da83ca7f55560734dd8b8584d709a402f21b1b5e40d26b",
"address": "0x8817bB292941e1A69F12879B274c8A15D315ABb1",
"topics": [
"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0",
"0x0000000000000000000000000000000000000000000000000000000000000000",
"0x0000000000000000000000008a6897bc4965cb3fa6a2db3283be068908064d13"
],
"data": "0x",
"logIndex": 49,
"blockHash": "0xa0b6d062315a3a7acf8bbc1d60a628113b1a377cb5d7a0c2d1f6d40eeae82746"
}
],
"blockNumber": 23842806,
"cumulativeGasUsed": "2461861",
"status": 1,
"byzantium": true
},
"args": [],
"solcInputHash": "20d3358fd77b25249d09dbdeb2d71edd",
"metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"prizePool\",\"type\":\"address\"}],\"name\":\"PrizePoolAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"prizePool\",\"type\":\"address\"}],\"name\":\"PrizePoolRemoved\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_prizePools\",\"type\":\"address[]\"}],\"name\":\"addPrizePools\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPrizePools\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_previousPrizePool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_prizePool\",\"type\":\"address\"}],\"name\":\"removePrizePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"addPrizePools(address[])\":{\"params\":{\"_prizePools\":\"Array of prizePool addresses\"}},\"getPrizePools()\":{\"returns\":{\"_0\":\"Array of prize pool addresses\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"removePrizePool(address,address)\":{\"params\":{\"_previousPrizePool\":\"The address positionally localed before the address that will be deleted. This may be the SENTINEL address if the list contains one prize pool address\",\"_prizePool\":\"The address to remove from the linked list. \"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"addPrizePools(address[])\":{\"notice\":\"Adds addresses to the linked list. Will revert if the address is already in the list. Can only be called by the Registry owner.\"},\"getPrizePools()\":{\"notice\":\"Returns an array of all prizePools in the linked list\"},\"removePrizePool(address,address)\":{\"notice\":\"Removes an address from the linked list. Can only be called by the Registry owner.\"}},\"notice\":\"A registry to hold Prize Pool addresses. Underlying data structure is a singly linked list. \",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/PrizePoolRegistry.sol\":\"PrizePoolRegistry\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor () internal {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n}\\n\",\"keccak256\":\"0x15e2d5bd4c28a88548074c54d220e8086f638a71ed07e6b3ba5a70066fcf458d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\"},\"contracts/PrizePoolRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.6;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport \\\"./interfaces/KeeperCompatibleInterface.sol\\\";\\nimport \\\"./interfaces/PeriodicPrizeStrategyInterface.sol\\\";\\nimport \\\"./interfaces/PrizePoolInterface.sol\\\";\\nimport \\\"./utils/MappedSinglyLinkedList.sol\\\";\\n\\n\\n\\n///@notice A registry to hold Prize Pool addresses. Underlying data structure is a singly linked list. \\ncontract PrizePoolRegistry is Ownable {\\n\\n using MappedSinglyLinkedList for MappedSinglyLinkedList.Mapping;\\n\\n event PrizePoolAdded(address indexed prizePool);\\n event PrizePoolRemoved(address indexed prizePool);\\n\\n MappedSinglyLinkedList.Mapping internal prizePoolList;\\n\\n constructor() Ownable(){\\n prizePoolList.initialize();\\n }\\n\\n\\n /// @notice Returns an array of all prizePools in the linked list\\n ///@return Array of prize pool addresses\\n function getPrizePools() view external returns(address[] memory){\\n return prizePoolList.addressArray();\\n } \\n\\n /// @notice Adds addresses to the linked list. Will revert if the address is already in the list. Can only be called by the Registry owner.\\n /// @param _prizePools Array of prizePool addresses\\n function addPrizePools(address[] calldata _prizePools) public onlyOwner {\\n for(uint256 prizePool = 0; prizePool < _prizePools.length; prizePool++ ){ \\n prizePoolList.addAddress(_prizePools[prizePool]);\\n emit PrizePoolAdded(_prizePools[prizePool]);\\n }\\n }\\n\\n /// @notice Removes an address from the linked list. Can only be called by the Registry owner.\\n /// @param _previousPrizePool The address positionally localed before the address that will be deleted. This may be the SENTINEL address if the list contains one prize pool address\\n /// @param _prizePool The address to remove from the linked list. \\n function removePrizePool(address _previousPrizePool, address _prizePool) public onlyOwner{\\n prizePoolList.removeAddress(_previousPrizePool, _prizePool); \\n emit PrizePoolRemoved(_prizePool);\\n } \\n}\",\"keccak256\":\"0x103014acff45ec739622937a73952bb537c8cd0290a00b0f472061a437002e16\",\"license\":\"MIT\"},\"contracts/interfaces/KeeperCompatibleInterface.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\ninterface KeeperCompatibleInterface {\\n\\n /**\\n * @notice method that is simulated by the keepers to see if any work actually\\n * needs to be performed. This method does does not actually need to be\\n * executable, and since it is only ever simulated it can consume lots of gas.\\n * @dev To ensure that it is never called, you may want to add the\\n * cannotExecute modifier from KeeperBase to your implementation of this\\n * method.\\n * @param checkData specified in the upkeep registration so it is always the\\n * same for a registered upkeep. This can easily be broken down into specific\\n * arguments using `abi.decode`, so multiple upkeeps can be registered on the\\n * same contract and easily differentiated by the contract.\\n * @return upkeepNeeded boolean to indicate whether the keeper should call\\n * performUpkeep or not.\\n * @return performData bytes that the keeper should call performUpkeep with, if\\n * upkeep is needed. If you would like to encode data to decode later, try\\n * `abi.encode`.\\n */\\n function checkUpkeep(\\n bytes calldata checkData\\n )\\n external\\n returns (\\n bool upkeepNeeded,\\n bytes memory performData\\n );\\n /**\\n * @notice method that is actually executed by the keepers, via the registry.\\n * The data returned by the checkUpkeep simulation will be passed into\\n * this method to actually be executed.\\n * @dev The input to this method should not be trusted, and the caller of the\\n * method should not even be restricted to any single registry. Anyone should\\n * be able call it, and the input should be validated, there is no guarantee\\n * that the data passed in is the performData returned from checkUpkeep. This\\n * could happen due to malicious keepers, racing keepers, or simply a state\\n * change while the performUpkeep transaction is waiting for confirmation.\\n * Always validate the data passed in.\\n * @param performData is the data which was passed back from the checkData\\n * simulation. If it is encoded, it can easily be decoded into other types by\\n * calling `abi.decode`. This data should not be trusted, and should be\\n * validated against the contract's current state.\\n */\\n function performUpkeep(\\n bytes calldata performData\\n ) external;\\n}\",\"keccak256\":\"0x5174919ce142bffa1517f63837e932ce18224d3b4cda828e0d88ff8a5b99d920\",\"license\":\"MIT\"},\"contracts/interfaces/PeriodicPrizeStrategyInterface.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.7.6;\\n\\ninterface PeriodicPrizeStrategyInterface {\\n function startAward() external;\\n function completeAward() external;\\n function canStartAward() external view returns (bool);\\n function canCompleteAward() external view returns (bool);\\n}\",\"keccak256\":\"0x109f0a01f57f08936e7bb94fe357fa71e7237794f6f8576c37c773a80dcd155f\",\"license\":\"MIT\"},\"contracts/interfaces/PrizePoolInterface.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.6;\\n\\ninterface PrizePoolInterface {\\n function prizeStrategy() external view returns (address);\\n}\",\"keccak256\":\"0x25c3deefae7b4f2270303b5646e28f49922853ae946173ca2032173bd1844210\",\"license\":\"MIT\"},\"contracts/utils/MappedSinglyLinkedList.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\n\\npragma solidity ^0.7.6;\\n\\n/// @notice An efficient implementation of a singly linked list of addresses\\n/// @dev A mapping(address => address) tracks the 'next' pointer. A special address called the SENTINEL is used to denote the beginning and end of the list.\\nlibrary MappedSinglyLinkedList {\\n\\n /// @notice The special value address used to denote the end of the list\\n address public constant SENTINEL = address(0x1);\\n\\n /// @notice The data structure to use for the list.\\n struct Mapping {\\n uint256 count;\\n\\n mapping(address => address) addressMap;\\n }\\n\\n /// @notice Initializes the list.\\n /// @dev It is important that this is called so that the SENTINEL is correctly setup.\\n function initialize(Mapping storage self) internal {\\n require(self.count == 0, \\\"Already init\\\");\\n self.addressMap[SENTINEL] = SENTINEL;\\n }\\n\\n function start(Mapping storage self) internal view returns (address) {\\n return self.addressMap[SENTINEL];\\n }\\n\\n function next(Mapping storage self, address current) internal view returns (address) {\\n return self.addressMap[current];\\n }\\n\\n function end(Mapping storage) internal pure returns (address) {\\n return SENTINEL;\\n }\\n\\n function addAddresses(Mapping storage self, address[] memory addresses) internal {\\n for (uint256 i = 0; i < addresses.length; i++) {\\n addAddress(self, addresses[i]);\\n }\\n }\\n\\n /// @notice Adds an address to the front of the list.\\n /// @param self The Mapping struct that this function is attached to\\n /// @param newAddress The address to shift to the front of the list\\n function addAddress(Mapping storage self, address newAddress) internal {\\n require(newAddress != SENTINEL && newAddress != address(0), \\\"Invalid address\\\");\\n require(self.addressMap[newAddress] == address(0), \\\"Already added\\\");\\n self.addressMap[newAddress] = self.addressMap[SENTINEL];\\n self.addressMap[SENTINEL] = newAddress;\\n self.count = self.count + 1;\\n }\\n\\n /// @notice Removes an address from the list\\n /// @param self The Mapping struct that this function is attached to\\n /// @param prevAddress The address that precedes the address to be removed. This may be the SENTINEL if at the start.\\n /// @param addr The address to remove from the list.\\n function removeAddress(Mapping storage self, address prevAddress, address addr) internal {\\n require(addr != SENTINEL && addr != address(0), \\\"Invalid address\\\");\\n require(self.addressMap[prevAddress] == addr, \\\"Invalid prevAddress\\\");\\n self.addressMap[prevAddress] = self.addressMap[addr];\\n delete self.addressMap[addr];\\n self.count = self.count - 1;\\n }\\n\\n /// @notice Determines whether the list contains the given address\\n /// @param self The Mapping struct that this function is attached to\\n /// @param addr The address to check\\n /// @return True if the address is contained, false otherwise.\\n function contains(Mapping storage self, address addr) internal view returns (bool) {\\n return addr != SENTINEL && addr != address(0) && self.addressMap[addr] != address(0);\\n }\\n\\n /// @notice Returns an address array of all the addresses in this list\\n /// @dev Contains a for loop, so complexity is O(n) wrt the list size\\n /// @param self The Mapping struct that this function is attached to\\n /// @return An array of all the addresses\\n function addressArray(Mapping storage self) internal view returns (address[] memory) {\\n address[] memory array = new address[](self.count);\\n uint256 count;\\n address currentAddress = self.addressMap[SENTINEL];\\n while (currentAddress != address(0) && currentAddress != SENTINEL) {\\n array[count] = currentAddress;\\n currentAddress = self.addressMap[currentAddress];\\n count++;\\n }\\n return array;\\n }\\n\\n /// @notice Removes every address from the list\\n /// @param self The Mapping struct that this function is attached to\\n function clearAll(Mapping storage self) internal {\\n address currentAddress = self.addressMap[SENTINEL];\\n while (currentAddress != address(0) && currentAddress != SENTINEL) {\\n address nextAddress = self.addressMap[currentAddress];\\n delete self.addressMap[currentAddress];\\n currentAddress = nextAddress;\\n }\\n self.addressMap[SENTINEL] = SENTINEL;\\n self.count = 0;\\n }\\n}\\n\",\"keccak256\":\"0x14a99407202bafc5988b8ea002afabac73c13f88372083cf381d447ef30edc85\",\"license\":\"GPL-3.0\"}},\"version\":1}",
"bytecode": "0x608060405234801561001057600080fd5b50600061001b61007e565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350610079600161008260201b61044d1760201c565b6100ea565b3390565b8054156100c5576040805162461bcd60e51b815260206004820152600c60248201526b105b1c9958591e481a5b9a5d60a21b604482015290519081900360640190fd5b60016000818152918101602052604090912080546001600160a01b0319169091179055565b610982806100f96000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c8063097a584f14610067578063715018a61461007c5780638da5cb5b14610084578063a28e6219146100a2578063d7d4796c146100b7578063f2fde38b146100ca575b600080fd5b61007a610075366004610836565b6100dd565b005b61007a6101d9565b61008c610285565b60405161009991906108a5565b60405180910390f35b6100aa610294565b60405161009991906108b9565b61007a6100c5366004610804565b6102a5565b61007a6100d83660046107e3565b61034b565b6100e56104b5565b6001600160a01b03166100f6610285565b6001600160a01b03161461013f576040805162461bcd60e51b8152602060048201819052602482015260008051602061092d833981519152604482015290519081900360640190fd5b60005b818110156101d45761017683838381811061015957fe5b905060200201602081019061016e91906107e3565b6001906104b9565b82828281811061018257fe5b905060200201602081019061019791906107e3565b6001600160a01b03167f59394a9dad6d755c0a4f06421118bb52b49ff946870e9ab26fe4547dd5c3d63260405160405180910390a2600101610142565b505050565b6101e16104b5565b6001600160a01b03166101f2610285565b6001600160a01b03161461023b576040805162461bcd60e51b8152602060048201819052602482015260008051602061092d833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b60606102a060016105cd565b905090565b6102ad6104b5565b6001600160a01b03166102be610285565b6001600160a01b031614610307576040805162461bcd60e51b8152602060048201819052602482015260008051602061092d833981519152604482015290519081900360640190fd5b610313600183836106b0565b6040516001600160a01b038216907f74ea0f566f4d31f3c79bf82475da668ddb523523351bd8349b65803c07f97e7a90600090a25050565b6103536104b5565b6001600160a01b0316610364610285565b6001600160a01b0316146103ad576040805162461bcd60e51b8152602060048201819052602482015260008051602061092d833981519152604482015290519081900360640190fd5b6001600160a01b0381166103f25760405162461bcd60e51b81526004018080602001828103825260268152602001806109076026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b805415610490576040805162461bcd60e51b815260206004820152600c60248201526b105b1c9958591e481a5b9a5d60a21b604482015290519081900360640190fd5b60016000818152918101602052604090912080546001600160a01b0319169091179055565b3390565b6001600160a01b0381166001148015906104db57506001600160a01b03811615155b61051e576040805162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b604482015290519081900360640190fd5b6001600160a01b038181166000908152600184016020526040902054161561057d576040805162461bcd60e51b815260206004820152600d60248201526c105b1c9958591e481859191959609a1b604482015290519081900360640190fd5b60016000818152838201602052604080822080546001600160a01b039586168085529284208054969091166001600160a01b03199687161790559183905281549093169092179091558154019055565b60606000826000015467ffffffffffffffff811180156105ec57600080fd5b50604051908082528060200260200182016040528015610616578160200160208202803683370190505b50600160008181529085016020526040812054919250906001600160a01b03165b6001600160a01b0381161580159061065957506001600160a01b038116600114155b156106a5578083838151811061066b57fe5b6001600160a01b03928316602091820292909201810191909152918116600090815260018088019093526040902054929091019116610637565b50909150505b919050565b6001600160a01b0381166001148015906106d257506001600160a01b03811615155b610715576040805162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b604482015290519081900360640190fd5b6001600160a01b03828116600090815260018501602052604090205481169082161461077e576040805162461bcd60e51b8152602060048201526013602482015272496e76616c696420707265764164647265737360681b604482015290519081900360640190fd5b6001600160a01b039081166000818152600185016020526040808220805495851683529082208054959094166001600160a01b03199586161790935552805490911690558054600019019055565b80356001600160a01b03811681146106ab57600080fd5b6000602082840312156107f4578081fd5b6107fd826107cc565b9392505050565b60008060408385031215610816578081fd5b61081f836107cc565b915061082d602084016107cc565b90509250929050565b60008060208385031215610848578182fd5b823567ffffffffffffffff8082111561085f578384fd5b818501915085601f830112610872578384fd5b813581811115610880578485fd5b8660208083028501011115610893578485fd5b60209290920196919550909350505050565b6001600160a01b0391909116815260200190565b6020808252825182820181905260009190848201906040850190845b818110156108fa5783516001600160a01b0316835292840192918401916001016108d5565b5090969550505050505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a264697066735822122020633d4addc1055a60ad969342c0bf01d94c9daeb550ddcdb59d96947bb3a4df64736f6c63430007060033",
"deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100625760003560e01c8063097a584f14610067578063715018a61461007c5780638da5cb5b14610084578063a28e6219146100a2578063d7d4796c146100b7578063f2fde38b146100ca575b600080fd5b61007a610075366004610836565b6100dd565b005b61007a6101d9565b61008c610285565b60405161009991906108a5565b60405180910390f35b6100aa610294565b60405161009991906108b9565b61007a6100c5366004610804565b6102a5565b61007a6100d83660046107e3565b61034b565b6100e56104b5565b6001600160a01b03166100f6610285565b6001600160a01b03161461013f576040805162461bcd60e51b8152602060048201819052602482015260008051602061092d833981519152604482015290519081900360640190fd5b60005b818110156101d45761017683838381811061015957fe5b905060200201602081019061016e91906107e3565b6001906104b9565b82828281811061018257fe5b905060200201602081019061019791906107e3565b6001600160a01b03167f59394a9dad6d755c0a4f06421118bb52b49ff946870e9ab26fe4547dd5c3d63260405160405180910390a2600101610142565b505050565b6101e16104b5565b6001600160a01b03166101f2610285565b6001600160a01b03161461023b576040805162461bcd60e51b8152602060048201819052602482015260008051602061092d833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b60606102a060016105cd565b905090565b6102ad6104b5565b6001600160a01b03166102be610285565b6001600160a01b031614610307576040805162461bcd60e51b8152602060048201819052602482015260008051602061092d833981519152604482015290519081900360640190fd5b610313600183836106b0565b6040516001600160a01b038216907f74ea0f566f4d31f3c79bf82475da668ddb523523351bd8349b65803c07f97e7a90600090a25050565b6103536104b5565b6001600160a01b0316610364610285565b6001600160a01b0316146103ad576040805162461bcd60e51b8152602060048201819052602482015260008051602061092d833981519152604482015290519081900360640190fd5b6001600160a01b0381166103f25760405162461bcd60e51b81526004018080602001828103825260268152602001806109076026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b805415610490576040805162461bcd60e51b815260206004820152600c60248201526b105b1c9958591e481a5b9a5d60a21b604482015290519081900360640190fd5b60016000818152918101602052604090912080546001600160a01b0319169091179055565b3390565b6001600160a01b0381166001148015906104db57506001600160a01b03811615155b61051e576040805162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b604482015290519081900360640190fd5b6001600160a01b038181166000908152600184016020526040902054161561057d576040805162461bcd60e51b815260206004820152600d60248201526c105b1c9958591e481859191959609a1b604482015290519081900360640190fd5b60016000818152838201602052604080822080546001600160a01b039586168085529284208054969091166001600160a01b03199687161790559183905281549093169092179091558154019055565b60606000826000015467ffffffffffffffff811180156105ec57600080fd5b50604051908082528060200260200182016040528015610616578160200160208202803683370190505b50600160008181529085016020526040812054919250906001600160a01b03165b6001600160a01b0381161580159061065957506001600160a01b038116600114155b156106a5578083838151811061066b57fe5b6001600160a01b03928316602091820292909201810191909152918116600090815260018088019093526040902054929091019116610637565b50909150505b919050565b6001600160a01b0381166001148015906106d257506001600160a01b03811615155b610715576040805162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b604482015290519081900360640190fd5b6001600160a01b03828116600090815260018501602052604090205481169082161461077e576040805162461bcd60e51b8152602060048201526013602482015272496e76616c696420707265764164647265737360681b604482015290519081900360640190fd5b6001600160a01b039081166000818152600185016020526040808220805495851683529082208054959094166001600160a01b03199586161790935552805490911690558054600019019055565b80356001600160a01b03811681146106ab57600080fd5b6000602082840312156107f4578081fd5b6107fd826107cc565b9392505050565b60008060408385031215610816578081fd5b61081f836107cc565b915061082d602084016107cc565b90509250929050565b60008060208385031215610848578182fd5b823567ffffffffffffffff8082111561085f578384fd5b818501915085601f830112610872578384fd5b813581811115610880578485fd5b8660208083028501011115610893578485fd5b60209290920196919550909350505050565b6001600160a01b0391909116815260200190565b6020808252825182820181905260009190848201906040850190845b818110156108fa5783516001600160a01b0316835292840192918401916001016108d5565b5090969550505050505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a264697066735822122020633d4addc1055a60ad969342c0bf01d94c9daeb550ddcdb59d96947bb3a4df64736f6c63430007060033",
"devdoc": {
"kind": "dev",
"methods": {
"addPrizePools(address[])": {
"params": {
"_prizePools": "Array of prizePool addresses"
}
},
"getPrizePools()": {
"returns": {
"_0": "Array of prize pool addresses"
}
},
"owner()": {
"details": "Returns the address of the current owner."
},
"removePrizePool(address,address)": {
"params": {
"_previousPrizePool": "The address positionally localed before the address that will be deleted. This may be the SENTINEL address if the list contains one prize pool address",
"_prizePool": "The address to remove from the linked list. "
}
},
"renounceOwnership()": {
"details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."
},
"transferOwnership(address)": {
"details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
}
},
"version": 1
},
"userdoc": {
"kind": "user",
"methods": {
"addPrizePools(address[])": {
"notice": "Adds addresses to the linked list. Will revert if the address is already in the list. Can only be called by the Registry owner."
},
"getPrizePools()": {
"notice": "Returns an array of all prizePools in the linked list"
},
"removePrizePool(address,address)": {
"notice": "Removes an address from the linked list. Can only be called by the Registry owner."
}
},
"notice": "A registry to hold Prize Pool addresses. Underlying data structure is a singly linked list. ",
"version": 1
},
"storageLayout": {
"storage": [
{
"astId": 7,
"contract": "contracts/PrizePoolRegistry.sol:PrizePoolRegistry",
"label": "_owner",
"offset": 0,
"slot": "0",
"type": "t_address"
},
{
"astId": 156,
"contract": "contracts/PrizePoolRegistry.sol:PrizePoolRegistry",
"label": "prizePoolList",
"offset": 0,
"slot": "1",
"type": "t_struct(Mapping)606_storage"
}
],
"types": {
"t_address": {
"encoding": "inplace",
"label": "address",
"numberOfBytes": "20"
},
"t_mapping(t_address,t_address)": {
"encoding": "mapping",
"key": "t_address",
"label": "mapping(address => address)",
"numberOfBytes": "32",
"value": "t_address"
},
"t_struct(Mapping)606_storage": {
"encoding": "inplace",
"label": "struct MappedSinglyLinkedList.Mapping",
"members": [
{
"astId": 601,
"contract": "contracts/PrizePoolRegistry.sol:PrizePoolRegistry",
"label": "count",
"offset": 0,
"slot": "0",
"type": "t_uint256"
},
{
"astId": 605,
"contract": "contracts/PrizePoolRegistry.sol:PrizePoolRegistry",
"label": "addressMap",
"offset": 0,
"slot": "1",
"type": "t_mapping(t_address,t_address)"
}
],
"numberOfBytes": "64"
},
"t_uint256": {
"encoding": "inplace",
"label": "uint256",
"numberOfBytes": "32"
}
}
}
}