ETH Price: $2,484.27 (-1.17%)

Contract

0xf59ea412FFe3B70264590abCA47a107E63A323a0
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Update157392512022-10-13 12:39:23688 days ago1665664763IN
0xf59ea412...E63A323a0
0 ETH0.0057549564.07991761
Update157338892022-10-12 18:42:47689 days ago1665600167IN
0xf59ea412...E63A323a0
0 ETH0.0016583818.46564532
Update157285912022-10-12 0:57:11690 days ago1665536231IN
0xf59ea412...E63A323a0
0 ETH0.0017460419.44180718
Update157233882022-10-11 7:30:47691 days ago1665473447IN
0xf59ea412...E63A323a0
0 ETH0.002277425.35827084
Update157177452022-10-10 12:36:47691 days ago1665405407IN
0xf59ea412...E63A323a0
0 ETH0.0033970837.8256937
Update157124272022-10-09 18:48:23692 days ago1665341303IN
0xf59ea412...E63A323a0
0 ETH0.0025834828.76645943
Update157070512022-10-09 0:47:23693 days ago1665276443IN
0xf59ea412...E63A323a0
0 ETH0.002026422.56351934
Update157016222022-10-08 6:37:11694 days ago1665211031IN
0xf59ea412...E63A323a0
0 ETH0.000446654.97343159
Update156962772022-10-07 12:38:23694 days ago1665146303IN
0xf59ea412...E63A323a0
0 ETH0.0015450717.20396336
Update156909232022-10-06 18:43:23695 days ago1665081803IN
0xf59ea412...E63A323a0
0 ETH0.0012177913.55981474
Update156855652022-10-06 0:44:35696 days ago1665017075IN
0xf59ea412...E63A323a0
0 ETH0.000614226.83928247
Update156801802022-10-05 6:41:35697 days ago1664952095IN
0xf59ea412...E63A323a0
0 ETH0.000507595.65190317
Update156748752022-10-04 12:49:11697 days ago1664887751IN
0xf59ea412...E63A323a0
0 ETH0.000701987.81646065
Update156694622022-10-03 18:38:23698 days ago1664822303IN
0xf59ea412...E63A323a0
0 ETH0.0013732715.29108903
Update156641762022-10-03 0:54:23699 days ago1664758463IN
0xf59ea412...E63A323a0
0 ETH0.000422364.70297546
Update156587422022-10-02 6:43:11700 days ago1664692991IN
0xf59ea412...E63A323a0
0 ETH0.000251532.80080069
Update156534202022-10-01 12:49:59700 days ago1664628599IN
0xf59ea412...E63A323a0
0 ETH0.000589096.55940691
Update156479932022-09-30 18:38:35701 days ago1664563115IN
0xf59ea412...E63A323a0
0 ETH0.0012623114.0555861
Update156426732022-09-30 0:48:11702 days ago1664498891IN
0xf59ea412...E63A323a0
0 ETH0.0009467510.54186436
Update156372652022-09-29 6:39:11703 days ago1664433551IN
0xf59ea412...E63A323a0
0 ETH0.00080068.91451055
Update156319092022-09-28 12:42:59703 days ago1664368979IN
0xf59ea412...E63A323a0
0 ETH0.001143712.73486431
Update156265332022-09-27 18:39:23704 days ago1664303963IN
0xf59ea412...E63A323a0
0 ETH0.0016055417.87729193
Update156211722022-09-27 0:39:35705 days ago1664239175IN
0xf59ea412...E63A323a0
0 ETH0.000891479.92631423
Update156158252022-09-26 6:41:47706 days ago1664174507IN
0xf59ea412...E63A323a0
0 ETH0.000452945.04346121
Update156104892022-09-25 12:48:59706 days ago1664110139IN
0xf59ea412...E63A323a0
0 ETH0.000445184.95697682
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
YieldOracle

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
Yes with 9999 runs

Other Settings:
default evmVersion
File 1 of 4 : YieldOracle.sol
// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.7.6;
pragma abicoder v2;

import "@openzeppelin/contracts/math/SafeMath.sol";

import "./IYieldOraclelizable.sol";
import "./IYieldOracle.sol";

// a modified version of https://github.com/Uniswap/uniswap-v2-periphery/blob/master/contracts/examples/ExampleSlidingWindowOracle.sol
// sliding window oracle that uses observations collected over a window to provide moving yield averages in the past
// `windowSize` with a precision of `windowSize / granularity`
contract YieldOracle is IYieldOracle {
    using SafeMath for uint256;

    IYieldOraclelizable public cumulator;

    struct Observation {
        uint256 timestamp;
        uint256 yieldCumulative;
    }

    // the desired amount of time over which the moving average should be computed, e.g. 24 hours
    uint256 public immutable windowSize;

    // the number of observations stored for each pair, i.e. how many price observations are stored for the window.
    // as granularity increases from 1, more frequent updates are needed, but moving averages become more precise.
    // averages are computed over intervals with sizes in the range:
    //   [windowSize - (windowSize / granularity) * 2, windowSize]
    // e.g. if the window size is 24 hours, and the granularity is 24, the oracle will return the average price for
    //   the period:
    //   [now - [22 hours, 24 hours], now]
    uint8 public immutable granularity;

    // this is redundant with granularity and windowSize, but stored for gas savings & informational purposes.
    uint256 public immutable periodSize;

    // list of yield observations
    Observation[] public yieldObservations;

    constructor(
        address cumulator_,
        uint256 windowSize_,
        uint8 granularity_
    ) {
        require(granularity_ > 1, "YO: GRANULARITY");
        require(
            (periodSize = windowSize_ / granularity_) * granularity_ ==
                windowSize_,
            "YO: WINDOW_NOT_EVENLY_DIVISIBLE"
        );
        windowSize = windowSize_;
        granularity = granularity_;
        cumulator = IYieldOraclelizable(cumulator_);

        for (uint256 i = yieldObservations.length; i < granularity_; i++) {
            yieldObservations.push();
        }
    }

    // returns the index of the observation corresponding to the given timestamp
    function observationIndexOf(uint256 timestamp_)
        public
        view
        returns (uint8 index)
    {
        uint256 epochPeriod = timestamp_ / periodSize;
        return uint8(epochPeriod % granularity);
    }

    // returns the observation from the oldest epoch (at the beginning of the window) relative to the current time
    function getFirstObservationInWindow()
        private
        view
        returns (Observation storage firstObservation)
    {
        uint8 observationIndex = observationIndexOf(block.timestamp);
        // no overflow issue. if observationIndex + 1 overflows, result is still zero.
        uint8 firstObservationIndex = (observationIndex + 1) % granularity;
        firstObservation = yieldObservations[firstObservationIndex];
    }

    // update the cumulative price for the observation at the current timestamp. each observation is updated at most
    // once per epoch period.
    function update() external virtual override {
        // get the observation for the current period
        uint8 observationIndex = observationIndexOf(block.timestamp);
        Observation storage observation = yieldObservations[observationIndex];

        // we only want to commit updates once per period (i.e. windowSize / granularity)
        uint256 timeElapsed = block.timestamp - observation.timestamp;
        if (timeElapsed > periodSize) {
            (uint256 yieldCumulative) = cumulator.cumulatives();
            observation.timestamp = block.timestamp;
            observation.yieldCumulative = yieldCumulative;
        }
    }

    // given the cumulative yields of the start and end of a period, and the length of the period (timeElapsed in seconds), compute the average
    // yield and extrapolate it for forInterval (seconds) in terms of how much amount out is received for the amount in
    function computeAmountOut(
        uint256 yieldCumulativeStart_,
        uint256 yieldCumulativeEnd_,
        uint256 timeElapsed_,
        uint256 forInterval_
    ) private pure returns (uint256 yieldAverage) {
        // ((yieldCumulativeEnd_ - yieldCumulativeStart_) * forInterval_) / timeElapsed_;
        return yieldCumulativeEnd_.sub(yieldCumulativeStart_).mul(forInterval_).div(timeElapsed_);
    }

    // returns the amount out corresponding to the amount in for a given token using the moving average over the time
    // range [now - [windowSize, windowSize - periodSize * 2], now]
    // update must have been called for the bucket corresponding to timestamp `now - windowSize`
    function consult(uint256 forInterval)
        external
        override
        virtual
        returns (uint256 yieldForInterval)
    {
        Observation storage firstObservation = getFirstObservationInWindow();

        uint256 timeElapsed = block.timestamp - firstObservation.timestamp;

        if (!(timeElapsed <= windowSize)) {
            // originally:
            // require(
            //     timeElapsed <= windowSize,
            //     "YO: MISSING_HISTORICAL_OBSERVATION"
            // );
            // if the oracle is falling behind, it reports 0 yield => there's no incentive to buy sBOND
            return 0;
        }

        if (!(timeElapsed >= windowSize - periodSize * 2)) {
            // originally:
            // should never happen.
            // require(
            //     timeElapsed >= windowSize - periodSize * 2,
            //     "YO: UNEXPECTED_TIME_ELAPSED"
            // );
            // if the oracle is in an odd state, it reports 0 yield => there's no incentive to buy sBOND
            return 0;
        }

        (uint256 yieldCumulative) = cumulator.cumulatives();

        return
            computeAmountOut(
                firstObservation.yieldCumulative,
                yieldCumulative,
                timeElapsed,
                forInterval
            );
    }
}

File 2 of 4 : SafeMath.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.6.0 <0.8.0;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        uint256 c = a + b;
        if (c < a) return (false, 0);
        return (true, c);
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b > a) return (false, 0);
        return (true, a - b);
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, 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-contracts/pull/522
        if (a == 0) return (true, 0);
        uint256 c = a * b;
        if (c / a != b) return (false, 0);
        return (true, c);
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a / b);
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a % b);
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a, "SafeMath: subtraction overflow");
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) return 0;
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, "SafeMath: division by zero");
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, "SafeMath: modulo by zero");
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        return a - b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryDiv}.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        return a % b;
    }
}

File 3 of 4 : IYieldOraclelizable.sol
// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.7.6;
pragma abicoder v2;

interface IYieldOraclelizable {
    // accumulates/updates internal state and returns cumulatives 
    // oracle should call this when updating
    function cumulatives()
      external
    returns(uint256 cumulativeYield);

}

File 4 of 4 : IYieldOracle.sol
// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.7.6;
pragma abicoder v2;

interface IYieldOracle {
    function update() external;

    function consult(uint256 forInterval) external returns (uint256 amountOut);
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 9999
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"cumulator_","type":"address"},{"internalType":"uint256","name":"windowSize_","type":"uint256"},{"internalType":"uint8","name":"granularity_","type":"uint8"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"forInterval","type":"uint256"}],"name":"consult","outputs":[{"internalType":"uint256","name":"yieldForInterval","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cumulator","outputs":[{"internalType":"contract IYieldOraclelizable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"granularity","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"timestamp_","type":"uint256"}],"name":"observationIndexOf","outputs":[{"internalType":"uint8","name":"index","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"periodSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"update","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"windowSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"yieldObservations","outputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"yieldCumulative","type":"uint256"}],"stateMutability":"view","type":"function"}]

60e060405234801561001057600080fd5b5060405161099138038061099183398101604081905261002f91610102565b60018160ff161161005b5760405162461bcd60e51b815260040161005290610154565b60405180910390fd5b8160ff821680828161006957fe5b0460c0819052021461008d5760405162461bcd60e51b81526004016100529061017d565b608082905260f881901b7fff000000000000000000000000000000000000000000000000000000000000001660a052600080546001600160a01b0319166001600160a01b0385161790556001545b8160ff168110156100f95760018054810181556000819052016100db565b505050506101b4565b600080600060608486031215610116578283fd5b83516001600160a01b038116811461012c578384fd5b60208501516040860151919450925060ff81168114610149578182fd5b809150509250925092565b6020808252600f908201526e594f3a204752414e554c415249545960881b604082015260600190565b6020808252601f908201527f594f3a2057494e444f575f4e4f545f4556454e4c595f444956495349424c4500604082015260600190565b60805160a05160f81c60c05161078b610206600039806101e352806103555280610432528061049252508061015e528061045e52806104c65250806101b0528061020752806102fb525061078b6000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80638a14117a1161005b5780638a14117a14610101578063a2e6204514610109578063dbaad32f14610113578063e4463eb21461012657610088565b80630a7245611461008d578063556f0dc7146100b75780635900760a146100cc57806361e25d83146100e1575b600080fd5b6100a061009b3660046106be565b61012e565b6040516100ae929190610718565b60405180910390f35b6100bf61015c565b6040516100ae9190610726565b6100d4610180565b6040516100ae91906106ee565b6100f46100ef3660046106be565b61019c565b6040516100ae919061070f565b6100f46102f9565b61011161031d565b005b6100bf6101213660046106be565b61042d565b6100f4610490565b6001818154811061013e57600080fd5b60009182526020909120600290910201805460019091015490915082565b7f000000000000000000000000000000000000000000000000000000000000000081565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b6000806101a76104b4565b805490915042037f00000000000000000000000000000000000000000000000000000000000000008111156101e1576000925050506102f4565b7f00000000000000000000000000000000000000000000000000000000000000006002027f000000000000000000000000000000000000000000000000000000000000000003811015610239576000925050506102f4565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ddaf429d6040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156102a457600080fd5b505af11580156102b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102dc91906106d6565b90506102ee836001015482848861051e565b93505050505b919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006103284261042d565b9050600060018260ff168154811061033c57fe5b60009182526020909120600290910201805490915042037f00000000000000000000000000000000000000000000000000000000000000008111156104285760008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ddaf429d6040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156103e657600080fd5b505af11580156103fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041e91906106d6565b4284556001840155505b505050565b6000807f0000000000000000000000000000000000000000000000000000000000000000838161045957fe5b0490507f000000000000000000000000000000000000000000000000000000000000000060ff16818161048857fe5b069392505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806104c04261042d565b905060007f000000000000000000000000000000000000000000000000000000000000000060ff168260010160ff16816104f657fe5b06905060018160ff168154811061050957fe5b90600052602060002090600202019250505090565b600061053e8361053884610532888a610547565b906105c3565b9061063d565b95945050505050565b6000828211156105b857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b508082035b92915050565b6000826105d2575060006105bd565b828202828482816105df57fe5b0414610636576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806107356021913960400191505060405180910390fd5b9392505050565b60008082116106ad57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b8183816106b657fe5b049392505050565b6000602082840312156106cf578081fd5b5035919050565b6000602082840312156106e7578081fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b90815260200190565b918252602082015260400190565b60ff9190911681526020019056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a264697066735822122026a0027915dc3c4678874acb333b4a60c1f9da265571404ec7a5574dd684a1ff64736f6c634300070600330000000000000000000000001050716f239e13a803b7d1ba55b187303b14374a000000000000000000000000000000000000000000000000000000000003f4800000000000000000000000000000000000000000000000000000000000000004

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100885760003560e01c80638a14117a1161005b5780638a14117a14610101578063a2e6204514610109578063dbaad32f14610113578063e4463eb21461012657610088565b80630a7245611461008d578063556f0dc7146100b75780635900760a146100cc57806361e25d83146100e1575b600080fd5b6100a061009b3660046106be565b61012e565b6040516100ae929190610718565b60405180910390f35b6100bf61015c565b6040516100ae9190610726565b6100d4610180565b6040516100ae91906106ee565b6100f46100ef3660046106be565b61019c565b6040516100ae919061070f565b6100f46102f9565b61011161031d565b005b6100bf6101213660046106be565b61042d565b6100f4610490565b6001818154811061013e57600080fd5b60009182526020909120600290910201805460019091015490915082565b7f000000000000000000000000000000000000000000000000000000000000000481565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b6000806101a76104b4565b805490915042037f000000000000000000000000000000000000000000000000000000000003f4808111156101e1576000925050506102f4565b7f000000000000000000000000000000000000000000000000000000000000fd206002027f000000000000000000000000000000000000000000000000000000000003f48003811015610239576000925050506102f4565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ddaf429d6040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156102a457600080fd5b505af11580156102b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102dc91906106d6565b90506102ee836001015482848861051e565b93505050505b919050565b7f000000000000000000000000000000000000000000000000000000000003f48081565b60006103284261042d565b9050600060018260ff168154811061033c57fe5b60009182526020909120600290910201805490915042037f000000000000000000000000000000000000000000000000000000000000fd208111156104285760008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ddaf429d6040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156103e657600080fd5b505af11580156103fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041e91906106d6565b4284556001840155505b505050565b6000807f000000000000000000000000000000000000000000000000000000000000fd20838161045957fe5b0490507f000000000000000000000000000000000000000000000000000000000000000460ff16818161048857fe5b069392505050565b7f000000000000000000000000000000000000000000000000000000000000fd2081565b6000806104c04261042d565b905060007f000000000000000000000000000000000000000000000000000000000000000460ff168260010160ff16816104f657fe5b06905060018160ff168154811061050957fe5b90600052602060002090600202019250505090565b600061053e8361053884610532888a610547565b906105c3565b9061063d565b95945050505050565b6000828211156105b857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b508082035b92915050565b6000826105d2575060006105bd565b828202828482816105df57fe5b0414610636576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806107356021913960400191505060405180910390fd5b9392505050565b60008082116106ad57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b8183816106b657fe5b049392505050565b6000602082840312156106cf578081fd5b5035919050565b6000602082840312156106e7578081fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b90815260200190565b918252602082015260400190565b60ff9190911681526020019056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a264697066735822122026a0027915dc3c4678874acb333b4a60c1f9da265571404ec7a5574dd684a1ff64736f6c63430007060033

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

0000000000000000000000001050716f239e13a803b7d1ba55b187303b14374a000000000000000000000000000000000000000000000000000000000003f4800000000000000000000000000000000000000000000000000000000000000004

-----Decoded View---------------
Arg [0] : cumulator_ (address): 0x1050716f239e13A803B7D1BA55b187303B14374a
Arg [1] : windowSize_ (uint256): 259200
Arg [2] : granularity_ (uint8): 4

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000001050716f239e13a803b7d1ba55b187303b14374a
Arg [1] : 000000000000000000000000000000000000000000000000000000000003f480
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000004


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

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