Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 1,077 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Perform Upkeep | 16970628 | 599 days ago | IN | 0 ETH | 0.0221352 | ||||
Perform Upkeep | 16970530 | 599 days ago | IN | 0 ETH | 0.01475914 | ||||
Perform Upkeep | 16957561 | 601 days ago | IN | 0 ETH | 0.01157087 | ||||
Perform Upkeep | 16957509 | 601 days ago | IN | 0 ETH | 0.00487905 | ||||
Perform Upkeep | 16956274 | 601 days ago | IN | 0 ETH | 0.00953361 | ||||
Perform Upkeep | 16956251 | 601 days ago | IN | 0 ETH | 0.00548893 | ||||
Perform Upkeep | 16950548 | 602 days ago | IN | 0 ETH | 0.00822146 | ||||
Perform Upkeep | 16950497 | 602 days ago | IN | 0 ETH | 0.00637326 | ||||
Perform Upkeep | 16949262 | 602 days ago | IN | 0 ETH | 0.01673158 | ||||
Perform Upkeep | 16949193 | 602 days ago | IN | 0 ETH | 0.01073392 | ||||
Perform Upkeep | 16942164 | 603 days ago | IN | 0 ETH | 0.01493833 | ||||
Perform Upkeep | 16942049 | 603 days ago | IN | 0 ETH | 0.00905674 | ||||
Perform Upkeep | 16935178 | 604 days ago | IN | 0 ETH | 0.01609872 | ||||
Perform Upkeep | 16935043 | 604 days ago | IN | 0 ETH | 0.01174022 | ||||
Perform Upkeep | 16927996 | 605 days ago | IN | 0 ETH | 0.01902027 | ||||
Perform Upkeep | 16927860 | 605 days ago | IN | 0 ETH | 0.0103314 | ||||
Perform Upkeep | 16920913 | 606 days ago | IN | 0 ETH | 0.01841404 | ||||
Perform Upkeep | 16920703 | 606 days ago | IN | 0 ETH | 0.00905674 | ||||
Perform Upkeep | 16907716 | 608 days ago | IN | 0 ETH | 0.00809983 | ||||
Perform Upkeep | 16907696 | 608 days ago | IN | 0 ETH | 0.00457411 | ||||
Perform Upkeep | 16906489 | 608 days ago | IN | 0 ETH | 0.01001347 | ||||
Perform Upkeep | 16906455 | 608 days ago | IN | 0 ETH | 0.00737957 | ||||
Perform Upkeep | 16900750 | 609 days ago | IN | 0 ETH | 0.00870094 | ||||
Perform Upkeep | 16900643 | 609 days ago | IN | 0 ETH | 0.00487905 | ||||
Perform Upkeep | 16899390 | 609 days ago | IN | 0 ETH | 0.01514224 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
PrizeStrategyUpkeep
Compiler Version
v0.7.6+commit.7338295f
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.7.6; pragma experimental ABIEncoderV2; import "./interfaces/KeeperCompatibleInterface.sol"; import "./interfaces/PeriodicPrizeStrategyInterface.sol"; import "./interfaces/PrizePoolRegistryInterface.sol"; import "./interfaces/PrizePoolInterface.sol"; import "./utils/SafeAwardable.sol"; import "@pooltogether/pooltogether-generic-registry/contracts/AddressRegistry.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/utils/Pausable.sol"; ///@notice Contract implements Chainlink's Upkeep system interface, automating the upkeep of PrizePools in the associated registry. contract PrizeStrategyUpkeep is KeeperCompatibleInterface, Ownable, Pausable { /// @notice Ensures the target address is a prize strategy (has both canStartAward and canCompleteAward) using SafeAwardable for address; /// @notice Stores the maximum number of prize strategies to upkeep. AddressRegistry public prizePoolRegistry; /// @notice Stores the maximum number of prize strategies to upkeep. /// @dev Set accordingly to prevent out-of-gas transactions during calls to performUpkeep uint256 public upkeepBatchSize; /// @notice Stores the last upkeep block number uint256 public upkeepLastUpkeepBlockNumber; /// @notice Stores the minimum block interval between permitted performUpkeep() calls uint256 public upkeepMinimumBlockInterval; /// @notice Emitted when the upkeepBatchSize has been changed event UpkeepBatchSizeUpdated(uint256 upkeepBatchSize); /// @notice Emitted when the prize pool registry has been changed event UpkeepPrizePoolRegistryUpdated(AddressRegistry prizePoolRegistry); /// @notice Emitted when the Upkeep Minimum Block interval is updated event UpkeepMinimumBlockIntervalUpdated(uint256 upkeepMinimumBlockInterval); /// @notice Emitted when the Upkeep has been performed event UpkeepPerformed(uint256 startAwardsPerformed, uint256 completeAwardsPerformed); constructor(AddressRegistry _prizePoolRegistry, uint256 _upkeepBatchSize, uint256 _upkeepMinimumBlockInterval) public Ownable() { prizePoolRegistry = _prizePoolRegistry; emit UpkeepPrizePoolRegistryUpdated(_prizePoolRegistry); upkeepBatchSize = _upkeepBatchSize; emit UpkeepBatchSizeUpdated(_upkeepBatchSize); upkeepMinimumBlockInterval = _upkeepMinimumBlockInterval; emit UpkeepMinimumBlockIntervalUpdated(_upkeepMinimumBlockInterval); } /// @notice Checks if PrizePools require upkeep. Call in a static manner every block by the Chainlink Upkeep network. /// @param checkData Not used in this implementation. /// @return upkeepNeeded as true if performUpkeep() needs to be called, false otherwise. performData returned empty. function checkUpkeep(bytes calldata checkData) external view override returns (bool upkeepNeeded, bytes memory performData) { if(paused()) return (false, performData); if(block.number < upkeepLastUpkeepBlockNumber + upkeepMinimumBlockInterval){ return (false, performData); } address[] memory prizePools = prizePoolRegistry.getAddresses(); // check if canStartAward() for(uint256 pool = 0; pool < prizePools.length; pool++){ address prizeStrategy = PrizePoolInterface(prizePools[pool]).prizeStrategy(); if(prizeStrategy.canStartAward()){ return (true, performData); } } // check if canCompleteAward() for(uint256 pool = 0; pool < prizePools.length; pool++){ address prizeStrategy = PrizePoolInterface(prizePools[pool]).prizeStrategy(); if(prizeStrategy.canCompleteAward()){ return (true, performData); } } return (false, performData); } /// @notice Performs upkeep on the prize pools. /// @param performData Not used in this implementation. function performUpkeep(bytes calldata performData) external override whenNotPaused { uint256 _upkeepLastUpkeepBlockNumber = upkeepLastUpkeepBlockNumber; // SLOAD require(block.number > _upkeepLastUpkeepBlockNumber + upkeepMinimumBlockInterval, "PrizeStrategyUpkeep::minimum block interval not reached"); address[] memory prizePools = prizePoolRegistry.getAddresses(); uint256 batchCounter = upkeepBatchSize; //counter for batch uint256 poolIndex = 0; uint256 startAwardCounter = 0; uint256 completeAwardCounter = 0; uint256 updatedUpkeepBlockNumber; while(batchCounter > 0 && poolIndex < prizePools.length){ address prizeStrategy = PrizePoolInterface(prizePools[poolIndex]).prizeStrategy(); if(prizeStrategy.canStartAward()){ PeriodicPrizeStrategyInterface(prizeStrategy).startAward(); startAwardCounter++; batchCounter--; } else if(prizeStrategy.canCompleteAward()){ PeriodicPrizeStrategyInterface(prizeStrategy).completeAward(); completeAwardCounter++; batchCounter--; } poolIndex++; } if(startAwardCounter > 0 || completeAwardCounter > 0){ updatedUpkeepBlockNumber = block.number; } // update if required if(_upkeepLastUpkeepBlockNumber != updatedUpkeepBlockNumber){ upkeepLastUpkeepBlockNumber = updatedUpkeepBlockNumber; //SSTORE emit UpkeepPerformed(startAwardCounter, completeAwardCounter); } } /// @notice Updates the upkeepBatchSize which is set to prevent out of gas situations /// @param _upkeepBatchSize Amount upkeepBatchSize will be set to function updateUpkeepBatchSize(uint256 _upkeepBatchSize) external onlyOwner { upkeepBatchSize = _upkeepBatchSize; emit UpkeepBatchSizeUpdated(_upkeepBatchSize); } /// @notice Updates the prize pool registry /// @param _prizePoolRegistry New registry address function updatePrizePoolRegistry(AddressRegistry _prizePoolRegistry) external onlyOwner { prizePoolRegistry = _prizePoolRegistry; emit UpkeepPrizePoolRegistryUpdated(_prizePoolRegistry); } /// @notice Updates the upkeep minimum interval blocks /// @param _upkeepMinimumBlockInterval New upkeepMinimumBlockInterval function updateUpkeepMinimumBlockInterval(uint256 _upkeepMinimumBlockInterval) external onlyOwner { upkeepMinimumBlockInterval = _upkeepMinimumBlockInterval; emit UpkeepMinimumBlockIntervalUpdated(_upkeepMinimumBlockInterval); } /// @notice Pauses the contract. Only callable by owner. function pause() external onlyOwner { _pause(); } /// @notice Unpauses the contract. Only callable by owner. function unpause() external onlyOwner { _unpause(); } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev 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. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; import "./Context.sol"; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor () internal { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.12 <=0.7.6; import "@openzeppelin/contracts/access/Ownable.sol"; import "./utils/MappedSinglyLinkedList.sol"; ///@notice A registry to hold Contract addresses. Underlying data structure is a singly linked list. contract AddressRegistry is Ownable { using MappedSinglyLinkedList for MappedSinglyLinkedList.Mapping; MappedSinglyLinkedList.Mapping internal addressList; /// @notice Emmitted when a contract has been added to the registry event AddressAdded(address indexed _address); /// @notice Emmitted when a contract has been removed to the registry event AddressRemoved(address indexed _address); /// @notice Emitted when all the registry addresses are cleared event AllAddressesCleared(); /// @notice Storage field for what type of contract this Registry is storing string public addressType; /// @notice Contract constructor sets addressType, intializes list and transfers ownership /// @param _addressType The type of contracts stored in this registry /// @param _owner The address to set as owner of the contract constructor(string memory _addressType, address _owner) Ownable() { addressType = _addressType; addressList.initialize(); transferOwnership(_owner); } /// @notice Returns an array of all contract addresses in the linked list /// @return Array of contract addresses function getAddresses() view external returns(address[] memory) { return addressList.addressArray(); } /// @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. /// @param _addresses Array of contract addresses to be added function addAddresses(address[] calldata _addresses) public onlyOwner { for(uint256 _address = 0; _address < _addresses.length; _address++ ){ addressList.addAddress(_addresses[_address]); emit AddressAdded(_addresses[_address]); } } /// @notice Removes an address from the linked list. Can only be called by the Registry owner. /// @param _previousContract The address positionally located before the address that will be deleted. This may be the SENTINEL address if the list contains one contract address /// @param _address The address to remove from the linked list. function removeAddress(address _previousContract, address _address) public onlyOwner { addressList.removeAddress(_previousContract, _address); emit AddressRemoved(_address); } /// @notice Removes every address from the list function clearAll() public onlyOwner { addressList.clearAll(); emit AllAddressesCleared(); } /// @notice Determines whether the list contains the given address /// @param _addr The address to check /// @return True if the address is contained, false otherwise. function contains(address _addr) public returns (bool) { return addressList.contains(_addr); } /// @notice Gives the address at the start of the list /// @return The address at the start of the list function start() public view returns (address) { return addressList.start(); } /// @notice Exposes the internal next() iterator /// @param current The current address /// @return Returns the next address in the list function next(address current) public view returns (address) { return addressList.next(current); } /// @notice Exposes the end of the list /// @return The sentinel address function end() public view returns (address) { return addressList.end(); } }
// SPDX-License-Identifier: GPL-3.0 pragma solidity ^0.7.6; /// @notice An efficient implementation of a singly linked list of addresses /// @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. library MappedSinglyLinkedList { /// @notice The special value address used to denote the end of the list address public constant SENTINEL = address(0x1); /// @notice The data structure to use for the list. struct Mapping { uint256 count; mapping(address => address) addressMap; } /// @notice Initializes the list. /// @dev It is important that this is called so that the SENTINEL is correctly setup. function initialize(Mapping storage self) internal { require(self.count == 0, "Already init"); self.addressMap[SENTINEL] = SENTINEL; } function start(Mapping storage self) internal view returns (address) { return self.addressMap[SENTINEL]; } function next(Mapping storage self, address current) internal view returns (address) { return self.addressMap[current]; } function end(Mapping storage) internal pure returns (address) { return SENTINEL; } function addAddresses(Mapping storage self, address[] memory addresses) internal { for (uint256 i = 0; i < addresses.length; i++) { addAddress(self, addresses[i]); } } /// @notice Adds an address to the front of the list. /// @param self The Mapping struct that this function is attached to /// @param newAddress The address to shift to the front of the list function addAddress(Mapping storage self, address newAddress) internal { require(newAddress != SENTINEL && newAddress != address(0), "Invalid address"); require(self.addressMap[newAddress] == address(0), "Already added"); self.addressMap[newAddress] = self.addressMap[SENTINEL]; self.addressMap[SENTINEL] = newAddress; self.count = self.count + 1; } /// @notice Removes an address from the list /// @param self The Mapping struct that this function is attached to /// @param prevAddress The address that precedes the address to be removed. This may be the SENTINEL if at the start. /// @param addr The address to remove from the list. function removeAddress(Mapping storage self, address prevAddress, address addr) internal { require(addr != SENTINEL && addr != address(0), "Invalid address"); require(self.addressMap[prevAddress] == addr, "Invalid prevAddress"); self.addressMap[prevAddress] = self.addressMap[addr]; delete self.addressMap[addr]; self.count = self.count - 1; } /// @notice Determines whether the list contains the given address /// @param self The Mapping struct that this function is attached to /// @param addr The address to check /// @return True if the address is contained, false otherwise. function contains(Mapping storage self, address addr) internal view returns (bool) { return addr != SENTINEL && addr != address(0) && self.addressMap[addr] != address(0); } /// @notice Returns an address array of all the addresses in this list /// @dev Contains a for loop, so complexity is O(n) wrt the list size /// @param self The Mapping struct that this function is attached to /// @return An array of all the addresses function addressArray(Mapping storage self) internal view returns (address[] memory) { address[] memory array = new address[](self.count); uint256 count; address currentAddress = self.addressMap[SENTINEL]; while (currentAddress != address(0) && currentAddress != SENTINEL) { array[count] = currentAddress; currentAddress = self.addressMap[currentAddress]; count++; } return array; } /// @notice Removes every address from the list /// @param self The Mapping struct that this function is attached to function clearAll(Mapping storage self) internal { address currentAddress = self.addressMap[SENTINEL]; while (currentAddress != address(0) && currentAddress != SENTINEL) { address nextAddress = self.addressMap[currentAddress]; delete self.addressMap[currentAddress]; currentAddress = nextAddress; } self.addressMap[SENTINEL] = SENTINEL; self.count = 0; } }
// SPDX-License-Identifier: MIT pragma solidity 0.7.6; interface KeeperCompatibleInterface { /** * @notice method that is simulated by the keepers to see if any work actually * needs to be performed. This method does does not actually need to be * executable, and since it is only ever simulated it can consume lots of gas. * @dev To ensure that it is never called, you may want to add the * cannotExecute modifier from KeeperBase to your implementation of this * method. * @param checkData specified in the upkeep registration so it is always the * same for a registered upkeep. This can easily be broken down into specific * arguments using `abi.decode`, so multiple upkeeps can be registered on the * same contract and easily differentiated by the contract. * @return upkeepNeeded boolean to indicate whether the keeper should call * performUpkeep or not. * @return performData bytes that the keeper should call performUpkeep with, if * upkeep is needed. If you would like to encode data to decode later, try * `abi.encode`. */ function checkUpkeep( bytes calldata checkData ) external returns ( bool upkeepNeeded, bytes memory performData ); /** * @notice method that is actually executed by the keepers, via the registry. * The data returned by the checkUpkeep simulation will be passed into * this method to actually be executed. * @dev The input to this method should not be trusted, and the caller of the * method should not even be restricted to any single registry. Anyone should * be able call it, and the input should be validated, there is no guarantee * that the data passed in is the performData returned from checkUpkeep. This * could happen due to malicious keepers, racing keepers, or simply a state * change while the performUpkeep transaction is waiting for confirmation. * Always validate the data passed in. * @param performData is the data which was passed back from the checkData * simulation. If it is encoded, it can easily be decoded into other types by * calling `abi.decode`. This data should not be trusted, and should be * validated against the contract's current state. */ function performUpkeep( bytes calldata performData ) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.7.6; interface PeriodicPrizeStrategyInterface { function startAward() external; function completeAward() external; function canStartAward() external view returns (bool); function canCompleteAward() external view returns (bool); }
// SPDX-License-Identifier: MIT pragma solidity ^0.7.6; interface PrizePoolInterface { function prizeStrategy() external view returns (address); }
// SPDX-License-Identifier: MIT pragma solidity ^0.7.6; interface PrizePoolRegistryInterface { function getPrizePools() external view returns(address[] memory); }
// SPDX-License-Identifier: MIT pragma solidity ^0.7.6; pragma experimental ABIEncoderV2; import "../interfaces/PeriodicPrizeStrategyInterface.sol"; ///@notice Wrapper library for address that checks that the address supports canStartAward() and canCompleteAward() before calling library SafeAwardable{ ///@return canCompleteAward returns true if the function is supported AND can be completed function canCompleteAward(address self) internal view returns (bool canCompleteAward){ if(supportsFunction(self, PeriodicPrizeStrategyInterface.canCompleteAward.selector)){ return PeriodicPrizeStrategyInterface(self).canCompleteAward(); } return false; } ///@return canStartAward returns true if the function is supported AND can be started, false otherwise function canStartAward(address self) internal view returns (bool canStartAward){ if(supportsFunction(self, PeriodicPrizeStrategyInterface.canStartAward.selector)){ return PeriodicPrizeStrategyInterface(self).canStartAward(); } return false; } ///@param selector is the function selector to check against ///@return success returns true if function is implemented, false otherwise function supportsFunction(address self, bytes4 selector) internal view returns (bool success){ bytes memory encodedParams = abi.encodeWithSelector(selector); (bool success, bytes memory result) = self.staticcall{ gas: 30000 }(encodedParams); if (result.length < 32){ return (false); } if(!success && result.length > 0){ revert(string(result)); } return (success); } }
{ "evmVersion": "istanbul", "libraries": {}, "metadata": { "bytecodeHash": "ipfs", "useLiteralContent": true }, "optimizer": { "enabled": true, "runs": 200 }, "remappings": [], "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract AddressRegistry","name":"_prizePoolRegistry","type":"address"},{"internalType":"uint256","name":"_upkeepBatchSize","type":"uint256"},{"internalType":"uint256","name":"_upkeepMinimumBlockInterval","type":"uint256"}],"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":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"upkeepBatchSize","type":"uint256"}],"name":"UpkeepBatchSizeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"upkeepMinimumBlockInterval","type":"uint256"}],"name":"UpkeepMinimumBlockIntervalUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"startAwardsPerformed","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"completeAwardsPerformed","type":"uint256"}],"name":"UpkeepPerformed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract AddressRegistry","name":"prizePoolRegistry","type":"address"}],"name":"UpkeepPrizePoolRegistryUpdated","type":"event"},{"inputs":[{"internalType":"bytes","name":"checkData","type":"bytes"}],"name":"checkUpkeep","outputs":[{"internalType":"bool","name":"upkeepNeeded","type":"bool"},{"internalType":"bytes","name":"performData","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"performData","type":"bytes"}],"name":"performUpkeep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"prizePoolRegistry","outputs":[{"internalType":"contract AddressRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract AddressRegistry","name":"_prizePoolRegistry","type":"address"}],"name":"updatePrizePoolRegistry","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_upkeepBatchSize","type":"uint256"}],"name":"updateUpkeepBatchSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_upkeepMinimumBlockInterval","type":"uint256"}],"name":"updateUpkeepMinimumBlockInterval","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"upkeepBatchSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"upkeepLastUpkeepBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"upkeepMinimumBlockInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040516200144c3803806200144c833981016040819052620000349162000177565b60006200004062000173565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506000805460ff60a01b19169055600180546001600160a01b0319166001600160a01b0385161790556040517f3945779a0b94143e19ceb0254d7ff1fbe6c4265b6328031e7cc1274c2b8d77c790620000e4908590620001ba565b60405180910390a160028290556040517fb722c0a05d55d91208263d973f28b92fc9599d46d7c490ff2efae89d8f3ddfe89062000123908490620001ce565b60405180910390a160048190556040517f7a5354403e343fa02d40d3906b696f894d8b73fb8a898b07d7414f29866ef5d39062000162908390620001ce565b60405180910390a1505050620001d7565b3390565b6000806000606084860312156200018c578283fd5b83516001600160a01b0381168114620001a3578384fd5b602085015160409095015190969495509392505050565b6001600160a01b0391909116815260200190565b90815260200190565b61126580620001e76000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636e04ff0d11610097578063ad06337f11610066578063ad06337f146101be578063ba450a1a146101c6578063f2085170146101ce578063f2fde38b146101e1576100f5565b80636e04ff0d14610178578063715018a6146101995780638456cb59146101a15780638da5cb5b146101a9576100f5565b80634585e33b116100d35780634585e33b146101355780634fd47a76146101485780635c975abb146101505780635fdc3b5814610165576100f5565b80632dc41821146100fa5780633f4ba83a1461011857806343d73f2d14610122575b600080fd5b6101026101f4565b60405161010f919061118a565b60405180910390f35b6101206101fa565b005b610120610130366004610ef7565b610266565b61012061014336600461100b565b61031e565b61010261062c565b610158610632565b60405161010f91906110ec565b610120610173366004611078565b610642565b61018b61018636600461100b565b6106d9565b60405161010f9291906110f7565b61012061091b565b6101206109c7565b6101b1610a31565b60405161010f91906110d8565b6101b1610a40565b610102610a4f565b6101206101dc366004611078565b610a55565b6101206101ef366004610ef7565b610aec565b60025481565b610202610bee565b6001600160a01b0316610213610a31565b6001600160a01b03161461025c576040805162461bcd60e51b81526020600482018190526024820152600080516020611210833981519152604482015290519081900360640190fd5b610264610bf2565b565b61026e610bee565b6001600160a01b031661027f610a31565b6001600160a01b0316146102c8576040805162461bcd60e51b81526020600482018190526024820152600080516020611210833981519152604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0383161790556040517f3945779a0b94143e19ceb0254d7ff1fbe6c4265b6328031e7cc1274c2b8d77c7906103139083906110d8565b60405180910390a150565b610326610632565b1561036b576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6003546004548101431161039a5760405162461bcd60e51b81526004016103919061112d565b60405180910390fd5b600154604080516351cfd60960e11b815290516000926001600160a01b03169163a39fac129160048083019286929190829003018186803b1580156103de57600080fd5b505afa1580156103f2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261041a9190810190610f36565b60025490915060008080805b6000851180156104365750855184105b156105c357600086858151811061044957fe5b60200260200101516001600160a01b03166398bf3eb66040518163ffffffff1660e01b815260040160206040518083038186803b15801561048957600080fd5b505afa15801561049d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c19190610f1a565b90506104d5816001600160a01b0316610c95565b1561053f57806001600160a01b031663b9ee1e056040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561051557600080fd5b505af1158015610529573d6000803e3d6000fd5b50506000199097019650506001909301926105b7565b610551816001600160a01b0316610d2e565b156105b757806001600160a01b031663dfb2f13b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561059157600080fd5b505af11580156105a5573d6000803e3d6000fd5b50506000199097019650506001909201915b50600190930192610426565b60008311806105d25750600082115b156105da5750435b8087146106215760038190556040517f9fbc2aeb5bf6200e5499d345acddf1dd462c37becb4673d661250b89ced7ff6a906106189085908590611193565b60405180910390a15b505050505050505050565b60045481565b600054600160a01b900460ff1690565b61064a610bee565b6001600160a01b031661065b610a31565b6001600160a01b0316146106a4576040805162461bcd60e51b81526020600482018190526024820152600080516020611210833981519152604482015290519081900360640190fd5b60028190556040517fb722c0a05d55d91208263d973f28b92fc9599d46d7c490ff2efae89d8f3ddfe89061031390839061118a565b600060606106e5610632565b156106f35760009150610914565b6004546003540143101561070a5760009150610914565b600154604080516351cfd60960e11b815290516000926001600160a01b03169163a39fac129160048083019286929190829003018186803b15801561074e57600080fd5b505afa158015610762573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261078a9190810190610f36565b905060005b815181101561084c5760008282815181106107a657fe5b60200260200101516001600160a01b03166398bf3eb66040518163ffffffff1660e01b815260040160206040518083038186803b1580156107e657600080fd5b505afa1580156107fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081e9190610f1a565b9050610832816001600160a01b0316610c95565b156108435760019450505050610914565b5060010161078f565b5060005b815181101561090d57600082828151811061086757fe5b60200260200101516001600160a01b03166398bf3eb66040518163ffffffff1660e01b815260040160206040518083038186803b1580156108a757600080fd5b505afa1580156108bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108df9190610f1a565b90506108f3816001600160a01b0316610d2e565b156109045760019450505050610914565b50600101610850565b5060009250505b9250929050565b610923610bee565b6001600160a01b0316610934610a31565b6001600160a01b03161461097d576040805162461bcd60e51b81526020600482018190526024820152600080516020611210833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6109cf610bee565b6001600160a01b03166109e0610a31565b6001600160a01b031614610a29576040805162461bcd60e51b81526020600482018190526024820152600080516020611210833981519152604482015290519081900360640190fd5b610264610d7f565b6000546001600160a01b031690565b6001546001600160a01b031681565b60035481565b610a5d610bee565b6001600160a01b0316610a6e610a31565b6001600160a01b031614610ab7576040805162461bcd60e51b81526020600482018190526024820152600080516020611210833981519152604482015290519081900360640190fd5b60048190556040517f7a5354403e343fa02d40d3906b696f894d8b73fb8a898b07d7414f29866ef5d39061031390839061118a565b610af4610bee565b6001600160a01b0316610b05610a31565b6001600160a01b031614610b4e576040805162461bcd60e51b81526020600482018190526024820152600080516020611210833981519152604482015290519081900360640190fd5b6001600160a01b038116610b935760405162461bcd60e51b81526004018080602001828103825260268152602001806111ea6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b610bfa610632565b610c42576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b6000805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa610c78610bee565b604080516001600160a01b039092168252519081900360200190a1565b6000610ca8826343b7ae3f60e11b610e08565b15610d2557816001600160a01b031663876f5c7e6040518163ffffffff1660e01b815260040160206040518083038186803b158015610ce657600080fd5b505afa158015610cfa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1e9190610feb565b9050610d29565b5060005b919050565b6000610d4182636a74f10760e01b610e08565b15610d2557816001600160a01b0316636a74f1076040518163ffffffff1660e01b815260040160206040518083038186803b158015610ce657600080fd5b610d87610632565b15610dcc576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610c78610bee565b60408051600481526024810182526020810180516001600160e01b03166001600160e01b03198516179052905160009190829081906001600160a01b0387169061753090610e579086906110bc565b6000604051808303818686fa925050503d8060008114610e93576040519150601f19603f3d011682016040523d82523d6000602084013e610e98565b606091505b5091509150602081511015610eb35760009350505050610ee6565b81158015610ec2575060008151115b15610ee1578060405162461bcd60e51b8152600401610391919061111a565b509150505b92915050565b8051610d29816111d1565b600060208284031215610f08578081fd5b8135610f13816111d1565b9392505050565b600060208284031215610f2b578081fd5b8151610f13816111d1565b60006020808385031215610f48578182fd5b825167ffffffffffffffff80821115610f5f578384fd5b818501915085601f830112610f72578384fd5b815181811115610f7e57fe5b83810260405185828201018181108582111715610f9757fe5b604052828152858101935084860182860187018a1015610fb5578788fd5b8795505b83861015610fde57610fca81610eec565b855260019590950194938601938601610fb9565b5098975050505050505050565b600060208284031215610ffc578081fd5b81518015158114610f13578182fd5b6000806020838503121561101d578081fd5b823567ffffffffffffffff80821115611034578283fd5b818501915085601f830112611047578283fd5b813581811115611055578384fd5b866020828501011115611066578384fd5b60209290920196919550909350505050565b600060208284031215611089578081fd5b5035919050565b600081518084526110a88160208601602086016111a1565b601f01601f19169290920160200192915050565b600082516110ce8184602087016111a1565b9190910192915050565b6001600160a01b0391909116815260200190565b901515815260200190565b60008315158252604060208301526111126040830184611090565b949350505050565b600060208252610f136020830184611090565b60208082526037908201527f5072697a65537472617465677955706b6565703a3a6d696e696d756d20626c6f60408201527f636b20696e74657276616c206e6f742072656163686564000000000000000000606082015260800190565b90815260200190565b918252602082015260400190565b60005b838110156111bc5781810151838201526020016111a4565b838111156111cb576000848401525b50505050565b6001600160a01b03811681146111e657600080fd5b5056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a2646970667358221220f0b1ac0ffb865fa3077e5790062f9c7974854fa2bc8e12a55accad505875155064736f6c6343000706003300000000000000000000000034733851e2047f8d0e1aa91124a6f9eadc54d2530000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000f
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100f55760003560e01c80636e04ff0d11610097578063ad06337f11610066578063ad06337f146101be578063ba450a1a146101c6578063f2085170146101ce578063f2fde38b146101e1576100f5565b80636e04ff0d14610178578063715018a6146101995780638456cb59146101a15780638da5cb5b146101a9576100f5565b80634585e33b116100d35780634585e33b146101355780634fd47a76146101485780635c975abb146101505780635fdc3b5814610165576100f5565b80632dc41821146100fa5780633f4ba83a1461011857806343d73f2d14610122575b600080fd5b6101026101f4565b60405161010f919061118a565b60405180910390f35b6101206101fa565b005b610120610130366004610ef7565b610266565b61012061014336600461100b565b61031e565b61010261062c565b610158610632565b60405161010f91906110ec565b610120610173366004611078565b610642565b61018b61018636600461100b565b6106d9565b60405161010f9291906110f7565b61012061091b565b6101206109c7565b6101b1610a31565b60405161010f91906110d8565b6101b1610a40565b610102610a4f565b6101206101dc366004611078565b610a55565b6101206101ef366004610ef7565b610aec565b60025481565b610202610bee565b6001600160a01b0316610213610a31565b6001600160a01b03161461025c576040805162461bcd60e51b81526020600482018190526024820152600080516020611210833981519152604482015290519081900360640190fd5b610264610bf2565b565b61026e610bee565b6001600160a01b031661027f610a31565b6001600160a01b0316146102c8576040805162461bcd60e51b81526020600482018190526024820152600080516020611210833981519152604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0383161790556040517f3945779a0b94143e19ceb0254d7ff1fbe6c4265b6328031e7cc1274c2b8d77c7906103139083906110d8565b60405180910390a150565b610326610632565b1561036b576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6003546004548101431161039a5760405162461bcd60e51b81526004016103919061112d565b60405180910390fd5b600154604080516351cfd60960e11b815290516000926001600160a01b03169163a39fac129160048083019286929190829003018186803b1580156103de57600080fd5b505afa1580156103f2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261041a9190810190610f36565b60025490915060008080805b6000851180156104365750855184105b156105c357600086858151811061044957fe5b60200260200101516001600160a01b03166398bf3eb66040518163ffffffff1660e01b815260040160206040518083038186803b15801561048957600080fd5b505afa15801561049d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c19190610f1a565b90506104d5816001600160a01b0316610c95565b1561053f57806001600160a01b031663b9ee1e056040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561051557600080fd5b505af1158015610529573d6000803e3d6000fd5b50506000199097019650506001909301926105b7565b610551816001600160a01b0316610d2e565b156105b757806001600160a01b031663dfb2f13b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561059157600080fd5b505af11580156105a5573d6000803e3d6000fd5b50506000199097019650506001909201915b50600190930192610426565b60008311806105d25750600082115b156105da5750435b8087146106215760038190556040517f9fbc2aeb5bf6200e5499d345acddf1dd462c37becb4673d661250b89ced7ff6a906106189085908590611193565b60405180910390a15b505050505050505050565b60045481565b600054600160a01b900460ff1690565b61064a610bee565b6001600160a01b031661065b610a31565b6001600160a01b0316146106a4576040805162461bcd60e51b81526020600482018190526024820152600080516020611210833981519152604482015290519081900360640190fd5b60028190556040517fb722c0a05d55d91208263d973f28b92fc9599d46d7c490ff2efae89d8f3ddfe89061031390839061118a565b600060606106e5610632565b156106f35760009150610914565b6004546003540143101561070a5760009150610914565b600154604080516351cfd60960e11b815290516000926001600160a01b03169163a39fac129160048083019286929190829003018186803b15801561074e57600080fd5b505afa158015610762573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261078a9190810190610f36565b905060005b815181101561084c5760008282815181106107a657fe5b60200260200101516001600160a01b03166398bf3eb66040518163ffffffff1660e01b815260040160206040518083038186803b1580156107e657600080fd5b505afa1580156107fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081e9190610f1a565b9050610832816001600160a01b0316610c95565b156108435760019450505050610914565b5060010161078f565b5060005b815181101561090d57600082828151811061086757fe5b60200260200101516001600160a01b03166398bf3eb66040518163ffffffff1660e01b815260040160206040518083038186803b1580156108a757600080fd5b505afa1580156108bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108df9190610f1a565b90506108f3816001600160a01b0316610d2e565b156109045760019450505050610914565b50600101610850565b5060009250505b9250929050565b610923610bee565b6001600160a01b0316610934610a31565b6001600160a01b03161461097d576040805162461bcd60e51b81526020600482018190526024820152600080516020611210833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6109cf610bee565b6001600160a01b03166109e0610a31565b6001600160a01b031614610a29576040805162461bcd60e51b81526020600482018190526024820152600080516020611210833981519152604482015290519081900360640190fd5b610264610d7f565b6000546001600160a01b031690565b6001546001600160a01b031681565b60035481565b610a5d610bee565b6001600160a01b0316610a6e610a31565b6001600160a01b031614610ab7576040805162461bcd60e51b81526020600482018190526024820152600080516020611210833981519152604482015290519081900360640190fd5b60048190556040517f7a5354403e343fa02d40d3906b696f894d8b73fb8a898b07d7414f29866ef5d39061031390839061118a565b610af4610bee565b6001600160a01b0316610b05610a31565b6001600160a01b031614610b4e576040805162461bcd60e51b81526020600482018190526024820152600080516020611210833981519152604482015290519081900360640190fd5b6001600160a01b038116610b935760405162461bcd60e51b81526004018080602001828103825260268152602001806111ea6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b610bfa610632565b610c42576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b6000805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa610c78610bee565b604080516001600160a01b039092168252519081900360200190a1565b6000610ca8826343b7ae3f60e11b610e08565b15610d2557816001600160a01b031663876f5c7e6040518163ffffffff1660e01b815260040160206040518083038186803b158015610ce657600080fd5b505afa158015610cfa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1e9190610feb565b9050610d29565b5060005b919050565b6000610d4182636a74f10760e01b610e08565b15610d2557816001600160a01b0316636a74f1076040518163ffffffff1660e01b815260040160206040518083038186803b158015610ce657600080fd5b610d87610632565b15610dcc576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610c78610bee565b60408051600481526024810182526020810180516001600160e01b03166001600160e01b03198516179052905160009190829081906001600160a01b0387169061753090610e579086906110bc565b6000604051808303818686fa925050503d8060008114610e93576040519150601f19603f3d011682016040523d82523d6000602084013e610e98565b606091505b5091509150602081511015610eb35760009350505050610ee6565b81158015610ec2575060008151115b15610ee1578060405162461bcd60e51b8152600401610391919061111a565b509150505b92915050565b8051610d29816111d1565b600060208284031215610f08578081fd5b8135610f13816111d1565b9392505050565b600060208284031215610f2b578081fd5b8151610f13816111d1565b60006020808385031215610f48578182fd5b825167ffffffffffffffff80821115610f5f578384fd5b818501915085601f830112610f72578384fd5b815181811115610f7e57fe5b83810260405185828201018181108582111715610f9757fe5b604052828152858101935084860182860187018a1015610fb5578788fd5b8795505b83861015610fde57610fca81610eec565b855260019590950194938601938601610fb9565b5098975050505050505050565b600060208284031215610ffc578081fd5b81518015158114610f13578182fd5b6000806020838503121561101d578081fd5b823567ffffffffffffffff80821115611034578283fd5b818501915085601f830112611047578283fd5b813581811115611055578384fd5b866020828501011115611066578384fd5b60209290920196919550909350505050565b600060208284031215611089578081fd5b5035919050565b600081518084526110a88160208601602086016111a1565b601f01601f19169290920160200192915050565b600082516110ce8184602087016111a1565b9190910192915050565b6001600160a01b0391909116815260200190565b901515815260200190565b60008315158252604060208301526111126040830184611090565b949350505050565b600060208252610f136020830184611090565b60208082526037908201527f5072697a65537472617465677955706b6565703a3a6d696e696d756d20626c6f60408201527f636b20696e74657276616c206e6f742072656163686564000000000000000000606082015260800190565b90815260200190565b918252602082015260400190565b60005b838110156111bc5781810151838201526020016111a4565b838111156111cb576000848401525b50505050565b6001600160a01b03811681146111e657600080fd5b5056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a2646970667358221220f0b1ac0ffb865fa3077e5790062f9c7974854fa2bc8e12a55accad505875155064736f6c63430007060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000034733851e2047f8d0e1aa91124a6f9eadc54d2530000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000f
-----Decoded View---------------
Arg [0] : _prizePoolRegistry (address): 0x34733851E2047F8d0e1aa91124A6f9EaDc54D253
Arg [1] : _upkeepBatchSize (uint256): 2
Arg [2] : _upkeepMinimumBlockInterval (uint256): 15
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 00000000000000000000000034733851e2047f8d0e1aa91124a6f9eadc54d253
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [2] : 000000000000000000000000000000000000000000000000000000000000000f
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.