Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer Ownersh... | 20679055 | 126 days ago | IN | 0 ETH | 0.000385 |
Advanced mode: Intended for advanced users or developers and will display all Internal Transactions including zero value transfers. Name tag integration is not available in advanced view.
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
||||
---|---|---|---|---|---|---|---|
21587420 | 2 hrs ago | 0 ETH | |||||
21587420 | 2 hrs ago | 0 ETH | |||||
21587420 | 2 hrs ago | 0 ETH | |||||
21587420 | 2 hrs ago | 0 ETH | |||||
21587420 | 2 hrs ago | 0 ETH | |||||
21587420 | 2 hrs ago | 0 ETH | |||||
21587420 | 2 hrs ago | 0 ETH | |||||
21587420 | 2 hrs ago | 0 ETH | |||||
21587420 | 2 hrs ago | 0 ETH | |||||
21587420 | 2 hrs ago | 0 ETH | |||||
21587420 | 2 hrs ago | 0 ETH | |||||
21587420 | 2 hrs ago | 0 ETH | |||||
21587420 | 2 hrs ago | 0 ETH | |||||
21587420 | 2 hrs ago | 0 ETH | |||||
21587420 | 2 hrs ago | 0 ETH | |||||
21587389 | 2 hrs ago | 0 ETH | |||||
21587389 | 2 hrs ago | 0 ETH | |||||
21587389 | 2 hrs ago | 0 ETH | |||||
21587389 | 2 hrs ago | 0 ETH | |||||
21587389 | 2 hrs ago | 0 ETH | |||||
21587389 | 2 hrs ago | 0 ETH | |||||
21587389 | 2 hrs ago | 0 ETH | |||||
21587389 | 2 hrs ago | 0 ETH | |||||
21587389 | 2 hrs ago | 0 ETH | |||||
21587389 | 2 hrs ago | 0 ETH |
Loading...
Loading
Contract Name:
PriceOracle
Compiler Version
v0.8.7+commit.e28d00a7
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: GPL-3.0 pragma solidity 0.8.7; import { Ownable2Step } from "@openzeppelin/contracts/access/Ownable2Step.sol"; import { AggregatorV3Interface } from "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol"; contract PriceOracle is Ownable2Step { /// @dev Configuration used to return the USD price for the associated cToken asset and base unit needed for formatting /// @dev Fixed price is returned for assets that do not have a price feed. Expected to already be formatted. struct TokenConfig { // Decimals of the underlying asset (e.g. 18 for ETH). Needed for formatting when using a price feed. Ignored when using fixed price. uint8 underlyingAssetDecimals; // Address of the feed used to retrieve the asset's price address priceFeed; // Fixed price for asset that does not have a price feed uint256 fixedPrice; } /// @dev Type used to load the contract with configs during deployment /// @dev There should be 1 LoadConfig object for each supported asset, passed in the constructor. /// @dev Price feed and fixed price are mutually exclusive. Only one or the other should be set. struct LoadConfig { // Decimals of the underlying asset (e.g. 18 for ETH) uint8 underlyingAssetDecimals; // Address of the Compound Token address cToken; // Address of the feed used to retrieve the asset's price address priceFeed; // Fixed price for asset that does not have a price feed uint256 fixedPrice; } /// @dev Mapping of cToken address to TokenConfig used to maintain the supported assets mapping (address => TokenConfig) tokenConfigs; /// @notice The event emitted when a new asset is added to the mapping /// @param cToken cToken address that the config was added for /// @param underlyingAssetDecimals Decimals of the underlying asset /// @param priceFeed Address of the feed used to retrieve the asset's price /// @param fixedPrice The fixed price returned when a price feed does not exist for an asset event PriceOracleAssetAdded(address indexed cToken, uint8 underlyingAssetDecimals, address priceFeed, uint256 fixedPrice); /// @notice The event emitted when the price feed for an existing config is updated /// @param cToken cToken address that the config was updated for /// @param oldPriceFeed The existing price feed address configured in the token config /// @param newPriceFeed The new price feed address the token config is being updated to /// @param oldFixedPrice The fixed price previously set in the config. Price feed updates clear the fixed price if not 0 already. event PriceOracleAssetPriceFeedUpdated(address indexed cToken, address oldPriceFeed, address newPriceFeed, uint256 oldFixedPrice); /// @notice The event emitted when the fixed price for an existing config is updated /// @param cToken cToken address that the config was updated for /// @param oldFixedPrice The existing fixed price set in the token config /// @param newFixedPrice The new fixed price set in the token config /// @param oldPriceFeed The price feed previously set in the config. Fixed price updates clear the price feed if 0 not already. event PriceOracleAssetFixedPriceUpdated(address indexed cToken, uint256 oldFixedPrice, uint256 newFixedPrice, address oldPriceFeed); /// @notice The event emitted when an asset is removed to the mapping /// @param cToken cToken address that the config was removed for /// @param underlyingAssetDecimals Decimals of the underlying asset in the removed config. /// @param priceFeed Price feed address set in the removed config /// @param fixedPrice The fixed price set in the removed config event PriceOracleAssetRemoved(address indexed cToken, uint8 underlyingAssetDecimals, address priceFeed, uint256 fixedPrice); /// @notice The max decimals value allowed for price feed uint8 internal constant MAX_DECIMALS = 72; /// @notice The number of digits the price is scaled to before adjusted by the base units uint8 internal constant PRICE_SCALE = 36; /// @notice The minimum number of digits of precision to preserve when formatting by restricting the underlying asset decimals config /// @dev Minimum precision is set to 6 to match the Compound UniswapAnchoredView behavior uint8 internal constant MIN_PRECISION = 6; /// @notice cToken address for config not provided error MissingCTokenAddress(); /// @notice Sum of price feed's decimals and underlyingAssetDecimals is greater than MAX_DECIMALS /// @param decimals Sum of the feed's decimals and underlying asset decimals error FormattingDecimalsTooHigh(uint16 decimals); /// @notice UnderlyingAssetDecimals is set too high to honor the minimum precision required during formatting error InvalidUnderlyingAssetDecimals(uint8 underlyingAssetDecimals); /// @notice Price feed missing /// @param priceFeed Price feed address provided error InvalidPriceFeed(address priceFeed); /// @notice Fixed price missing /// @param fixedPrice Fixed price provided error InvalidFixedPrice(uint256 fixedPrice); /// @notice Price feed and fixed price are both set /// @param priceFeed Price feed provided /// @param fixedPrice Fixed price provided error InvalidPriceConfigs(address priceFeed, uint256 fixedPrice); /// @notice Config already exists /// @param cToken cToken address provided error DuplicateConfig(address cToken); /// @notice Config does not exist in the mapping /// @param cToken cToken address provided error ConfigNotFound(address cToken); /// @notice Same price feed as the existing one was provided when updating the config /// @param cToken cToken address that the price feed update is for /// @param existingPriceFeed Price feed address set in the existing config /// @param newPriceFeed Price feed address provided to update to error UnchangedPriceFeed(address cToken, address existingPriceFeed, address newPriceFeed); /// @notice Same fixed price as the existing one was provided when updating the config /// @param cToken cToken address that the fixed price update is for /// @param existingFixedPrice The fixed price set in the existing config /// @param newFixedPrice The fixed price provided to update to error UnchangedFixedPrice(address cToken, uint256 existingFixedPrice, uint256 newFixedPrice); /** * @notice Construct a Price Oracle contract for a set of token configurations * @param configs The token configurations that define which price feed and base unit to use for each asset */ constructor(LoadConfig[] memory configs) { // Populate token config mapping for (uint i = 0; i < configs.length; i++) { LoadConfig memory config = configs[i]; addConfig(config); } } /** * @notice Get the underlying price of a cToken, in the format expected by the Comptroller. * @dev Comptroller needs prices in the format: ${raw price} * 1e(36 - feedDecimals - underlyingAssetDecimals) * 'underlyingAssetDecimals' is the decimals of the underlying asset for the corresponding cToken. * 'feedDecimals' is a value supplied by the price feed that represent the number of decimals the price feed reports with. * For example, the underlyingAssetDecimals of ETH is 18 and its price feed provides 8 decimal places * We must scale the price such as: ${raw price} * 1e(36 - 8 - 18). * @param cToken The cToken address for price retrieval * @return Price denominated in USD for the given cToken address, in the format expected by the Comptroller. */ function getUnderlyingPrice(address cToken) external view returns (uint256) { TokenConfig memory config = tokenConfigs[cToken]; // Check if config exists for cToken if (config.priceFeed == address(0) && config.fixedPrice == 0) revert ConfigNotFound(cToken); // Return fixed price if set if (config.fixedPrice != 0) return config.fixedPrice; // Initialize the aggregator to read the price from AggregatorV3Interface priceFeed = AggregatorV3Interface(config.priceFeed); // Retrieve decimals from feed for formatting uint8 feedDecimals = priceFeed.decimals(); // Retrieve price from feed ( /* uint80 roundID */, int256 answer, /*uint256 startedAt*/, /*uint256 updatedAt*/, /*uint80 answeredInRound*/ ) = priceFeed.latestRoundData(); // Invalid price returned by feed. Comptroller expects 0 price on error. if (answer <= 0) return 0; uint256 price = uint256(answer); // Number of decimals determines whether the price needs to be multiplied or divided for scaling // Handle the 2 scenarios separately to ensure a non-fractional scale value if (feedDecimals + config.underlyingAssetDecimals <= PRICE_SCALE) { // Decimals is always >=0 so the scale max value is 1e36 here and not at risk of overflowing uint256 scale = 10 ** (PRICE_SCALE - feedDecimals - config.underlyingAssetDecimals); return price * scale; } else { // Sum of feed and underlying asset decimals is capped at 72 by earlier validation so scale max value is 1e36 here // and not at risk of overflowing uint256 scale = 10 ** (feedDecimals + config.underlyingAssetDecimals - PRICE_SCALE); return price / scale; } } /** * @notice Retrieves the token config for a particular cToken address * @param cToken The cToken address that the token config should be returned for */ function getConfig(address cToken) external view returns (TokenConfig memory) { TokenConfig memory config = tokenConfigs[cToken]; // Check if config exists for cToken if (config.priceFeed == address(0) && config.fixedPrice == 0) revert ConfigNotFound(cToken); return config; } /** * @notice Adds a new token config to enable the contract to provide prices for a new asset * @param config Token config struct that contains the info for a new asset configuration */ function addConfig(LoadConfig memory config) public onlyOwner { _validateTokenConfig(config); TokenConfig memory tokenConfig = TokenConfig(config.underlyingAssetDecimals, config.priceFeed, config.fixedPrice); tokenConfigs[config.cToken] = tokenConfig; emit PriceOracleAssetAdded(config.cToken, config.underlyingAssetDecimals, config.priceFeed, config.fixedPrice); } /** * @notice Updates the price feed in the token config for a particular cToken and sets fixed price to 0 if it is not already. * @param cToken The cToken address that the config needs to be updated for * @param priceFeed The address of the new price feed the config needs to be updated to */ function updateConfigPriceFeed(address cToken, address priceFeed) external onlyOwner { TokenConfig memory config = tokenConfigs[cToken]; // Check if config exists for cToken if (config.priceFeed == address(0) && config.fixedPrice == 0) revert ConfigNotFound(cToken); // Validate price feed if (priceFeed == address(0)) revert InvalidPriceFeed(priceFeed); // Check if existing price feed is the same as the new one sent if (config.priceFeed == priceFeed) revert UnchangedPriceFeed(cToken, config.priceFeed, priceFeed); // Validate the decimals for the price feed since it could differ from the previous one _validateDecimals(priceFeed, config.underlyingAssetDecimals); address existingPriceFeed = config.priceFeed; uint256 existingFixedPrice = config.fixedPrice; TokenConfig storage storageConfig = tokenConfigs[cToken]; storageConfig.priceFeed = priceFeed; if (config.fixedPrice != 0) { delete storageConfig.fixedPrice; } emit PriceOracleAssetPriceFeedUpdated(cToken, existingPriceFeed, priceFeed, existingFixedPrice); } /** * @notice Updates the fixed price in the token config for a particular cToken and sets price feed to 0 if it is not already. * @param cToken The cToken address that the config needs to be updated for * @param fixedPrice The fixed price to be returned for the asset. Expected to be formatted. */ function updateConfigFixedPrice(address cToken, uint256 fixedPrice) external onlyOwner { TokenConfig memory config = tokenConfigs[cToken]; // Check if config exists for cToken if (config.priceFeed == address(0) && config.fixedPrice == 0) revert ConfigNotFound(cToken); // Validate fixed price if (fixedPrice == 0) revert InvalidFixedPrice(fixedPrice); // Check if existing fixed price is the same as the new one sent if (config.fixedPrice == fixedPrice) revert UnchangedFixedPrice(cToken, config.fixedPrice, fixedPrice); uint256 existingFixedPrice = config.fixedPrice; address existingPriceFeed = config.priceFeed; TokenConfig storage storageConfig = tokenConfigs[cToken]; storageConfig.fixedPrice = fixedPrice; if (config.priceFeed != address(0)) { delete storageConfig.priceFeed; } emit PriceOracleAssetFixedPriceUpdated(cToken, existingFixedPrice, fixedPrice, existingPriceFeed); } /** * @notice Removes a token config to no longer support the asset * @param cToken The cToken address that the token config should be removed for */ function removeConfig(address cToken) external onlyOwner { TokenConfig memory config = tokenConfigs[cToken]; // Check if config exists for cToken if (config.priceFeed == address(0) && config.fixedPrice == 0) revert ConfigNotFound(cToken); delete tokenConfigs[cToken]; emit PriceOracleAssetRemoved(cToken, config.underlyingAssetDecimals, config.priceFeed, config.fixedPrice); } /** * @notice Validates a token config and confirms one for the cToken does not already exist in mapping * @dev All fields are required. Underlying asset decimals is allowed to be 0 to support 0 decimal ERC20 tokens. * @param config TokenConfig struct that needs to be validated */ function _validateTokenConfig(LoadConfig memory config) internal view { // Check if cToken is zero address if (config.cToken == address(0)) revert MissingCTokenAddress(); // Check if both price feed and fixed price are empty if (config.priceFeed == address(0) && config.fixedPrice == 0) revert InvalidPriceConfigs(config.priceFeed, config.fixedPrice); // Check if both price feed and fixed price are set if (config.priceFeed != address(0) && config.fixedPrice != 0) revert InvalidPriceConfigs(config.priceFeed, config.fixedPrice); TokenConfig memory existingConfig = tokenConfigs[config.cToken]; // Check if duplicate configs were submitted for the same cToken if (existingConfig.priceFeed != address(0) || existingConfig.fixedPrice != 0) revert DuplicateConfig(config.cToken); if (config.priceFeed != address(0)) { _validateDecimals(config.priceFeed, config.underlyingAssetDecimals); } } /** * @notice Validates the combination of price feed decimals and the underlying asset decimals in the config * @param priceFeed The price feed the decimals need to be validated for * @param underlyingAssetDecimals The underlying asset decimals set in the config */ function _validateDecimals(address priceFeed, uint8 underlyingAssetDecimals) internal view { // Check if underlying asset decimals is too high to honor minimum precision during formatting if (underlyingAssetDecimals > PRICE_SCALE - MIN_PRECISION) revert InvalidUnderlyingAssetDecimals(underlyingAssetDecimals); AggregatorV3Interface aggregator = AggregatorV3Interface(priceFeed); // Retrieve decimals from feed for formatting uint8 feedDecimals = aggregator.decimals(); // Cap the sum of feed decimals and underlying asset decimals to avoid overflows when formatting prices. if (feedDecimals + underlyingAssetDecimals > MAX_DECIMALS) revert FormattingDecimalsTooHigh(feedDecimals + underlyingAssetDecimals); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable2Step.sol) pragma solidity ^0.8.0; import "./Ownable.sol"; /** * @dev Contract module which provides access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership} and {acceptOwnership}. * * This module is used through inheritance. It will make available all functions * from parent (Ownable). */ abstract contract Ownable2Step is Ownable { address private _pendingOwner; event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner); /** * @dev Returns the address of the pending owner. */ function pendingOwner() public view virtual returns (address) { return _pendingOwner; } /** * @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual override onlyOwner { _pendingOwner = newOwner; emit OwnershipTransferStarted(owner(), newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner. * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual override { delete _pendingOwner; super._transferOwnership(newOwner); } /** * @dev The new owner accepts the ownership transfer. */ function acceptOwnership() public virtual { address sender = _msgSender(); require(pendingOwner() == sender, "Ownable2Step: caller is not the new owner"); _transferOwnership(sender); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface AggregatorV3Interface { function decimals() external view returns (uint8); function description() external view returns (string memory); function version() external view returns (uint256); function getRoundData( uint80 _roundId ) external view returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound); function latestRoundData() external view returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"components":[{"internalType":"uint8","name":"underlyingAssetDecimals","type":"uint8"},{"internalType":"address","name":"cToken","type":"address"},{"internalType":"address","name":"priceFeed","type":"address"},{"internalType":"uint256","name":"fixedPrice","type":"uint256"}],"internalType":"struct PriceOracle.LoadConfig[]","name":"configs","type":"tuple[]"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"cToken","type":"address"}],"name":"ConfigNotFound","type":"error"},{"inputs":[{"internalType":"address","name":"cToken","type":"address"}],"name":"DuplicateConfig","type":"error"},{"inputs":[{"internalType":"uint16","name":"decimals","type":"uint16"}],"name":"FormattingDecimalsTooHigh","type":"error"},{"inputs":[{"internalType":"uint256","name":"fixedPrice","type":"uint256"}],"name":"InvalidFixedPrice","type":"error"},{"inputs":[{"internalType":"address","name":"priceFeed","type":"address"},{"internalType":"uint256","name":"fixedPrice","type":"uint256"}],"name":"InvalidPriceConfigs","type":"error"},{"inputs":[{"internalType":"address","name":"priceFeed","type":"address"}],"name":"InvalidPriceFeed","type":"error"},{"inputs":[{"internalType":"uint8","name":"underlyingAssetDecimals","type":"uint8"}],"name":"InvalidUnderlyingAssetDecimals","type":"error"},{"inputs":[],"name":"MissingCTokenAddress","type":"error"},{"inputs":[{"internalType":"address","name":"cToken","type":"address"},{"internalType":"uint256","name":"existingFixedPrice","type":"uint256"},{"internalType":"uint256","name":"newFixedPrice","type":"uint256"}],"name":"UnchangedFixedPrice","type":"error"},{"inputs":[{"internalType":"address","name":"cToken","type":"address"},{"internalType":"address","name":"existingPriceFeed","type":"address"},{"internalType":"address","name":"newPriceFeed","type":"address"}],"name":"UnchangedPriceFeed","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"cToken","type":"address"},{"indexed":false,"internalType":"uint8","name":"underlyingAssetDecimals","type":"uint8"},{"indexed":false,"internalType":"address","name":"priceFeed","type":"address"},{"indexed":false,"internalType":"uint256","name":"fixedPrice","type":"uint256"}],"name":"PriceOracleAssetAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"cToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"oldFixedPrice","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newFixedPrice","type":"uint256"},{"indexed":false,"internalType":"address","name":"oldPriceFeed","type":"address"}],"name":"PriceOracleAssetFixedPriceUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"cToken","type":"address"},{"indexed":false,"internalType":"address","name":"oldPriceFeed","type":"address"},{"indexed":false,"internalType":"address","name":"newPriceFeed","type":"address"},{"indexed":false,"internalType":"uint256","name":"oldFixedPrice","type":"uint256"}],"name":"PriceOracleAssetPriceFeedUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"cToken","type":"address"},{"indexed":false,"internalType":"uint8","name":"underlyingAssetDecimals","type":"uint8"},{"indexed":false,"internalType":"address","name":"priceFeed","type":"address"},{"indexed":false,"internalType":"uint256","name":"fixedPrice","type":"uint256"}],"name":"PriceOracleAssetRemoved","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint8","name":"underlyingAssetDecimals","type":"uint8"},{"internalType":"address","name":"cToken","type":"address"},{"internalType":"address","name":"priceFeed","type":"address"},{"internalType":"uint256","name":"fixedPrice","type":"uint256"}],"internalType":"struct PriceOracle.LoadConfig","name":"config","type":"tuple"}],"name":"addConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cToken","type":"address"}],"name":"getConfig","outputs":[{"components":[{"internalType":"uint8","name":"underlyingAssetDecimals","type":"uint8"},{"internalType":"address","name":"priceFeed","type":"address"},{"internalType":"uint256","name":"fixedPrice","type":"uint256"}],"internalType":"struct PriceOracle.TokenConfig","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"cToken","type":"address"}],"name":"getUnderlyingPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"cToken","type":"address"}],"name":"removeConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cToken","type":"address"},{"internalType":"uint256","name":"fixedPrice","type":"uint256"}],"name":"updateConfigFixedPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cToken","type":"address"},{"internalType":"address","name":"priceFeed","type":"address"}],"name":"updateConfigPriceFeed","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b50604051620018ee380380620018ee833981016040819052620000349162000521565b6200003f336200009c565b60005b81518110156200009457600082828151811062000063576200006362000733565b602002602001015190506200007e81620000c660201b60201c565b50806200008b81620006ff565b91505062000042565b50506200075f565b600180546001600160a01b0319169055620000c381620001a3602090811b62000abc17901c565b50565b620000d0620001f3565b620000db8162000255565b6040805160608082018352835160ff908116835284840180516001600160a01b0390811660208087019182528886018051888a01908152828b01805186166000908152600285528b90208a51815496518816610100026001600160a81b0319909716908a16179590951785559051600190940193909355915189519451925189519590961685529183169084015295820192909252929316917fb9639f0f44a640d9e166275d62b035bbaf14aed9b4763801fbec17f8e9bf64e9910160405180910390a25050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b03163314620002535760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b565b60208101516001600160a01b0316620002815760405163d589a57960e01b815260040160405180910390fd5b60408101516001600160a01b03161580156200029f57506060810151155b15620002dd5760408082015160608301519151635e8e0e7f60e01b81526001600160a01b03909116600482015260248101919091526044016200024a565b60408101516001600160a01b031615801590620002fd5750606081015115155b156200033b5760408082015160608301519151635e8e0e7f60e01b81526001600160a01b03909116600482015260248101919091526044016200024a565b6020808201516001600160a01b039081166000908152600283526040908190208151606081018352815460ff811682526101009004909316938301849052600101549082015290151580620003935750604081015115155b15620003c4576020820151604051637e8b46c960e01b81526001600160a01b0390911660048201526024016200024a565b60408201516001600160a01b031615620003eb5760408201518251620003eb9190620003ef565b5050565b620003fd60066024620006d9565b60ff168160ff1611156200042a5760405163a0b356c360e01b815260ff821660048201526024016200024a565b60008290506000816001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156200046b57600080fd5b505afa15801562000480573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004a691906200062e565b90506048620004b68483620006b1565b60ff161115620004ec57620004cc8382620006b1565b60405163a849c7df60e01b815260ff90911660048201526024016200024a565b50505050565b80516001600160a01b03811681146200050a57600080fd5b919050565b805160ff811681146200050a57600080fd5b600060208083850312156200053557600080fd5b82516001600160401b03808211156200054d57600080fd5b818501915085601f8301126200056257600080fd5b81518181111562000577576200057762000749565b62000587848260051b016200067e565b8181528481019250838501600783901b85018601891015620005a857600080fd5b60009450845b838110156200062057608080838c031215620005c8578687fd5b620005d262000653565b620005dd846200050f565b8152620005ec898501620004f2565b898201526040620005ff818601620004f2565b908201526060848101519082015286529487019490910190600101620005ae565b509098975050505050505050565b6000602082840312156200064157600080fd5b6200064c826200050f565b9392505050565b604051608081016001600160401b038111828210171562000678576200067862000749565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620006a957620006a962000749565b604052919050565b600060ff821660ff84168060ff03821115620006d157620006d16200071d565b019392505050565b600060ff821660ff841680821015620006f657620006f66200071d565b90039392505050565b60006000198214156200071657620007166200071d565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b61117f806200076f6000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c806379ba50971161007157806379ba5097146101045780638da5cb5b1461010c578063e30c397814610136578063e48a5f7b14610147578063f2fde38b14610188578063fc57d4df1461019b57600080fd5b80630966dedd146100ae57806319108ad3146100c35780633b1495c9146100d65780636b3ab955146100e9578063715018a6146100fc575b600080fd5b6100c16100bc366004610eb7565b6101bc565b005b6100c16100d1366004610e5a565b610296565b6100c16100e4366004610e8d565b610465565b6100c16100f7366004610e38565b6105e9565b6100c16106f7565b6100c161070b565b6000546001600160a01b03165b6040516001600160a01b0390911681526020015b60405180910390f35b6001546001600160a01b0316610119565b61015a610155366004610e38565b610785565b60408051825160ff1681526020808401516001600160a01b031690820152918101519082015260600161012d565b6100c1610196366004610e38565b610826565b6101ae6101a9366004610e38565b610897565b60405190815260200161012d565b6101c4610b0c565b6101cd81610b66565b6040805160608082018352835160ff908116835284840180516001600160a01b0390811660208087019182528886018051888a01908152828b01805186166000908152600285528b90208a51815496518816610100026001600160a81b0319909716908a16179590951785559051600190940193909355915189519451925189519590961685529183169084015295820192909252929316917fb9639f0f44a640d9e166275d62b035bbaf14aed9b4763801fbec17f8e9bf64e991015b60405180910390a25050565b61029e610b0c565b6001600160a01b038083166000908152600260209081526040918290208251606081018452815460ff81168252610100900490941691840182905260010154918301919091521580156102f357506040810151155b156103215760405163f5cd4cf960e01b81526001600160a01b03841660048201526024015b60405180910390fd5b6001600160a01b03821661035357604051636ade937960e11b81526001600160a01b0383166004820152602401610318565b816001600160a01b031681602001516001600160a01b031614156103ab57602081015160405163862610fd60e01b81526001600160a01b03808616600483015291821660248201529083166044820152606401610318565b6103b9828260000151610cf4565b602080820151604080840180516001600160a01b038089166000908152600290965292909420805492871661010002610100600160a81b0319909316929092178255519192911561040c57600060018201555b604080516001600160a01b0385811682528781166020830152918101849052908716907ff245898478328280cec510f1394c145377921a3dfc60eb7677795797e182b711906060015b60405180910390a2505050505050565b61046d610b0c565b6001600160a01b038083166000908152600260209081526040918290208251606081018452815460ff81168252610100900490941691840182905260010154918301919091521580156104c257506040810151155b156104eb5760405163f5cd4cf960e01b81526001600160a01b0384166004820152602401610318565b8161050c5760405163392d047160e11b815260048101839052602401610318565b8181604001511415610550576040808201519051637867df7360e01b81526001600160a01b0385166004820152602481019190915260448101839052606401610318565b604080820151602080840180516001600160a01b038089166000908152600290945294909220600181018790559051929391929091161561059b578054610100600160a81b03191681555b60408051848152602081018790526001600160a01b0384811692820192909252908716907f0a6670f7d25e56220be90c82809314a299e299a37df1b6ebdab26dc209687e4f90606001610455565b6105f1610b0c565b6001600160a01b038082166000908152600260209081526040918290208251606081018452815460ff811682526101009004909416918401829052600101549183019190915215801561064657506040810151155b1561066f5760405163f5cd4cf960e01b81526001600160a01b0383166004820152602401610318565b6001600160a01b038216600081815260026020908152604080832080546001600160a81b0319168155600101929092558351908401518483015192517f0122b45951145968c631f99407b359c4f3c62f53fe9907e673827cc86d14c29a9361028a93929160ff9390931683526001600160a01b03919091166020830152604082015260600190565b6106ff610b0c565b6107096000610de9565b565b60015433906001600160a01b031681146107795760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610318565b61078281610de9565b50565b60408051606081018252600080825260208201819052918101919091526001600160a01b038083166000908152600260209081526040918290208251606081018452815460ff81168252610100900490941691840182905260010154918301919091521580156107f757506040810151155b156108205760405163f5cd4cf960e01b81526001600160a01b0384166004820152602401610318565b92915050565b61082e610b0c565b600180546001600160a01b0383166001600160a01b0319909116811790915561085f6000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6001600160a01b0380821660009081526002602090815260408083208151606081018352815460ff81168252610100900490951692850183905260010154908401529091901580156108eb57506040810151155b156109145760405163f5cd4cf960e01b81526001600160a01b0384166004820152602401610318565b604081015115610928576040015192915050565b6000816020015190506000816001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561096c57600080fd5b505afa158015610980573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a49190610f90565b90506000826001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a06040518083038186803b1580156109e157600080fd5b505afa1580156109f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a199190610f40565b50505091505060008113610a335750600095945050505050565b83518190602490610a449085610fad565b60ff1611610a89578451600090610a5c856024611101565b610a669190611101565b610a7190600a611037565b9050610a7d81836110e2565b98975050505050505050565b8451600090602490610a9b9086610fad565b610aa59190611101565b610ab090600a611037565b9050610a7d8183610fd2565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b031633146107095760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610318565b60208101516001600160a01b0316610b915760405163d589a57960e01b815260040160405180910390fd5b60408101516001600160a01b0316158015610bae57506060810151155b15610bea5760408082015160608301519151635e8e0e7f60e01b81526001600160a01b0390911660048201526024810191909152604401610318565b60408101516001600160a01b031615801590610c095750606081015115155b15610c455760408082015160608301519151635e8e0e7f60e01b81526001600160a01b0390911660048201526024810191909152604401610318565b6020808201516001600160a01b039081166000908152600283526040908190208151606081018352815460ff811682526101009004909316938301849052600101549082015290151580610c9c5750604081015115155b15610ccb576020820151604051637e8b46c960e01b81526001600160a01b039091166004820152602401610318565b60408201516001600160a01b031615610cf057610cf082604001518360000151610cf4565b5050565b610d0060066024611101565b60ff168160ff161115610d2b5760405163a0b356c360e01b815260ff82166004820152602401610318565b60008290506000816001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610d6b57600080fd5b505afa158015610d7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da39190610f90565b90506048610db18483610fad565b60ff161115610de357610dc48382610fad565b60405163a849c7df60e01b815260ff9091166004820152602401610318565b50505050565b600180546001600160a01b031916905561078281610abc565b80356001600160a01b0381168114610e1957600080fd5b919050565b805169ffffffffffffffffffff81168114610e1957600080fd5b600060208284031215610e4a57600080fd5b610e5382610e02565b9392505050565b60008060408385031215610e6d57600080fd5b610e7683610e02565b9150610e8460208401610e02565b90509250929050565b60008060408385031215610ea057600080fd5b610ea983610e02565b946020939093013593505050565b600060808284031215610ec957600080fd5b6040516080810181811067ffffffffffffffff82111715610efa57634e487b7160e01b600052604160045260246000fd5b6040528235610f088161113a565b8152610f1660208401610e02565b6020820152610f2760408401610e02565b6040820152606083013560608201528091505092915050565b600080600080600060a08688031215610f5857600080fd5b610f6186610e1e565b9450602086015193506040860151925060608601519150610f8460808701610e1e565b90509295509295909350565b600060208284031215610fa257600080fd5b8151610e538161113a565b600060ff821660ff84168060ff03821115610fca57610fca611124565b019392505050565b600082610fef57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b8085111561102f57816000190482111561101557611015611124565b8085161561102257918102915b93841c9390800290610ff9565b509250929050565b6000610e5360ff84168360008261105057506001610820565b8161105d57506000610820565b8160018114611073576002811461107d57611099565b6001915050610820565b60ff84111561108e5761108e611124565b50506001821b610820565b5060208310610133831016604e8410600b84101617156110bc575081810a610820565b6110c68383610ff4565b80600019048211156110da576110da611124565b029392505050565b60008160001904831182151516156110fc576110fc611124565b500290565b600060ff821660ff84168082101561111b5761111b611124565b90039392505050565b634e487b7160e01b600052601160045260246000fd5b60ff8116811461078257600080fdfea2646970667358221220262309ea4ee6000470597fda1abc9627e8557fd742da0c1f1ef823cff1f5ec5064736f6c634300080700330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000120000000000000000000000004ddc2d193948926d02f9b1fe9e1daa0718270ed50000000000000000000000005f4ec3df9cbd43714fe2740f5e3616155c5b8419000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000120000000000000000000000005d3a536e4d6dbd6114cc1ead35777bab948e3643000000000000000000000000aed0c38402a5d19df6e4c03f4e2dced6e29c1ee90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000039aa39c021dfbae8fac545936693ac917d5e75630000000000000000000000008fffffd4afb6115b954bd326cbe7b4ba576818f600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000f650c3d88d12db855b8bf7d11be6c55a4e07dcc90000000000000000000000003e7d1eab13ad0104d2750b8863b489d65364e32d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000ccf4429db6322d5c611ee964527d42e5d685dd6a00000000000000000000000045939657d1ca34a8fa39a924b71d28fe8431e58100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000c11b1268c1a384e55c48c2391d8d480264a3a7f400000000000000000000000045939657d1ca34a8fa39a924b71d28fe8431e581000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000120000000000000000000000006c8c6b02e7b2be14d4fa6022dfd6d75921d90e4e0000000000000000000000009441d7556e7820b5ca42082cfa99487d56aca95800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000b3319f5d18bc0d84dd1b4825dcde5d5f7266d4070000000000000000000000002885d15b8af22648b98b122b22fdf4d2a56c60230000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000035a18000230da775cac24873d00ff85bccded550000000000000000000000000553303d460ee0afb37edff9be42922d8ff63220e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000070e36f6bf80a52b3b46b3af8e106cc0ed743e8e4000000000000000000000000dbd020caef83efd542f4de03e3cf0c28a4428bd500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000face851a4921ce59e912d19329929ce6da6eb0c70000000000000000000000002c1d072e956affc0d435cb7ac38ef18d24d9127c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000012392f67bdf24fae0af363c24ac620a2f67dad86000000000000000000000000ec746ecf986e2927abd291a2a1716c940100f8ba00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000e65cdb6479bac1e22340e4e755fae7e509ecd06c000000000000000000000000547a514d5e3769680ce22b2361c10ea13619e8a9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000120000000000000000000000004b0181102a0112a2ef11abee5563bb4a3176c9d7000000000000000000000000cc70f09a6cc17553b2e31954cd36e4a2d89501f70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000095b4ef2869ebd94beb4eee400a99824bf5dc325b000000000000000000000000ec1d1b3b0443256cc3860e24a46f108e699484aa0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000080a2ae356fc9ef4305676f7a3e2ed04e12c33946000000000000000000000000a027702dbb89fbd58938e4324ac03b58d812b0e100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000041171993284df560249b57358f931d9eb7b925d00000000000000000000000009023c0da49aaf8fc3fa3adf34c6a7016d38d5e300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000158079ee67fce2f58472a96584a73c7ab9ac95c10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000594905df7689000000000000000000000000000000000000000000000000000000000000000000120000000000000000000000007713dd9ca933848f6819f38b8352d9a15ea73f6700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000de499b060c660000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000f5dce57282a584d2746faf1593d3121fcac444dc0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c834a51147131000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100a95760003560e01c806379ba50971161007157806379ba5097146101045780638da5cb5b1461010c578063e30c397814610136578063e48a5f7b14610147578063f2fde38b14610188578063fc57d4df1461019b57600080fd5b80630966dedd146100ae57806319108ad3146100c35780633b1495c9146100d65780636b3ab955146100e9578063715018a6146100fc575b600080fd5b6100c16100bc366004610eb7565b6101bc565b005b6100c16100d1366004610e5a565b610296565b6100c16100e4366004610e8d565b610465565b6100c16100f7366004610e38565b6105e9565b6100c16106f7565b6100c161070b565b6000546001600160a01b03165b6040516001600160a01b0390911681526020015b60405180910390f35b6001546001600160a01b0316610119565b61015a610155366004610e38565b610785565b60408051825160ff1681526020808401516001600160a01b031690820152918101519082015260600161012d565b6100c1610196366004610e38565b610826565b6101ae6101a9366004610e38565b610897565b60405190815260200161012d565b6101c4610b0c565b6101cd81610b66565b6040805160608082018352835160ff908116835284840180516001600160a01b0390811660208087019182528886018051888a01908152828b01805186166000908152600285528b90208a51815496518816610100026001600160a81b0319909716908a16179590951785559051600190940193909355915189519451925189519590961685529183169084015295820192909252929316917fb9639f0f44a640d9e166275d62b035bbaf14aed9b4763801fbec17f8e9bf64e991015b60405180910390a25050565b61029e610b0c565b6001600160a01b038083166000908152600260209081526040918290208251606081018452815460ff81168252610100900490941691840182905260010154918301919091521580156102f357506040810151155b156103215760405163f5cd4cf960e01b81526001600160a01b03841660048201526024015b60405180910390fd5b6001600160a01b03821661035357604051636ade937960e11b81526001600160a01b0383166004820152602401610318565b816001600160a01b031681602001516001600160a01b031614156103ab57602081015160405163862610fd60e01b81526001600160a01b03808616600483015291821660248201529083166044820152606401610318565b6103b9828260000151610cf4565b602080820151604080840180516001600160a01b038089166000908152600290965292909420805492871661010002610100600160a81b0319909316929092178255519192911561040c57600060018201555b604080516001600160a01b0385811682528781166020830152918101849052908716907ff245898478328280cec510f1394c145377921a3dfc60eb7677795797e182b711906060015b60405180910390a2505050505050565b61046d610b0c565b6001600160a01b038083166000908152600260209081526040918290208251606081018452815460ff81168252610100900490941691840182905260010154918301919091521580156104c257506040810151155b156104eb5760405163f5cd4cf960e01b81526001600160a01b0384166004820152602401610318565b8161050c5760405163392d047160e11b815260048101839052602401610318565b8181604001511415610550576040808201519051637867df7360e01b81526001600160a01b0385166004820152602481019190915260448101839052606401610318565b604080820151602080840180516001600160a01b038089166000908152600290945294909220600181018790559051929391929091161561059b578054610100600160a81b03191681555b60408051848152602081018790526001600160a01b0384811692820192909252908716907f0a6670f7d25e56220be90c82809314a299e299a37df1b6ebdab26dc209687e4f90606001610455565b6105f1610b0c565b6001600160a01b038082166000908152600260209081526040918290208251606081018452815460ff811682526101009004909416918401829052600101549183019190915215801561064657506040810151155b1561066f5760405163f5cd4cf960e01b81526001600160a01b0383166004820152602401610318565b6001600160a01b038216600081815260026020908152604080832080546001600160a81b0319168155600101929092558351908401518483015192517f0122b45951145968c631f99407b359c4f3c62f53fe9907e673827cc86d14c29a9361028a93929160ff9390931683526001600160a01b03919091166020830152604082015260600190565b6106ff610b0c565b6107096000610de9565b565b60015433906001600160a01b031681146107795760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610318565b61078281610de9565b50565b60408051606081018252600080825260208201819052918101919091526001600160a01b038083166000908152600260209081526040918290208251606081018452815460ff81168252610100900490941691840182905260010154918301919091521580156107f757506040810151155b156108205760405163f5cd4cf960e01b81526001600160a01b0384166004820152602401610318565b92915050565b61082e610b0c565b600180546001600160a01b0383166001600160a01b0319909116811790915561085f6000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6001600160a01b0380821660009081526002602090815260408083208151606081018352815460ff81168252610100900490951692850183905260010154908401529091901580156108eb57506040810151155b156109145760405163f5cd4cf960e01b81526001600160a01b0384166004820152602401610318565b604081015115610928576040015192915050565b6000816020015190506000816001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561096c57600080fd5b505afa158015610980573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a49190610f90565b90506000826001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a06040518083038186803b1580156109e157600080fd5b505afa1580156109f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a199190610f40565b50505091505060008113610a335750600095945050505050565b83518190602490610a449085610fad565b60ff1611610a89578451600090610a5c856024611101565b610a669190611101565b610a7190600a611037565b9050610a7d81836110e2565b98975050505050505050565b8451600090602490610a9b9086610fad565b610aa59190611101565b610ab090600a611037565b9050610a7d8183610fd2565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b031633146107095760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610318565b60208101516001600160a01b0316610b915760405163d589a57960e01b815260040160405180910390fd5b60408101516001600160a01b0316158015610bae57506060810151155b15610bea5760408082015160608301519151635e8e0e7f60e01b81526001600160a01b0390911660048201526024810191909152604401610318565b60408101516001600160a01b031615801590610c095750606081015115155b15610c455760408082015160608301519151635e8e0e7f60e01b81526001600160a01b0390911660048201526024810191909152604401610318565b6020808201516001600160a01b039081166000908152600283526040908190208151606081018352815460ff811682526101009004909316938301849052600101549082015290151580610c9c5750604081015115155b15610ccb576020820151604051637e8b46c960e01b81526001600160a01b039091166004820152602401610318565b60408201516001600160a01b031615610cf057610cf082604001518360000151610cf4565b5050565b610d0060066024611101565b60ff168160ff161115610d2b5760405163a0b356c360e01b815260ff82166004820152602401610318565b60008290506000816001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610d6b57600080fd5b505afa158015610d7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da39190610f90565b90506048610db18483610fad565b60ff161115610de357610dc48382610fad565b60405163a849c7df60e01b815260ff9091166004820152602401610318565b50505050565b600180546001600160a01b031916905561078281610abc565b80356001600160a01b0381168114610e1957600080fd5b919050565b805169ffffffffffffffffffff81168114610e1957600080fd5b600060208284031215610e4a57600080fd5b610e5382610e02565b9392505050565b60008060408385031215610e6d57600080fd5b610e7683610e02565b9150610e8460208401610e02565b90509250929050565b60008060408385031215610ea057600080fd5b610ea983610e02565b946020939093013593505050565b600060808284031215610ec957600080fd5b6040516080810181811067ffffffffffffffff82111715610efa57634e487b7160e01b600052604160045260246000fd5b6040528235610f088161113a565b8152610f1660208401610e02565b6020820152610f2760408401610e02565b6040820152606083013560608201528091505092915050565b600080600080600060a08688031215610f5857600080fd5b610f6186610e1e565b9450602086015193506040860151925060608601519150610f8460808701610e1e565b90509295509295909350565b600060208284031215610fa257600080fd5b8151610e538161113a565b600060ff821660ff84168060ff03821115610fca57610fca611124565b019392505050565b600082610fef57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b8085111561102f57816000190482111561101557611015611124565b8085161561102257918102915b93841c9390800290610ff9565b509250929050565b6000610e5360ff84168360008261105057506001610820565b8161105d57506000610820565b8160018114611073576002811461107d57611099565b6001915050610820565b60ff84111561108e5761108e611124565b50506001821b610820565b5060208310610133831016604e8410600b84101617156110bc575081810a610820565b6110c68383610ff4565b80600019048211156110da576110da611124565b029392505050565b60008160001904831182151516156110fc576110fc611124565b500290565b600060ff821660ff84168082101561111b5761111b611124565b90039392505050565b634e487b7160e01b600052601160045260246000fd5b60ff8116811461078257600080fdfea2646970667358221220262309ea4ee6000470597fda1abc9627e8557fd742da0c1f1ef823cff1f5ec5064736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000120000000000000000000000004ddc2d193948926d02f9b1fe9e1daa0718270ed50000000000000000000000005f4ec3df9cbd43714fe2740f5e3616155c5b8419000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000120000000000000000000000005d3a536e4d6dbd6114cc1ead35777bab948e3643000000000000000000000000aed0c38402a5d19df6e4c03f4e2dced6e29c1ee90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000039aa39c021dfbae8fac545936693ac917d5e75630000000000000000000000008fffffd4afb6115b954bd326cbe7b4ba576818f600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000f650c3d88d12db855b8bf7d11be6c55a4e07dcc90000000000000000000000003e7d1eab13ad0104d2750b8863b489d65364e32d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000ccf4429db6322d5c611ee964527d42e5d685dd6a00000000000000000000000045939657d1ca34a8fa39a924b71d28fe8431e58100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000c11b1268c1a384e55c48c2391d8d480264a3a7f400000000000000000000000045939657d1ca34a8fa39a924b71d28fe8431e581000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000120000000000000000000000006c8c6b02e7b2be14d4fa6022dfd6d75921d90e4e0000000000000000000000009441d7556e7820b5ca42082cfa99487d56aca95800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000b3319f5d18bc0d84dd1b4825dcde5d5f7266d4070000000000000000000000002885d15b8af22648b98b122b22fdf4d2a56c60230000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000035a18000230da775cac24873d00ff85bccded550000000000000000000000000553303d460ee0afb37edff9be42922d8ff63220e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000070e36f6bf80a52b3b46b3af8e106cc0ed743e8e4000000000000000000000000dbd020caef83efd542f4de03e3cf0c28a4428bd500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000face851a4921ce59e912d19329929ce6da6eb0c70000000000000000000000002c1d072e956affc0d435cb7ac38ef18d24d9127c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000012392f67bdf24fae0af363c24ac620a2f67dad86000000000000000000000000ec746ecf986e2927abd291a2a1716c940100f8ba00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000e65cdb6479bac1e22340e4e755fae7e509ecd06c000000000000000000000000547a514d5e3769680ce22b2361c10ea13619e8a9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000120000000000000000000000004b0181102a0112a2ef11abee5563bb4a3176c9d7000000000000000000000000cc70f09a6cc17553b2e31954cd36e4a2d89501f70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000095b4ef2869ebd94beb4eee400a99824bf5dc325b000000000000000000000000ec1d1b3b0443256cc3860e24a46f108e699484aa0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000080a2ae356fc9ef4305676f7a3e2ed04e12c33946000000000000000000000000a027702dbb89fbd58938e4324ac03b58d812b0e100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000041171993284df560249b57358f931d9eb7b925d00000000000000000000000009023c0da49aaf8fc3fa3adf34c6a7016d38d5e300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000158079ee67fce2f58472a96584a73c7ab9ac95c10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000594905df7689000000000000000000000000000000000000000000000000000000000000000000120000000000000000000000007713dd9ca933848f6819f38b8352d9a15ea73f6700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000de499b060c660000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000f5dce57282a584d2746faf1593d3121fcac444dc0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c834a51147131000
-----Decoded View---------------
Arg [0] : configs (tuple[]): System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput]
-----Encoded View---------------
82 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000014
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [3] : 0000000000000000000000004ddc2d193948926d02f9b1fe9e1daa0718270ed5
Arg [4] : 0000000000000000000000005f4ec3df9cbd43714fe2740f5e3616155c5b8419
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [7] : 0000000000000000000000005d3a536e4d6dbd6114cc1ead35777bab948e3643
Arg [8] : 000000000000000000000000aed0c38402a5d19df6e4c03f4e2dced6e29c1ee9
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [11] : 00000000000000000000000039aa39c021dfbae8fac545936693ac917d5e7563
Arg [12] : 0000000000000000000000008fffffd4afb6115b954bd326cbe7b4ba576818f6
Arg [13] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [14] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [15] : 000000000000000000000000f650c3d88d12db855b8bf7d11be6c55a4e07dcc9
Arg [16] : 0000000000000000000000003e7d1eab13ad0104d2750b8863b489d65364e32d
Arg [17] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [18] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [19] : 000000000000000000000000ccf4429db6322d5c611ee964527d42e5d685dd6a
Arg [20] : 00000000000000000000000045939657d1ca34a8fa39a924b71d28fe8431e581
Arg [21] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [22] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [23] : 000000000000000000000000c11b1268c1a384e55c48c2391d8d480264a3a7f4
Arg [24] : 00000000000000000000000045939657d1ca34a8fa39a924b71d28fe8431e581
Arg [25] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [26] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [27] : 0000000000000000000000006c8c6b02e7b2be14d4fa6022dfd6d75921d90e4e
Arg [28] : 0000000000000000000000009441d7556e7820b5ca42082cfa99487d56aca958
Arg [29] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [30] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [31] : 000000000000000000000000b3319f5d18bc0d84dd1b4825dcde5d5f7266d407
Arg [32] : 0000000000000000000000002885d15b8af22648b98b122b22fdf4d2a56c6023
Arg [33] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [34] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [35] : 00000000000000000000000035a18000230da775cac24873d00ff85bccded550
Arg [36] : 000000000000000000000000553303d460ee0afb37edff9be42922d8ff63220e
Arg [37] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [38] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [39] : 00000000000000000000000070e36f6bf80a52b3b46b3af8e106cc0ed743e8e4
Arg [40] : 000000000000000000000000dbd020caef83efd542f4de03e3cf0c28a4428bd5
Arg [41] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [42] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [43] : 000000000000000000000000face851a4921ce59e912d19329929ce6da6eb0c7
Arg [44] : 0000000000000000000000002c1d072e956affc0d435cb7ac38ef18d24d9127c
Arg [45] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [46] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [47] : 00000000000000000000000012392f67bdf24fae0af363c24ac620a2f67dad86
Arg [48] : 000000000000000000000000ec746ecf986e2927abd291a2a1716c940100f8ba
Arg [49] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [50] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [51] : 000000000000000000000000e65cdb6479bac1e22340e4e755fae7e509ecd06c
Arg [52] : 000000000000000000000000547a514d5e3769680ce22b2361c10ea13619e8a9
Arg [53] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [54] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [55] : 0000000000000000000000004b0181102a0112a2ef11abee5563bb4a3176c9d7
Arg [56] : 000000000000000000000000cc70f09a6cc17553b2e31954cd36e4a2d89501f7
Arg [57] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [58] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [59] : 00000000000000000000000095b4ef2869ebd94beb4eee400a99824bf5dc325b
Arg [60] : 000000000000000000000000ec1d1b3b0443256cc3860e24a46f108e699484aa
Arg [61] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [62] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [63] : 00000000000000000000000080a2ae356fc9ef4305676f7a3e2ed04e12c33946
Arg [64] : 000000000000000000000000a027702dbb89fbd58938e4324ac03b58d812b0e1
Arg [65] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [66] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [67] : 000000000000000000000000041171993284df560249b57358f931d9eb7b925d
Arg [68] : 00000000000000000000000009023c0da49aaf8fc3fa3adf34c6a7016d38d5e3
Arg [69] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [70] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [71] : 000000000000000000000000158079ee67fce2f58472a96584a73c7ab9ac95c1
Arg [72] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [73] : 000000000000000000000000000000000000000000000000594905df76890000
Arg [74] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [75] : 0000000000000000000000007713dd9ca933848f6819f38b8352d9a15ea73f67
Arg [76] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [77] : 0000000000000000000000000000000000000000000000000de499b060c66000
Arg [78] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [79] : 000000000000000000000000f5dce57282a584d2746faf1593d3121fcac444dc
Arg [80] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [81] : 000000000000000000000000000000000000000000000000c834a51147131000
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.