Overview
ETH Balance
0 ETH
Eth Value
$0.00View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
SyntheticAggregator
Compiler Version
v0.5.16+commit.9c3226ce
Contract Source Code (Solidity)
/**
*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
- No Contract Security Audit Submitted- Submit Audit Here
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"}]Contract Creation Code
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
Loading...
Loading
Loading...
Loading
OVERVIEW
Caches synthetics (derivatives) data for Opium Protocol.Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
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.