Contract 0x99C9775E076FDF99388C029550155032Ba2d8914

 
 
Txn Hash
Method
Block
From
To
Value
0x21fb64c0b4df93061f880e0f20ee41379e57df0b06fee178340c494ac4b22befGet Data126769452021-06-21 9:56:03534 days 1 hr agoENS Name 187.eth IN  0x99c9775e076fdf99388c029550155032ba2d89140 Ether0.002099538
0xfbaea29f8202877d4106e16bd61b414e8629cfa1f00cc3f0337c3b380423d868Get Data106749472020-08-17 2:36:45842 days 8 hrs ago0xfffbe65285ff976e4e812c1f8c84605dcf0a81a8 IN  0x99c9775e076fdf99388c029550155032ba2d89140 Ether0.0034669587
0xcd4abe636c53cff92f0c90f65530ec0908a036c01c588319c7fbb7c5021ef8ccGet Data106709942020-08-16 12:08:44842 days 23 hrs ago0x009d06cc6b11fa75412c3cda6da63813bbbdafaf IN  0x99c9775e076fdf99388c029550155032ba2d89140 Ether0.00412484101
0x27ec87dd7bda0b124dc0ade888e6c87abd74384d7290cc0fad944f2d2b459c16Get Data106337992020-08-10 18:30:37848 days 16 hrs ago0xdee0f6eac955f6041f77d103899d286d8b6c5908 IN  0x99c9775e076fdf99388c029550155032ba2d89140 Ether0.00603525150
0xe0e06d3997b3d5a98e722bf3e0683a426ecfd5b2faa425cbf58c78b6e0506b81Get Data105008192020-07-21 5:09:39869 days 6 hrs agoGitcoin Grants: BlockSpy IN  0x99c9775e076fdf99388c029550155032ba2d89140 Ether0.002590965
0xa7a356c5efcd022a51552e2b1a79160597a465bdb620585f9df955a66d9f64d6Transfer85290252019-09-11 14:23:421182 days 20 hrs agoAave: Deployer 5 IN  0x99c9775e076fdf99388c029550155032ba2d89140.15 Ether0.00033616
0xb821f8b95dd758d019d6b9c9a73a4ee366db476c540d5b713d69d3622455faefTransfer Ownersh...79540192019-06-14 2:11:431272 days 8 hrs agoAmpleforth: Deployer IN  0x99c9775e076fdf99388c029550155032ba2d89140 Ether0.000122644
0x273bc79090c65d02bf1dd0116e0c3a9c0d0fc6f08986a88bc88e8974690db009Add Provider79539282019-06-14 1:50:461272 days 9 hrs agoAmpleforth: Deployer IN  0x99c9775e076fdf99388c029550155032ba2d89140 Ether0.000341764
0x39811171209b3127fdd6d5139a87fc225cbba27454e02815860d1d09b61f6a650x6080604079538782019-06-14 1:38:331272 days 9 hrs agoAmpleforth: Deployer IN  Contract Creation0 Ether0.006852974
[ Download CSV Export 
View more zero value Internal Transactions in Advanced View mode
Loading

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

Contract Name:
MedianOracle

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
/**
 *Submitted for verification at Etherscan.io on 2019-06-14
*/

// File: openzeppelin-solidity/contracts/math/SafeMath.sol

pragma solidity ^0.4.24;

/**
 * @title SafeMath
 * @dev Math operations with safety checks that revert on error
 */
library SafeMath {

  /**
  * @dev Multiplies two numbers, reverts on overflow.
  */
  function mul(uint256 a, uint256 b) internal pure returns (uint256) {
    // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
    // benefit is lost if 'b' is also tested.
    // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
    if (a == 0) {
      return 0;
    }

    uint256 c = a * b;
    require(c / a == b);

    return c;
  }

  /**
  * @dev Integer division of two numbers truncating the quotient, reverts on division by zero.
  */
  function div(uint256 a, uint256 b) internal pure returns (uint256) {
    require(b > 0); // Solidity only automatically asserts when dividing by 0
    uint256 c = a / b;
    // assert(a == b * c + a % b); // There is no case in which this doesn't hold

    return c;
  }

  /**
  * @dev Subtracts two numbers, reverts on overflow (i.e. if subtrahend is greater than minuend).
  */
  function sub(uint256 a, uint256 b) internal pure returns (uint256) {
    require(b <= a);
    uint256 c = a - b;

    return c;
  }

  /**
  * @dev Adds two numbers, reverts on overflow.
  */
  function add(uint256 a, uint256 b) internal pure returns (uint256) {
    uint256 c = a + b;
    require(c >= a);

    return c;
  }

  /**
  * @dev Divides two numbers and returns the remainder (unsigned integer modulo),
  * reverts when dividing by zero.
  */
  function mod(uint256 a, uint256 b) internal pure returns (uint256) {
    require(b != 0);
    return a % b;
  }
}

// File: openzeppelin-solidity/contracts/ownership/Ownable.sol

pragma solidity ^0.4.24;

/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 */
contract Ownable {
  address private _owner;

  event OwnershipTransferred(
    address indexed previousOwner,
    address indexed newOwner
  );

  /**
   * @dev The Ownable constructor sets the original `owner` of the contract to the sender
   * account.
   */
  constructor() internal {
    _owner = msg.sender;
    emit OwnershipTransferred(address(0), _owner);
  }

  /**
   * @return the address of the owner.
   */
  function owner() public view returns(address) {
    return _owner;
  }

  /**
   * @dev Throws if called by any account other than the owner.
   */
  modifier onlyOwner() {
    require(isOwner());
    _;
  }

  /**
   * @return true if `msg.sender` is the owner of the contract.
   */
  function isOwner() public view returns(bool) {
    return msg.sender == _owner;
  }

  /**
   * @dev Allows the current owner to relinquish control of the contract.
   * @notice Renouncing to ownership will leave the contract without an owner.
   * It will not be possible to call the functions with the `onlyOwner`
   * modifier anymore.
   */
  function renounceOwnership() public onlyOwner {
    emit OwnershipTransferred(_owner, address(0));
    _owner = address(0);
  }

  /**
   * @dev Allows the current owner to transfer control of the contract to a newOwner.
   * @param newOwner The address to transfer ownership to.
   */
  function transferOwnership(address newOwner) public onlyOwner {
    _transferOwnership(newOwner);
  }

  /**
   * @dev Transfers control of the contract to a newOwner.
   * @param newOwner The address to transfer ownership to.
   */
  function _transferOwnership(address newOwner) internal {
    require(newOwner != address(0));
    emit OwnershipTransferred(_owner, newOwner);
    _owner = newOwner;
  }
}

// File: market-oracle/contracts/lib/Select.sol

pragma solidity ^0.4.24;


/**
 * @title Select
 * @dev Median Selection Library
 */
library Select {
    using SafeMath for uint256;

    /**
     * @dev Sorts the input array up to the denoted size, and returns the median.
     * @param array Input array to compute its median.
     * @param size Number of elements in array to compute the median for.
     * @return Median of array.
     */
    function computeMedian(uint256[] array, uint256 size)
        internal
        pure
        returns (uint256)
    {
        require(size > 0 && array.length >= size);
        for (uint256 i = 1; i < size; i++) {
            for (uint256 j = i; j > 0 && array[j-1]  > array[j]; j--) {
                uint256 tmp = array[j];
                array[j] = array[j-1];
                array[j-1] = tmp;
            }
        }
        if (size % 2 == 1) {
            return array[size / 2];
        } else {
            return array[size / 2].add(array[size / 2 - 1]) / 2;
        }
    }
}

// File: market-oracle/contracts/MedianOracle.sol

pragma solidity 0.4.24;





interface IOracle {
    function getData() external returns (uint256, bool);
}


/**
 * @title Median Oracle
 *
 * @notice Provides a value onchain that's aggregated from a whitelisted set of
 *         providers.
 */
contract MedianOracle is Ownable, IOracle {
    using SafeMath for uint256;

    struct Report {
        uint256 timestamp;
        uint256 payload;
    }

    // Addresses of providers authorized to push reports.
    address[] public providers;

    // Reports indexed by provider address. Report[0].timestamp > 0
    // indicates provider existence.
    mapping (address => Report[2]) public providerReports;

    event ProviderAdded(address provider);
    event ProviderRemoved(address provider);
    event ReportTimestampOutOfRange(address provider);
    event ProviderReportPushed(address indexed provider, uint256 payload, uint256 timestamp);

    // The number of seconds after which the report is deemed expired.
    uint256 public reportExpirationTimeSec;

    // The number of seconds since reporting that has to pass before a report
    // is usable.
    uint256 public reportDelaySec;

    // The minimum number of providers with valid reports to consider the
    // aggregate report valid.
    uint256 public minimumProviders = 1;

    // Timestamp of 1 is used to mark uninitialized and invalidated data.
    // This is needed so that timestamp of 1 is always considered expired.
    uint256 private constant MAX_REPORT_EXPIRATION_TIME = 520 weeks;

    /**
    * @param reportExpirationTimeSec_ The number of seconds after which the
    *                                 report is deemed expired.
    * @param reportDelaySec_ The number of seconds since reporting that has to
    *                        pass before a report is usable
    * @param minimumProviders_ The minimum number of providers with valid
    *                          reports to consider the aggregate report valid.
    */
    constructor(uint256 reportExpirationTimeSec_,
                uint256 reportDelaySec_,
                uint256 minimumProviders_)
        public
    {
        require(reportExpirationTimeSec_ <= MAX_REPORT_EXPIRATION_TIME);
        require(minimumProviders_ > 0);
        reportExpirationTimeSec = reportExpirationTimeSec_;
        reportDelaySec = reportDelaySec_;
        minimumProviders = minimumProviders_;
    }

     /**
     * @notice Sets the report expiration period.
     * @param reportExpirationTimeSec_ The number of seconds after which the
     *        report is deemed expired.
     */
    function setReportExpirationTimeSec(uint256 reportExpirationTimeSec_)
        external
        onlyOwner
    {
        require(reportExpirationTimeSec_ <= MAX_REPORT_EXPIRATION_TIME);
        reportExpirationTimeSec = reportExpirationTimeSec_;
    }

    /**
    * @notice Sets the time period since reporting that has to pass before a
    *         report is usable.
    * @param reportDelaySec_ The new delay period in seconds.
    */
    function setReportDelaySec(uint256 reportDelaySec_)
        external
        onlyOwner
    {
        reportDelaySec = reportDelaySec_;
    }

    /**
    * @notice Sets the minimum number of providers with valid reports to
    *         consider the aggregate report valid.
    * @param minimumProviders_ The new minimum number of providers.
    */
    function setMinimumProviders(uint256 minimumProviders_)
        external
        onlyOwner
    {
        require(minimumProviders_ > 0);
        minimumProviders = minimumProviders_;
    }

    /**
     * @notice Pushes a report for the calling provider.
     * @param payload is expected to be 18 decimal fixed point number.
     */
    function pushReport(uint256 payload) external
    {
        address providerAddress = msg.sender;
        Report[2] storage reports = providerReports[providerAddress];
        uint256[2] memory timestamps = [reports[0].timestamp, reports[1].timestamp];

        require(timestamps[0] > 0);

        uint8 index_recent = timestamps[0] >= timestamps[1] ? 0 : 1;
        uint8 index_past = 1 - index_recent;

        // Check that the push is not too soon after the last one.
        require(timestamps[index_recent].add(reportDelaySec) <= now);

        reports[index_past].timestamp = now;
        reports[index_past].payload = payload;

        emit ProviderReportPushed(providerAddress, payload, now);
    }

    /**
    * @notice Invalidates the reports of the calling provider.
    */
    function purgeReports() external
    {
        address providerAddress = msg.sender;
        require (providerReports[providerAddress][0].timestamp > 0);
        providerReports[providerAddress][0].timestamp=1;
        providerReports[providerAddress][1].timestamp=1;
    }

    /**
    * @notice Computes median of provider reports whose timestamps are in the
    *         valid timestamp range.
    * @return AggregatedValue: Median of providers reported values.
    *         valid: Boolean indicating an aggregated value was computed successfully.
    */
    function getData()
        external
        returns (uint256, bool)
    {
        uint256 reportsCount = providers.length;
        uint256[] memory validReports = new uint256[](reportsCount);
        uint256 size = 0;
        uint256 minValidTimestamp =  now.sub(reportExpirationTimeSec);
        uint256 maxValidTimestamp =  now.sub(reportDelaySec);

        for (uint256 i = 0; i < reportsCount; i++) {
            address providerAddress = providers[i];
            Report[2] memory reports = providerReports[providerAddress];

            uint8 index_recent = reports[0].timestamp >= reports[1].timestamp ? 0 : 1;
            uint8 index_past = 1 - index_recent;
            uint256 reportTimestampRecent = reports[index_recent].timestamp;
            if (reportTimestampRecent > maxValidTimestamp) {
                // Recent report is too recent.
                uint256 reportTimestampPast = providerReports[providerAddress][index_past].timestamp;
                if (reportTimestampPast < minValidTimestamp) {
                    // Past report is too old.
                    emit ReportTimestampOutOfRange(providerAddress);
                } else if (reportTimestampPast > maxValidTimestamp) {
                    // Past report is too recent.
                    emit ReportTimestampOutOfRange(providerAddress);
                } else {
                    // Using past report.
                    validReports[size++] = providerReports[providerAddress][index_past].payload;
                }
            } else {
                // Recent report is not too recent.
                if (reportTimestampRecent < minValidTimestamp) {
                    // Recent report is too old.
                    emit ReportTimestampOutOfRange(providerAddress);
                } else {
                    // Using recent report.
                    validReports[size++] = providerReports[providerAddress][index_recent].payload;
                }
            }
        }

        if (size < minimumProviders) {
            return (0, false);
        }

        return (Select.computeMedian(validReports, size), true);
    }

    /**
     * @notice Authorizes a provider.
     * @param provider Address of the provider.
     */
    function addProvider(address provider)
        external
        onlyOwner
    {
        require(providerReports[provider][0].timestamp == 0);
        providers.push(provider);
        providerReports[provider][0].timestamp = 1;
        emit ProviderAdded(provider);
    }

    /**
     * @notice Revokes provider authorization.
     * @param provider Address of the provider.
     */
    function removeProvider(address provider)
        external
        onlyOwner
    {
        delete providerReports[provider];
        for (uint256 i = 0; i < providers.length; i++) {
            if (providers[i] == provider) {
                if (i + 1  != providers.length) {
                    providers[i] = providers[providers.length-1];
                }
                providers.length--;
                emit ProviderRemoved(provider);
                break;
            }
        }
    }

    /**
     * @return The number of authorized providers.
     */
    function providersSize()
        external
        view
        returns (uint256)
    {
        return providers.length;
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"reportDelaySec","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"payload","type":"uint256"}],"name":"pushReport","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"getData","outputs":[{"name":"","type":"uint256"},{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"provider","type":"address"}],"name":"addProvider","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"providers","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"provider","type":"address"}],"name":"removeProvider","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"minimumProviders","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"purgeReports","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"reportDelaySec_","type":"uint256"}],"name":"setReportDelaySec","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"providersSize","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"reportExpirationTimeSec","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"minimumProviders_","type":"uint256"}],"name":"setMinimumProviders","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"providerReports","outputs":[{"name":"timestamp","type":"uint256"},{"name":"payload","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"reportExpirationTimeSec_","type":"uint256"}],"name":"setReportExpirationTimeSec","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"reportExpirationTimeSec_","type":"uint256"},{"name":"reportDelaySec_","type":"uint256"},{"name":"minimumProviders_","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"provider","type":"address"}],"name":"ProviderAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"provider","type":"address"}],"name":"ProviderRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"provider","type":"address"}],"name":"ReportTimestampOutOfRange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"provider","type":"address"},{"indexed":false,"name":"payload","type":"uint256"},{"indexed":false,"name":"timestamp","type":"uint256"}],"name":"ProviderReportPushed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

6080604052600160055534801561001557600080fd5b50604051606080611817833981018060405281019080805190602001909291908051906020019092919080519060200190929190505050336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36312bed400831115151561011b57600080fd5b60008111151561012a57600080fd5b8260038190555081600481905550806005819055505050506116c6806101516000396000f3006080604052600436106100fc576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806312e800f1146101015780631e20d14b1461012c5780633bc5de301461015957806346e2577a1461018f57806350f3fc81146101d2578063715018a61461023f5780638a355a57146102565780638da5cb5b146102995780638f32d59b146102f0578063b577c0c71461031f578063d13d59711461034a578063da6b0eea14610361578063dcbb82531461038e578063df982985146103b9578063ef35bcce146103e4578063f10864b614610411578063f2fde38b14610479578063f68be513146104bc575b600080fd5b34801561010d57600080fd5b506101166104e9565b6040518082815260200191505060405180910390f35b34801561013857600080fd5b50610157600480360381019080803590602001909291905050506104ef565b005b34801561016557600080fd5b5061016e6106b6565b60405180838152602001821515151581526020019250505060405180910390f35b34801561019b57600080fd5b506101d0600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b77565b005b3480156101de57600080fd5b506101fd60048036038101908080359060200190929190505050610d13565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561024b57600080fd5b50610254610d51565b005b34801561026257600080fd5b50610297600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610e23565b005b3480156102a557600080fd5b506102ae61103a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102fc57600080fd5b50610305611063565b604051808215151515815260200191505060405180910390f35b34801561032b57600080fd5b506103346110ba565b6040518082815260200191505060405180910390f35b34801561035657600080fd5b5061035f6110c0565b005b34801561036d57600080fd5b5061038c600480360381019080803590602001909291905050506111df565b005b34801561039a57600080fd5b506103a36111fc565b6040518082815260200191505060405180910390f35b3480156103c557600080fd5b506103ce611209565b6040518082815260200191505060405180910390f35b3480156103f057600080fd5b5061040f6004803603810190808035906020019092919050505061120f565b005b34801561041d57600080fd5b5061045c600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061123b565b604051808381526020018281526020019250505060405180910390f35b34801561048557600080fd5b506104ba600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611271565b005b3480156104c857600080fd5b506104e760048036038101908080359060200190929190505050611290565b005b60045481565b6000806104fa6115b4565b600080339450600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209350604080519081016040528085600060028110151561055b57fe5b6002020160000154815260200185600160028110151561057757fe5b60020201600001548152509250600083600060028110151561059557fe5b60200201511115156105a657600080fd5b8260016002811015156105b557fe5b60200201518360006002811015156105c957fe5b602002015110156105db5760016105de565b60005b915081600103905042610611600454858560ff166002811015156105fe57fe5b60200201516112c090919063ffffffff16565b1115151561061e57600080fd5b42848260ff1660028110151561063057fe5b600202016000018190555085848260ff1660028110151561064d57fe5b60020201600101819055508473ffffffffffffffffffffffffffffffffffffffff167f460fcc5a1888965d48c2cab000fe20da51b1297d995af79a1924e2312d0d82b38742604051808381526020018281526020019250505060405180910390a2505050505050565b6000806000606060008060008060006106cd6115d6565b6000806000806001805490509b508b60405190808252806020026020018201604052801561070a5781602001602082028038833980820191505090505b509a5060009950610726600354426112e190919063ffffffff16565b985061073d600454426112e190919063ffffffff16565b9750600096505b8b871015610b3d5760018781548110151561075b57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169550600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600280602002604051908101604052809291906000905b8282101561081a5783826002020160408051908101604052908160008201548152602001600182015481525050815260200190600101906107de565b50505050945084600160028110151561082f57fe5b60200201516000015185600060028110151561084757fe5b602002015160000151101561085d576001610860565b60005b9350836001039250848460ff1660028110151561087957fe5b602002015160000151915087821115610a4557600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208360ff166002811015156108db57fe5b6002020160000154905088811015610955577f71f61642cb57ac11764a2f35fb4edc5361ced458af35bbed8f5ebf708c10e34186604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1610a40565b878111156109c5577f71f61642cb57ac11764a2f35fb4edc5361ced458af35bbed8f5ebf708c10e34186604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1610a3f565b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208360ff16600281101515610a1457fe5b60020201600101548b8b806001019c50815181101515610a3057fe5b90602001906020020181815250505b5b610b30565b88821015610ab5577f71f61642cb57ac11764a2f35fb4edc5361ced458af35bbed8f5ebf708c10e34186604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1610b2f565b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208460ff16600281101515610b0457fe5b60020201600101548b8b806001019c50815181101515610b2057fe5b90602001906020020181815250505b5b8680600101975050610744565b6005548a1015610b56576000808191509d509d50610b67565b610b608b8b611302565b60019d509d505b5050505050505050505050509091565b610b7f611063565b1515610b8a57600080fd5b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600281101515610bd957fe5b6002020160000154141515610bed57600080fd5b60018190806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600281101515610ca257fe5b60020201600001819055507fae9c2c6481964847714ce58f65a7f6dcc41d0d8394449bacdf161b5920c4744a81604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b600181815481101515610d2257fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610d59611063565b1515610d6457600080fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000610e2d611063565b1515610e3857600080fd5b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e839190611604565b600090505b600180549050811015611036578173ffffffffffffffffffffffffffffffffffffffff16600182815481101515610ebb57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156110295760018054905060018201141515610fab57600180808054905003815481101515610f2857fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600182815481101515610f6257fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b6001805480919060019003610fc0919061162f565b507f1589f8555933761a3cff8aa925061be3b46e2dd43f621322ab611d300f62b1d982604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1611036565b8080600101915050610e88565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b60055481565b60003390506000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060028110151561111457fe5b600202016000015411151561112857600080fd5b6001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060028110151561117757fe5b60020201600001819055506001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060016002811015156111d157fe5b600202016000018190555050565b6111e7611063565b15156111f257600080fd5b8060048190555050565b6000600180549050905090565b60035481565b611217611063565b151561122257600080fd5b60008111151561123157600080fd5b8060058190555050565b60026020528160005260406000208160028110151561125657fe5b60020201600091509150508060000154908060010154905082565b611279611063565b151561128457600080fd5b61128d816114ba565b50565b611298611063565b15156112a357600080fd5b6312bed40081111515156112b657600080fd5b8060038190555050565b60008082840190508381101515156112d757600080fd5b8091505092915050565b6000808383111515156112f357600080fd5b82840390508091505092915050565b600080600080600085118015611319575084865110155b151561132457600080fd5b600192505b84831015611406578291505b6000821180156113755750858281518110151561134e57fe5b90602001906020020151866001840381518110151561136957fe5b90602001906020020151115b156113f957858281518110151561138857fe5b90602001906020020151905085600183038151811015156113a557fe5b9060200190602002015186838151811015156113bd57fe5b90602001906020020181815250508086600184038151811015156113dd57fe5b9060200190602002018181525050818060019003925050611335565b8280600101935050611329565b600160028681151561141457fe5b061415611446578560028681151561142857fe5b0481518110151561143557fe5b9060200190602002015193506114b1565b60026114a487600160028981151561145a57fe5b040381518110151561146857fe5b906020019060200201518860028981151561147f57fe5b0481518110151561148c57fe5b906020019060200201516112c090919063ffffffff16565b8115156114ad57fe5b0493505b50505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156114f657600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6040805190810160405280600290602082028038833980820191505090505090565b6080604051908101604052806002905b6115ee61165b565b8152602001906001900390816115e65790505090565b5060008082016000905560018201600090555060020160008082016000905560018201600090555050565b815481835581811115611656578183600052602060002091820191016116559190611675565b5b505050565b604080519081016040528060008152602001600081525090565b61169791905b8082111561169357600081600090555060010161167b565b5090565b905600a165627a7a7230582062f9639244cdd46439e277f4ba66a93b2a65b3c78607b8afeaf36826a9f0e8d700290000000000000000000000000000000000000000000000000000000000278d0000000000000000000000000000000000000000000000000000000000000151800000000000000000000000000000000000000000000000000000000000000001

Deployed ByteCode Sourcemap

5279:8353:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6170:29;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6170:29:0;;;;;;;;;;;;;;;;;;;;;;;8830:726;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8830:726:0;;;;;;;;;;;;;;;;;;;;;;;;;;10223:2170;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10223:2170:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12507:279;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12507:279:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;5506:26;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5506:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3169:130;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3169:130:0;;;;;;12909:511;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12909:511:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;2510:72;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2510:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;2812:85;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2812:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;6315:35;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6315:35:0;;;;;;;;;;;;;;;;;;;;;;;9645:279;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9645:279:0;;;;;;8115:145;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8115:145:0;;;;;;;;;;;;;;;;;;;;;;;;;;13498:131;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13498:131:0;;;;;;;;;;;;;;;;;;;;;;;6025:38;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6025:38:0;;;;;;;;;;;;;;;;;;;;;;;8480:194;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8480:194:0;;;;;;;;;;;;;;;;;;;;;;;;;;5648:53;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5648:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3466:103;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3466:103:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;7661:255;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7661:255:0;;;;;;;;;;;;;;;;;;;;;;;;;;6170:29;;;;:::o;8830:726::-;8892:23;8939:25;9010:28;;:::i;:::-;9137:18;9207:16;8918:10;8892:36;;8967:15;:32;8983:15;8967:32;;;;;;;;;;;;;;;8939:60;;9010:75;;;;;;;;;9042:7;9050:1;9042:10;;;;;;;;;;;;:20;;;9010:75;;;;9064:7;9072:1;9064:10;;;;;;;;;;;;:20;;;9010:75;;;;;9122:1;9106:10;9117:1;9106:13;;;;;;;;;;;;;:17;9098:26;;;;;;;;9175:10;9186:1;9175:13;;;;;;;;;;;;;9158:10;9169:1;9158:13;;;;;;;;;;;;;:30;;:38;;9195:1;9158:38;;;9191:1;9158:38;9137:59;;9230:12;9226:1;:16;9207:35;;9379:3;9331:44;9360:14;;9331:10;9342:12;9331:24;;;;;;;;;;;;;;;:28;;:44;;;;:::i;:::-;:51;;9323:60;;;;;;;;9428:3;9396:7;9404:10;9396:19;;;;;;;;;;;;;;:29;;:35;;;;9472:7;9442;9450:10;9442:19;;;;;;;;;;;;;;:27;;:37;;;;9518:15;9497:51;;;9535:7;9544:3;9497:51;;;;;;;;;;;;;;;;;;;;;;;;8830:726;;;;;;:::o;10223:2170::-;10278:7;10287:4;10309:20;10359:29;10429:12;10456:25;10528;10598:9;10651:23;10704:24;;:::i;:::-;10780:18;10868:16;10918:29;11111:27;10332:9;:16;;;;10309:39;;10405:12;10391:27;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;10391:27:0;;;;10359:59;;10444:1;10429:16;;10485:32;10493:23;;10485:3;:7;;:32;;;;:::i;:::-;10456:61;;10557:23;10565:14;;10557:3;:7;;:23;;;;:::i;:::-;10528:52;;10610:1;10598:13;;10593:1640;10617:12;10613:1;:16;10593:1640;;;10677:9;10687:1;10677:12;;;;;;;;;;;;;;;;;;;;;;;;;;;10651:38;;10731:15;:32;10747:15;10731:32;;;;;;;;;;;;;;;10704:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10825:7;10833:1;10825:10;;;;;;;;;;;;;:20;;;10801:7;10809:1;10801:10;;;;;;;;;;;;;:20;;;:44;;:52;;10852:1;10801:52;;;10848:1;10801:52;10780:73;;10891:12;10887:1;:16;10868:35;;10950:7;10958:12;10950:21;;;;;;;;;;;;;;;:31;;;10918:63;;11024:17;11000:21;:41;10996:1226;;;11141:15;:32;11157:15;11141:32;;;;;;;;;;;;;;;11174:10;11141:44;;;;;;;;;;;;;;:54;;;11111:84;;11240:17;11218:19;:39;11214:542;;;11335:42;11361:15;11335:42;;;;;;;;;;;;;;;;;;;;;;11214:542;;;11429:17;11407:19;:39;11403:353;;;11527:42;11553:15;11527:42;;;;;;;;;;;;;;;;;;;;;;11403:353;;;11684:15;:32;11700:15;11684:32;;;;;;;;;;;;;;;11717:10;11684:44;;;;;;;;;;;;;;:52;;;11661:12;11674:6;;;;;;11661:20;;;;;;;;;;;;;;;;;:75;;;;;11403:353;11214:542;10996:1226;;;11877:17;11853:21;:41;11849:358;;;11974:42;12000:15;11974:42;;;;;;;;;;;;;;;;;;;;;;11849:358;;;12133:15;:32;12149:15;12133:32;;;;;;;;;;;;;;;12166:12;12133:46;;;;;;;;;;;;;;:54;;;12110:12;12123:6;;;;;;12110:20;;;;;;;;;;;;;;;;;:77;;;;;11849:358;10996:1226;10631:3;;;;;;;10593:1640;;;12256:16;;12249:4;:23;12245:73;;;12297:1;12300:5;12289:17;;;;;;;;;12245:73;12338:40;12359:12;12373:4;12338:20;:40::i;:::-;12380:4;12330:55;;;;10223:2170;;;;;;;;;;;;;;;:::o;12507:279::-;2703:9;:7;:9::i;:::-;2695:18;;;;;;;;12649:1;12607:15;:25;12623:8;12607:25;;;;;;;;;;;;;;;12633:1;12607:28;;;;;;;;;;;;:38;;;:43;12599:52;;;;;;;;12662:9;12677:8;12662:24;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;12662:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12738:1;12697:15;:25;12713:8;12697:25;;;;;;;;;;;;;;;12723:1;12697:28;;;;;;;;;;;;:38;;:42;;;;12755:23;12769:8;12755:23;;;;;;;;;;;;;;;;;;;;;;12507:279;:::o;5506:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3169:130::-;2703:9;:7;:9::i;:::-;2695:18;;;;;;;;3264:1;3227:40;;3248:6;;;;;;;;;;;3227:40;;;;;;;;;;;;3291:1;3274:6;;:19;;;;;;;;;;;;;;;;;;3169:130::o;12909:511::-;13052:9;2703;:7;:9::i;:::-;2695:18;;;;;;;;13011:15;:25;13027:8;13011:25;;;;;;;;;;;;;;;;13004:32;;;;:::i;:::-;13064:1;13052:13;;13047:366;13071:9;:16;;;;13067:1;:20;13047:366;;;13129:8;13113:24;;:9;13123:1;13113:12;;;;;;;;;;;;;;;;;;;;;;;;;;;:24;;;13109:293;;;13172:9;:16;;;;13166:1;13162;:5;:26;;13158:119;;;13228:9;13255:1;13238:9;:16;;;;:18;13228:29;;;;;;;;;;;;;;;;;;;;;;;;;;;13213:9;13223:1;13213:12;;;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;13158:119;13295:9;:18;;;;;;;;;;;;:::i;:::-;;13337:25;13353:8;13337:25;;;;;;;;;;;;;;;;;;;;;;13381:5;;13109:293;13089:3;;;;;;;13047:366;;;12909:511;;:::o;2510:72::-;2547:7;2570:6;;;;;;;;;;;2563:13;;2510:72;:::o;2812:85::-;2851:4;2885:6;;;;;;;;;;;2871:20;;:10;:20;;;2864:27;;2812:85;:::o;6315:35::-;;;;:::o;9645:279::-;9694:23;9720:10;9694:36;;9798:1;9750:15;:32;9766:15;9750:32;;;;;;;;;;;;;;;9783:1;9750:35;;;;;;;;;;;;:45;;;:49;9741:59;;;;;;;;9857:1;9811:15;:32;9827:15;9811:32;;;;;;;;;;;;;;;9844:1;9811:35;;;;;;;;;;;;:45;;:47;;;;9915:1;9869:15;:32;9885:15;9869:32;;;;;;;;;;;;;;;9902:1;9869:35;;;;;;;;;;;;:45;;:47;;;;9645:279;:::o;8115:145::-;2703:9;:7;:9::i;:::-;2695:18;;;;;;;;8237:15;8220:14;:32;;;;8115:145;:::o;13498:131::-;13573:7;13605:9;:16;;;;13598:23;;13498:131;:::o;6025:38::-;;;;:::o;8480:194::-;2703:9;:7;:9::i;:::-;2695:18;;;;;;;;8617:1;8597:17;:21;8589:30;;;;;;;;8649:17;8630:16;:36;;;;8480:194;:::o;5648:53::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3466:103::-;2703:9;:7;:9::i;:::-;2695:18;;;;;;;;3535:28;3554:8;3535:18;:28::i;:::-;3466:103;:::o;7661:255::-;2703:9;:7;:9::i;:::-;2695:18;;;;;;;;6564:9;7792:24;:54;;7784:63;;;;;;;;7884:24;7858:23;:50;;;;7661:255;:::o;1383:136::-;1441:7;1457:9;1473:1;1469;:5;1457:17;;1494:1;1489;:6;;1481:15;;;;;;;;1512:1;1505:8;;1383:136;;;;;:::o;1179:::-;1237:7;1275:9;1266:1;1261;:6;;1253:15;;;;;;;;1291:1;1287;:5;1275:17;;1308:1;1301:8;;1179:136;;;;;:::o;4354:601::-;4458:7;4540:9;4590;4662:11;4498:1;4491:4;:8;:32;;;;;4519:4;4503:5;:12;:20;;4491:32;4483:41;;;;;;;;4552:1;4540:13;;4535:251;4559:4;4555:1;:8;4535:251;;;4602:1;4590:13;;4585:190;4609:1;4605;:5;:31;;;;;4628:5;4634:1;4628:8;;;;;;;;;;;;;;;;;;4614:5;4622:1;4620;:3;4614:10;;;;;;;;;;;;;;;;;;:22;4605:31;4585:190;;;4676:5;4682:1;4676:8;;;;;;;;;;;;;;;;;;4662:22;;4714:5;4722:1;4720;:3;4714:10;;;;;;;;;;;;;;;;;;4703:5;4709:1;4703:8;;;;;;;;;;;;;;;;;:21;;;;;4756:3;4743:5;4751:1;4749;:3;4743:10;;;;;;;;;;;;;;;;;:16;;;;;4638:3;;;;;;;;4585:190;;;4565:3;;;;;;;4535:251;;;4812:1;4807;4800:4;:8;;;;;;;;:13;4796:152;;;4837:5;4850:1;4843:4;:8;;;;;;;;4837:15;;;;;;;;;;;;;;;;;;4830:22;;;;4796:152;4935:1;4892:40;4912:5;4929:1;4925;4918:4;:8;;;;;;;;:12;4912:19;;;;;;;;;;;;;;;;;;4892:5;4905:1;4898:4;:8;;;;;;;;4892:15;;;;;;;;;;;;;;;;;;:19;;:40;;;;:::i;:::-;:44;;;;;;;;4885:51;;4354:601;;;;;;;;:::o;3709:173::-;3799:1;3779:22;;:8;:22;;;;3771:31;;;;;;;;3843:8;3814:38;;3835:6;;;;;;;;;;;3814:38;;;;;;;;;;;;3868:8;3859:6;;:17;;;;;;;;;;;;;;;;;;3709:173;:::o;5279:8353::-;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;5279:8353:0;;;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

bzzr://62f9639244cdd46439e277f4ba66a93b2a65b3c78607b8afeaf36826a9f0e8d7
Block Transaction Difficulty Gas Used Reward
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.

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.