Source Code
Overview
S Balance
0 S
More Info
ContractCreator
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
14687147 | 11 days ago | 0 S | ||||
14687147 | 11 days ago | 0 S | ||||
14687147 | 11 days ago | 0 S | ||||
14687147 | 11 days ago | 0 S | ||||
14687147 | 11 days ago | 0 S | ||||
14687147 | 11 days ago | 0 S | ||||
14687147 | 11 days ago | 0 S | ||||
14687147 | 11 days ago | 0 S | ||||
14687147 | 11 days ago | 0 S | ||||
14687147 | 11 days ago | 0 S | ||||
14687147 | 11 days ago | 0 S | ||||
14687147 | 11 days ago | 0 S | ||||
14687147 | 11 days ago | 0 S | ||||
14687147 | 11 days ago | 0 S | ||||
14687147 | 11 days ago | 0 S | ||||
14687147 | 11 days ago | 0 S | ||||
14687147 | 11 days ago | 0 S | ||||
14687147 | 11 days ago | 0 S | ||||
14687147 | 11 days ago | 0 S | ||||
14687147 | 11 days ago | 0 S | ||||
14687147 | 11 days ago | 0 S | ||||
14687147 | 11 days ago | 0 S | ||||
14687147 | 11 days ago | 0 S | ||||
14687147 | 11 days ago | 0 S | ||||
14687147 | 11 days ago | 0 S |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
FeedRegistry
Compiler Version
v0.8.24+commit.e11b9ed9
Optimization Enabled:
Yes with 200 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.24; import '../../interfaces/IFeedRegistry.sol'; import {IAggregator} from '../../interfaces/IAggregator.sol'; import {ProxyCall} from '../../libraries/ProxyCall.sol'; /// @title Registry aggregating information from ChainlinkProxies and the feed itself /// @notice This contract is used to store and retrieve information about feeds /// @dev To reduce gas costs, the contract calls the dataFeedStore directly instead of using the ChainlinkProxy contract FeedRegistry is IFeedRegistry { /// @notice The data feed store contract address internal immutable DATA_FEED_STORE; /// @inheritdoc IFeedRegistry address public immutable override OWNER; /// @notice Feed data for a given pair mapping(address => mapping(address => FeedData)) internal feedData; /// @notice Constructor /// @param _owner The owner of the contract /// @param _dataFeedStore The address of the data feed store constructor(address _owner, address _dataFeedStore) { OWNER = _owner; DATA_FEED_STORE = _dataFeedStore; } /// @inheritdoc IChainlinkFeedRegistry function decimals( address base, address quote ) external view override returns (uint8) { return feedData[base][quote].decimals; } /// @inheritdoc IChainlinkFeedRegistry function description( address base, address quote ) external view override returns (string memory) { return feedData[base][quote].description; } /// @inheritdoc IChainlinkFeedRegistry function latestAnswer( address base, address quote ) external view override returns (int256) { return ProxyCall._latestAnswer(feedData[base][quote].key, DATA_FEED_STORE); } /// @inheritdoc IChainlinkFeedRegistry function getRoundData( address base, address quote, uint80 _roundId ) external view override returns (uint80, int256, uint256, uint256, uint80) { return ProxyCall._getRoundData( _roundId, feedData[base][quote].key, DATA_FEED_STORE ); } /// @inheritdoc IChainlinkFeedRegistry function getFeed( address base, address quote ) external view override returns (IChainlinkAggregator) { return feedData[base][quote].aggregator; } /// @inheritdoc IFeedRegistry function setFeeds(Feed[] calldata feeds) external override { if (msg.sender != OWNER) { revert OnlyOwner(); } for (uint256 i = 0; i < feeds.length; i++) { feedData[feeds[i].base][feeds[i].quote] = FeedData( IChainlinkAggregator(feeds[i].feed), IAggregator(feeds[i].feed).key(), IAggregator(feeds[i].feed).decimals(), IAggregator(feeds[i].feed).description() ); } } /// @inheritdoc IChainlinkFeedRegistry function latestRound( address base, address quote ) external view override returns (uint256) { return ProxyCall._latestRound(feedData[base][quote].key, DATA_FEED_STORE); } /// @inheritdoc IChainlinkFeedRegistry function latestRoundData( address base, address quote ) external view override returns (uint80, int256, uint256, uint256, uint80) { return ProxyCall._latestRoundData(feedData[base][quote].key, DATA_FEED_STORE); } }
/** * SPDX-FileCopyrightText: Copyright (c) 2021 SmartContract ChainLink Limited SEZC * * SPDX-License-Identifier: MIT */ pragma solidity ^0.8.24; interface IChainlinkAggregator { /// @notice Decimals for the feed data /// @return decimals The decimals of the feed function decimals() external view returns (uint8); /// @notice Description text for the feed data /// @return description The description of the feed function description() external view returns (string memory); /// @notice Get the latest answer for the feed /// @return answer The latest value stored function latestAnswer() external view returns (int256); /// @notice Get the latest round ID for the feed /// @return roundId The latest round ID function latestRound() external view returns (uint256); /// @notice Get the data for a round at a given round ID /// @param _roundId The round ID to retrieve the data for /// @return roundId The round ID /// @return answer The value stored for the round /// @return startedAt Timestamp of when the value was stored /// @return updatedAt Same as startedAt /// @return answeredInRound Same as roundId function getRoundData( uint80 _roundId ) external view returns ( uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound ); /// @notice Get the latest round data available /// @return roundId The latest round ID for the feed /// @return answer The value stored for the round /// @return startedAt Timestamp of when the value was stored /// @return updatedAt Same as startedAt /// @return answeredInRound Same as roundId function latestRoundData() external view returns ( uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound ); }
/** * SPDX-FileCopyrightText: Copyright (c) 2021 SmartContract ChainLink Limited SEZC * * SPDX-License-Identifier: MIT */ pragma solidity ^0.8.24; import {IChainlinkAggregator} from './IChainlinkAggregator.sol'; interface IChainlinkFeedRegistry { /// @notice Get decimals for a feed pair /// @param base The base asset of the feed /// @param quote The quote asset of the feed /// @return decimals The decimals of the feed pair function decimals(address base, address quote) external view returns (uint8); /// @notice Get description for a feed pair /// @param base The base asset of the feed /// @param quote The quote asset of the feed /// @return description The description of the feed pair function description( address base, address quote ) external view returns (string memory); /// @notice Get the latest answer for a feed pair /// @param base The base asset of the feed /// @param quote The quote asset of the feed /// @return answer The value sotred for the feed pair function latestAnswer( address base, address quote ) external view returns (int256 answer); /// @notice Get the latest round ID for a feed pair /// @param base The base asset of the feed /// @param quote The quote asset of the feed /// @return roundId The latest round ID function latestRound( address base, address quote ) external view returns (uint256 roundId); /// @notice Get the round data for a feed pair at a given round ID /// @param base The base asset of the feed /// @param quote The quote asset of the feed /// @param _roundId The round ID to retrieve data for /// @return roundId The round ID /// @return answer The value stored for the feed at the given round ID /// @return startedAt The timestamp when the value was stored /// @return updatedAt Same as startedAt /// @return answeredInRound Same as roundId function getRoundData( address base, address quote, uint80 _roundId ) external view returns ( uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound ); /// @notice Get the latest round data for a feed pair /// @param base The base asset of the feed /// @param quote The quote asset of the feed /// @return roundId The latest round ID stored for the feed pair /// @return answer The latest value stored for the feed pair /// @return startedAt The timestamp when the value was stored /// @return updatedAt Same as startedAt /// @return answeredInRound Same as roundId function latestRoundData( address base, address quote ) external view returns ( uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound ); /// @notice Get the ChainlinkProxy contract for a feed pair /// @param base The base asset of the feed /// @param quote The quote asset of the feed /// @return aggregator The ChainlinkProxy contract given pair function getFeed( address base, address quote ) external view returns (IChainlinkAggregator aggregator); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.24; import {IChainlinkAggregator} from './chainlink/IChainlinkAggregator.sol'; interface IAggregator is IChainlinkAggregator { /// @notice The feed data this contract is responsible for /// @dev This is the key ID for the mapping in the dataFeedStore /// @return key The key ID for the feed function key() external view returns (uint32); /// @notice The dataFeedStore this contract is responsible for /// @dev The address of the underlying contract that stores the data /// @return dataFeedStore The address of the dataFeedStore function dataFeedStore() external view returns (address); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.24; import {IChainlinkFeedRegistry, IChainlinkAggregator} from './chainlink/IChainlinkFeedRegistry.sol'; interface IFeedRegistry is IChainlinkFeedRegistry { struct FeedData { IChainlinkAggregator aggregator; uint32 key; uint8 decimals; string description; } struct Feed { address base; address quote; address feed; } error OnlyOwner(); /// @notice Contract owner /// @return owner The address of the owner function OWNER() external view returns (address); /// @notice Set the feed for a given pair /// @dev Stores immutable values (decimals, key, description) and contract address from ChainlinkProxy /// @param feeds Array of base, quote and feed address data function setFeeds(Feed[] calldata feeds) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.24; /// @title ProxyCall /// @notice Library for calling dataFeedStore functions /// @dev Contains utility functions for calling gas efficiently dataFeedStore functions and decoding return data library ProxyCall { /// @notice Gets the latest answer from the dataFeedStore /// @param key The key ID for the feed /// @param dataFeedStore The address of the dataFeedStore contract /// @return answer The latest stored value after being decoded function _latestAnswer( uint32 key, address dataFeedStore ) internal view returns (int256) { return int256( uint256( uint192( bytes24( _callDataFeed(dataFeedStore, abi.encodePacked(0x80000000 | key)) ) ) ) ); } /// @notice Gets the round data from the dataFeedStore /// @param _roundId The round ID to retrieve data for /// @param key The key ID for the feed /// @param dataFeedStore The address of the dataFeedStore contract /// @return roundId The round ID /// @return answer The value stored for the feed at the given round ID /// @return startedAt The timestamp when the value was stored /// @return updatedAt Same as startedAt /// @return answeredInRound Same as roundId function _getRoundData( uint80 _roundId, uint32 key, address dataFeedStore ) internal view returns (uint80, int256 answer, uint256 startedAt, uint256, uint80) { (answer, startedAt) = _decodeData( _callDataFeed( dataFeedStore, abi.encodeWithSelector(bytes4(0x20000000 | key), _roundId) ) ); return (_roundId, answer, startedAt, startedAt, _roundId); } /// @notice Gets the latest round ID for a given feed from the dataFeedStore /// @dev Using assembly achieves lower gas costs /// @param key The key ID for the feed /// @param dataFeedStore The address of the dataFeedStore contract /// @return roundId The latest round ID function _latestRound( uint32 key, address dataFeedStore ) internal view returns (uint256 roundId) { // using assembly staticcall costs less gas than using a view function assembly { // get free memory pointer let ptr := mload(0x40) // store selector in memory at location 0 mstore(0, shl(224, or(0x40000000, key))) // call dataFeedStore with selector 0xc0000000 | key (4 bytes) and store return value (64 bytes) at memory location ptr let success := staticcall(gas(), dataFeedStore, 0, 4, ptr, 64) // revert if call failed if iszero(success) { revert(0, 0) } // load return value from memory at location ptr // roundId is stored in the second 32 bytes of the return 64 bytes roundId := mload(add(ptr, 32)) } } /// @notice Gets the latest round data for a given feed from the dataFeedStore /// @dev Using assembly achieves lower gas costs /// @param key The key ID for the feed /// @param dataFeedStore The address of the dataFeedStore contract /// @return roundId The latest round ID /// @return answer The latest stored value after being decoded /// @return startedAt The timestamp when the value was stored /// @return updatedAt Same as startedAt /// @return answeredInRound Same as roundId function _latestRoundData( uint32 key, address dataFeedStore ) internal view returns (uint80 roundId, int256 answer, uint256 startedAt, uint256, uint80) { bytes32 returnData; // using assembly staticcall costs less gas than using a view function assembly { // get free memory pointer let ptr := mload(0x40) // store selector in memory at location 0 mstore(0x00, shl(224, or(0xc0000000, key))) // call dataFeedStore with selector 0xc0000000 | key (4 bytes) and store return value (64 bytes) at memory location ptr let success := staticcall(gas(), dataFeedStore, 0x00, 4, ptr, 64) // revert if call failed if iszero(success) { revert(0, 0) } // assign return value to returnData returnData := mload(ptr) // load return value from memory at location ptr // roundId is stored in the second 32 bytes of the return 64 bytes roundId := mload(add(ptr, 32)) } (answer, startedAt) = _decodeData(returnData); return (roundId, answer, startedAt, startedAt, roundId); } /// @notice Calls the dataFeedStore with the given data /// @dev Using assembly achieves lower gas costs /// Used as a call() function to dataFeedStore /// @param dataFeedStore The address of the dataFeedStore contract /// @param data The data to call the dataFeedStore with /// @return returnData The return value from the dataFeedStore function _callDataFeed( address dataFeedStore, bytes memory data ) internal view returns (bytes32 returnData) { // using assembly staticcall costs less gas than using a view function assembly { // get free memory pointer let ptr := mload(0x40) // call dataFeedStore with data and store return value (32 bytes) at memory location ptr let success := staticcall( gas(), // gas remaining dataFeedStore, // address to call add(data, 32), // location of data to call (skip first 32 bytes of data which is the length of data) mload(data), // size of data to call ptr, // where to store the return data 32 // how much data to store ) // revert if call failed if iszero(success) { revert(0, 0) } // assign loaded return value at memory location ptr to returnData returnData := mload(ptr) } } /// @notice Decodes the return data from the dataFeedStore /// @param data The data to decode /// @return answer The value stored for the feed at the given round ID /// @return timestamp The timestamp when the value was stored function _decodeData(bytes32 data) internal pure returns (int256, uint256) { return (int256(uint256(uint192(bytes24(data)))), uint64(uint256(data))); } }
{ "optimizer": { "enabled": true, "runs": 200 }, "evmVersion": "paris", "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
[{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_dataFeedStore","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"OnlyOwner","type":"error"},{"inputs":[],"name":"OWNER","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"base","type":"address"},{"internalType":"address","name":"quote","type":"address"}],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"base","type":"address"},{"internalType":"address","name":"quote","type":"address"}],"name":"description","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"base","type":"address"},{"internalType":"address","name":"quote","type":"address"}],"name":"getFeed","outputs":[{"internalType":"contract IChainlinkAggregator","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"base","type":"address"},{"internalType":"address","name":"quote","type":"address"},{"internalType":"uint80","name":"_roundId","type":"uint80"}],"name":"getRoundData","outputs":[{"internalType":"uint80","name":"","type":"uint80"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint80","name":"","type":"uint80"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"base","type":"address"},{"internalType":"address","name":"quote","type":"address"}],"name":"latestAnswer","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"base","type":"address"},{"internalType":"address","name":"quote","type":"address"}],"name":"latestRound","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"base","type":"address"},{"internalType":"address","name":"quote","type":"address"}],"name":"latestRoundData","outputs":[{"internalType":"uint80","name":"","type":"uint80"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint80","name":"","type":"uint80"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"base","type":"address"},{"internalType":"address","name":"quote","type":"address"},{"internalType":"address","name":"feed","type":"address"}],"internalType":"struct IFeedRegistry.Feed[]","name":"feeds","type":"tuple[]"}],"name":"setFeeds","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60c060405234801561001057600080fd5b50604051610e7c380380610e7c83398101604081905261002f91610062565b6001600160a01b0391821660a05216608052610095565b80516001600160a01b038116811461005d57600080fd5b919050565b6000806040838503121561007557600080fd5b61007e83610046565b915061008c60208401610046565b90509250929050565b60805160a051610da76100d560003960008181609d01526102360152600081816105bb0152818161062b0152818161068f01526107b10152610da76000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063d2edb6dd11610066578063d2edb6dd1461018e578063d4c282a3146101c4578063ec62f44b146101e5578063fa820de9146101f8578063fc58749e1461021857600080fd5b8063117803e31461009857806358e2d3a8146100dc578063b5720f821461012f578063bcfd032d14610144575b600080fd5b6100bf7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61011d6100ea366004610995565b6001600160a01b03918216600090815260208181526040808320939094168252919091522054600160c01b900460ff1690565b60405160ff90911681526020016100d3565b61014261013d3660046109c8565b61022b565b005b610157610152366004610995565b61057a565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a0016100d3565b6100bf61019c366004610995565b6001600160a01b03918216600090815260208181526040808320938516835292905220541690565b6101d76101d2366004610995565b6105f2565b6040519081526020016100d3565b6101d76101f3366004610995565b610656565b61020b610206366004610995565b6106b3565b6040516100d39190610a61565b610157610226366004610a94565b61076e565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461027457604051635fc483c560e01b815260040160405180910390fd5b60005b8181101561057557604051806080016040528084848481811061029c5761029c610aea565b90506060020160400160208101906102b49190610b00565b6001600160a01b031681526020018484848181106102d4576102d4610aea565b90506060020160400160208101906102ec9190610b00565b6001600160a01b0316633943380c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610329573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061034d9190610b1b565b63ffffffff16815260200184848481811061036a5761036a610aea565b90506060020160400160208101906103829190610b00565b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103e39190610b41565b60ff1681526020018484848181106103fd576103fd610aea565b90506060020160400160208101906104159190610b00565b6001600160a01b0316637284e4166040518163ffffffff1660e01b8152600401600060405180830381865afa158015610452573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261047a9190810190610b7a565b905260008085858581811061049157610491610aea565b6104a79260206060909202019081019150610b00565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008585858181106104db576104db610aea565b90506060020160200160208101906104f39190610b00565b6001600160a01b039081168252602080830193909352604091820160002084518154948601519386015160ff16600160c01b0260ff60c01b1963ffffffff909516600160a01b026001600160c01b0319909616919093161793909317919091161781556060820151600182019061056a9082610cb1565b505050600101610277565b505050565b6001600160a01b0382811660009081526020818152604080832093851683529290529081205481908190819081906105df90600160a01b900463ffffffff167f00000000000000000000000000000000000000000000000000000000000000006107e9565b939b929a50909850965090945092505050565b6001600160a01b0382811660009081526020818152604080832093851683529290529081205461064f90600160a01b900463ffffffff167f0000000000000000000000000000000000000000000000000000000000000000610842565b9392505050565b6001600160a01b0382811660009081526020818152604080832093851683529290529081205461064f90600160a01b900463ffffffff167f0000000000000000000000000000000000000000000000000000000000000000610888565b6001600160a01b038083166000908152602081815260408083209385168352929052206001018054606091906106e890610c27565b80601f016020809104026020016040519081016040528092919081815260200182805461071490610c27565b80156107615780601f1061073657610100808354040283529160200191610761565b820191906000526020600020905b81548152906001019060200180831161074457829003601f168201915b5050505050905092915050565b6001600160a01b0383811660009081526020818152604080832093861683529290529081205481908190819081906107d5908790600160a01b900463ffffffff167f00000000000000000000000000000000000000000000000000000000000000006108ba565b939c929b5090995097509095509350505050565b6000806000806000806040518863c00000001760e01b600052604081600460008b5afa8061081657600080fd5b50805160209091015199604082901c995067ffffffffffffffff90911697508796508995509350505050565b6040516001600160e01b03196380000000841760e01b16602082015260009061087e908390602401604051602081830303815290604052610955565b60401c9392505050565b60006040518363400000001760e01b60005260408160046000865afa806108ae57600080fd5b50602001519392505050565b600080600080600061094261092d878963200000001760e01b8b6040516024016108f6919069ffffffffffffffffffff91909116815260200190565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610955565b604081901c9167ffffffffffffffff90911690565b9899909897508796508995509350505050565b6000604051602081845160208601875afa8061097057600080fd5b50519392505050565b80356001600160a01b038116811461099057600080fd5b919050565b600080604083850312156109a857600080fd5b6109b183610979565b91506109bf60208401610979565b90509250929050565b600080602083850312156109db57600080fd5b823567ffffffffffffffff808211156109f357600080fd5b818501915085601f830112610a0757600080fd5b813581811115610a1657600080fd5b866020606083028501011115610a2b57600080fd5b60209290920196919550909350505050565b60005b83811015610a58578181015183820152602001610a40565b50506000910152565b6020815260008251806020840152610a80816040850160208701610a3d565b601f01601f19169190910160400192915050565b600080600060608486031215610aa957600080fd5b610ab284610979565b9250610ac060208501610979565b9150604084013569ffffffffffffffffffff81168114610adf57600080fd5b809150509250925092565b634e487b7160e01b600052603260045260246000fd5b600060208284031215610b1257600080fd5b61064f82610979565b600060208284031215610b2d57600080fd5b815163ffffffff8116811461064f57600080fd5b600060208284031215610b5357600080fd5b815160ff8116811461064f57600080fd5b634e487b7160e01b600052604160045260246000fd5b600060208284031215610b8c57600080fd5b815167ffffffffffffffff80821115610ba457600080fd5b818401915084601f830112610bb857600080fd5b815181811115610bca57610bca610b64565b604051601f8201601f19908116603f01168101908382118183101715610bf257610bf2610b64565b81604052828152876020848701011115610c0b57600080fd5b610c1c836020830160208801610a3d565b979650505050505050565b600181811c90821680610c3b57607f821691505b602082108103610c5b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610575576000816000526020600020601f850160051c81016020861015610c8a5750805b601f850160051c820191505b81811015610ca957828155600101610c96565b505050505050565b815167ffffffffffffffff811115610ccb57610ccb610b64565b610cdf81610cd98454610c27565b84610c61565b602080601f831160018114610d145760008415610cfc5750858301515b600019600386901b1c1916600185901b178555610ca9565b600085815260208120601f198616915b82811015610d4357888601518255948401946001909101908401610d24565b5085821015610d615787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fea26469706673582212200e11dd68f1040a665e1e7b666169f3f182dbd58b69642c58fe2d0afc49604a3264736f6c6343000818003300000000000000000000000023bc561ea93063b0cd12b6e3c690d40c93e29692000000000000000000000000ee5a4826068c5326a7f06fd6c7cbf816f096846c
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100935760003560e01c8063d2edb6dd11610066578063d2edb6dd1461018e578063d4c282a3146101c4578063ec62f44b146101e5578063fa820de9146101f8578063fc58749e1461021857600080fd5b8063117803e31461009857806358e2d3a8146100dc578063b5720f821461012f578063bcfd032d14610144575b600080fd5b6100bf7f00000000000000000000000023bc561ea93063b0cd12b6e3c690d40c93e2969281565b6040516001600160a01b0390911681526020015b60405180910390f35b61011d6100ea366004610995565b6001600160a01b03918216600090815260208181526040808320939094168252919091522054600160c01b900460ff1690565b60405160ff90911681526020016100d3565b61014261013d3660046109c8565b61022b565b005b610157610152366004610995565b61057a565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a0016100d3565b6100bf61019c366004610995565b6001600160a01b03918216600090815260208181526040808320938516835292905220541690565b6101d76101d2366004610995565b6105f2565b6040519081526020016100d3565b6101d76101f3366004610995565b610656565b61020b610206366004610995565b6106b3565b6040516100d39190610a61565b610157610226366004610a94565b61076e565b336001600160a01b037f00000000000000000000000023bc561ea93063b0cd12b6e3c690d40c93e29692161461027457604051635fc483c560e01b815260040160405180910390fd5b60005b8181101561057557604051806080016040528084848481811061029c5761029c610aea565b90506060020160400160208101906102b49190610b00565b6001600160a01b031681526020018484848181106102d4576102d4610aea565b90506060020160400160208101906102ec9190610b00565b6001600160a01b0316633943380c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610329573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061034d9190610b1b565b63ffffffff16815260200184848481811061036a5761036a610aea565b90506060020160400160208101906103829190610b00565b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103e39190610b41565b60ff1681526020018484848181106103fd576103fd610aea565b90506060020160400160208101906104159190610b00565b6001600160a01b0316637284e4166040518163ffffffff1660e01b8152600401600060405180830381865afa158015610452573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261047a9190810190610b7a565b905260008085858581811061049157610491610aea565b6104a79260206060909202019081019150610b00565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008585858181106104db576104db610aea565b90506060020160200160208101906104f39190610b00565b6001600160a01b039081168252602080830193909352604091820160002084518154948601519386015160ff16600160c01b0260ff60c01b1963ffffffff909516600160a01b026001600160c01b0319909616919093161793909317919091161781556060820151600182019061056a9082610cb1565b505050600101610277565b505050565b6001600160a01b0382811660009081526020818152604080832093851683529290529081205481908190819081906105df90600160a01b900463ffffffff167f000000000000000000000000ee5a4826068c5326a7f06fd6c7cbf816f096846c6107e9565b939b929a50909850965090945092505050565b6001600160a01b0382811660009081526020818152604080832093851683529290529081205461064f90600160a01b900463ffffffff167f000000000000000000000000ee5a4826068c5326a7f06fd6c7cbf816f096846c610842565b9392505050565b6001600160a01b0382811660009081526020818152604080832093851683529290529081205461064f90600160a01b900463ffffffff167f000000000000000000000000ee5a4826068c5326a7f06fd6c7cbf816f096846c610888565b6001600160a01b038083166000908152602081815260408083209385168352929052206001018054606091906106e890610c27565b80601f016020809104026020016040519081016040528092919081815260200182805461071490610c27565b80156107615780601f1061073657610100808354040283529160200191610761565b820191906000526020600020905b81548152906001019060200180831161074457829003601f168201915b5050505050905092915050565b6001600160a01b0383811660009081526020818152604080832093861683529290529081205481908190819081906107d5908790600160a01b900463ffffffff167f000000000000000000000000ee5a4826068c5326a7f06fd6c7cbf816f096846c6108ba565b939c929b5090995097509095509350505050565b6000806000806000806040518863c00000001760e01b600052604081600460008b5afa8061081657600080fd5b50805160209091015199604082901c995067ffffffffffffffff90911697508796508995509350505050565b6040516001600160e01b03196380000000841760e01b16602082015260009061087e908390602401604051602081830303815290604052610955565b60401c9392505050565b60006040518363400000001760e01b60005260408160046000865afa806108ae57600080fd5b50602001519392505050565b600080600080600061094261092d878963200000001760e01b8b6040516024016108f6919069ffffffffffffffffffff91909116815260200190565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610955565b604081901c9167ffffffffffffffff90911690565b9899909897508796508995509350505050565b6000604051602081845160208601875afa8061097057600080fd5b50519392505050565b80356001600160a01b038116811461099057600080fd5b919050565b600080604083850312156109a857600080fd5b6109b183610979565b91506109bf60208401610979565b90509250929050565b600080602083850312156109db57600080fd5b823567ffffffffffffffff808211156109f357600080fd5b818501915085601f830112610a0757600080fd5b813581811115610a1657600080fd5b866020606083028501011115610a2b57600080fd5b60209290920196919550909350505050565b60005b83811015610a58578181015183820152602001610a40565b50506000910152565b6020815260008251806020840152610a80816040850160208701610a3d565b601f01601f19169190910160400192915050565b600080600060608486031215610aa957600080fd5b610ab284610979565b9250610ac060208501610979565b9150604084013569ffffffffffffffffffff81168114610adf57600080fd5b809150509250925092565b634e487b7160e01b600052603260045260246000fd5b600060208284031215610b1257600080fd5b61064f82610979565b600060208284031215610b2d57600080fd5b815163ffffffff8116811461064f57600080fd5b600060208284031215610b5357600080fd5b815160ff8116811461064f57600080fd5b634e487b7160e01b600052604160045260246000fd5b600060208284031215610b8c57600080fd5b815167ffffffffffffffff80821115610ba457600080fd5b818401915084601f830112610bb857600080fd5b815181811115610bca57610bca610b64565b604051601f8201601f19908116603f01168101908382118183101715610bf257610bf2610b64565b81604052828152876020848701011115610c0b57600080fd5b610c1c836020830160208801610a3d565b979650505050505050565b600181811c90821680610c3b57607f821691505b602082108103610c5b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610575576000816000526020600020601f850160051c81016020861015610c8a5750805b601f850160051c820191505b81811015610ca957828155600101610c96565b505050505050565b815167ffffffffffffffff811115610ccb57610ccb610b64565b610cdf81610cd98454610c27565b84610c61565b602080601f831160018114610d145760008415610cfc5750858301515b600019600386901b1c1916600185901b178555610ca9565b600085815260208120601f198616915b82811015610d4357888601518255948401946001909101908401610d24565b5085821015610d615787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fea26469706673582212200e11dd68f1040a665e1e7b666169f3f182dbd58b69642c58fe2d0afc49604a3264736f6c63430008180033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000023bc561ea93063b0cd12b6e3c690d40c93e29692000000000000000000000000ee5a4826068c5326a7f06fd6c7cbf816f096846c
-----Decoded View---------------
Arg [0] : _owner (address): 0x23BC561ea93063B0cD12b6E3c690D40c93e29692
Arg [1] : _dataFeedStore (address): 0xeE5a4826068C5326a7f06fD6c7cBf816F096846c
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000023bc561ea93063b0cd12b6e3c690d40c93e29692
Arg [1] : 000000000000000000000000ee5a4826068c5326a7f06fd6c7cbf816f096846c
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ 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.