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:
CurveFactoryLpTokenPriceOracle
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: UNLICENSED
pragma solidity 0.6.12;
import "@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol";
import "../external/compound/CErc20.sol";
import "../external/curve/ICurveFactoryRegistry.sol";
import "../external/curve/ICurvePool.sol";
import "./BasePriceOracle.sol";
interface ERC20Upgradeable {
function decimals() external view returns(uint8);
}
/**
* @title CurveFactoryLpTokenPriceOracle
* @author David Lucid <[email protected]> (https://github.com/davidlucid)
* @notice CurveFactoryLpTokenPriceOracle is a price oracle for Curve LP tokens (using the sender as a root oracle).
* @dev Implements the `PriceOracle` interface used by Fuse pools (and Compound v2).
*/
contract CurveFactoryLpTokenPriceOracle is PriceOracle, BasePriceOracle {
using SafeMathUpgradeable for uint256;
/**
* @notice Get the LP token price price for an underlying token address.
* @param underlying The underlying token address for which to get the price (set to zero address for ETH).
* @return Price denominated in ETH (scaled by 1e18).
*/
function price(address underlying) external override view returns (uint) {
return _price(underlying);
}
/**
* @notice Returns the price in ETH of the token underlying `cToken`.
* @dev Implements the `PriceOracle` interface for Fuse pools (and Compound v2).
* @return Price in ETH of the token underlying `cToken`, scaled by `10 ** (36 - underlyingDecimals)`.
*/
function getUnderlyingPrice(CToken cToken) external override view returns (uint) {
address underlying = CErc20(address(cToken)).underlying();
// Comptroller needs prices to be scaled by 1e(36 - decimals)
// Since `_price` returns prices scaled by 18 decimals, we must scale them by 1e(36 - 18 - decimals)
return _price(underlying).mul(1e18).div(10 ** uint256(ERC20Upgradeable(underlying).decimals()));
}
/**
* @dev Fetches the fair LP token/ETH price from Curve, with 18 decimals of precision.
* Source: https://github.com/AlphaFinanceLab/homora-v2/blob/master/contracts/oracle/CurveOracle.sol
* @param pool pool LP token
*/
function _price(address pool) internal view returns (uint) {
address[] memory tokens = underlyingTokens[pool];
require(tokens.length != 0, "LP token is not registered.");
uint256 minPx = uint256(-1);
uint256 n = tokens.length;
for (uint256 i = 0; i < n; i++) {
address ulToken = tokens[i];
uint256 tokenPx = BasePriceOracle(msg.sender).price(ulToken);
if (tokenPx < minPx) minPx = tokenPx;
}
require(minPx != uint256(-1), "No minimum underlying token price found.");
return minPx.mul(ICurvePool(pool).get_virtual_price()).div(1e18); // Use min underlying token prices
}
/**
* @dev The Curve registry.
*/
ICurveFactoryRegistry public constant registry = ICurveFactoryRegistry(0xB9fC157394Af804a3578134A6585C0dc9cc990d4);
/**
* @dev Maps Curve LP token addresses to underlying token addresses.
*/
mapping(address => address[]) public underlyingTokens;
/**
* @dev Maps Curve LP token addresses to pool addresses.
*/
mapping(address => address) public poolOf;
/**
* @dev Register the pool given LP token address and set the pool info.
* Source: https://github.com/AlphaFinanceLab/homora-v2/blob/master/contracts/oracle/CurveOracle.sol
* @param pool pool LP token
*/
function registerPool(address pool) external {
uint n = registry.get_n_coins(pool);
require(n != 0, "n");
address[4] memory tokens = registry.get_coins(pool);
for (uint256 i = 0; i < n; i++) underlyingTokens[pool].push(tokens[i]);
}
}// SPDX-License-Identifier: BSD-3-Clause
pragma solidity 0.6.12;
import "./CToken.sol";
/**
* @title Compound's CErc20 Contract
* @notice CTokens which wrap an EIP-20 underlying
* @author Compound
*/
interface CErc20 is CToken {
function underlying() external view returns (address);
function liquidateBorrow(address borrower, uint repayAmount, CToken cTokenCollateral) external returns (uint);
}// SPDX-License-Identifier: BSD-3-Clause
pragma solidity 0.6.12;
/**
* @title Compound's CToken Contract
* @notice Abstract base for CTokens
* @author Compound
*/
interface CToken {
function admin() external view returns (address);
function adminHasRights() external view returns (bool);
function fuseAdminHasRights() external view returns (bool);
function symbol() external view returns (string memory);
function comptroller() external view returns (address);
function adminFeeMantissa() external view returns (uint256);
function fuseFeeMantissa() external view returns (uint256);
function reserveFactorMantissa() external view returns (uint256);
function totalReserves() external view returns (uint);
function totalAdminFees() external view returns (uint);
function totalFuseFees() external view returns (uint);
function isCToken() external view returns (bool);
function isCEther() external view returns (bool);
function balanceOf(address owner) external view returns (uint);
function balanceOfUnderlying(address owner) external returns (uint);
function borrowRatePerBlock() external view returns (uint);
function supplyRatePerBlock() external view returns (uint);
function totalBorrowsCurrent() external returns (uint);
function borrowBalanceStored(address account) external view returns (uint);
function exchangeRateStored() external view returns (uint);
function getCash() external view returns (uint);
function redeem(uint redeemTokens) external returns (uint);
function redeemUnderlying(uint redeemAmount) external returns (uint);
}// SPDX-License-Identifier: UNLICENSED
pragma solidity 0.6.12;
interface ICurveFactoryRegistry {
function get_n_coins(address lp) external view returns (uint);
function get_coins(address pool) external view returns (address[4] memory);
}// SPDX-License-Identifier: UNLICENSED
pragma solidity 0.6.12;
interface ICurvePool {
function get_virtual_price() external view returns (uint);
function remove_liquidity_one_coin(uint256 _token_amount, int128 i, uint256 min_amount) external;
function exchange(int128 i, int128 j, uint256 dx, uint256 min_dy) external returns (uint256);
}// SPDX-License-Identifier: UNLICENSED pragma solidity 0.6.12; import "../external/compound/PriceOracle.sol"; /** * @title BasePriceOracle * @notice Returns prices of underlying tokens directly without the caller having to specify a cToken address. * @dev Implements the `PriceOracle` interface. * @author David Lucid <[email protected]> (https://github.com/davidlucid) */ interface BasePriceOracle is PriceOracle { /** * @notice Get the price of an underlying asset. * @param underlying The underlying asset to get the price of. * @return The underlying asset price in ETH as a mantissa (scaled by 1e18). * Zero means the price is unavailable. */ function price(address underlying) external view returns (uint); }
// SPDX-License-Identifier: BSD-3-Clause
pragma solidity 0.6.12;
import "./CToken.sol";
interface PriceOracle {
/**
* @notice Get the underlying price of a cToken asset
* @param cToken The cToken to get the underlying price of
* @return The underlying asset price mantissa (scaled by 1e18).
* Zero means the price is unavailable.
*/
function getUnderlyingPrice(CToken cToken) external view returns (uint);
}// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0 <0.8.0;
/**
* @dev Wrappers over Solidity's arithmetic operations with added overflow
* checks.
*
* Arithmetic operations in Solidity wrap on overflow. This can easily result
* in bugs, because programmers usually assume that an overflow raises an
* error, which is the standard behavior in high level programming languages.
* `SafeMath` restores this intuition by reverting the transaction when an
* operation overflows.
*
* Using this library instead of the unchecked operations eliminates an entire
* class of bugs, so it's recommended to use it always.
*/
library SafeMathUpgradeable {
/**
* @dev Returns the addition of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
uint256 c = a + b;
if (c < a) return (false, 0);
return (true, c);
}
/**
* @dev Returns the substraction of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
if (b > a) return (false, 0);
return (true, a - b);
}
/**
* @dev Returns the multiplication of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) return (true, 0);
uint256 c = a * b;
if (c / a != b) return (false, 0);
return (true, c);
}
/**
* @dev Returns the division of two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
if (b == 0) return (false, 0);
return (true, a / b);
}
/**
* @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
if (b == 0) return (false, 0);
return (true, a % b);
}
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
*
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
require(b <= a, "SafeMath: subtraction overflow");
return a - b;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
*
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
if (a == 0) return 0;
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
/**
* @dev Returns the integer division of two unsigned integers, reverting on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
require(b > 0, "SafeMath: division by zero");
return a / b;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
require(b > 0, "SafeMath: modulo by zero");
return a % b;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {trySub}.
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b <= a, errorMessage);
return a - b;
}
/**
* @dev Returns the integer division of two unsigned integers, reverting with custom message on
* division by zero. The result is rounded towards zero.
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {tryDiv}.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b > 0, errorMessage);
return a / b;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting with custom message when dividing by zero.
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {tryMod}.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b > 0, errorMessage);
return a % b;
}
}{
"metadata": {
"useLiteralContent": true
},
"optimizer": {
"enabled": true,
"runs": 200
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"abi"
]
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"contract CToken","name":"cToken","type":"address"}],"name":"getUnderlyingPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"poolOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"underlying","type":"address"}],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"registerPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"registry","outputs":[{"internalType":"contract ICurveFactoryRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"underlyingTokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]Contract Creation Code
608060405234801561001057600080fd5b50610865806100206000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806301eadec4146100675780637b103999146100af578063988b1fa7146100b7578063abd90846146100dd578063aea9107814610105578063fc57d4df1461013d575b600080fd5b6100936004803603604081101561007d57600080fd5b506001600160a01b038135169060200135610163565b604080516001600160a01b039092168252519081900360200190f35b610093610198565b610093600480360360208110156100cd57600080fd5b50356001600160a01b03166101b0565b610103600480360360208110156100f357600080fd5b50356001600160a01b03166101cb565b005b61012b6004803603602081101561011b57600080fd5b50356001600160a01b03166103a8565b60408051918252519081900360200190f35b61012b6004803603602081101561015357600080fd5b50356001600160a01b03166103b9565b6000602052816000526040600020818154811061017c57fe5b6000918252602090912001546001600160a01b03169150829050565b73b9fc157394af804a3578134a6585c0dc9cc990d481565b6001602052600090815260409020546001600160a01b031681565b600073b9fc157394af804a3578134a6585c0dc9cc990d46001600160a01b031663940494f1836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561022e57600080fd5b505afa158015610242573d6000803e3d6000fd5b505050506040513d602081101561025857600080fd5b5051905080610292576040805162461bcd60e51b81526020600482015260016024820152603760f91b604482015290519081900360640190fd5b61029a6107c8565b60408051639ac90d3d60e01b81526001600160a01b0385166004820152905173b9fc157394af804a3578134a6585c0dc9cc990d491639ac90d3d916024808301926080929190829003018186803b1580156102f457600080fd5b505afa158015610308573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250608081101561032d57600080fd5b50905060005b828110156103a2576001600160a01b038416600090815260208190526040902082826004811061035f57fe5b6020908102919091015182546001808201855560009485529290932090920180546001600160a01b0319166001600160a01b039093169290921790915501610333565b50505050565b60006103b3826104c2565b92915050565b600080826001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b1580156103f557600080fd5b505afa158015610409573d6000803e3d6000fd5b505050506040513d602081101561041f57600080fd5b50516040805163313ce56760e01b815290519192506104bb916001600160a01b0384169163313ce567916004808301926020929190829003018186803b15801561046857600080fd5b505afa15801561047c573d6000803e3d6000fd5b505050506040513d602081101561049257600080fd5b505160ff16600a0a6104b5670de0b6b3a76400006104af856104c2565b90610708565b90610761565b9392505050565b6001600160a01b038116600090815260208181526040808320805482518185028101850190935280835260609383018282801561052857602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161050a575b50505050509050805160001415610586576040805162461bcd60e51b815260206004820152601b60248201527f4c5020746f6b656e206973206e6f7420726567697374657265642e0000000000604482015290519081900360640190fd5b80516000199060005b818110156106425760008482815181106105a557fe5b602002602001015190506000336001600160a01b031663aea91078836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156105fe57600080fd5b505afa158015610612573d6000803e3d6000fd5b505050506040513d602081101561062857600080fd5b5051905084811015610638578094505b505060010161058f565b506000198214156106845760405162461bcd60e51b81526004018080602001828103825260288152602001806107e76028913960400191505060405180910390fd5b6106ff670de0b6b3a76400006104b5876001600160a01b031663bb7b8b806040518163ffffffff1660e01b815260040160206040518083038186803b1580156106cc57600080fd5b505afa1580156106e0573d6000803e3d6000fd5b505050506040513d60208110156106f657600080fd5b50518590610708565b95945050505050565b600082610717575060006103b3565b8282028284828161072457fe5b04146104bb5760405162461bcd60e51b815260040180806020018281038252602181526020018061080f6021913960400191505060405180910390fd5b60008082116107b7576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b8183816107c057fe5b049392505050565b6040518060800160405280600490602082028036833750919291505056fe4e6f206d696e696d756d20756e6465726c79696e6720746f6b656e20707269636520666f756e642e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220a021f3b6ebc8742f828870e83c4c747738e2de455a785028e3fb88377dc078cb64736f6c634300060c0033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100625760003560e01c806301eadec4146100675780637b103999146100af578063988b1fa7146100b7578063abd90846146100dd578063aea9107814610105578063fc57d4df1461013d575b600080fd5b6100936004803603604081101561007d57600080fd5b506001600160a01b038135169060200135610163565b604080516001600160a01b039092168252519081900360200190f35b610093610198565b610093600480360360208110156100cd57600080fd5b50356001600160a01b03166101b0565b610103600480360360208110156100f357600080fd5b50356001600160a01b03166101cb565b005b61012b6004803603602081101561011b57600080fd5b50356001600160a01b03166103a8565b60408051918252519081900360200190f35b61012b6004803603602081101561015357600080fd5b50356001600160a01b03166103b9565b6000602052816000526040600020818154811061017c57fe5b6000918252602090912001546001600160a01b03169150829050565b73b9fc157394af804a3578134a6585c0dc9cc990d481565b6001602052600090815260409020546001600160a01b031681565b600073b9fc157394af804a3578134a6585c0dc9cc990d46001600160a01b031663940494f1836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561022e57600080fd5b505afa158015610242573d6000803e3d6000fd5b505050506040513d602081101561025857600080fd5b5051905080610292576040805162461bcd60e51b81526020600482015260016024820152603760f91b604482015290519081900360640190fd5b61029a6107c8565b60408051639ac90d3d60e01b81526001600160a01b0385166004820152905173b9fc157394af804a3578134a6585c0dc9cc990d491639ac90d3d916024808301926080929190829003018186803b1580156102f457600080fd5b505afa158015610308573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250608081101561032d57600080fd5b50905060005b828110156103a2576001600160a01b038416600090815260208190526040902082826004811061035f57fe5b6020908102919091015182546001808201855560009485529290932090920180546001600160a01b0319166001600160a01b039093169290921790915501610333565b50505050565b60006103b3826104c2565b92915050565b600080826001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b1580156103f557600080fd5b505afa158015610409573d6000803e3d6000fd5b505050506040513d602081101561041f57600080fd5b50516040805163313ce56760e01b815290519192506104bb916001600160a01b0384169163313ce567916004808301926020929190829003018186803b15801561046857600080fd5b505afa15801561047c573d6000803e3d6000fd5b505050506040513d602081101561049257600080fd5b505160ff16600a0a6104b5670de0b6b3a76400006104af856104c2565b90610708565b90610761565b9392505050565b6001600160a01b038116600090815260208181526040808320805482518185028101850190935280835260609383018282801561052857602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161050a575b50505050509050805160001415610586576040805162461bcd60e51b815260206004820152601b60248201527f4c5020746f6b656e206973206e6f7420726567697374657265642e0000000000604482015290519081900360640190fd5b80516000199060005b818110156106425760008482815181106105a557fe5b602002602001015190506000336001600160a01b031663aea91078836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156105fe57600080fd5b505afa158015610612573d6000803e3d6000fd5b505050506040513d602081101561062857600080fd5b5051905084811015610638578094505b505060010161058f565b506000198214156106845760405162461bcd60e51b81526004018080602001828103825260288152602001806107e76028913960400191505060405180910390fd5b6106ff670de0b6b3a76400006104b5876001600160a01b031663bb7b8b806040518163ffffffff1660e01b815260040160206040518083038186803b1580156106cc57600080fd5b505afa1580156106e0573d6000803e3d6000fd5b505050506040513d60208110156106f657600080fd5b50518590610708565b95945050505050565b600082610717575060006103b3565b8282028284828161072457fe5b04146104bb5760405162461bcd60e51b815260040180806020018281038252602181526020018061080f6021913960400191505060405180910390fd5b60008082116107b7576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b8183816107c057fe5b049392505050565b6040518060800160405280600490602082028036833750919291505056fe4e6f206d696e696d756d20756e6465726c79696e6720746f6b656e20707269636520666f756e642e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220a021f3b6ebc8742f828870e83c4c747738e2de455a785028e3fb88377dc078cb64736f6c634300060c0033
Deployed Bytecode Sourcemap
727:3108:6:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3150:53;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;3150:53:6;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;3150:53:6;;;;;;;;;;;;;;2940:114;;;:::i;3287:41::-;;;;;;;;;;;;;;;;-1:-1:-1;3287:41:6;-1:-1:-1;;;;;3287:41:6;;:::i;3565:268::-;;;;;;;;;;;;;;;;-1:-1:-1;3565:268:6;-1:-1:-1;;;;;3565:268:6;;:::i;:::-;;1112:115;;;;;;;;;;;;;;;;-1:-1:-1;1112:115:6;-1:-1:-1;;;;;1112:115:6;;:::i;:::-;;;;;;;;;;;;;;;;1515:439;;;;;;;;;;;;;;;;-1:-1:-1;1515:439:6;-1:-1:-1;;;;;1515:439:6;;:::i;3150:53::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3150:53:6;;-1:-1:-1;3150:53:6;;-1:-1:-1;3150:53:6:o;2940:114::-;3011:42;2940:114;:::o;3287:41::-;;;;;;;;;;;;-1:-1:-1;;;;;3287:41:6;;:::o;3565:268::-;3620:6;3011:42;-1:-1:-1;;;;;3629:20:6;;3650:4;3629:26;;;;;;;;;;;;;-1:-1:-1;;;;;3629:26:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3629:26:6;;-1:-1:-1;3673:6:6;3665:20;;;;;-1:-1:-1;;;3665:20:6;;;;;;;;;;;;-1:-1:-1;;;3665:20:6;;;;;;;;;;;;;;;3695:24;;:::i;:::-;3722;;;-1:-1:-1;;;3722:24:6;;-1:-1:-1;;;;;3722:24:6;;;;;;;;3011:42;;3722:18;;:24;;;;;;;;;;;;;;3011:42;3722:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3722:24:6;-1:-1:-1;3761:9:6;3756:70;3780:1;3776;:5;3756:70;;;-1:-1:-1;;;;;3788:22:6;;:16;:22;;;;;;;;;;3816:6;3823:1;3816:9;;;;;;;;;;;;;;;;3788:38;;;;;;;;-1:-1:-1;3788:38:6;;;;;;;;;;;;-1:-1:-1;;;;;;3788:38:6;-1:-1:-1;;;;;3788:38:6;;;;;;;;;;3783:3;3756:70;;;;3565:268;;;:::o;1112:115::-;1179:4;1202:18;1209:10;1202:6;:18::i;:::-;1195:25;1112:115;-1:-1:-1;;1112:115:6:o;1515:439::-;1590:4;1606:18;1642:6;-1:-1:-1;;;;;1627:34:6;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1627:36:6;1906:39;;;-1:-1:-1;;;1906:39:6;;;;1627:36;;-1:-1:-1;1859:88:6;;-1:-1:-1;;;;;1906:37:6;;;;;:39;;;;;1627:36;;1906:39;;;;;;;:37;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1906:39:6;1898:48;;1892:2;:54;1859:28;1882:4;1859:18;1866:10;1859:6;:18::i;:::-;:22;;:28::i;:::-;:32;;:88::i;:::-;1852:95;1515:439;-1:-1:-1;;;1515:439:6:o;2205:681::-;-1:-1:-1;;;;;2300:22:6;;2258:4;2300:22;;;;;;;;;;;2274:48;;;;;;;;;;;;;;;;;:23;;:48;;2300:22;2274:48;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2274:48:6;;;;;;;;;;;;;;;;;;;;;;;2340:6;:13;2357:1;2340:18;;2332:58;;;;;-1:-1:-1;;;2332:58:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;2449:13;;-1:-1:-1;;2424:2:6;2400:13;2473:208;2497:1;2493;:5;2473:208;;;2519:15;2537:6;2544:1;2537:9;;;;;;;;;;;;;;2519:27;;2560:15;2594:10;-1:-1:-1;;;;;2578:33:6;;2612:7;2578:42;;;;;;;;;;;;;-1:-1:-1;;;;;2578:42:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2578:42:6;;-1:-1:-1;2638:15:6;;;2634:36;;;2663:7;2655:15;;2634:36;-1:-1:-1;;2500:3:6;;2473:208;;;;-1:-1:-1;;2699:5:6;:20;;2691:73;;;;-1:-1:-1;;;2691:73:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2787:57;2839:4;2787:47;2808:4;-1:-1:-1;;;;;2797:34:6;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2797:36:6;2787:5;;:9;:47::i;:57::-;2780:64;2205:681;-1:-1:-1;;;;;2205:681:6:o;3549:215:7:-;3607:7;3630:6;3626:20;;-1:-1:-1;3645:1:7;3638:8;;3626:20;3668:5;;;3672:1;3668;:5;:1;3691:5;;;;;:10;3683:56;;;;-1:-1:-1;;;3683:56:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4228:150;4286:7;4317:1;4313;:5;4305:44;;;;;-1:-1:-1;;;4305:44:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;4370:1;4366;:5;;;;;;;4228:150;-1:-1:-1;;;4228:150:7:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
ipfs://a021f3b6ebc8742f828870e83c4c747738e2de455a785028e3fb88377dc078cb
Loading...
Loading
Loading...
Loading
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
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.