ETH Price: $1,980.85 (+0.61%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To

There are no matching entries

Please try again later

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SyntheticAggregator

Compiler Version
v0.5.16+commit.9c3226ce

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license
/**
 *Submitted for verification at Etherscan.io on 2020-03-24
*/

/**

  Source code of Opium Protocol
  Web https://opium.network
  Telegram https://t.me/opium_network
  Twitter https://twitter.com/opium_network

 */

// File: LICENSE

/**

The software and documentation available in this repository (the "Software") is protected by copyright law and accessible pursuant to the license set forth below. Copyright © 2020 Blockeys BV. All rights reserved.

Permission is hereby granted, free of charge, to any person or organization obtaining the Software (the “Licensee”) to privately study, review, and analyze the Software. Licensee shall not use the Software for any other purpose. Licensee shall not modify, transfer, assign, share, or sub-license the Software or any derivative works of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/

// File: openzeppelin-solidity/contracts/utils/ReentrancyGuard.sol

pragma solidity ^0.5.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.
 */
contract ReentrancyGuard {
    // counter to allow mutex lock with only one SSTORE operation
    uint256 private _guardCounter;

    constructor () internal {
        // The counter starts at one to prevent changing it from zero to a non-zero
        // value, which is a more expensive operation.
        _guardCounter = 1;
    }

    /**
     * @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() {
        _guardCounter += 1;
        uint256 localCounter = _guardCounter;
        _;
        require(localCounter == _guardCounter, "ReentrancyGuard: reentrant call");
    }
}

// File: contracts/Lib/LibDerivative.sol

pragma solidity 0.5.16;
pragma experimental ABIEncoderV2;

/// @title Opium.Lib.LibDerivative contract should be inherited by contracts that use Derivative structure and calculate derivativeHash
contract LibDerivative {
    // Opium derivative structure (ticker) definition
    struct Derivative {
        // Margin parameter for syntheticId
        uint256 margin;
        // Maturity of derivative
        uint256 endTime;
        // Additional parameters for syntheticId
        uint256[] params;
        // oracleId of derivative
        address oracleId;
        // Margin token address of derivative
        address token;
        // syntheticId of derivative
        address syntheticId;
    }

    /// @notice Calculates hash of provided Derivative
    /// @param _derivative Derivative Instance of derivative to hash
    /// @return derivativeHash bytes32 Derivative hash
    function getDerivativeHash(Derivative memory _derivative) public pure returns (bytes32 derivativeHash) {
        derivativeHash = keccak256(abi.encodePacked(
            _derivative.margin,
            _derivative.endTime,
            _derivative.params,
            _derivative.oracleId,
            _derivative.token,
            _derivative.syntheticId
        ));
    }
}

// File: contracts/Lib/LibCommission.sol

pragma solidity 0.5.16;

/// @title Opium.Lib.LibCommission contract defines constants for Opium commissions
contract LibCommission {
    // Represents 100% base for commissions calculation
    uint256 constant public COMMISSION_BASE = 10000;

    // Represents 100% base for Opium commission
    uint256 constant public OPIUM_COMMISSION_BASE = 10;

    // Represents which part of `syntheticId` author commissions goes to opium
    uint256 constant public OPIUM_COMMISSION_PART = 1;
}

// File: contracts/Errors/SyntheticAggregatorErrors.sol

pragma solidity 0.5.16;

contract SyntheticAggregatorErrors {
    string constant internal ERROR_SYNTHETIC_AGGREGATOR_DERIVATIVE_HASH_NOT_MATCH = "SYNTHETIC_AGGREGATOR:DERIVATIVE_HASH_NOT_MATCH";
    string constant internal ERROR_SYNTHETIC_AGGREGATOR_WRONG_MARGIN = "SYNTHETIC_AGGREGATOR:WRONG_MARGIN";
    string constant internal ERROR_SYNTHETIC_AGGREGATOR_COMMISSION_TOO_BIG = "SYNTHETIC_AGGREGATOR:COMMISSION_TOO_BIG";
}

// File: contracts/Interface/IOracleId.sol

pragma solidity 0.5.16;

/// @title Opium.Interface.IOracleId contract is an interface that every oracleId should implement
interface IOracleId {
    /// @notice Requests data from `oracleId` one time
    /// @param timestamp uint256 Timestamp at which data are needed
    function fetchData(uint256 timestamp) external payable;

    /// @notice Requests data from `oracleId` multiple times
    /// @param timestamp uint256 Timestamp at which data are needed for the first time
    /// @param period uint256 Period in seconds between multiple timestamps
    /// @param times uint256 How many timestamps are requested
    function recursivelyFetchData(uint256 timestamp, uint256 period, uint256 times) external payable;

    /// @notice Requests and returns price in ETH for one request. This function could be called as `view` function. Oraclize API for price calculations restricts making this function as view.
    /// @return fetchPrice uint256 Price of one data request in ETH
    function calculateFetchPrice() external returns (uint256 fetchPrice);

    // Event with oracleId metadata JSON string (for DIB.ONE derivative explorer)
    event MetadataSet(string metadata);
}

// File: contracts/Interface/IDerivativeLogic.sol

pragma solidity 0.5.16;


/// @title Opium.Interface.IDerivativeLogic contract is an interface that every syntheticId should implement
contract IDerivativeLogic is LibDerivative {
    /// @notice Validates ticker
    /// @param _derivative Derivative Instance of derivative to validate
    /// @return Returns boolean whether ticker is valid
    function validateInput(Derivative memory _derivative) public view returns (bool);

    /// @notice Calculates margin required for derivative creation
    /// @param _derivative Derivative Instance of derivative
    /// @return buyerMargin uint256 Margin needed from buyer (LONG position)
    /// @return sellerMargin uint256 Margin needed from seller (SHORT position)
    function getMargin(Derivative memory _derivative) public view returns (uint256 buyerMargin, uint256 sellerMargin);

    /// @notice Calculates payout for derivative execution
    /// @param _derivative Derivative Instance of derivative
    /// @param _result uint256 Data retrieved from oracleId on the maturity
    /// @return buyerPayout uint256 Payout in ratio for buyer (LONG position holder)
    /// @return sellerPayout uint256 Payout in ratio for seller (SHORT position holder)
    function getExecutionPayout(Derivative memory _derivative, uint256 _result)	public view returns (uint256 buyerPayout, uint256 sellerPayout);

    /// @notice Returns syntheticId author address for Opium commissions
    /// @return authorAddress address The address of syntheticId address
    function getAuthorAddress() public view returns (address authorAddress);

    /// @notice Returns syntheticId author commission in base of COMMISSION_BASE
    /// @return commission uint256 Author commission
    function getAuthorCommission() public view returns (uint256 commission);

    /// @notice Returns whether thirdparty could execute on derivative's owner's behalf
    /// @param _derivativeOwner address Derivative owner address
    /// @return Returns boolean whether _derivativeOwner allowed third party execution
    function thirdpartyExecutionAllowed(address _derivativeOwner) public view returns (bool);

    /// @notice Returns whether syntheticId implements pool logic
    /// @return Returns whether syntheticId implements pool logic
    function isPool() public view returns (bool);

    /// @notice Sets whether thirds parties are allowed or not to execute derivative's on msg.sender's behalf
    /// @param _allow bool Flag for execution allowance
    function allowThirdpartyExecution(bool _allow) public;

    // Event with syntheticId metadata JSON string (for DIB.ONE derivative explorer)
    event MetadataSet(string metadata);
}

// File: contracts/SyntheticAggregator.sol

pragma solidity 0.5.16;







/// @notice Opium.SyntheticAggregator contract initialized, identifies and caches syntheticId sensitive data
contract SyntheticAggregator is SyntheticAggregatorErrors, LibDerivative, LibCommission, ReentrancyGuard {
    // Emitted when new ticker is initialized
    event Create(Derivative derivative, bytes32 derivativeHash);

    // Enum for types of syntheticId
    // Invalid - syntheticId is not initialized yet
    // NotPool - syntheticId with p2p logic
    // Pool - syntheticId with pooled logic
    enum SyntheticTypes { Invalid, NotPool, Pool }

    // Cache of buyer margin by ticker
    // buyerMarginByHash[derivativeHash] = buyerMargin
    mapping (bytes32 => uint256) public buyerMarginByHash;

    // Cache of seller margin by ticker
    // sellerMarginByHash[derivativeHash] = sellerMargin
    mapping (bytes32 => uint256) public sellerMarginByHash;

    // Cache of type by ticker
    // typeByHash[derivativeHash] = type
    mapping (bytes32 => SyntheticTypes) public typeByHash;

    // Cache of commission by ticker
    // commissionByHash[derivativeHash] = commission
    mapping (bytes32 => uint256) public commissionByHash;

    // Cache of author addresses by ticker
    // authorAddressByHash[derivativeHash] = authorAddress
    mapping (bytes32 => address) public authorAddressByHash;

    // PUBLIC FUNCTIONS

    /// @notice Initializes ticker, if was not initialized and returns `syntheticId` author commission from cache
    /// @param _derivativeHash bytes32 Hash of derivative
    /// @param _derivative Derivative Derivative itself
    /// @return commission uint256 Synthetic author commission
    function getAuthorCommission(bytes32 _derivativeHash, Derivative memory _derivative) public nonReentrant returns (uint256 commission) {
        // Initialize derivative if wasn't initialized before
        _initDerivative(_derivativeHash, _derivative);
        commission = commissionByHash[_derivativeHash];
    }

    /// @notice Initializes ticker, if was not initialized and returns `syntheticId` author address from cache
    /// @param _derivativeHash bytes32 Hash of derivative
    /// @param _derivative Derivative Derivative itself
    /// @return authorAddress address Synthetic author address
    function getAuthorAddress(bytes32 _derivativeHash, Derivative memory _derivative) public nonReentrant returns (address authorAddress) {
        // Initialize derivative if wasn't initialized before
        _initDerivative(_derivativeHash, _derivative);
        authorAddress = authorAddressByHash[_derivativeHash];
    }

    /// @notice Initializes ticker, if was not initialized and returns buyer and seller margin from cache
    /// @param _derivativeHash bytes32 Hash of derivative
    /// @param _derivative Derivative Derivative itself
    /// @return buyerMargin uint256 Margin of buyer
    /// @return sellerMargin uint256 Margin of seller
    function getMargin(bytes32 _derivativeHash, Derivative memory _derivative) public nonReentrant returns (uint256 buyerMargin, uint256 sellerMargin) {
        // If it's a pool, just return margin from syntheticId contract
        if (_isPool(_derivativeHash, _derivative)) {
            return IDerivativeLogic(_derivative.syntheticId).getMargin(_derivative);
        }

        // Initialize derivative if wasn't initialized before
        _initDerivative(_derivativeHash, _derivative);

        // Check if margins for _derivativeHash were already cached
        buyerMargin = buyerMarginByHash[_derivativeHash];
        sellerMargin = sellerMarginByHash[_derivativeHash];
    }

    /// @notice Checks whether `syntheticId` implements pooled logic
    /// @param _derivativeHash bytes32 Hash of derivative
    /// @param _derivative Derivative Derivative itself
    /// @return result bool Returns whether synthetic implements pooled logic
    function isPool(bytes32 _derivativeHash, Derivative memory _derivative) public nonReentrant returns (bool result) {
        result = _isPool(_derivativeHash, _derivative);
    }

    // PRIVATE FUNCTIONS

    /// @notice Initializes ticker, if was not initialized and returns whether `syntheticId` implements pooled logic
    /// @param _derivativeHash bytes32 Hash of derivative
    /// @param _derivative Derivative Derivative itself
    /// @return result bool Returns whether synthetic implements pooled logic
    function _isPool(bytes32 _derivativeHash, Derivative memory _derivative) private returns (bool result) {
        // Initialize derivative if wasn't initialized before
        _initDerivative(_derivativeHash, _derivative);
        result = typeByHash[_derivativeHash] == SyntheticTypes.Pool;
    }

    /// @notice Initializes ticker: caches syntheticId type, margin, author address and commission
    /// @param _derivativeHash bytes32 Hash of derivative
    /// @param _derivative Derivative Derivative itself
    function _initDerivative(bytes32 _derivativeHash, Derivative memory _derivative) private {
        // Check if type for _derivativeHash was already cached
        SyntheticTypes syntheticType = typeByHash[_derivativeHash];

        // Type could not be Invalid, thus this condition says us that type was not cached before
        if (syntheticType != SyntheticTypes.Invalid) {
            return;
        }

        // For security reasons we calculate hash of provided _derivative
        bytes32 derivativeHash = getDerivativeHash(_derivative);
        require(derivativeHash == _derivativeHash, ERROR_SYNTHETIC_AGGREGATOR_DERIVATIVE_HASH_NOT_MATCH);

        // POOL
        // Get isPool from SyntheticId
        bool result = IDerivativeLogic(_derivative.syntheticId).isPool();
        // Cache type returned from synthetic
        typeByHash[derivativeHash] = result ? SyntheticTypes.Pool : SyntheticTypes.NotPool;

        // MARGIN
        // Get margin from SyntheticId
        (uint256 buyerMargin, uint256 sellerMargin) = IDerivativeLogic(_derivative.syntheticId).getMargin(_derivative);
        // We are not allowing both margins to be equal to 0
        require(buyerMargin != 0 || sellerMargin != 0, ERROR_SYNTHETIC_AGGREGATOR_WRONG_MARGIN);
        // Cache margins returned from synthetic
        buyerMarginByHash[derivativeHash] = buyerMargin;
        sellerMarginByHash[derivativeHash] = sellerMargin;

        // AUTHOR ADDRESS
        // Cache author address returned from synthetic
        authorAddressByHash[derivativeHash] = IDerivativeLogic(_derivative.syntheticId).getAuthorAddress();

        // AUTHOR COMMISSION
        // Get commission from syntheticId
        uint256 commission = IDerivativeLogic(_derivative.syntheticId).getAuthorCommission();
        // Check if commission is not set > 100%
        require(commission <= COMMISSION_BASE, ERROR_SYNTHETIC_AGGREGATOR_COMMISSION_TOO_BIG);
        // Cache commission
        commissionByHash[derivativeHash] = commission;

        // If we are here, this basically means this ticker was not used before, so we emit an event for Dapps developers about new ticker (derivative) and it's hash
        emit Create(_derivative, derivativeHash);
    }
}

Contract Security Audit

Contract ABI

API
[{"anonymous":false,"inputs":[{"components":[{"internalType":"uint256","name":"margin","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"uint256[]","name":"params","type":"uint256[]"},{"internalType":"address","name":"oracleId","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"syntheticId","type":"address"}],"indexed":false,"internalType":"struct LibDerivative.Derivative","name":"derivative","type":"tuple"},{"indexed":false,"internalType":"bytes32","name":"derivativeHash","type":"bytes32"}],"name":"Create","type":"event"},{"constant":true,"inputs":[],"name":"COMMISSION_BASE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"OPIUM_COMMISSION_BASE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"OPIUM_COMMISSION_PART","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"authorAddressByHash","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"buyerMarginByHash","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"commissionByHash","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"_derivativeHash","type":"bytes32"},{"components":[{"internalType":"uint256","name":"margin","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"uint256[]","name":"params","type":"uint256[]"},{"internalType":"address","name":"oracleId","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"syntheticId","type":"address"}],"internalType":"struct LibDerivative.Derivative","name":"_derivative","type":"tuple"}],"name":"getAuthorAddress","outputs":[{"internalType":"address","name":"authorAddress","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"_derivativeHash","type":"bytes32"},{"components":[{"internalType":"uint256","name":"margin","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"uint256[]","name":"params","type":"uint256[]"},{"internalType":"address","name":"oracleId","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"syntheticId","type":"address"}],"internalType":"struct LibDerivative.Derivative","name":"_derivative","type":"tuple"}],"name":"getAuthorCommission","outputs":[{"internalType":"uint256","name":"commission","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"components":[{"internalType":"uint256","name":"margin","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"uint256[]","name":"params","type":"uint256[]"},{"internalType":"address","name":"oracleId","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"syntheticId","type":"address"}],"internalType":"struct LibDerivative.Derivative","name":"_derivative","type":"tuple"}],"name":"getDerivativeHash","outputs":[{"internalType":"bytes32","name":"derivativeHash","type":"bytes32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"_derivativeHash","type":"bytes32"},{"components":[{"internalType":"uint256","name":"margin","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"uint256[]","name":"params","type":"uint256[]"},{"internalType":"address","name":"oracleId","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"syntheticId","type":"address"}],"internalType":"struct LibDerivative.Derivative","name":"_derivative","type":"tuple"}],"name":"getMargin","outputs":[{"internalType":"uint256","name":"buyerMargin","type":"uint256"},{"internalType":"uint256","name":"sellerMargin","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"_derivativeHash","type":"bytes32"},{"components":[{"internalType":"uint256","name":"margin","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"uint256[]","name":"params","type":"uint256[]"},{"internalType":"address","name":"oracleId","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"syntheticId","type":"address"}],"internalType":"struct LibDerivative.Derivative","name":"_derivative","type":"tuple"}],"name":"isPool","outputs":[{"internalType":"bool","name":"result","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"sellerMarginByHash","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"typeByHash","outputs":[{"internalType":"enum SyntheticAggregator.SyntheticTypes","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"}]

60806040526001600055610ff7806100186000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c806399a501761161008c578063b9080d2b11610066578063b9080d2b146101b4578063d842b22b146101c7578063eb955122146101cf578063fdead272146101e2576100cf565b806399a501761461016b57806399f685ee1461018b578063a956fd12146101ac576100cf565b806307ed2fc4146100d457806328fb2b03146100fd57806339e330491461011257806355e65bda1461012557806365b3e7d71461013857806390558fe614610158575b600080fd5b6100e76100e2366004610a27565b6101f5565b6040516100f49190610da4565b60405180910390f35b61010561020a565b6040516100f49190610d96565b610105610120366004610a27565b61020f565b610105610133366004610a27565b610221565b61014b610146366004610a27565b610233565b6040516100f49190610d7a565b610105610166366004610a27565b61024e565b61017e610179366004610a45565b610260565b6040516100f49190610d88565b61019e610199366004610a45565b6102a7565b6040516100f4929190610e0b565b61010561039e565b61014b6101c2366004610a45565b6103a3565b6101056103f3565b6101056101dd366004610a97565b6103f9565b6101056101f0366004610a45565b610446565b60036020526000908152604090205460ff1681565b600181565b60016020526000908152604090205481565b60026020526000908152604090205481565b6005602052600090815260409020546001600160a01b031681565b60046020526000908152604090205481565b60008054600101808255610274848461048c565b915060005481146102a05760405162461bcd60e51b815260040161029790610dca565b60405180910390fd5b5092915050565b6000805460010180825581906102bd858561048c565b1561034a578360a001516001600160a01b0316630433fe45856040518263ffffffff1660e01b81526004016102f29190610dda565b604080518083038186803b15801561030957600080fd5b505afa15801561031d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506103419190810190610aea565b92509250610375565b61035485856104bf565b60008581526001602090815260408083205460029092529091205490935091505b60005481146103965760405162461bcd60e51b815260040161029790610dca565b509250929050565b600a81565b600080546001018082556103b784846104bf565b60008481526005602052604081205490546001600160a01b03909116925081146102a05760405162461bcd60e51b815260040161029790610dca565b61271081565b80516020808301516040808501516060860151608087015160a08801519351600097610429979096959101610d14565b604051602081830303815290604052805190602001209050919050565b6000805460010180825561045a84846104bf565b600084815260046020526040812054905490925081146102a05760405162461bcd60e51b815260040161029790610dca565b600061049883836104bf565b600260008481526003602052604090205460ff1660028111156104b757fe5b149392505050565b60008281526003602052604081205460ff16908160028111156104de57fe5b146104e95750610874565b60006104f4836103f9565b90508381146040518060600160405280602e8152602001610f87602e9139906105305760405162461bcd60e51b81526004016102979190610db2565b5060008360a001516001600160a01b031663e2e1c6db6040518163ffffffff1660e01b815260040160206040518083038186803b15801561057057600080fd5b505afa158015610584573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506105a89190810190610a09565b9050806105b65760016105b9565b60025b6000838152600360205260409020805460ff191660018360028111156105db57fe5b02179055506000808560a001516001600160a01b0316630433fe45876040518263ffffffff1660e01b81526004016106139190610dda565b604080518083038186803b15801561062a57600080fd5b505afa15801561063e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506106629190810190610aea565b9150915081600014158061067557508015155b604051806060016040528060218152602001610f3f60219139906106ac5760405162461bcd60e51b81526004016102979190610db2565b506000848152600160209081526040808320859055600282529182902083905560a0880151825163a4300ee560e01b815292516001600160a01b039091169263a4300ee5926004808301939192829003018186803b15801561070d57600080fd5b505afa158015610721573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061074591908101906109e3565b600085815260056020908152604080832080546001600160a01b0319166001600160a01b0395861617905560a08a01518151631d422a1f60e11b8152915193941692633a84543e92600480840193919291829003018186803b1580156107aa57600080fd5b505afa1580156107be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506107e29190810190610acc565b9050612710811115604051806060016040528060278152602001610f6060279139906108215760405162461bcd60e51b81526004016102979190610db2565b5060008581526004602052604090819020829055517f646cd6a493733926e3a2c40eb9ec0b4b8baca88ec23b60b97068c515383efbc0906108659089908890610deb565b60405180910390a15050505050505b5050565b803561088381610f18565b92915050565b805161088381610f18565b600082601f8301126108a557600080fd5b81356108b86108b382610e4d565b610e26565b915081818352602084019350602081019050838560208402820111156108dd57600080fd5b60005b8381101561090957816108f3888261091e565b84525060209283019291909101906001016108e0565b5050505092915050565b805161088381610f2c565b803561088381610f35565b600060c0828403121561093b57600080fd5b61094560c0610e26565b90506000610953848461091e565b82525060206109648484830161091e565b602083015250604082013567ffffffffffffffff81111561098457600080fd5b61099084828501610894565b60408301525060606109a484828501610878565b60608301525060806109b884828501610878565b60808301525060a06109cc84828501610878565b60a08301525092915050565b805161088381610f35565b6000602082840312156109f557600080fd5b6000610a018484610889565b949350505050565b600060208284031215610a1b57600080fd5b6000610a018484610913565b600060208284031215610a3957600080fd5b6000610a01848461091e565b60008060408385031215610a5857600080fd5b6000610a64858561091e565b925050602083013567ffffffffffffffff811115610a8157600080fd5b610a8d85828601610929565b9150509250929050565b600060208284031215610aa957600080fd5b813567ffffffffffffffff811115610ac057600080fd5b610a0184828501610929565b600060208284031215610ade57600080fd5b6000610a0184846109d8565b60008060408385031215610afd57600080fd5b6000610b0985856109d8565b9250506020610a8d858286016109d8565b6000610b268383610bfe565b505060200190565b610b3781610e86565b82525050565b610b37610b4982610e86565b610eea565b6000610b5982610e74565b610b638185610e78565b9350610b6e83610e6e565b8060005b83811015610b9c578151610b868882610b1a565b9750610b9183610e6e565b925050600101610b72565b509495945050505050565b6000610bb282610e74565b610bbc8185610e81565b9350610bc783610e6e565b8060005b83811015610b9c578151610bdf8882610b1a565b9750610bea83610e6e565b925050600101610bcb565b610b3781610e91565b610b3781610e96565b610b3781610eaf565b6000610c1b82610e74565b610c258185610e78565b9350610c35818560208601610eba565b610c3e81610efb565b9093019392505050565b6000610c55601f83610e78565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00815260200192915050565b805160009060c0840190610c958582610bfe565b506020830151610ca86020860182610bfe565b5060408301518482036040860152610cc08282610b4e565b9150506060830151610cd56060860182610b2e565b506080830151610ce86080860182610b2e565b5060a0830151610cfb60a0860182610b2e565b509392505050565b610b37610d0f82610e96565b610e96565b6000610d208289610d03565b602082019150610d308288610d03565b602082019150610d408287610ba7565b9150610d4c8286610b3d565b601482019150610d5c8285610b3d565b601482019150610d6c8284610b3d565b506014019695505050505050565b602081016108838284610b2e565b602081016108838284610bf5565b602081016108838284610bfe565b602081016108838284610c07565b60208082528101610dc38184610c10565b9392505050565b6020808252810161088381610c48565b60208082528101610dc38184610c81565b60408082528101610dfc8185610c81565b9050610dc36020830184610bfe565b60408101610e198285610bfe565b610dc36020830184610bfe565b60405181810167ffffffffffffffff81118282101715610e4557600080fd5b604052919050565b600067ffffffffffffffff821115610e6457600080fd5b5060209081020190565b60200190565b5190565b90815260200190565b919050565b600061088382610ea3565b151590565b90565b80610e8181610f0b565b6001600160a01b031690565b600061088382610e99565b60005b83811015610ed5578181015183820152602001610ebd565b83811115610ee4576000848401525b50505050565b600061088382600061088382610f05565b601f01601f191690565b60601b90565b60038110610f1557fe5b50565b610f2181610e86565b8114610f1557600080fd5b610f2181610e91565b610f2181610e9656fe53594e5448455449435f41474752454741544f523a57524f4e475f4d415247494e53594e5448455449435f41474752454741544f523a434f4d4d495353494f4e5f544f4f5f42494753594e5448455449435f41474752454741544f523a444552495641544956455f484153485f4e4f545f4d41544348a365627a7a72315820a025095cd0b5077493eee6ff2dfcce3064aa992d8f02c15d811f1df7178b8c486c6578706572696d656e74616cf564736f6c63430005100040

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100cf5760003560e01c806399a501761161008c578063b9080d2b11610066578063b9080d2b146101b4578063d842b22b146101c7578063eb955122146101cf578063fdead272146101e2576100cf565b806399a501761461016b57806399f685ee1461018b578063a956fd12146101ac576100cf565b806307ed2fc4146100d457806328fb2b03146100fd57806339e330491461011257806355e65bda1461012557806365b3e7d71461013857806390558fe614610158575b600080fd5b6100e76100e2366004610a27565b6101f5565b6040516100f49190610da4565b60405180910390f35b61010561020a565b6040516100f49190610d96565b610105610120366004610a27565b61020f565b610105610133366004610a27565b610221565b61014b610146366004610a27565b610233565b6040516100f49190610d7a565b610105610166366004610a27565b61024e565b61017e610179366004610a45565b610260565b6040516100f49190610d88565b61019e610199366004610a45565b6102a7565b6040516100f4929190610e0b565b61010561039e565b61014b6101c2366004610a45565b6103a3565b6101056103f3565b6101056101dd366004610a97565b6103f9565b6101056101f0366004610a45565b610446565b60036020526000908152604090205460ff1681565b600181565b60016020526000908152604090205481565b60026020526000908152604090205481565b6005602052600090815260409020546001600160a01b031681565b60046020526000908152604090205481565b60008054600101808255610274848461048c565b915060005481146102a05760405162461bcd60e51b815260040161029790610dca565b60405180910390fd5b5092915050565b6000805460010180825581906102bd858561048c565b1561034a578360a001516001600160a01b0316630433fe45856040518263ffffffff1660e01b81526004016102f29190610dda565b604080518083038186803b15801561030957600080fd5b505afa15801561031d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506103419190810190610aea565b92509250610375565b61035485856104bf565b60008581526001602090815260408083205460029092529091205490935091505b60005481146103965760405162461bcd60e51b815260040161029790610dca565b509250929050565b600a81565b600080546001018082556103b784846104bf565b60008481526005602052604081205490546001600160a01b03909116925081146102a05760405162461bcd60e51b815260040161029790610dca565b61271081565b80516020808301516040808501516060860151608087015160a08801519351600097610429979096959101610d14565b604051602081830303815290604052805190602001209050919050565b6000805460010180825561045a84846104bf565b600084815260046020526040812054905490925081146102a05760405162461bcd60e51b815260040161029790610dca565b600061049883836104bf565b600260008481526003602052604090205460ff1660028111156104b757fe5b149392505050565b60008281526003602052604081205460ff16908160028111156104de57fe5b146104e95750610874565b60006104f4836103f9565b90508381146040518060600160405280602e8152602001610f87602e9139906105305760405162461bcd60e51b81526004016102979190610db2565b5060008360a001516001600160a01b031663e2e1c6db6040518163ffffffff1660e01b815260040160206040518083038186803b15801561057057600080fd5b505afa158015610584573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506105a89190810190610a09565b9050806105b65760016105b9565b60025b6000838152600360205260409020805460ff191660018360028111156105db57fe5b02179055506000808560a001516001600160a01b0316630433fe45876040518263ffffffff1660e01b81526004016106139190610dda565b604080518083038186803b15801561062a57600080fd5b505afa15801561063e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506106629190810190610aea565b9150915081600014158061067557508015155b604051806060016040528060218152602001610f3f60219139906106ac5760405162461bcd60e51b81526004016102979190610db2565b506000848152600160209081526040808320859055600282529182902083905560a0880151825163a4300ee560e01b815292516001600160a01b039091169263a4300ee5926004808301939192829003018186803b15801561070d57600080fd5b505afa158015610721573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061074591908101906109e3565b600085815260056020908152604080832080546001600160a01b0319166001600160a01b0395861617905560a08a01518151631d422a1f60e11b8152915193941692633a84543e92600480840193919291829003018186803b1580156107aa57600080fd5b505afa1580156107be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506107e29190810190610acc565b9050612710811115604051806060016040528060278152602001610f6060279139906108215760405162461bcd60e51b81526004016102979190610db2565b5060008581526004602052604090819020829055517f646cd6a493733926e3a2c40eb9ec0b4b8baca88ec23b60b97068c515383efbc0906108659089908890610deb565b60405180910390a15050505050505b5050565b803561088381610f18565b92915050565b805161088381610f18565b600082601f8301126108a557600080fd5b81356108b86108b382610e4d565b610e26565b915081818352602084019350602081019050838560208402820111156108dd57600080fd5b60005b8381101561090957816108f3888261091e565b84525060209283019291909101906001016108e0565b5050505092915050565b805161088381610f2c565b803561088381610f35565b600060c0828403121561093b57600080fd5b61094560c0610e26565b90506000610953848461091e565b82525060206109648484830161091e565b602083015250604082013567ffffffffffffffff81111561098457600080fd5b61099084828501610894565b60408301525060606109a484828501610878565b60608301525060806109b884828501610878565b60808301525060a06109cc84828501610878565b60a08301525092915050565b805161088381610f35565b6000602082840312156109f557600080fd5b6000610a018484610889565b949350505050565b600060208284031215610a1b57600080fd5b6000610a018484610913565b600060208284031215610a3957600080fd5b6000610a01848461091e565b60008060408385031215610a5857600080fd5b6000610a64858561091e565b925050602083013567ffffffffffffffff811115610a8157600080fd5b610a8d85828601610929565b9150509250929050565b600060208284031215610aa957600080fd5b813567ffffffffffffffff811115610ac057600080fd5b610a0184828501610929565b600060208284031215610ade57600080fd5b6000610a0184846109d8565b60008060408385031215610afd57600080fd5b6000610b0985856109d8565b9250506020610a8d858286016109d8565b6000610b268383610bfe565b505060200190565b610b3781610e86565b82525050565b610b37610b4982610e86565b610eea565b6000610b5982610e74565b610b638185610e78565b9350610b6e83610e6e565b8060005b83811015610b9c578151610b868882610b1a565b9750610b9183610e6e565b925050600101610b72565b509495945050505050565b6000610bb282610e74565b610bbc8185610e81565b9350610bc783610e6e565b8060005b83811015610b9c578151610bdf8882610b1a565b9750610bea83610e6e565b925050600101610bcb565b610b3781610e91565b610b3781610e96565b610b3781610eaf565b6000610c1b82610e74565b610c258185610e78565b9350610c35818560208601610eba565b610c3e81610efb565b9093019392505050565b6000610c55601f83610e78565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00815260200192915050565b805160009060c0840190610c958582610bfe565b506020830151610ca86020860182610bfe565b5060408301518482036040860152610cc08282610b4e565b9150506060830151610cd56060860182610b2e565b506080830151610ce86080860182610b2e565b5060a0830151610cfb60a0860182610b2e565b509392505050565b610b37610d0f82610e96565b610e96565b6000610d208289610d03565b602082019150610d308288610d03565b602082019150610d408287610ba7565b9150610d4c8286610b3d565b601482019150610d5c8285610b3d565b601482019150610d6c8284610b3d565b506014019695505050505050565b602081016108838284610b2e565b602081016108838284610bf5565b602081016108838284610bfe565b602081016108838284610c07565b60208082528101610dc38184610c10565b9392505050565b6020808252810161088381610c48565b60208082528101610dc38184610c81565b60408082528101610dfc8185610c81565b9050610dc36020830184610bfe565b60408101610e198285610bfe565b610dc36020830184610bfe565b60405181810167ffffffffffffffff81118282101715610e4557600080fd5b604052919050565b600067ffffffffffffffff821115610e6457600080fd5b5060209081020190565b60200190565b5190565b90815260200190565b919050565b600061088382610ea3565b151590565b90565b80610e8181610f0b565b6001600160a01b031690565b600061088382610e99565b60005b83811015610ed5578181015183820152602001610ebd565b83811115610ee4576000848401525b50505050565b600061088382600061088382610f05565b601f01601f191690565b60601b90565b60038110610f1557fe5b50565b610f2181610e86565b8114610f1557600080fd5b610f2181610e91565b610f2181610e9656fe53594e5448455449435f41474752454741544f523a57524f4e475f4d415247494e53594e5448455449435f41474752454741544f523a434f4d4d495353494f4e5f544f4f5f42494753594e5448455449435f41474752454741544f523a444552495641544956455f484153485f4e4f545f4d41544348a365627a7a72315820a025095cd0b5077493eee6ff2dfcce3064aa992d8f02c15d811f1df7178b8c486c6578706572696d656e74616cf564736f6c63430005100040

Deployed Bytecode Sourcemap

9389:7132:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9389:7132:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10245:53;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;4636:49;;;:::i;:::-;;;;;;;;9947:53;;;;;;;;;:::i;10108:54::-;;;;;;;;;:::i;10564:55::-;;;;;;;;;:::i;:::-;;;;;;;;10399:52;;;;;;;;;:::i;13195:179::-;;;;;;;;;:::i;:::-;;;;;;;;12231:691;;;;;;;;;:::i;:::-;;;;;;;;;4497:50;;;:::i;11568:324::-;;;;;;;;;:::i;4391:47::-;;;:::i;3759:382::-;;;;;;;;;:::i;10950:318::-;;;;;;;;;:::i;10245:53::-;;;;;;;;;;;;;;;:::o;4636:49::-;4684:1;4636:49;:::o;9947:53::-;;;;;;;;;;;;;:::o;10108:54::-;;;;;;;;;;;;;:::o;10564:55::-;;;;;;;;;;;;-1:-1:-1;;;;;10564:55:0;;:::o;10399:52::-;;;;;;;;;;;;;:::o;13195:179::-;13296:11;2630:18;;2647:1;2630:18;;;;13329:37;13337:15;13354:11;13329:7;:37::i;:::-;13320:46;;2742:13;;2726:12;:29;2718:73;;;;-1:-1:-1;;;2718:73:0;;;;;;;;;;;;;;;;;13195:179;;;;;:::o;12231:691::-;12335:19;2630:18;;2647:1;2630:18;;;;12335:19;;12466:37;12474:15;12491:11;12466:7;:37::i;:::-;12462:141;;;12544:11;:23;;;-1:-1:-1;;;;;12527:51:0;;12579:11;12527:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12527:64:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12527:64:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;12527:64:0;;;;;;;;;12520:71;;;;;;12462:141;12678:45;12694:15;12711:11;12678:15;:45::i;:::-;12819:34;;;;:17;:34;;;;;;;;;12879:18;:35;;;;;;;12819:34;;-1:-1:-1;12879:35:0;-1:-1:-1;2706:1:0;2742:13;;2726:12;:29;2718:73;;;;-1:-1:-1;;;2718:73:0;;;;;;;;;12231:691;;;;;;:::o;4497:50::-;4545:2;4497:50;:::o;11568:324::-;11679:21;2630:18;;2647:1;2630:18;;;;11776:45;11792:15;11809:11;11776:15;:45::i;:::-;11848:36;;;;:19;:36;;;;;;2742:13;;-1:-1:-1;;;;;11848:36:0;;;;-1:-1:-1;2726:29:0;;2718:73;;;;-1:-1:-1;;;2718:73:0;;;;;;;;4391:47;4433:5;4391:47;:::o;3759:382::-;3931:18;;3964:19;;;;;3998:18;;;;;4031:20;;;;4066:17;;;;4098:23;;;;3900:232;;3838:22;;3900:232;;3931:18;;3964:19;4098:23;3900:232;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;3900:232:0;;;3890:243;;;;;;3873:260;;3759:382;;;:::o;10950:318::-;11064:18;2630;;2647:1;2630:18;;;;11158:45;11174:15;11191:11;11158:15;:45::i;:::-;11227:33;;;;:16;:33;;;;;;2742:13;;11227:33;;-1:-1:-1;2726:29:0;;2718:73;;;;-1:-1:-1;;;2718:73:0;;;;;;;;13723:300;13813:11;13900:45;13916:15;13933:11;13900:15;:45::i;:::-;13996:19;13965:27;;;;:10;:27;;;;;;;;:50;;;;;;;;;;13723:300;-1:-1:-1;;;13723:300:0:o;14247:2271::-;14412:28;14443:27;;;:10;:27;;;;;;;;;14586:13;:39;;;;;;;;;14582:78;;14642:7;;;14582:78;14747:22;14772:30;14790:11;14772:17;:30::i;:::-;14747:55;;14839:15;14821:14;:33;14856:52;;;;;;;;;;;;;;;;;14813:96;;;;;-1:-1:-1;;;14813:96:0;;;;;;;;;;;14979:11;15010;:23;;;-1:-1:-1;;;;;14993:48:0;;:50;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14993:50:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14993:50:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;14993:50:0;;;;;;;;;14979:64;;15130:6;:53;;15161:22;15130:53;;;15139:19;15130:53;15101:26;;;;:10;:26;;;;;:82;;-1:-1:-1;;15101:82:0;;;;;;;;;;;;;;;;15256:19;15277:20;15318:11;:23;;;-1:-1:-1;;;;;15301:51:0;;15353:11;15301:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15301:64:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15301:64:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;15301:64:0;;;;;;;;;15255:110;;;;15446:11;15461:1;15446:16;;:37;;;-1:-1:-1;15466:17:0;;;15446:37;15485:39;;;;;;;;;;;;;;;;;15438:87;;;;;-1:-1:-1;;;15438:87:0;;;;;;;;;;-1:-1:-1;15586:33:0;;;;:17;:33;;;;;;;;:47;;;15644:18;:34;;;;;;:49;;;15845:23;;;;15828:60;;-1:-1:-1;;;15828:60:0;;;;-1:-1:-1;;;;;15828:58:0;;;;;;:60;;;;;15586:33;;15828:60;;;;;:58;:60;;;5:2:-1;;;;30:1;27;20:12;5:2;15828:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15828:60:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;15828:60:0;;;;;;;;;15790:35;;;;:19;:35;;;;;;;;:98;;-1:-1:-1;;;;;;15790:98:0;-1:-1:-1;;;;;15790:98:0;;;;;;16013:23;;;;15996:63;;-1:-1:-1;;;15996:63:0;;;;15790:35;;15996:61;;;;:63;;;;;15790:35;;15996:63;;;;;;:61;:63;;;5:2:-1;;;;30:1;27;20:12;5:2;15996:63:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15996:63:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;15996:63:0;;;;;;;;;15975:84;;4433:5;16128:10;:29;;16159:45;;;;;;;;;;;;;;;;;16120:85;;;;;-1:-1:-1;;;16120:85:0;;;;;;;;;;-1:-1:-1;16245:32:0;;;;:16;:32;;;;;;;:45;;;16475:35;;;;;16482:11;;16262:14;;16475:35;;;;;;;;;;14247:2271;;;;;;;;;:::o;5:130:-1:-;72:20;;97:33;72:20;97:33;;;57:78;;;;;142:134;220:13;;238:33;220:13;238:33;;301:699;;414:3;407:4;399:6;395:17;391:27;381:2;;432:1;429;422:12;381:2;469:6;456:20;491:76;506:60;559:6;506:60;;;491:76;;;482:85;;584:5;609:6;602:5;595:21;639:4;631:6;627:17;617:27;;661:4;656:3;652:14;645:21;;714:6;761:3;753:4;745:6;741:17;736:3;732:27;729:36;726:2;;;778:1;775;768:12;726:2;803:1;788:206;813:6;810:1;807:13;788:206;;;871:3;893:37;926:3;914:10;893:37;;;881:50;;-1:-1;954:4;945:14;;;;973;;;;;835:1;828:9;788:206;;;792:14;374:626;;;;;;;;1008:128;1083:13;;1101:30;1083:13;1101:30;;1143:130;1210:20;;1235:33;1210:20;1235:33;;1318:1172;;1433:4;1421:9;1416:3;1412:19;1408:30;1405:2;;;1451:1;1448;1441:12;1405:2;1469:20;1484:4;1469:20;;;1460:29;-1:-1;1541:1;1573:49;1618:3;1598:9;1573:49;;;1548:75;;-1:-1;1687:2;1720:49;1765:3;1741:22;;;1720:49;;;1713:4;1706:5;1702:16;1695:75;1644:137;1861:2;1850:9;1846:18;1833:32;1885:18;1877:6;1874:30;1871:2;;;1917:1;1914;1907:12;1871:2;1952:70;2018:3;2009:6;1998:9;1994:22;1952:70;;;1945:4;1938:5;1934:16;1927:96;1791:243;2088:2;2121:49;2166:3;2157:6;2146:9;2142:22;2121:49;;;2114:4;2107:5;2103:16;2096:75;2044:138;2233:3;2267:49;2312:3;2303:6;2292:9;2288:22;2267:49;;;2260:4;2253:5;2249:16;2242:75;2192:136;2385:3;2419:49;2464:3;2455:6;2444:9;2440:22;2419:49;;;2412:4;2405:5;2401:16;2394:75;2338:142;1399:1091;;;;;2634:134;2712:13;;2730:33;2712:13;2730:33;;2775:263;;2890:2;2878:9;2869:7;2865:23;2861:32;2858:2;;;2906:1;2903;2896:12;2858:2;2941:1;2958:64;3014:7;2994:9;2958:64;;;2948:74;2852:186;-1:-1;;;;2852:186;3045:257;;3157:2;3145:9;3136:7;3132:23;3128:32;3125:2;;;3173:1;3170;3163:12;3125:2;3208:1;3225:61;3278:7;3258:9;3225:61;;3309:241;;3413:2;3401:9;3392:7;3388:23;3384:32;3381:2;;;3429:1;3426;3419:12;3381:2;3464:1;3481:53;3526:7;3506:9;3481:53;;3557:504;;;3704:2;3692:9;3683:7;3679:23;3675:32;3672:2;;;3720:1;3717;3710:12;3672:2;3755:1;3772:53;3817:7;3797:9;3772:53;;;3762:63;;3734:97;3890:2;3879:9;3875:18;3862:32;3914:18;3906:6;3903:30;3900:2;;;3946:1;3943;3936:12;3900:2;3966:79;4037:7;4028:6;4017:9;4013:22;3966:79;;;3956:89;;3841:210;3666:395;;;;;;4068:379;;4198:2;4186:9;4177:7;4173:23;4169:32;4166:2;;;4214:1;4211;4204:12;4166:2;4249:31;;4300:18;4289:30;;4286:2;;;4332:1;4329;4322:12;4286:2;4352:79;4423:7;4414:6;4403:9;4399:22;4352:79;;4454:263;;4569:2;4557:9;4548:7;4544:23;4540:32;4537:2;;;4585:1;4582;4575:12;4537:2;4620:1;4637:64;4693:7;4673:9;4637:64;;4724:399;;;4856:2;4844:9;4835:7;4831:23;4827:32;4824:2;;;4872:1;4869;4862:12;4824:2;4907:1;4924:64;4980:7;4960:9;4924:64;;;4914:74;;4886:108;5025:2;5043:64;5099:7;5090:6;5079:9;5075:22;5043:64;;5131:173;;5218:46;5260:3;5252:6;5218:46;;;-1:-1;;5293:4;5284:14;;5211:93;5510:103;5583:24;5601:5;5583:24;;;5578:3;5571:37;5565:48;;;5740:152;5841:45;5861:24;5879:5;5861:24;;;5841:45;;5930:654;;6061:50;6105:5;6061:50;;;6124:76;6193:6;6188:3;6124:76;;;6117:83;;6221:52;6267:5;6221:52;;;6293:7;6321:1;6306:256;6331:6;6328:1;6325:13;6306:256;;;6398:6;6392:13;6419:63;6478:3;6463:13;6419:63;;;6412:70;;6499:56;6548:6;6499:56;;;6489:66;-1:-1;;6353:1;6346:9;6306:256;;;-1:-1;6575:3;;6040:544;-1:-1;;;;;6040:544;6623:718;;6782:50;6826:5;6782:50;;;6845:104;6942:6;6937:3;6845:104;;;6838:111;;6970:52;7016:5;6970:52;;;7042:7;7070:1;7055:264;7080:6;7077:1;7074:13;7055:264;;;7147:6;7141:13;7168:71;7235:3;7220:13;7168:71;;;7161:78;;7256:56;7305:6;7256:56;;;7246:66;-1:-1;;7102:1;7095:9;7055:264;;7349:104;7426:21;7441:5;7426:21;;7460:113;7543:24;7561:5;7543:24;;7580:158;7679:53;7726:5;7679:53;;7745:339;;7853:35;7882:5;7853:35;;;7900:71;7964:6;7959:3;7900:71;;;7893:78;;7976:52;8021:6;8016:3;8009:4;8002:5;7998:16;7976:52;;;8049:29;8071:6;8049:29;;;8040:39;;;;7833:251;-1:-1;;;7833:251;8092:331;;8252:67;8316:2;8311:3;8252:67;;;8352:33;8332:54;;8414:2;8405:12;;8238:185;-1:-1;;8238:185;8504:1234;8725:23;;8504:1234;;8657:4;8648:14;;;8754:63;8652:3;8725:23;8754:63;;;8677:146;8899:4;8892:5;8888:16;8882:23;8911:63;8968:4;8963:3;8959:14;8945:12;8911:63;;;8833:147;9055:4;9048:5;9044:16;9038:23;9107:3;9101:4;9097:14;9090:4;9085:3;9081:14;9074:38;9127:99;9221:4;9207:12;9127:99;;;9119:107;;8990:248;9315:4;9308:5;9304:16;9298:23;9327:63;9384:4;9379:3;9375:14;9361:12;9327:63;;;9248:148;9470:4;9463:5;9459:16;9453:23;9482:63;9539:4;9534:3;9530:14;9516:12;9482:63;;;9406:145;9631:4;9624:5;9620:16;9614:23;9643:63;9700:4;9695:3;9691:14;9677:12;9643:63;;;-1:-1;9729:4;8630:1108;-1:-1;;;8630:1108;10093:152;10194:45;10214:24;10232:5;10214:24;;;10194:45;;10252:1013;;10557:75;10628:3;10619:6;10557:75;;;10654:2;10649:3;10645:12;10638:19;;10668:75;10739:3;10730:6;10668:75;;;10765:2;10760:3;10756:12;10749:19;;10786:121;10903:3;10894:6;10786:121;;;10779:128;;10918:75;10989:3;10980:6;10918:75;;;11015:2;11010:3;11006:12;10999:19;;11029:75;11100:3;11091:6;11029:75;;;11126:2;11121:3;11117:12;11110:19;;11140:75;11211:3;11202:6;11140:75;;;-1:-1;11237:2;11228:12;;10545:720;-1:-1;;;;;;10545:720;11272:213;11390:2;11375:18;;11404:71;11379:9;11448:6;11404:71;;11492:201;11604:2;11589:18;;11618:65;11593:9;11656:6;11618:65;;11700:213;11818:2;11803:18;;11832:71;11807:9;11876:6;11832:71;;11920:245;12054:2;12039:18;;12068:87;12043:9;12128:6;12068:87;;12172:293;12306:2;12320:47;;;12291:18;;12381:74;12291:18;12441:6;12381:74;;;12373:82;12277:188;-1:-1;;;12277:188;12472:407;12663:2;12677:47;;;12648:18;;12738:131;12648:18;12738:131;;12886:365;13056:2;13070:47;;;13041:18;;13131:110;13041:18;13227:6;13131:110;;13258:476;13456:2;13470:47;;;13441:18;;13531:110;13441:18;13627:6;13531:110;;;13523:118;;13652:72;13720:2;13709:9;13705:18;13696:6;13652:72;;13961:324;14107:2;14092:18;;14121:71;14096:9;14165:6;14121:71;;;14203:72;14271:2;14260:9;14256:18;14247:6;14203:72;;14292:256;14354:2;14348:9;14380:17;;;14455:18;14440:34;;14476:22;;;14437:62;14434:2;;;14512:1;14509;14502:12;14434:2;14528;14521:22;14332:216;;-1:-1;14332:216;14555:300;;14710:18;14702:6;14699:30;14696:2;;;14742:1;14739;14732:12;14696:2;-1:-1;14777:4;14765:17;;;14830:15;;14633:222;14862:147;14982:4;14973:14;;14930:79;15016:133;15115:12;;15086:63;15393:168;15501:19;;;15550:4;15541:14;;15494:67;15570:160;15721:3;15699:31;-1:-1;15699:31;15910:91;;15972:24;15990:5;15972:24;;16008:85;16074:13;16067:21;;16050:43;16100:72;16162:5;16145:27;16179:142;16259:5;16265:51;16259:5;16265:51;;16328:121;-1:-1;;;;;16390:54;;16373:76;16535:142;;16630:42;16666:5;16630:42;;16685:268;16750:1;16757:101;16771:6;16768:1;16765:13;16757:101;;;16838:11;;;16832:18;16819:11;;;16812:39;16793:2;16786:10;16757:101;;;16873:6;16870:1;16867:13;16864:2;;;16938:1;16929:6;16924:3;16920:16;16913:27;16864:2;16734:219;;;;;16961:95;;17025:26;17045:5;17063:89;17127:20;17141:5;17127:20;;17240:97;17328:2;17308:14;-1:-1;;17304:28;;17288:49;17345:94;17419:2;17415:14;;17387:52;17447:109;17534:1;17527:5;17524:12;17514:2;;17540:9;17514:2;17508:48;;17563:117;17632:24;17650:5;17632:24;;;17625:5;17622:35;17612:2;;17671:1;17668;17661:12;17687:111;17753:21;17768:5;17753:21;;17805:117;17874:24;17892:5;17874:24;

Swarm Source

bzzr://a025095cd0b5077493eee6ff2dfcce3064aa992d8f02c15d811f1df7178b8c48

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

OVERVIEW

Caches synthetics (derivatives) data for Opium Protocol.

Loading...
Loading

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.