Contract 0x4dEe47eBAc66dDEEb3b1D7702D7bC648F52bBE0D

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x256713b05315d633adfe137d2b01e4731cbd1ce4d84e37d57c570e1309b5319bTransfer Ownersh...509809362022-11-16 16:23:39134 days 33 mins ago0x61e468f685392948504da7a49463fd508ec1e2cd IN  0x4dee47ebac66ddeeb3b1d7702d7bc648f52bbe0d0 FTM0.00239656
0xb3fad844f56af3b1199e7f1788dd3f6153c6ae7f45eddc79ce556790a079feb9Unpause432164772022-07-21 4:52:25252 days 12 hrs ago0x61e468f685392948504da7a49463fd508ec1e2cd IN  0x4dee47ebac66ddeeb3b1d7702d7bc648f52bbe0d0 FTM0.000151934019
0x0ae001969b9dc05002c54024a900be228b8cea55fb8053753e7ac446b0e27a8cSet Predict Cont...431732282022-07-20 13:38:09253 days 3 hrs ago0x61e468f685392948504da7a49463fd508ec1e2cd IN  0x4dee47ebac66ddeeb3b1d7702d7bc648f52bbe0d0 FTM0.098647345862
0x4d9408ebd3898a38bcab847c66455cfdb9930101edf57de386d244ef849fe6c2Set Register431563012022-07-20 7:50:11253 days 9 hrs ago0x61e468f685392948504da7a49463fd508ec1e2cd IN  0x4dee47ebac66ddeeb3b1d7702d7bc648f52bbe0d0 FTM0.000309800872
0x708ce5bd1639b6803da69dbafe4382e0b8a7162941059fcd06055b6139592fe8Pause431548442022-07-20 7:21:10253 days 9 hrs ago0x61e468f685392948504da7a49463fd508ec1e2cd IN  0x4dee47ebac66ddeeb3b1d7702d7bc648f52bbe0d0 FTM0.000243189858
0xffc1f2b26e4e83976e797ca92f069579dbde773d440f72306d22f77d88574422Transfer Ownersh...431547902022-07-20 7:20:14253 days 9 hrs agoWigoSwap: Deployer IN  0x4dee47ebac66ddeeb3b1d7702d7bc648f52bbe0d0 FTM0.000289815772
0x56d78f1b55217c3813ed04922fec1bc1b820f1429a0861e697bb7e3098f23b280x60806040431544442022-07-20 7:13:16253 days 9 hrs agoWigoSwap: Deployer IN  Create: PredictKeeper0 FTM0.039078116
[ Download CSV Export 
Latest 1 internal transaction
Parent Txn Hash Block From To Value
0x56d78f1b55217c3813ed04922fec1bc1b820f1429a0861e697bb7e3098f23b28431544442022-07-20 7:13:16253 days 9 hrs ago WigoSwap: Deployer  Contract Creation0 FTM
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
PredictKeeper

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 999999 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 8 : PredictKeeper.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
import {Pausable} from "@openzeppelin/contracts/security/Pausable.sol";
import "@chainlink/contracts/src/v0.8/KeeperCompatible.sol";
import "./interfaces/IPredict.sol";

contract PredictKeeper is KeeperCompatibleInterface, Ownable, Pausable {
    address public predictContract;
    address public register;

    uint256 public constant MaxAheadTime = 30;
    uint256 public aheadTimeForCheckUpkeep = 1;
    uint256 public aheadTimeForPerformUpkeep = 1;

    event NewRegister(address indexed register);
    event NewPredictContract(address indexed predictContract);
    event NewAheadTimeForCheckUpkeep(uint256 time);
    event NewAheadTimeForPerformUpkeep(uint256 time);

    /**
     * @notice Constructor
     * @param _predictContract: Predict Contract address
     */
    constructor(address _predictContract) {
        require(_predictContract != address(0), "Cannot be zero address");
        predictContract = _predictContract;
    }

    modifier onlyRegister() {
        require(
            msg.sender == register || register == address(0),
            "Not register"
        );
        _;
    }

    //The logic is consistent with the following performUpkeep function, in order to make the code logic clearer.
    function checkUpkeep(bytes calldata)
        external
        view
        override
        returns (bool upkeepNeeded, bytes memory)
    {
        if (!paused()) {
            bool genesisStartOnce = IPredict(predictContract)
                .genesisStartOnce();
            bool genesisLockOnce = IPredict(predictContract).genesisLockOnce();
            bool paused = IPredict(predictContract).paused();
            uint256 currentEpoch = IPredict(predictContract).currentEpoch();
            uint256 bufferSeconds = IPredict(predictContract).bufferSeconds();
            IPredict.Round memory round = IPredict(predictContract).rounds(
                currentEpoch
            );
            uint256 lockTimestamp = round.lockTimestamp;

            if (paused) {
                //need to unpause
                upkeepNeeded = true;
            } else {
                if (!genesisStartOnce) {
                    upkeepNeeded = true;
                } else if (!genesisLockOnce) {
                    // Too early for locking of round, skip current job (also means previous lockRound was successful)
                    if (
                        lockTimestamp == 0 ||
                        block.timestamp + aheadTimeForCheckUpkeep <
                        lockTimestamp
                    ) {} else if (
                        lockTimestamp != 0 &&
                        block.timestamp > (lockTimestamp + bufferSeconds)
                    ) {
                        // Too late to lock round, need to pause
                        upkeepNeeded = true;
                    } else {
                        //run genesisLockRound
                        upkeepNeeded = true;
                    }
                } else {
                    if (
                        block.timestamp + aheadTimeForCheckUpkeep >
                        lockTimestamp
                    ) {
                        // Too early for end/lock/start of round, skip current job
                        if (
                            lockTimestamp == 0 ||
                            block.timestamp + aheadTimeForCheckUpkeep <
                            lockTimestamp
                        ) {} else if (
                            lockTimestamp != 0 &&
                            block.timestamp > (lockTimestamp + bufferSeconds)
                        ) {
                            // Too late to end round, need to pause
                            upkeepNeeded = true;
                        } else {
                            //run executeRound
                            upkeepNeeded = true;
                        }
                    }
                }
            }
        }
    }

    function performUpkeep(bytes calldata)
        external
        override
        onlyRegister
        whenNotPaused
    {
        require(predictContract != address(0), "predictContract Not Set!");
        bool genesisStartOnce = IPredict(predictContract).genesisStartOnce();
        bool genesisLockOnce = IPredict(predictContract).genesisLockOnce();
        bool paused = IPredict(predictContract).paused();
        uint256 currentEpoch = IPredict(predictContract).currentEpoch();
        uint256 bufferSeconds = IPredict(predictContract).bufferSeconds();
        IPredict.Round memory round = IPredict(predictContract).rounds(
            currentEpoch
        );
        uint256 lockTimestamp = round.lockTimestamp;
        if (paused) {
            // unpause operation
            IPredict(predictContract).unpause();
        } else {
            if (!genesisStartOnce) {
                IPredict(predictContract).genesisStartRound();
            } else if (!genesisLockOnce) {
                // Too early for locking of round, skip current job (also means previous lockRound was successful)
                if (
                    lockTimestamp == 0 ||
                    block.timestamp + aheadTimeForPerformUpkeep < lockTimestamp
                ) {} else if (
                    lockTimestamp != 0 &&
                    block.timestamp > (lockTimestamp + bufferSeconds)
                ) {
                    // Too late to lock round, need to pause
                    IPredict(predictContract).pause();
                } else {
                    //run genesisLockRound
                    IPredict(predictContract).genesisLockRound();
                }
            } else {
                if (
                    block.timestamp + aheadTimeForPerformUpkeep > lockTimestamp
                ) {
                    // Too early for end/lock/start of round, skip current job
                    if (
                        lockTimestamp == 0 ||
                        block.timestamp + aheadTimeForPerformUpkeep <
                        lockTimestamp
                    ) {} else if (
                        lockTimestamp != 0 &&
                        block.timestamp > (lockTimestamp + bufferSeconds)
                    ) {
                        // Too late to end round, need to pause
                        IPredict(predictContract).pause();
                    } else {
                        //run executeRound
                        IPredict(predictContract).executeRound();
                    }
                }
            }
        }
    }

    function setRegister(address _register) external onlyOwner {
        //When register is address(0), anyone can execute performUpkeep function
        register = _register;
        emit NewRegister(_register);
    }

    function setPredictContract(address _predictContract) external onlyOwner {
        require(_predictContract != address(0), "Cannot be zero address");
        predictContract = _predictContract;
        emit NewPredictContract(_predictContract);
    }

    function setAheadTimeForCheckUpkeep(uint256 _time) external onlyOwner {
        require(
            _time <= MaxAheadTime,
            "aheadTimeForCheckUpkeep cannot be more than MaxAheadTime"
        );
        aheadTimeForCheckUpkeep = _time;
        emit NewAheadTimeForCheckUpkeep(_time);
    }

    function setAheadTimeForPerformUpkeep(uint256 _time) external onlyOwner {
        require(
            _time <= MaxAheadTime,
            "aheadTimeForPerformUpkeep cannot be more than MaxAheadTime"
        );
        aheadTimeForPerformUpkeep = _time;
        emit NewAheadTimeForPerformUpkeep(_time);
    }

    function pause() external onlyOwner {
        _pause();
    }

    function unpause() external onlyOwner {
        _unpause();
    }
}

File 2 of 8 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^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() {
        _transferOwnership(_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 {
        _transferOwnership(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");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 3 of 8 : Pausable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (security/Pausable.sol)

pragma solidity ^0.8.0;

import "../utils/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() {
        _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());
    }
}

File 4 of 8 : KeeperCompatible.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "./KeeperBase.sol";
import "./interfaces/KeeperCompatibleInterface.sol";

abstract contract KeeperCompatible is KeeperBase, KeeperCompatibleInterface {}

File 5 of 8 : IPredict.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface IPredict {
    struct Round {
        uint256 epoch;
        uint256 startTimestamp;
        uint256 lockTimestamp;
        uint256 closeTimestamp;
        int256 lockPrice;
        int256 closePrice;
        uint256 lockOracleId;
        uint256 closeOracleId;
        uint256 totalAmount;
        uint256 bullAmount;
        uint256 bearAmount;
        uint256 rewardBaseCalAmount;
        uint256 rewardAmount;
        bool oracleCalled;
    }

    function rounds(uint256 epoch) external view returns (Round memory);

    function genesisStartOnce() external view returns (bool);

    function genesisLockOnce() external view returns (bool);

    function paused() external view returns (bool);

    function currentEpoch() external view returns (uint256);

    function bufferSeconds() external view returns (uint256);

    function intervalSeconds() external view returns (uint256);

    function genesisStartRound() external;

    function pause() external;

    function unpause() external;

    function genesisLockRound() external;

    function executeRound() external;
}

File 6 of 8 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^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 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) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

File 7 of 8 : KeeperBase.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract KeeperBase {
  error OnlySimulatedBackend();

  /**
   * @notice method that allows it to be simulated via eth_call by checking that
   * the sender is the zero address.
   */
  function preventExecution() internal view {
    if (tx.origin != address(0)) {
      revert OnlySimulatedBackend();
    }
  }

  /**
   * @notice modifier that allows it to be simulated via eth_call by checking
   * that the sender is the zero address.
   */
  modifier cannotExecute() {
    preventExecution();
    _;
  }
}

File 8 of 8 : KeeperCompatibleInterface.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

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;
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 999999
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "metadata": {
    "useLiteralContent": true
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_predictContract","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"NewAheadTimeForCheckUpkeep","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"NewAheadTimeForPerformUpkeep","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"predictContract","type":"address"}],"name":"NewPredictContract","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"register","type":"address"}],"name":"NewRegister","type":"event"},{"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"},{"inputs":[],"name":"MaxAheadTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"aheadTimeForCheckUpkeep","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"aheadTimeForPerformUpkeep","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"","type":"bytes"}],"name":"checkUpkeep","outputs":[{"internalType":"bool","name":"upkeepNeeded","type":"bool"},{"internalType":"bytes","name":"","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":"","type":"bytes"}],"name":"performUpkeep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"predictContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"register","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_time","type":"uint256"}],"name":"setAheadTimeForCheckUpkeep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_time","type":"uint256"}],"name":"setAheadTimeForPerformUpkeep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_predictContract","type":"address"}],"name":"setPredictContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_register","type":"address"}],"name":"setRegister","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"}]

6080604052600160035560016004553480156200001b57600080fd5b5060405162001f0938038062001f098339810160408190526200003e9162000127565b6200004933620000d7565b6000805460ff60a01b191690556001600160a01b038116620000b15760405162461bcd60e51b815260206004820152601660248201527f43616e6e6f74206265207a65726f206164647265737300000000000000000000604482015260640160405180910390fd5b600180546001600160a01b0319166001600160a01b039290921691909117905562000157565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121562000139578081fd5b81516001600160a01b038116811462000150578182fd5b9392505050565b611da280620001676000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80635c975abb116100b25780638456cb5911610081578063a83c97b311610066578063a83c97b31461027d578063e7cd77ce14610290578063f2fde38b1461029857600080fd5b80638456cb59146102575780638da5cb5b1461025f57600080fd5b80635c975abb146101ed5780636e04ff0d1461021b578063715018a61461023c5780637853f9191461024457600080fd5b806342295a52116100ee57806342295a52146101945780634585e33b146101b457806359ce3b48146101c75780635bbbd133146101da57600080fd5b8063060e89a0146101205780630927b0001461013c5780631aa3a008146101455780633f4ba83a1461018a575b600080fd5b61012960035481565b6040519081526020015b60405180910390f35b61012960045481565b6002546101659073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610133565b6101926102ab565b005b6001546101659073ffffffffffffffffffffffffffffffffffffffff1681565b6101926101c2366004611b0d565b61033b565b6101926101d5366004611ab8565b610c25565b6101926101e8366004611c33565b610d15565b60005474010000000000000000000000000000000000000000900460ff166040519015158152602001610133565b61022e610229366004611b0d565b610e63565b604051610133929190611c63565b610192611351565b610192610252366004611ab8565b6113dc565b610192611549565b60005473ffffffffffffffffffffffffffffffffffffffff16610165565b61019261028b366004611c33565b6115d2565b610129601e81565b6101926102a6366004611ab8565b611719565b60005473ffffffffffffffffffffffffffffffffffffffff163314610331576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b610339611849565b565b60025473ffffffffffffffffffffffffffffffffffffffff16331480610377575060025473ffffffffffffffffffffffffffffffffffffffff16155b6103dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4e6f7420726567697374657200000000000000000000000000000000000000006044820152606401610328565b60005474010000000000000000000000000000000000000000900460ff1615610462576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610328565b60015473ffffffffffffffffffffffffffffffffffffffff166104e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f70726564696374436f6e7472616374204e6f74205365742100000000000000006044820152606401610328565b600154604080517ff7fdec28000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f7fdec28916004808301926020929190829003018186803b15801561054c57600080fd5b505afa158015610560573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105849190611af3565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630f74174f6040518163ffffffff1660e01b815260040160206040518083038186803b1580156105f057600080fd5b505afa158015610604573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106289190611af3565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b815260040160206040518083038186803b15801561069457600080fd5b505afa1580156106a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106cc9190611af3565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663766718086040518163ffffffff1660e01b815260040160206040518083038186803b15801561073857600080fd5b505afa15801561074c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107709190611c4b565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663eaba23616040518163ffffffff1660e01b815260040160206040518083038186803b1580156107dc57600080fd5b505afa1580156107f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108149190611c4b565b6001546040517f8c65c81f0000000000000000000000000000000000000000000000000000000081526004810185905291925060009173ffffffffffffffffffffffffffffffffffffffff90911690638c65c81f906024016101c06040518083038186803b15801561088557600080fd5b505afa158015610899573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108bd9190611b7a565b6040810151909150841561095257600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561093557600080fd5b505af1158015610949573d6000803e3d6000fd5b50505050610c1a565b866109c157600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452fd75a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561093557600080fd5b85610ad9578015806109df575080600454426109dd9190611d2f565b105b156109e957610c1a565b8015801590610a0057506109fd8382611d2f565b42115b15610a6f57600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561093557600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d9d55eac6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561093557600080fd5b8060045442610ae89190611d2f565b1115610c1a57801580610b0757508060045442610b059190611d2f565b105b15610b1157610c1a565b8015801590610b285750610b258382611d2f565b42115b15610b9757600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561093557600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637b3205f56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610c0157600080fd5b505af1158015610c15573d6000803e3d6000fd5b505050505b505050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610ca6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610328565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f82b769e772c260bd3d5d5644881d43a4c580224a3861bb3e4c9b57bb7349a65390600090a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610d96576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610328565b601e811115610e27576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f616865616454696d65466f72506572666f726d55706b6565702063616e6e6f7460448201527f206265206d6f7265207468616e204d6178416865616454696d650000000000006064820152608401610328565b60048190556040518181527fee3c43946327f1f066dfe4a6d9fef20fdfafc416fcf4069f31ddb4fdfd6b776b906020015b60405180910390a150565b6000805460609074010000000000000000000000000000000000000000900460ff1661134a57600154604080517ff7fdec28000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f7fdec28916004808301926020929190829003018186803b158015610ef457600080fd5b505afa158015610f08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2c9190611af3565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630f74174f6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f9857600080fd5b505afa158015610fac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd09190611af3565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b815260040160206040518083038186803b15801561103c57600080fd5b505afa158015611050573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110749190611af3565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663766718086040518163ffffffff1660e01b815260040160206040518083038186803b1580156110e057600080fd5b505afa1580156110f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111189190611c4b565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663eaba23616040518163ffffffff1660e01b815260040160206040518083038186803b15801561118457600080fd5b505afa158015611198573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bc9190611c4b565b6001546040517f8c65c81f0000000000000000000000000000000000000000000000000000000081526004810185905291925060009173ffffffffffffffffffffffffffffffffffffffff90911690638c65c81f906024016101c06040518083038186803b15801561122d57600080fd5b505afa158015611241573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112659190611b7a565b6040810151909150841561127c5760019850611342565b8661128a5760019850611342565b856112e0578015806112a8575080600354426112a69190611d2f565b105b156112b257611342565b80158015906112c957506112c68382611d2f565b42115b156112d75760019850611342565b60019850611342565b80600354426112ef9190611d2f565b11156113425780158061130e5750806003544261130c9190611d2f565b105b1561131857611342565b801580159061132f575061132c8382611d2f565b42115b1561133d5760019850611342565b600198505b505050505050505b9250929050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146113d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610328565b6103396000611942565b60005473ffffffffffffffffffffffffffffffffffffffff16331461145d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610328565b73ffffffffffffffffffffffffffffffffffffffff81166114da576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f43616e6e6f74206265207a65726f2061646472657373000000000000000000006044820152606401610328565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517fe61cfe404cbb50df68aab9e96aa9b581b0d62d2d1bb277d36f6297bc841e217990600090a250565b60005473ffffffffffffffffffffffffffffffffffffffff1633146115ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610328565b6103396119b7565b60005473ffffffffffffffffffffffffffffffffffffffff163314611653576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610328565b601e8111156116e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f616865616454696d65466f72436865636b55706b6565702063616e6e6f74206260448201527f65206d6f7265207468616e204d6178416865616454696d6500000000000000006064820152608401610328565b60038190556040518181527ffcf8adcabbe015bf29555d1162dbbf64d6b8631cbfa0973cc0ac058ee250938290602001610e58565b60005473ffffffffffffffffffffffffffffffffffffffff16331461179a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610328565b73ffffffffffffffffffffffffffffffffffffffff811661183d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610328565b61184681611942565b50565b60005474010000000000000000000000000000000000000000900460ff166118cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610328565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60005474010000000000000000000000000000000000000000900460ff1615611a3c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610328565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586119183390565b80518015158114611ab357600080fd5b919050565b600060208284031215611ac9578081fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114611aec578182fd5b9392505050565b600060208284031215611b04578081fd5b611aec82611aa3565b60008060208385031215611b1f578081fd5b823567ffffffffffffffff80821115611b36578283fd5b818501915085601f830112611b49578283fd5b813581811115611b57578384fd5b866020828501011115611b68578384fd5b60209290920196919550909350505050565b60006101c08284031215611b8c578081fd5b611b94611cde565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c082015260e083015160e08201526101008084015181830152506101208084015181830152506101408084015181830152506101608084015181830152506101808084015181830152506101a0611c28818501611aa3565b908201529392505050565b600060208284031215611c44578081fd5b5035919050565b600060208284031215611c5c578081fd5b5051919050565b8215158152600060206040818401528351806040850152825b81811015611c9857858101830151858201606001528201611c7c565b81811115611ca95783606083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201606001949350505050565b6040516101c0810167ffffffffffffffff81118282101715611d29577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b60008219821115611d67577f4e487b710000000000000000000000000000000000000000000000000000000081526011600452602481fd5b50019056fea26469706673582212203707c7c98d67f25c27be613d778e65a344b99a436a5147bef9f3f063ad85525364736f6c6343000804003300000000000000000000000021a5db90903c5d8eccd745244dc93e6d0a0c6c86

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000021a5db90903c5d8eccd745244dc93e6d0a0c6c86

-----Decoded View---------------
Arg [0] : _predictContract (address): 0x21a5db90903c5d8eccd745244dc93e6d0a0c6c86

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000021a5db90903c5d8eccd745244dc93e6d0a0c6c86


Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Validator ID :
0 FTM

Amount Staked
0

Amount Delegated
0

Staking Total
0

Staking Start Epoch
0

Staking Start Time
0

Proof of Importance
0

Origination Score
0

Validation Score
0

Active
0

Online
0

Downtime
0 s
Address Amount claimed Rewards Created On Epoch Created On
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.