Contract 0x16a5be448afb23a80b1020a82739a527e0e99e54

Contract Overview

Balance:
0 BNB
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x90cd0f73c8231b41ac0214697074ae3a693b6ba6c11aaa0cf9fc878a7d1f4d69Submit Result95271572021-06-07 15:12:38229 days 19 hrs ago0x8496a4b20c8d7563ff6526b540b9e5a7f227074f IN  0x16a5be448afb23a80b1020a82739a527e0e99e540 BNB0.00323157
0xc86645920b65d7e6a84031785a22825be993e94925171f13816e7f863068cdfbSubmit Result95271572021-06-07 15:12:38229 days 19 hrs ago0x8496a4b20c8d7563ff6526b540b9e5a7f227074f IN  0x16a5be448afb23a80b1020a82739a527e0e99e540 BNB0.00319532
0x072431e7f9545e0a9f60964eb4290f4d25958ee23ed43516dcf670d35d55debfSubmit Result95271572021-06-07 15:12:38229 days 19 hrs ago0x1bdfb4701507602b32d688ef63c3f8f4c1a34702 IN  0x16a5be448afb23a80b1020a82739a527e0e99e540 BNB0.00320436
0x694e4cb7aac4c011932939ea4bfe2b7107e08009260d957180bb51422897d552Submit Result95271572021-06-07 15:12:38229 days 19 hrs ago0x1bdfb4701507602b32d688ef63c3f8f4c1a34702 IN  0x16a5be448afb23a80b1020a82739a527e0e99e540 BNB0.00323157
0xc33d327703b3e01eae6bd9c4484e0774fdb7489be56daac75493624b60b3ea0cSubmit Result95271572021-06-07 15:12:38229 days 19 hrs ago0x8496a4b20c8d7563ff6526b540b9e5a7f227074f IN  0x16a5be448afb23a80b1020a82739a527e0e99e540 BNB0.00320924
0x7fd652330a2dccbe8e8d05c61aa1e2996b35610547121aa614d6665662593189Submit Result95271572021-06-07 15:12:38229 days 19 hrs ago0x8496a4b20c8d7563ff6526b540b9e5a7f227074f IN  0x16a5be448afb23a80b1020a82739a527e0e99e540 BNB0.00320436
0xfce302677e86164c3fabd04b5565d9249c5eed03af9c1463bbd0578724886b95Submit Result95271572021-06-07 15:12:38229 days 19 hrs ago0xd92060447ef4b43d9a2e506c8070c6adcd24205d IN  0x16a5be448afb23a80b1020a82739a527e0e99e540 BNB0.00320924
0x015f9117e5cae59cd8c093a9a4eca7af3886433cd84bfd7e99d1145bb309c535Submit Result95271572021-06-07 15:12:38229 days 19 hrs ago0x22454894c6a8a4a1e85e01130e92004fc5859d34 IN  0x16a5be448afb23a80b1020a82739a527e0e99e540 BNB0.00320924
0xf41b6c1566c231e8a5b0a638f881f7370e509c26d90a51cca83e9c8f902cac2dSubmit Result95271572021-06-07 15:12:38229 days 19 hrs ago0x22454894c6a8a4a1e85e01130e92004fc5859d34 IN  0x16a5be448afb23a80b1020a82739a527e0e99e540 BNB0.00320836
0x6f7f7cae083f0585fc9ef34abe3a8cc8fbea72e3c6a60dfbc73cd8e53b94dd16Submit Result95271572021-06-07 15:12:38229 days 19 hrs ago0x22454894c6a8a4a1e85e01130e92004fc5859d34 IN  0x16a5be448afb23a80b1020a82739a527e0e99e540 BNB0.00323157
0x8d697a55e3ca93c32bcbe7e7e5fb25a9e9b8ea56d4bc984e8feef7219f1d5625Submit Result95271572021-06-07 15:12:38229 days 19 hrs ago0x8496a4b20c8d7563ff6526b540b9e5a7f227074f IN  0x16a5be448afb23a80b1020a82739a527e0e99e540 BNB0.0032157
0x2a917f8ec5b6ac64ec54217bbf4ae0c56a2d062d2818a150cf6547859e23e70bSubmit Result95271572021-06-07 15:12:38229 days 19 hrs ago0x0e10e494ecffa6c1af08d0ecb613130594fd007d IN  0x16a5be448afb23a80b1020a82739a527e0e99e540 BNB0.00320836
0x8a3887baf0238ef964bc4bde8e4d888e76d8e924048aaf1df752c3389b831a6bSubmit Result95271572021-06-07 15:12:38229 days 19 hrs ago0x0e10e494ecffa6c1af08d0ecb613130594fd007d IN  0x16a5be448afb23a80b1020a82739a527e0e99e540 BNB0.00320436
0xaf8d7787ae5b65c8346d232a3f02e7b95ea50b3cf32dc8380f362e9bca8dbb15Submit Result95271572021-06-07 15:12:38229 days 19 hrs ago0x0e10e494ecffa6c1af08d0ecb613130594fd007d IN  0x16a5be448afb23a80b1020a82739a527e0e99e540 BNB0.00319532
0xe2f92b0a798019fc6116dfd11187f424dc3d2d2335d116a219560cd66ff7db7fSubmit Result95271572021-06-07 15:12:38229 days 19 hrs ago0x22454894c6a8a4a1e85e01130e92004fc5859d34 IN  0x16a5be448afb23a80b1020a82739a527e0e99e540 BNB0.00319532
0x898ac0edcd48882ff127dde7d8f1e25f5a92f52e20673025348e2cf448e40ed5Submit Result95271572021-06-07 15:12:38229 days 19 hrs ago0xfbbc6095795c37a1410d51e97ca928635dde8abf IN  0x16a5be448afb23a80b1020a82739a527e0e99e540 BNB0.00323157
0x6012e6c149856abdf6789d824051f8eed7ab326ede41fc6fcd8b5479aef69e6aSubmit Result95271572021-06-07 15:12:38229 days 19 hrs ago0xfbbc6095795c37a1410d51e97ca928635dde8abf IN  0x16a5be448afb23a80b1020a82739a527e0e99e540 BNB0.00320924
0xbe1c2418040168a3da62923a5fc4b221535f21d6dfe907ffa3c37bb2c7d2b8f9Submit Result95271572021-06-07 15:12:38229 days 19 hrs ago0xfbbc6095795c37a1410d51e97ca928635dde8abf IN  0x16a5be448afb23a80b1020a82739a527e0e99e540 BNB0.00320836
0x461d55fea5658cfbe9b6c5ba3fbd712ba7ca43ae2e73302b8b5b12d56ecdde85Submit Result95271572021-06-07 15:12:38229 days 19 hrs ago0xfbbc6095795c37a1410d51e97ca928635dde8abf IN  0x16a5be448afb23a80b1020a82739a527e0e99e540 BNB0.00320436
0x770c2be033e7f9bfa4dd3423ebc40dbf7d6280aeaf3451d55829fd73d57c34e9Submit Result95271572021-06-07 15:12:38229 days 19 hrs ago0x26a74e056eb4e3607792dcd87070e468878d14e9 IN  0x16a5be448afb23a80b1020a82739a527e0e99e540 BNB0.00319532
0x0e45578fb79d8e81faf29efca6b75cea7cc434457dbb9da94b3da958437745c1Submit Result95271572021-06-07 15:12:38229 days 19 hrs ago0x633bb5f8a2a120d6a9670595ce38471d01786428 IN  0x16a5be448afb23a80b1020a82739a527e0e99e540 BNB0.00320924
0xea94ca20a5dc9956258f08cc08385cbf1cb192f5dd28d13e77341345110306feSubmit Result95271572021-06-07 15:12:38229 days 19 hrs ago0x0e10e494ecffa6c1af08d0ecb613130594fd007d IN  0x16a5be448afb23a80b1020a82739a527e0e99e540 BNB0.00320924
0x65e61c5d042c7bbec385ca43c5c262ab1e954046c91dc3d53446c4fb9e717eabSubmit Result95271572021-06-07 15:12:38229 days 19 hrs ago0x27740726f86bf2e57f8b95c8e57baa27cfa441ae IN  0x16a5be448afb23a80b1020a82739a527e0e99e540 BNB0.00319532
0x54700e0338d00fdb19f6730a7966487657f000af341526bb0c940552c0291b4bSubmit Result95271572021-06-07 15:12:38229 days 19 hrs ago0x27740726f86bf2e57f8b95c8e57baa27cfa441ae IN  0x16a5be448afb23a80b1020a82739a527e0e99e540 BNB0.00323157
0x8c4bdb15ebbb85e4e38bd963b4d34bb8320341a052707a67820c03fe213eed99Submit Result95271572021-06-07 15:12:38229 days 19 hrs ago0x26a74e056eb4e3607792dcd87070e468878d14e9 IN  0x16a5be448afb23a80b1020a82739a527e0e99e540 BNB0.00320436
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x90cd0f73c8231b41ac0214697074ae3a693b6ba6c11aaa0cf9fc878a7d1f4d6995271572021-06-07 15:12:38229 days 19 hrs ago 0x16a5be448afb23a80b1020a82739a527e0e99e54 0xd4b019ec078ea7499c54d10893a4a5fafce7c05a0 BNB
0x90cd0f73c8231b41ac0214697074ae3a693b6ba6c11aaa0cf9fc878a7d1f4d6995271572021-06-07 15:12:38229 days 19 hrs ago 0x16a5be448afb23a80b1020a82739a527e0e99e54 0xe7aee14972cd1f5737737b1bd88a7dd9e24c3e360 BNB
0xc86645920b65d7e6a84031785a22825be993e94925171f13816e7f863068cdfb95271572021-06-07 15:12:38229 days 19 hrs ago 0x16a5be448afb23a80b1020a82739a527e0e99e54 0xd4b019ec078ea7499c54d10893a4a5fafce7c05a0 BNB
0xc86645920b65d7e6a84031785a22825be993e94925171f13816e7f863068cdfb95271572021-06-07 15:12:38229 days 19 hrs ago 0x16a5be448afb23a80b1020a82739a527e0e99e54 0xe7aee14972cd1f5737737b1bd88a7dd9e24c3e360 BNB
0x072431e7f9545e0a9f60964eb4290f4d25958ee23ed43516dcf670d35d55debf95271572021-06-07 15:12:38229 days 19 hrs ago 0x16a5be448afb23a80b1020a82739a527e0e99e54 0xd4b019ec078ea7499c54d10893a4a5fafce7c05a0 BNB
0x072431e7f9545e0a9f60964eb4290f4d25958ee23ed43516dcf670d35d55debf95271572021-06-07 15:12:38229 days 19 hrs ago 0x16a5be448afb23a80b1020a82739a527e0e99e54 0xe7aee14972cd1f5737737b1bd88a7dd9e24c3e360 BNB
0x694e4cb7aac4c011932939ea4bfe2b7107e08009260d957180bb51422897d55295271572021-06-07 15:12:38229 days 19 hrs ago 0x16a5be448afb23a80b1020a82739a527e0e99e54 0xd4b019ec078ea7499c54d10893a4a5fafce7c05a0 BNB
0x694e4cb7aac4c011932939ea4bfe2b7107e08009260d957180bb51422897d55295271572021-06-07 15:12:38229 days 19 hrs ago 0x16a5be448afb23a80b1020a82739a527e0e99e54 0xe7aee14972cd1f5737737b1bd88a7dd9e24c3e360 BNB
0xc33d327703b3e01eae6bd9c4484e0774fdb7489be56daac75493624b60b3ea0c95271572021-06-07 15:12:38229 days 19 hrs ago 0x16a5be448afb23a80b1020a82739a527e0e99e54 0xd4b019ec078ea7499c54d10893a4a5fafce7c05a0 BNB
0xc33d327703b3e01eae6bd9c4484e0774fdb7489be56daac75493624b60b3ea0c95271572021-06-07 15:12:38229 days 19 hrs ago 0x16a5be448afb23a80b1020a82739a527e0e99e54 0xe7aee14972cd1f5737737b1bd88a7dd9e24c3e360 BNB
0x7fd652330a2dccbe8e8d05c61aa1e2996b35610547121aa614d666566259318995271572021-06-07 15:12:38229 days 19 hrs ago 0x16a5be448afb23a80b1020a82739a527e0e99e54 0xd4b019ec078ea7499c54d10893a4a5fafce7c05a0 BNB
0x7fd652330a2dccbe8e8d05c61aa1e2996b35610547121aa614d666566259318995271572021-06-07 15:12:38229 days 19 hrs ago 0x16a5be448afb23a80b1020a82739a527e0e99e54 0xe7aee14972cd1f5737737b1bd88a7dd9e24c3e360 BNB
0xfce302677e86164c3fabd04b5565d9249c5eed03af9c1463bbd0578724886b9595271572021-06-07 15:12:38229 days 19 hrs ago 0x16a5be448afb23a80b1020a82739a527e0e99e54 0xd4b019ec078ea7499c54d10893a4a5fafce7c05a0 BNB
0xfce302677e86164c3fabd04b5565d9249c5eed03af9c1463bbd0578724886b9595271572021-06-07 15:12:38229 days 19 hrs ago 0x16a5be448afb23a80b1020a82739a527e0e99e54 0xe7aee14972cd1f5737737b1bd88a7dd9e24c3e360 BNB
0x015f9117e5cae59cd8c093a9a4eca7af3886433cd84bfd7e99d1145bb309c53595271572021-06-07 15:12:38229 days 19 hrs ago 0x16a5be448afb23a80b1020a82739a527e0e99e54 0xd4b019ec078ea7499c54d10893a4a5fafce7c05a0 BNB
0x015f9117e5cae59cd8c093a9a4eca7af3886433cd84bfd7e99d1145bb309c53595271572021-06-07 15:12:38229 days 19 hrs ago 0x16a5be448afb23a80b1020a82739a527e0e99e54 0xe7aee14972cd1f5737737b1bd88a7dd9e24c3e360 BNB
0xf41b6c1566c231e8a5b0a638f881f7370e509c26d90a51cca83e9c8f902cac2d95271572021-06-07 15:12:38229 days 19 hrs ago 0x16a5be448afb23a80b1020a82739a527e0e99e54 0xd4b019ec078ea7499c54d10893a4a5fafce7c05a0 BNB
0xf41b6c1566c231e8a5b0a638f881f7370e509c26d90a51cca83e9c8f902cac2d95271572021-06-07 15:12:38229 days 19 hrs ago 0x16a5be448afb23a80b1020a82739a527e0e99e54 0xe7aee14972cd1f5737737b1bd88a7dd9e24c3e360 BNB
0x6f7f7cae083f0585fc9ef34abe3a8cc8fbea72e3c6a60dfbc73cd8e53b94dd1695271572021-06-07 15:12:38229 days 19 hrs ago 0x16a5be448afb23a80b1020a82739a527e0e99e54 0xd4b019ec078ea7499c54d10893a4a5fafce7c05a0 BNB
0x6f7f7cae083f0585fc9ef34abe3a8cc8fbea72e3c6a60dfbc73cd8e53b94dd1695271572021-06-07 15:12:38229 days 19 hrs ago 0x16a5be448afb23a80b1020a82739a527e0e99e54 0xe7aee14972cd1f5737737b1bd88a7dd9e24c3e360 BNB
0x8d697a55e3ca93c32bcbe7e7e5fb25a9e9b8ea56d4bc984e8feef7219f1d562595271572021-06-07 15:12:38229 days 19 hrs ago 0x16a5be448afb23a80b1020a82739a527e0e99e54 0xd4b019ec078ea7499c54d10893a4a5fafce7c05a0 BNB
0x8d697a55e3ca93c32bcbe7e7e5fb25a9e9b8ea56d4bc984e8feef7219f1d562595271572021-06-07 15:12:38229 days 19 hrs ago 0x16a5be448afb23a80b1020a82739a527e0e99e54 0xe7aee14972cd1f5737737b1bd88a7dd9e24c3e360 BNB
0x2a917f8ec5b6ac64ec54217bbf4ae0c56a2d062d2818a150cf6547859e23e70b95271572021-06-07 15:12:38229 days 19 hrs ago 0x16a5be448afb23a80b1020a82739a527e0e99e54 0xd4b019ec078ea7499c54d10893a4a5fafce7c05a0 BNB
0x2a917f8ec5b6ac64ec54217bbf4ae0c56a2d062d2818a150cf6547859e23e70b95271572021-06-07 15:12:38229 days 19 hrs ago 0x16a5be448afb23a80b1020a82739a527e0e99e54 0xe7aee14972cd1f5737737b1bd88a7dd9e24c3e360 BNB
0x8a3887baf0238ef964bc4bde8e4d888e76d8e924048aaf1df752c3389b831a6b95271572021-06-07 15:12:38229 days 19 hrs ago 0x16a5be448afb23a80b1020a82739a527e0e99e54 0xd4b019ec078ea7499c54d10893a4a5fafce7c05a0 BNB
[ Download CSV Export 
Loading

Similar Match Source Code
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0x4967358B5e247CBe788E77Aa8F2cAd24cF569E47

Contract Name:
OrakuruCore

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 15 : Ownable.sol
// SPDX-License-Identifier: MIT

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 () {
        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;
    }
}

File 2 of 15 : Pausable.sol
// SPDX-License-Identifier: MIT

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 3 of 15 : ReentrancyGuard.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor () {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and make it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

File 4 of 15 : IERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

File 5 of 15 : Context.sol
// SPDX-License-Identifier: MIT

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) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

File 6 of 15 : Math.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Standard math utilities missing in the Solidity language.
 */
library Math {
    /**
     * @dev Returns the largest of two numbers.
     */
    function max(uint256 a, uint256 b) internal pure returns (uint256) {
        return a >= b ? a : b;
    }

    /**
     * @dev Returns the smallest of two numbers.
     */
    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        return a < b ? a : b;
    }

    /**
     * @dev Returns the average of two numbers. The result is rounded towards
     * zero.
     */
    function average(uint256 a, uint256 b) internal pure returns (uint256) {
        // (a + b) / 2 can overflow, so we distribute
        return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2);
    }
}

File 7 of 15 : OrakuruCore.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.8.0;

import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";

import {IOrakuruConsumer} from "./interfaces/IOrakuruConsumer.sol";
import {IAddressRegistry} from "./interfaces/IAddressRegistry.sol";
import {IStaking} from "./interfaces/IStaking.sol";
import {IOrakuruCore} from "./interfaces/IOrakuruCore.sol";
import {Aggregation} from "./libraries/Aggregation.sol";
import {BytesUtils} from "./libraries/BytesUtils.sol";
import {StringUtils} from "./libraries/StringUtils.sol";
import {UintUtils} from "./libraries/UintUtils.sol";

import {
    ReentrancyGuard
} from "@openzeppelin/contracts/security/ReentrancyGuard.sol";
import {Pausable} from "@openzeppelin/contracts/security/Pausable.sol";

contract OrakuruCore is IOrakuruCore, Ownable, Pausable {
    using Aggregation for *;
    using StringUtils for string;
    using BytesUtils for bytes;
    using UintUtils for uint256;

    IAddressRegistry public addressRegistry;

    constructor(address _addressRegistry) {
        addressRegistry = IAddressRegistry(_addressRegistry);
    }

    mapping(address => uint256) submittedResultsAmount;

    uint256 private _submissionWindow = 1 minutes;

    uint256 public totalRequestsSubmitted;

    mapping(bytes32 => Request) public requests;
    mapping(bytes32 => Response) public responses;

    bytes32[] private _pendingRequests;

    // Oracle => Request id => Boolean
    mapping(address => mapping(bytes32 => bool)) public hasSubmittedResult;

    // Consumer contract => Nonce
    mapping(address => uint256) private _nonces;

    function makeRequest(
        string calldata _dataSource,
        string calldata _selector,
        address _callbackAddr,
        Aggregation.Type _aggrType,
        uint8 _precision,
        uint256 _executionTimestamp
    ) external override whenNotPaused returns (bytes32) {
        bytes memory selector = bytes(_selector);

        require(
            selector.length == 0 || selector[0] == "$" || selector[0] == "/",
            "Unsupported request type" // '$' Stands for JSON request and '/' stands for XML request
        );

        require(_callbackAddr != address(0), "Invalid callback address");

        require(
            _executionTimestamp >= block.timestamp,
            "Invalid execution timestamp"
        );

        bytes32 id =
            keccak256(
                abi.encodePacked(_callbackAddr, _nonces[_callbackAddr]++)
            );

        Request storage request = requests[id];
        request.id = id;
        request.dataSource = _dataSource;
        request.selector = _selector;
        request.callbackAddr = _callbackAddr;
        request.executionTimestamp = _executionTimestamp;
        request.isFulfilled = false;
        request.aggrType = _aggrType;
        request.precision = _precision;
        request.minResultsNum = uint8(
            IStaking(addressRegistry.getStakingAddr()).getThresholdNum()
        );

        emit Requested(
            id,
            _dataSource,
            _selector,
            _callbackAddr,
            _aggrType,
            _precision,
            _executionTimestamp,
            block.timestamp
        );

        ++totalRequestsSubmitted;

        _pendingRequests.push(id);

        return id;
    }

    function submitResult(bytes32 _requestId, string memory _result)
        external
        override
        onlyOracle
    {
        Request storage request = requests[_requestId];

        bytes memory parsedResult;

        if (request.aggrType == Aggregation.Type.MostFrequent) {
            parsedResult = _result.toBytes();
        } else {
            uint256 parsedUint = _result.parseUint(request.precision);

            if (parsedUint == 0 && bytes(_result)[0] != "0") {
                revert("Invalid result submitted");
            }

            parsedResult = parsedUint.toBytes();
        }

        _submitResult(_requestId, parsedResult);

        emit Submitted(
            _requestId,
            _result,
            parsedResult,
            msg.sender,
            block.timestamp
        );
    }

    function _submitResult(bytes32 _requestId, bytes memory _result) private {
        Request storage request = requests[_requestId];

        require(
            block.timestamp >= request.executionTimestamp,
            "Cannot submit result before the execution time"
        );

        require(
            block.timestamp <= request.executionTimestamp + _submissionWindow,
            "Submission period passed"
        );

        require(
            !hasSubmittedResult[msg.sender][_requestId],
            "Caller has already submitted result for this request"
        );

        bytes32 id = keccak256(abi.encodePacked(_requestId, msg.sender));

        Response memory response =
            Response(id, _requestId, _result, msg.sender, block.timestamp);

        responses[id] = response;

        request.responses.push(response);

        hasSubmittedResult[msg.sender][_requestId] = true;
        submittedResultsAmount[msg.sender]++;
    }

    function fulfillRequest(bytes32 _requestId) external override {
        Request storage request = requests[_requestId];

        require(!request.isFulfilled, "Request already fulfilled");

        require(request.executionTimestamp > 0, "Invalid request id");

        require(
            block.timestamp >= request.executionTimestamp + _submissionWindow,
            "Too early to fulfill the request"
        );

        bytes memory result;

        if (request.responses.length < request.minResultsNum) {
            _handleCallback(_requestId, result, false);
        } else {
            if (request.aggrType == Aggregation.Type.MostFrequent) {
                bytes[] memory results = getResultsBytes(_requestId);
                result = results.mostFrequent();
            } else if (request.aggrType == Aggregation.Type.Median) {
                uint256[] memory results = getResultsUint(_requestId);
                result = results.median().toBytes();
            } else if (request.aggrType == Aggregation.Type.Average) {
                uint256[] memory results = getResultsUint(_requestId);
                result = results.average().toBytes();
            } else {
                revert("Invalid aggregation type");
            }
            _handleCallback(_requestId, result, true);
        }

        request.isFulfilled = true;
        _removePendingRequest(_requestId);

        emit Fulfilled(_requestId, result, block.timestamp);
    }

    function _handleCallback(
        bytes32 _requestId,
        bytes memory _result,
        bool _success
    ) private {
        Request storage request = requests[_requestId];
        bytes memory result;

        if (
            request.aggrType != Aggregation.Type.MostFrequent &&
            _result.isEmpty()
        ) {
            result = uint256(0).toBytes();
        } else {
            result = _result;
        }

        try
            IOrakuruConsumer(request.callbackAddr).__callback__(
                _requestId,
                result,
                _success
            )
        {
            emit CallbackTriggered(_requestId);
        } catch Error(string memory reason) {
            emit CallbackReverted(_requestId, reason);
        } catch (bytes memory reason) {
            emit CallbackReverted(_requestId, reason.toString());
        }
    }

    function _removePendingRequest(bytes32 _requestId) private {
        uint256 length = _pendingRequests.length;
        for (uint256 i = 0; i < length; i++) {
            if (_pendingRequests[i] == _requestId) {
                _pendingRequests[i] = _pendingRequests[length - 1];
                _pendingRequests.pop();
                break;
            }
        }
    }

    function getPendingRequests()
        external
        view
        override
        returns (bytes32[] memory)
    {
        return _pendingRequests;
    }

    function cancelRequest(bytes32 _requestId)
        external
        override
        returns (bool)
    {
        Request storage request = requests[_requestId];

        require(msg.sender == request.callbackAddr, "Unauthorized cancel");
        require(
            block.timestamp < request.executionTimestamp,
            "Too late to cancel"
        );

        delete requests[_requestId];
        _removePendingRequest(_requestId);

        emit Canceled(_requestId, block.timestamp);

        return true;
    }

    function getResponses(bytes32 _requestId)
        external
        view
        override
        returns (Response[] memory)
    {
        Request storage request = requests[_requestId];
        return request.responses;
    }

    function getResultsBytes(bytes32 _requestId)
        public
        view
        override
        returns (bytes[] memory)
    {
        Request storage request = requests[_requestId];
        bytes[] memory results = new bytes[](request.responses.length);

        for (uint256 i = 0; i < request.responses.length; i++) {
            Response memory response = request.responses[i];
            results[i] = response.result;
        }
        return results;
    }

    function getResultsUint(bytes32 _requestId)
        public
        view
        override
        returns (uint256[] memory)
    {
        Request storage request = requests[_requestId];
        uint256[] memory results = new uint256[](request.responses.length);

        for (uint256 i = 0; i < request.responses.length; i++) {
            Response memory response = request.responses[i];
            results[i] = response.result.toUint();
        }
        return results;
    }

    function getExecutionTimestamp(bytes32 _requestId)
        external
        view
        override
        returns (uint256)
    {
        return requests[_requestId].executionTimestamp;
    }

    function getRequest(bytes32 _requestId)
        external
        view
        override
        returns (
            bytes32 id,
            string memory dataSource,
            string memory selector,
            address callbackAddr,
            uint256 executionTimestamp,
            bool isFulfilled,
            Aggregation.Type aggrType,
            uint8 precision,
            uint8 minResultsNum
        )
    {
        Request storage request = requests[_requestId];
        id = request.id;
        dataSource = request.dataSource;
        selector = request.selector;
        callbackAddr = request.callbackAddr;
        executionTimestamp = request.executionTimestamp;
        isFulfilled = request.isFulfilled;
        aggrType = request.aggrType;
        precision = request.precision;
        minResultsNum = request.minResultsNum;
    }

    function getSubmissionWindow() external view override returns (uint256) {
        return _submissionWindow;
    }

    function getNonceFor(address _addr)
        external
        view
        override
        returns (uint256)
    {
        return _nonces[_addr];
    }

    modifier onlyOracle() {
        require(
            IStaking(addressRegistry.getStakingAddr()).isRegisteredOracle(
                msg.sender
            ),
            "Caller is not a registered oracle"
        );
        _;
    }

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

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

File 8 of 15 : IAddressRegistry.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.8.0;

interface IAddressRegistry {
    function getOrakuruCoreAddr() external view returns (address);

    function getStakingAddr() external view returns (address);

    function getOrkTokenAddr() external view returns (address);
}

File 9 of 15 : IOrakuruConsumer.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.8.0;

interface IOrakuruConsumer {
    function __callback__(
        bytes32 _requestId,
        bytes memory _result,
        bool _success
    ) external;
}

File 10 of 15 : IOrakuruCore.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.8.0;
import {Aggregation} from "../libraries/Aggregation.sol";

interface IOrakuruCore {
    event Requested(
        bytes32 indexed requestId,
        string dataSource,
        string selector,
        address indexed callbackAddr,
        Aggregation.Type aggrType,
        uint8 precision,
        uint256 executionTimestamp,
        uint256 timestamp
    );

    event Submitted(
        bytes32 indexed requestId,
        string submittedResult,
        bytes parsedResult,
        address indexed oracle,
        uint256 timestamp
    );
    event Fulfilled(bytes32 indexed requestId, bytes result, uint256 timestamp);
    event Canceled(bytes32 indexed requestId, uint256 timestamp);

    event CallbackReverted(bytes32 indexed requestId, string reason);
    event CallbackTriggered(bytes32 indexed requestId);

    struct Request {
        bytes32 id;
        string dataSource;
        string selector;
        address callbackAddr;
        uint256 executionTimestamp;
        bool isFulfilled;
        Aggregation.Type aggrType;
        uint8 precision;
        uint8 minResultsNum;
        Response[] responses;
    }

    struct Response {
        bytes32 id;
        bytes32 requestId;
        bytes result;
        address submittedBy;
        uint256 submittedAt;
    }

    function makeRequest(
        string calldata _dataSource,
        string calldata _selector,
        address _calldataAddr,
        Aggregation.Type _aggrType,
        uint8 _precision,
        uint256 _executionTimestamp
    ) external returns (bytes32);

    function submitResult(bytes32 _requestId, string memory _result) external;

    function fulfillRequest(bytes32 _requestId) external;

    function getPendingRequests() external view returns (bytes32[] memory);

    function cancelRequest(bytes32 _requestId) external returns (bool);

    function getResponses(bytes32 _requestId)
        external
        view
        returns (Response[] memory);

    function getResultsBytes(bytes32 _requestId)
        external
        view
        returns (bytes[] memory);

    function getResultsUint(bytes32 _requestId)
        external
        view
        returns (uint256[] memory);

    function getNonceFor(address _addr) external view returns (uint256);

    function getExecutionTimestamp(bytes32 _requestId)
        external
        view
        returns (uint256);

    function getSubmissionWindow() external view returns (uint256);

    function getRequest(bytes32 _requestId)
        external
        view
        returns (
            bytes32 id,
            string memory dataSource,
            string memory selector,
            address callbackAddr,
            uint256 executionTimestamp,
            bool isFulfilled,
            Aggregation.Type aggrType,
            uint8 precision,
            uint8 minResultsNum
        );
}

File 11 of 15 : IStaking.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.8.0;

interface IStaking {
    function isRegisteredOracle(address _oracle) external view returns (bool);

    function registeredOraclesNum() external view returns (uint256);

    function getThresholdNum() external view returns (uint256);
}

File 12 of 15 : Aggregation.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.8.0;

import "@openzeppelin/contracts/utils/math/Math.sol";

library Aggregation {
    enum Type {MostFrequent, Median, Average}

    function swap(
        uint256[] memory array,
        uint256 i,
        uint256 j
    ) internal pure {
        (array[i], array[j]) = (array[j], array[i]);
    }

    function sort(
        uint256[] memory array,
        uint256 begin,
        uint256 end
    ) internal pure {
        if (begin < end) {
            uint256 j = begin;
            uint256 pivot = array[j];
            for (uint256 i = begin + 1; i < end; ++i) {
                if (array[i] < pivot) {
                    swap(array, i, ++j);
                }
            }
            swap(array, begin, j);
            sort(array, begin, j);
            sort(array, j + 1, end);
        }
    }

    function median(uint256[] memory array, uint256 length)
        internal
        pure
        returns (uint256)
    {
        sort(array, 0, length);
        return
            length % 2 == 0
                ? Math.average(array[length / 2 - 1], array[length / 2])
                : array[length / 2];
    }

    function median(uint256[] memory array) internal pure returns (uint256) {
        uint256 length = array.length;
        sort(array, 0, length);
        return
            length % 2 == 0
                ? Math.average(array[length / 2 - 1], array[length / 2])
                : array[length / 2];
    }

    function average(uint256[] memory array) internal pure returns (uint256) {
        uint256 sum;
        for (uint256 i = 0; i < array.length; i++) {
            sum += array[i];
        }
        return sum / array.length;
    }

    function mostFrequent(bytes[] memory array)
        internal
        pure
        returns (bytes memory element)
    {
        uint256 maxCounter = 0;

        for (uint256 i = 0; i < array.length; i++) {
            uint256 counter = 1;
            for (uint256 j = i + 1; j < array.length; j++) {
                if (keccak256(bytes(array[i])) == keccak256(bytes(array[j]))) {
                    counter++;
                }
            }
            if (maxCounter < counter) {
                maxCounter = counter;
                element = array[i];
            }
        }
    }
}

File 13 of 15 : BytesUtils.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.8.0;

library BytesUtils {
    function toUint(bytes memory _bytes)
        internal
        pure
        returns (uint256 result)
    {
        require(
            _bytes.length >= 32,
            "Bytes to uint converstion failed: Out of bonds"
        );

        assembly {
            result := mload(add(add(_bytes, 0x20), 0))
        }
    }

    function toString(bytes memory _bytes)
        internal
        pure
        returns (string memory)
    {
        return string(_bytes);
    }

    function isEmpty(bytes memory _bytes) internal pure returns (bool) {
        return
            keccak256(abi.encodePacked(_bytes)) ==
            keccak256(abi.encodePacked(""));
    }
}

File 14 of 15 : StringUtils.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.8.0;

library StringUtils {
    function parseUint(string memory _a, uint256 _b)
        internal
        pure
        returns (uint256)
    {
        bytes memory bresult = bytes(_a);
        uint256 mint = 0;
        bool decimals = false;
        for (uint256 i = 0; i < bresult.length; i++) {
            if ((uint8(bresult[i]) >= 48) && (uint8(bresult[i]) <= 57)) {
                if (decimals) {
                    if (_b == 0) break;
                    else _b--;
                }
                mint *= 10;
                mint += uint8(bresult[i]) - 48;
            } else if (uint8(bresult[i]) == 46) decimals = true;
        }
        if (_b > 0) mint *= 10**_b;
        return mint;
    }

    function toBytes(string memory _string)
        internal
        pure
        returns (bytes memory)
    {
        return bytes(_string);
    }

    function isEqualTo(string memory _a, string memory _b)
        internal
        pure
        returns (bool)
    {
        return
            keccak256(abi.encodePacked(_a)) == keccak256(abi.encodePacked(_b));
    }
}

File 15 of 15 : UintUtils.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.8.0;

library UintUtils {
    function toBytes(uint256 _uint)
        internal
        pure
        returns (bytes memory result)
    {
        result = new bytes(32);
        assembly {
            mstore(add(result, 32), _uint)
        }
    }
}

Settings
{
  "evmVersion": "istanbul",
  "libraries": {},
  "metadata": {
    "bytecodeHash": "ipfs",
    "useLiteralContent": true
  },
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "remappings": [],
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  }
}

Contract ABI

[{"inputs":[{"internalType":"address","name":"_addressRegistry","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"requestId","type":"bytes32"},{"indexed":false,"internalType":"string","name":"reason","type":"string"}],"name":"CallbackReverted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"requestId","type":"bytes32"}],"name":"CallbackTriggered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"requestId","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"Canceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"requestId","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"result","type":"bytes"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"Fulfilled","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":true,"internalType":"bytes32","name":"requestId","type":"bytes32"},{"indexed":false,"internalType":"string","name":"dataSource","type":"string"},{"indexed":false,"internalType":"string","name":"selector","type":"string"},{"indexed":true,"internalType":"address","name":"callbackAddr","type":"address"},{"indexed":false,"internalType":"enum Aggregation.Type","name":"aggrType","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"precision","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"executionTimestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"Requested","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"requestId","type":"bytes32"},{"indexed":false,"internalType":"string","name":"submittedResult","type":"string"},{"indexed":false,"internalType":"bytes","name":"parsedResult","type":"bytes"},{"indexed":true,"internalType":"address","name":"oracle","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"Submitted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"addressRegistry","outputs":[{"internalType":"contract IAddressRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_requestId","type":"bytes32"}],"name":"cancelRequest","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_requestId","type":"bytes32"}],"name":"fulfillRequest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_requestId","type":"bytes32"}],"name":"getExecutionTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"getNonceFor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPendingRequests","outputs":[{"internalType":"bytes32[]","name":"","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_requestId","type":"bytes32"}],"name":"getRequest","outputs":[{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"string","name":"dataSource","type":"string"},{"internalType":"string","name":"selector","type":"string"},{"internalType":"address","name":"callbackAddr","type":"address"},{"internalType":"uint256","name":"executionTimestamp","type":"uint256"},{"internalType":"bool","name":"isFulfilled","type":"bool"},{"internalType":"enum Aggregation.Type","name":"aggrType","type":"uint8"},{"internalType":"uint8","name":"precision","type":"uint8"},{"internalType":"uint8","name":"minResultsNum","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_requestId","type":"bytes32"}],"name":"getResponses","outputs":[{"components":[{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"bytes32","name":"requestId","type":"bytes32"},{"internalType":"bytes","name":"result","type":"bytes"},{"internalType":"address","name":"submittedBy","type":"address"},{"internalType":"uint256","name":"submittedAt","type":"uint256"}],"internalType":"struct IOrakuruCore.Response[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_requestId","type":"bytes32"}],"name":"getResultsBytes","outputs":[{"internalType":"bytes[]","name":"","type":"bytes[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_requestId","type":"bytes32"}],"name":"getResultsUint","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSubmissionWindow","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"hasSubmittedResult","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_dataSource","type":"string"},{"internalType":"string","name":"_selector","type":"string"},{"internalType":"address","name":"_callbackAddr","type":"address"},{"internalType":"enum Aggregation.Type","name":"_aggrType","type":"uint8"},{"internalType":"uint8","name":"_precision","type":"uint8"},{"internalType":"uint256","name":"_executionTimestamp","type":"uint256"}],"name":"makeRequest","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"nonpayable","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":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"requests","outputs":[{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"string","name":"dataSource","type":"string"},{"internalType":"string","name":"selector","type":"string"},{"internalType":"address","name":"callbackAddr","type":"address"},{"internalType":"uint256","name":"executionTimestamp","type":"uint256"},{"internalType":"bool","name":"isFulfilled","type":"bool"},{"internalType":"enum Aggregation.Type","name":"aggrType","type":"uint8"},{"internalType":"uint8","name":"precision","type":"uint8"},{"internalType":"uint8","name":"minResultsNum","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"responses","outputs":[{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"bytes32","name":"requestId","type":"bytes32"},{"internalType":"bytes","name":"result","type":"bytes"},{"internalType":"address","name":"submittedBy","type":"address"},{"internalType":"uint256","name":"submittedAt","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_requestId","type":"bytes32"},{"internalType":"string","name":"_result","type":"string"}],"name":"submitResult","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalRequestsSubmitted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052603c6003553480156200001657600080fd5b5060405162003321380380620033218339810160408190526200003991620000ad565b600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506000805460ff60a01b19169055600180546001600160a01b0319166001600160a01b0392909216919091179055620000dd565b600060208284031215620000bf578081fd5b81516001600160a01b0381168114620000d6578182fd5b9392505050565b61323480620000ed6000396000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c80638da5cb5b116100c3578063cd824ed61161007c578063cd824ed6146102f0578063d4b8df2214610303578063dc6822dd14610323578063f2fde38b14610351578063f3ad65f414610364578063fb1e61ca1461037757600080fd5b80638da5cb5b1461023b5780639290f830146102605780639d86698514610283578063bf3125c7146102ab578063c7df92d4146102d4578063cc19fa97146102dd57600080fd5b8063715018a611610115578063715018a6146101ca57806372164a6c146101d25780637c57a2c3146101f657806380a1f712146101fe5780638456cb591461021357806385bf2c801461021b57600080fd5b80633f4ba83a14610152578063432d01371461015c578063501255461461016f578063588f7a2c146101975780635c975abb146101b8575b600080fd5b61015a61038a565b005b61015a61016a366004612980565b6103c7565b61018261017d366004612980565b6106a0565b60405190151581526020015b60405180910390f35b6101aa6101a5366004612a35565b6107fb565b60405190815260200161018e565b600054600160a01b900460ff16610182565b61015a610cb7565b6101e56101e0366004612980565b610d2b565b60405161018e959493929190612cd9565b6003546101aa565b610206610dec565b60405161018e9190612b97565b61015a610e44565b61022e610229366004612980565b610e76565b60405161018e9190612bdb565b6000546001600160a01b03165b6040516001600160a01b03909116815260200161018e565b6101aa61026e366004612980565b60009081526005602052604090206004015490565b610296610291366004612980565b61104a565b60405161018e99989796959493929190612d40565b6101aa6102b93660046128fd565b6001600160a01b031660009081526009602052604090205490565b6101aa60045481565b6102066102eb366004612980565b6111ba565b61015a6102fe366004612998565b611381565b610316610311366004612980565b611631565b60405161018e9190612c3c565b610182610331366004612935565b600860209081526000928352604080842090915290825290205460ff1681565b61015a61035f3660046128fd565b61176a565b600154610248906001600160a01b031681565b610296610385366004612980565b611854565b6000546001600160a01b031633146103bd5760405162461bcd60e51b81526004016103b490612e82565b60405180910390fd5b6103c56119ec565b565b60008181526005602081905260409091209081015460ff161561042c5760405162461bcd60e51b815260206004820152601960248201527f5265717565737420616c72656164792066756c66696c6c65640000000000000060448201526064016103b4565b60008160040154116104755760405162461bcd60e51b8152602060048201526012602482015271125b9d985b1a59081c995c5d595cdd081a5960721b60448201526064016103b4565b60035481600401546104879190612eb7565b4210156104d65760405162461bcd60e51b815260206004820181905260248201527f546f6f206561726c7920746f2066756c66696c6c20746865207265717565737460448201526064016103b4565b600581015460068201546060916301000000900460ff161115610504576104ff83826000611a89565b610649565b60006005830154610100900460ff16600281111561053257634e487b7160e01b600052602160045260246000fd5b141561055657600061054384610e76565b905061054e81611c52565b91505061063d565b60016005830154610100900460ff16600281111561058457634e487b7160e01b600052602160045260246000fd5b14156105a8576000610595846111ba565b905061054e6105a382611d50565b611e28565b60026005830154610100900460ff1660028111156105d657634e487b7160e01b600052602160045260246000fd5b14156105f55760006105e7846111ba565b905061054e6105a382611e52565b60405162461bcd60e51b815260206004820152601860248201527f496e76616c6964206167677265676174696f6e2074797065000000000000000060448201526064016103b4565b61064983826001611a89565b60058201805460ff1916600117905561066183611eb5565b827f6275983343352535e2bea6cfe2c9b9194170888df271ea1df95e9ac77bb7a5038242604051610693929190612dbe565b60405180910390a2505050565b600081815260056020526040812060038101546001600160a01b031633146107005760405162461bcd60e51b8152602060048201526013602482015272155b985d5d1a1bdc9a5e99590818d85b98d95b606a1b60448201526064016103b4565b806004015442106107485760405162461bcd60e51b8152602060048201526012602482015271151bdbc81b185d19481d1bc818d85b98d95b60721b60448201526064016103b4565b6000838152600560205260408120818155906107676001830182612708565b610775600283016000612708565b6003820180546001600160a01b031916905560006004830181905560058301805463ffffffff191690556107ad906006840190612745565b50506107b883611eb5565b827fd44296913fbcdd73d01927e8e2f0a7a83e01e8561e2d0da36b4c9f2bec9cffb0426040516107ea91815260200190565b60405180910390a250600192915050565b60008054600160a01b900460ff16156108495760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016103b4565b600087878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505082519293505090159050806108c75750806000815181106108b057634e487b7160e01b600052603260045260246000fd5b6020910101516001600160f81b031916600960fa1b145b806109055750806000815181106108ee57634e487b7160e01b600052603260045260246000fd5b6020910101516001600160f81b031916602f60f81b145b6109515760405162461bcd60e51b815260206004820152601860248201527f556e737570706f7274656420726571756573742074797065000000000000000060448201526064016103b4565b6001600160a01b0386166109a75760405162461bcd60e51b815260206004820152601860248201527f496e76616c69642063616c6c6261636b2061646472657373000000000000000060448201526064016103b4565b428310156109f75760405162461bcd60e51b815260206004820152601b60248201527f496e76616c696420657865637574696f6e2074696d657374616d70000000000060448201526064016103b4565b6001600160a01b03861660009081526009602052604081208054889183610a1d836130d6565b9091555060405160609290921b6bffffffffffffffffffffffff19166020830152603482015260540160408051601f198184030181529181528151602092830120600081815260059093529120818155909150610a7e600182018d8d612766565b50610a8d600282018b8b612766565b506003810180546001600160a01b0319166001600160a01b038a161790556004810185905560058101805460ff198116825588919061ffff1916610100836002811115610aea57634e487b7160e01b600052602160045260246000fd5b021790555060058101805462ff000019166201000060ff89160217905560015460408051630dec75af60e21b815290516001600160a01b03909216916337b1d6bc91600480820192602092909190829003018186803b158015610b4c57600080fd5b505afa158015610b60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b849190612919565b6001600160a01b03166376540c5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610bbc57600080fd5b505afa158015610bd0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf49190612aec565b8160050160036101000a81548160ff021916908360ff160217905550876001600160a01b0316827f1ec8f6e317dae18a420e22a3cb57fa975f9a2030cbc3ed06dbfed961756f8fb08e8e8e8e8d8d8d42604051610c58989796959493929190612de0565b60405180910390a3600460008154610c6f906130d6565b9091555050600780546001810182556000919091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688018190559a9950505050505050505050565b6000546001600160a01b03163314610ce15760405162461bcd60e51b81526004016103b490612e82565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60066020526000908152604090208054600182015460028301805492939192610d539061306e565b80601f0160208091040260200160405190810160405280929190818152602001828054610d7f9061306e565b8015610dcc5780601f10610da157610100808354040283529160200191610dcc565b820191906000526020600020905b815481529060010190602001808311610daf57829003601f168201915b50505050600383015460049093015491926001600160a01b031691905085565b60606007805480602002602001604051908101604052809291908181526020018280548015610e3a57602002820191906000526020600020905b815481526020019060010190808311610e26575b5050505050905090565b6000546001600160a01b03163314610e6e5760405162461bcd60e51b81526004016103b490612e82565b6103c5611faa565b600081815260056020526040812060068101546060929067ffffffffffffffff811115610eb357634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610ee657816020015b6060815260200190600190039081610ed15790505b50905060005b6006830154811015611042576000836006018281548110610f1d57634e487b7160e01b600052603260045260246000fd5b90600052602060002090600502016040518060a00160405290816000820154815260200160018201548152602001600282018054610f5a9061306e565b80601f0160208091040260200160405190810160405280929190818152602001828054610f869061306e565b8015610fd35780601f10610fa857610100808354040283529160200191610fd3565b820191906000526020600020905b815481529060010190602001808311610fb657829003601f168201915b505050918352505060038201546001600160a01b0316602082015260049091015460409182015281015184519192509084908490811061102357634e487b7160e01b600052603260045260246000fd5b602002602001018190525050808061103a906130d6565b915050610eec565b509392505050565b6005602052600090815260409020805460018201805491929161106c9061306e565b80601f01602080910402602001604051908101604052809291908181526020018280546110989061306e565b80156110e55780601f106110ba576101008083540402835291602001916110e5565b820191906000526020600020905b8154815290600101906020018083116110c857829003601f168201915b5050505050908060020180546110fa9061306e565b80601f01602080910402602001604051908101604052809291908181526020018280546111269061306e565b80156111735780601f1061114857610100808354040283529160200191611173565b820191906000526020600020905b81548152906001019060200180831161115657829003601f168201915b505050506003830154600484015460059094015492936001600160a01b039091169290915060ff808216916101008104821691620100008204811691630100000090041689565b600081815260056020526040812060068101546060929067ffffffffffffffff8111156111f757634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611220578160200160208202803683370190505b50905060005b600683015481101561104257600083600601828154811061125757634e487b7160e01b600052603260045260246000fd5b90600052602060002090600502016040518060a001604052908160008201548152602001600182015481526020016002820180546112949061306e565b80601f01602080910402602001604051908101604052809291908181526020018280546112c09061306e565b801561130d5780601f106112e25761010080835404028352916020019161130d565b820191906000526020600020905b8154815290600101906020018083116112f057829003601f168201915b505050918352505060038201546001600160a01b0316602082015260049091015460409182015281015190915061134390612032565b83838151811061136357634e487b7160e01b600052603260045260246000fd5b60209081029190910101525080611379816130d6565b915050611226565b600160009054906101000a90046001600160a01b03166001600160a01b03166337b1d6bc6040518163ffffffff1660e01b815260040160206040518083038186803b1580156113cf57600080fd5b505afa1580156113e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114079190612919565b604051632911eb2160e01b81523360048201526001600160a01b039190911690632911eb219060240160206040518083038186803b15801561144857600080fd5b505afa15801561145c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114809190612960565b6114d65760405162461bcd60e51b815260206004820152602160248201527f43616c6c6572206973206e6f7420612072656769737465726564206f7261636c6044820152606560f81b60648201526084016103b4565b6000828152600560205260408120906060906005830154610100900460ff16600281111561151457634e487b7160e01b600052602160045260246000fd5b14156115215750816115db565b600582015460009061153d90859062010000900460ff166120a5565b90508015801561158157508360008151811061156957634e487b7160e01b600052603260045260246000fd5b6020910101516001600160f81b031916600360fc1b14155b156115ce5760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420726573756c74207375626d6974746564000000000000000060448201526064016103b4565b6115d781611e28565b9150505b6115e584826121ff565b336001600160a01b0316847f0e6a30477d982ffc8b01f549586b7f90fb7a42e549529709b591d1995af0e16685844260405161162393929190612e4c565b60405180910390a350505050565b600081815260056020908152604080832060068101805483518186028101860190945280845260609592949192909184015b8282101561175e57838290600052602060002090600502016040518060a001604052908160008201548152602001600182015481526020016002820180546116aa9061306e565b80601f01602080910402602001604051908101604052809291908181526020018280546116d69061306e565b80156117235780601f106116f857610100808354040283529160200191611723565b820191906000526020600020905b81548152906001019060200180831161170657829003601f168201915b505050918352505060038201546001600160a01b03166020808301919091526004909201546040909101529082526001929092019101611663565b50505050915050919050565b6000546001600160a01b031633146117945760405162461bcd60e51b81526004016103b490612e82565b6001600160a01b0381166117f95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103b4565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60006060806000806000806000806000600560008c815260200190815260200160002090508060000154995080600101805461188f9061306e565b80601f01602080910402602001604051908101604052809291908181526020018280546118bb9061306e565b80156119085780601f106118dd57610100808354040283529160200191611908565b820191906000526020600020905b8154815290600101906020018083116118eb57829003601f168201915b5050505050985080600201805461191e9061306e565b80601f016020809104026020016040519081016040528092919081815260200182805461194a9061306e565b80156119975780601f1061196c57610100808354040283529160200191611997565b820191906000526020600020905b81548152906001019060200180831161197a57829003601f168201915b50505050600383015460048401546005909401549c9e9b9d50919b6001600160a01b039092169a9299505060ff8082169850610100820481169750620100008204811696506301000000909104169350915050565b600054600160a01b900460ff16611a3c5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016103b4565b6000805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6000838152600560205260408120906060906005830154610100900460ff166002811115611ac757634e487b7160e01b600052602160045260246000fd5b14158015611ad95750611ad9846124f0565b15611aef57611ae86000611e28565b9050611af2565b50825b6003820154604051635ddcbd1f60e01b81526001600160a01b0390911690635ddcbd1f90611b2890889085908890600401612d15565b600060405180830381600087803b158015611b4257600080fd5b505af1925050508015611b53575060015b611c1f57611b5f613147565b806308c379a01415611bbd5750611b7461315f565b80611b7f5750611bbf565b857f244d52f67d555b1e1379af00ff8577dc1bf67fbd65c1a52ad3faeb68627a98c282604051611baf9190612e39565b60405180910390a250611c4b565b505b3d808015611be9576040519150601f19603f3d011682016040523d82523d6000602084013e611bee565b606091505b50857f244d52f67d555b1e1379af00ff8577dc1bf67fbd65c1a52ad3faeb68627a98c282604051611baf9190612e39565b60405185907fac322a4de9f9c8916a57af173fa0a15c6b7cee6672736d73fc1b5c338930645290600090a25b5050505050565b60606000805b8351811015611d495760016000611c6f8383612eb7565b90505b8551811015611cff57858181518110611c9b57634e487b7160e01b600052603260045260246000fd5b602002602001015180519060200120868481518110611cca57634e487b7160e01b600052603260045260246000fd5b6020026020010151805190602001201415611ced5781611ce9816130d6565b9250505b80611cf7816130d6565b915050611c72565b5080831015611d3657809250848281518110611d2b57634e487b7160e01b600052603260045260246000fd5b602002602001015193505b5080611d41816130d6565b915050611c58565b5050919050565b8051600090611d60838383612532565b611d6b6002826130f1565b15611da75782611d7c600283612ecf565b81518110611d9a57634e487b7160e01b600052603260045260246000fd5b6020026020010151611e21565b611e21836001611db8600285612ecf565b611dc29190612fed565b81518110611de057634e487b7160e01b600052603260045260246000fd5b602002602001015184600284611df69190612ecf565b81518110611e1457634e487b7160e01b600052603260045260246000fd5b6020026020010151612606565b9392505050565b60408051602080825281830190925260609160208201818036833750505060208101929092525090565b60008060005b8351811015611ea857838181518110611e8157634e487b7160e01b600052603260045260246000fd5b602002602001015182611e949190612eb7565b915080611ea0816130d6565b915050611e58565b508251611e219082612ecf565b60075460005b81811015611fa5578260078281548110611ee557634e487b7160e01b600052603260045260246000fd5b90600052602060002001541415611f93576007611f03600184612fed565b81548110611f2157634e487b7160e01b600052603260045260246000fd5b906000526020600020015460078281548110611f4d57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001556007805480611f7857634e487b7160e01b600052603160045260246000fd5b60019003818190600052602060002001600090559055505050565b80611f9d816130d6565b915050611ebb565b505050565b600054600160a01b900460ff1615611ff75760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016103b4565b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611a6c3390565b600060208251101561209d5760405162461bcd60e51b815260206004820152602e60248201527f427974657320746f2075696e7420636f6e7665727374696f6e206661696c656460448201526d3a204f7574206f6620626f6e647360901b60648201526084016103b4565b506020015190565b6000828180805b83518110156121d55760308482815181106120d757634e487b7160e01b600052603260045260246000fd5b016020015160f81c108015906121155750603984828151811061210a57634e487b7160e01b600052603260045260246000fd5b016020015160f81c11155b1561218d578115612138578561212a576121d5565b8561213481613057565b9650505b612143600a84612fce565b9250603084828151811061216757634e487b7160e01b600052603260045260246000fd5b0160200151612179919060f81c613004565b6121869060ff1684612eb7565b92506121c3565b8381815181106121ad57634e487b7160e01b600052603260045260246000fd5b60209101015160f81c602e14156121c357600191505b806121cd816130d6565b9150506120ac565b5084156121f4576121e785600a612f26565b6121f19083612fce565b91505b509150505b92915050565b600082815260056020526040902060048101544210156122785760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f74207375626d697420726573756c74206265666f7265207468652060448201526d657865637574696f6e2074696d6560901b60648201526084016103b4565b600354816004015461228a9190612eb7565b4211156122d95760405162461bcd60e51b815260206004820152601860248201527f5375626d697373696f6e20706572696f6420706173736564000000000000000060448201526064016103b4565b33600090815260086020908152604080832086845290915290205460ff16156123615760405162461bcd60e51b815260206004820152603460248201527f43616c6c65722068617320616c7265616479207375626d6974746564207265736044820152731d5b1d08199bdc881d1a1a5cc81c995c5d595cdd60621b60648201526084016103b4565b6000833360405160200161239192919091825260601b6bffffffffffffffffffffffff1916602082015260340190565b60408051601f19818403018152828252805160209182012060a084018352808452838201888152848401888152336060870152426080870152600083815260068552949094208551815590516001820155925180519195508493926123fe926002850192909101906127ea565b5060608201516003820180546001600160a01b0319166001600160a01b03909216919091179055608090910151600490910155600683018054600181810183556000928352602092839020845160059093020191825583830151908201556040830151805184936124769260028501929101906127ea565b5060608201516003820180546001600160a01b0319166001600160a01b039092169190911790556080909101516004909101553360008181526008602090815260408083208984528252808320805460ff19166001179055928252600290529081208054916124e4836130d6565b91905055505050505050565b60408051600080825260208201808452825190209092909161251491859101612b7b565b60405160208183030381529060405280519060200120149050919050565b80821015611fa5576000829050600084828151811061256157634e487b7160e01b600052603260045260246000fd5b60200260200101519050600084600161257a9190612eb7565b90505b838110156125da57818682815181106125a657634e487b7160e01b600052603260045260246000fd5b602002602001015110156125ca576125ca86826125c2866130d6565b95508561265d565b6125d3816130d6565b905061257d565b506125e685858461265d565b6125f1858584612532565b611c4b85612600846001612eb7565b85612532565b6000600261261481846130f1565b61261f6002866130f1565b6126299190612eb7565b6126339190612ecf565b61263e600284612ecf565b612649600286612ecf565b6126539190612eb7565b611e219190612eb7565b82818151811061267d57634e487b7160e01b600052603260045260246000fd5b60200260200101518383815181106126a557634e487b7160e01b600052603260045260246000fd5b60200260200101518484815181106126cd57634e487b7160e01b600052603260045260246000fd5b602002602001018584815181106126f457634e487b7160e01b600052603260045260246000fd5b602090810291909101019190915252505050565b5080546127149061306e565b6000825580601f10612724575050565b601f016020900490600052602060002090810190612742919061285e565b50565b50805460008255600502906000526020600020908101906127429190612873565b8280546127729061306e565b90600052602060002090601f01602090048101928261279457600085556127da565b82601f106127ad5782800160ff198235161785556127da565b828001600101855582156127da579182015b828111156127da5782358255916020019190600101906127bf565b506127e692915061285e565b5090565b8280546127f69061306e565b90600052602060002090601f01602090048101928261281857600085556127da565b82601f1061283157805160ff19168380011785556127da565b828001600101855582156127da579182015b828111156127da578251825591602001919060010190612843565b5b808211156127e6576000815560010161285f565b808211156127e6576000808255600182018190556128946002830182612708565b506003810180546001600160a01b031916905560006004820155600501612873565b60008083601f8401126128c7578182fd5b50813567ffffffffffffffff8111156128de578182fd5b6020830191508360208285010111156128f657600080fd5b9250929050565b60006020828403121561290e578081fd5b8135611e21816131e9565b60006020828403121561292a578081fd5b8151611e21816131e9565b60008060408385031215612947578081fd5b8235612952816131e9565b946020939093013593505050565b600060208284031215612971578081fd5b81518015158114611e21578182fd5b600060208284031215612991578081fd5b5035919050565b600080604083850312156129aa578182fd5b8235915060208084013567ffffffffffffffff808211156129c9578384fd5b818601915086601f8301126129dc578384fd5b8135818111156129ee576129ee613131565b6040519150612a06601f8201601f19168501836130a9565b8082528784828501011115612a19578485fd5b8084840185840137810190920192909252919491935090915050565b60008060008060008060008060c0898b031215612a50578384fd5b883567ffffffffffffffff80821115612a67578586fd5b612a738c838d016128b6565b909a50985060208b0135915080821115612a8b578586fd5b50612a988b828c016128b6565b9097509550506040890135612aac816131e9565b9350606089013560038110612abf578384fd5b9250608089013560ff81168114612ad4578283fd5b8092505060a089013590509295985092959890939650565b600060208284031215612afd578081fd5b5051919050565b60008151808452612b1c816020860160208601613027565b601f01601f19169290920160200192915050565b60038110612b4e57634e487b7160e01b600052602160045260246000fd5b9052565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60008251612b8d818460208701613027565b9190910192915050565b6020808252825182820181905260009190848201906040850190845b81811015612bcf57835183529284019291840191600101612bb3565b50909695505050505050565b6000602080830181845280855180835260408601915060408160051b8701019250838701855b82811015612c2f57603f19888603018452612c1d858351612b04565b94509285019290850190600101612c01565b5092979650505050505050565b60006020808301818452808551808352604092508286019150828160051b870101848801865b83811015612ccb57603f19898403018552815160a0815185528882015189860152878201518189870152612c9882870182612b04565b6060848101516001600160a01b031690880152608093840151939096019290925250509386019390860190600101612c62565b509098975050505050505050565b85815284602082015260a060408201526000612cf860a0830186612b04565b6001600160a01b0394909416606083015250608001529392505050565b838152606060208201526000612d2e6060830185612b04565b90508215156040830152949350505050565b60006101208b8352806020840152612d5a8184018c612b04565b90508281036040840152612d6e818b612b04565b6001600160a01b038a1660608501526080840189905287151560a08501529150612d9d905060c0830186612b30565b60ff841660e083015260ff83166101008301529a9950505050505050505050565b604081526000612dd16040830185612b04565b90508260208301529392505050565b60c081526000612df460c083018a8c612b52565b8281036020840152612e0781898b612b52565b915050612e176040830187612b30565b60ff851660608301528360808301528260a08301529998505050505050505050565b602081526000611e216020830184612b04565b606081526000612e5f6060830186612b04565b8281036020840152612e718186612b04565b915050826040830152949350505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60008219821115612eca57612eca613105565b500190565b600082612ede57612ede61311b565b500490565b600181815b80851115612f1e578160001904821115612f0457612f04613105565b80851615612f1157918102915b93841c9390800290612ee8565b509250929050565b6000611e218383600082612f3c575060016121f9565b81612f49575060006121f9565b8160018114612f5f5760028114612f6957612f85565b60019150506121f9565b60ff841115612f7a57612f7a613105565b50506001821b6121f9565b5060208310610133831016604e8410600b8410161715612fa8575081810a6121f9565b612fb28383612ee3565b8060001904821115612fc657612fc6613105565b029392505050565b6000816000190483118215151615612fe857612fe8613105565b500290565b600082821015612fff57612fff613105565b500390565b600060ff821660ff84168082101561301e5761301e613105565b90039392505050565b60005b8381101561304257818101518382015260200161302a565b83811115613051576000848401525b50505050565b60008161306657613066613105565b506000190190565b600181811c9082168061308257607f821691505b602082108114156130a357634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f1916810167ffffffffffffffff811182821017156130cf576130cf613131565b6040525050565b60006000198214156130ea576130ea613105565b5060010190565b6000826131005761310061311b565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d111561315c57600481823e5160e01c5b90565b600060443d101561316d5790565b6040516003193d81016004833e81513d67ffffffffffffffff816024840111818411171561319d57505050505090565b82850191508151818111156131b55750505050505090565b843d87010160208285010111156131cf5750505050505090565b6131de602082860101876130a9565b509095945050505050565b6001600160a01b038116811461274257600080fdfea2646970667358221220617bf3444184c2001bd07cd46eb380bdbc6737205de619164481d66222f3669864736f6c63430008040033000000000000000000000000ff87900e675907abbaeb49ca77475fb33746ba1a

Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading