Overview
S Balance
S Value
$0.00More Info
Private Name Tags
ContractCreator
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
ChainlinkV3Oracle
Compiler Version
v0.8.28+commit.7893614a
Optimization Enabled:
Yes with 200 runs
Other Settings:
cancun EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity 0.8.28;import {Initializable} from "openzeppelin5-upgradeable/proxy/utils/Initializable.sol";import {IERC20Metadata} from "openzeppelin5/token/ERC20/extensions/IERC20Metadata.sol";import {AggregatorV3Interface} from "chainlink/v0.8/interfaces/AggregatorV3Interface.sol";import {ISiloOracle} from "silo-core/contracts/interfaces/ISiloOracle.sol";import {OracleNormalization} from "../lib/OracleNormalization.sol";import {ChainlinkV3OracleConfig} from "./ChainlinkV3OracleConfig.sol";import {IChainlinkV3Oracle} from "../interfaces/IChainlinkV3Oracle.sol";contract ChainlinkV3Oracle is IChainlinkV3Oracle, ISiloOracle, Initializable {ChainlinkV3OracleConfig public oracleConfig;/// @custom:oz-upgrades-unsafe-allow constructorconstructor() {_disableInitializers();}/// @notice validation of config is checked in factory, therefore you should not deploy and initialize directly/// use factory always.function initialize(ChainlinkV3OracleConfig _configAddress) external virtual initializer {oracleConfig = _configAddress;emit ChainlinkV3ConfigDeployed(_configAddress);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (proxy/utils/Initializable.sol)pragma solidity ^0.8.20;/*** @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed* behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an* external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer* function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.** The initialization functions use a version number. Once a version number is used, it is consumed and cannot be* reused. This mechanism prevents re-execution of each "step" but allows the creation of new initialization steps in* case an upgrade adds a module that needs to be initialized.** For example:** [.hljs-theme-light.nopadding]* ```solidity* contract MyToken is ERC20Upgradeable {* function initialize() initializer public {* __ERC20_init("MyToken", "MTK");* }* }** contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Metadata.sol)pragma solidity ^0.8.20;import {IERC20} from "../IERC20.sol";/*** @dev Interface for the optional metadata functions from the ERC-20 standard.*/interface IERC20Metadata is IERC20 {/*** @dev Returns the name of the token.*/function name() external view returns (string memory);/*** @dev Returns the symbol of the token.*/function symbol() external view returns (string memory);/*** @dev Returns the decimals places of the token.*/function decimals() external view returns (uint8);}
12345678910111213141516171819// SPDX-License-Identifier: MITpragma 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()externalviewreturns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound);}
12345678910111213141516171819// SPDX-License-Identifier: MITpragma solidity >=0.5.0;interface ISiloOracle {/// @notice Hook function to call before `quote` function reads price/// @dev This hook function can be used to change state right before the price is read. For example it can be used/// for curve read only reentrancy protection. In majority of implementations this will be an empty function./// WARNING: reverts are propagated to Silo so if `beforeQuote` reverts, Silo reverts as well./// @param _baseToken Address of priced tokenfunction beforeQuote(address _baseToken) external;/// @return quoteAmount Returns quote price for _baseAmount of _baseToken/// @param _baseAmount Amount of priced token/// @param _baseToken Address of priced tokenfunction quote(uint256 _baseAmount, address _baseToken) external view returns (uint256 quoteAmount);/// @return address of token in which quote (price) is denominatedfunction quoteToken() external view returns (address);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity ^0.8.20;import {IERC20Metadata} from "openzeppelin5/token/ERC20/extensions/IERC20Metadata.sol";import {TokenHelper} from "silo-core/contracts/lib/TokenHelper.sol";/// @notice please read carefully unchecked comments, there are some requirements tht must be met in order to not/// over/under flow/// @dev Rounding error policy./// We're always rounding down by using build-in solidity way for division.////// During normalization we're executing division by `_normalizationDivider` (unless there is multiplicator)/// and `_secondPrice` (in case second price exist). You can expect rounding errors to be in exclusive range of (0, 1)/// when doing division. What does it means? This means, that you can be short by up to 1 wei on result./// eg. when normalising 12_345 (value with 3 decimals) to 2 decimals representation you lose last digit and end result/// will be 12_34./// What are consequences for protocol?/// Eg. if 987 of tokens A is worth 12.34 tokens B (after normalization), by losing 0.005 we made tokens A worth a bit/// more than they really are. If we would round up, then tokens A would be a bit less expensive./// Keep in mind we are talking tiny values. There is no argument that can tell which approach is correct./// Considering that prices themselves are changing constantly (if you think about it, they are just random numbers/// close to previous value) and even TWAP price can be manipulated up to some level, if we compare this to rounding/// error, the rounding error has no meaning at all./// Most important part is: how are we using prices in Silo and how rounding error affects the system?/// We're using prices to calculate LTV. We're deciding how much of token you can borrow but once you borrow you need to/// repay that amount (plus interest). Price of the token has no influence on how much you repay.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity 0.8.28;import {IERC20Metadata} from "openzeppelin5/token/ERC20/extensions/IERC20Metadata.sol";import {AggregatorV3Interface} from "chainlink/v0.8/interfaces/AggregatorV3Interface.sol";import {ISiloOracle} from "silo-core/contracts/interfaces/ISiloOracle.sol";import {IChainlinkV3Oracle} from "../interfaces/IChainlinkV3Oracle.sol";import {Layer1OracleConfig} from "../_common/Layer1OracleConfig.sol";contract ChainlinkV3OracleConfig is Layer1OracleConfig {/// @dev Chainlink aggregatorAggregatorV3Interface internal immutable _AGGREGATOR; // solhint-disable-line var-name-mixedcase/// @dev secondary Chainlink aggregator to convert price to quoteAggregatorV3Interface internal immutable _SECONDARY_AGGREGATOR; // solhint-disable-line var-name-mixedcase/// @dev Threshold used to determine if the price returned by the _SECONDARY_AGGREGATOR is validuint256 internal immutable _SECONDARY_HEARTBEAT; // solhint-disable-line var-name-mixedcase/// @dev this can be set to true to convert primary price into price denominated in quote/// assuming that both AGGREGATORS providing price in the same tokenbool internal immutable _CONVERT_TO_QUOTE; // solhint-disable-line var-name-mixedcase/// @dev all verification should be done by factoryconstructor(IChainlinkV3Oracle.ChainlinkV3DeploymentConfig memory _config)Layer1OracleConfig(
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity >=0.8.0;import {IERC20Metadata} from "openzeppelin5/token/ERC20/extensions/IERC20Metadata.sol";import {AggregatorV3Interface} from "chainlink/v0.8/interfaces/AggregatorV3Interface.sol";import {ChainlinkV3OracleConfig} from "../chainlinkV3/ChainlinkV3OracleConfig.sol";interface IChainlinkV3Oracle {/// @dev config based on which new oracle will be deployed/// @notice there is no way to check if aggregators match tokens, so it is users job to verify config./// @param primaryAggregator used to read price from chainlink, if it can not provide price in quote token,/// then you have to setup secondary one that will do the job/// @param secondaryAggregator if set, it is used translate primary price into quote price eg:/// primary price is ABC/USD and secondary is ETH/USD, then result will be price in ABC/ETH/// @param baseToken base token address, it must have decimals() method available/// @param quoteToken quote toke address, it must have decimals() method available/// @param primaryHeartbeat heartbeat of primary price/// @param secondaryHeartbeat heartbeat of secondary price/// @param normalizationDivider divider that will be used in oracle to normalize price/// @param normalizationMultiplier multiplier that will be used in oracle to normalize pricestruct ChainlinkV3DeploymentConfig {IERC20Metadata baseToken;IERC20Metadata quoteToken;AggregatorV3Interface primaryAggregator;uint32 primaryHeartbeat;AggregatorV3Interface secondaryAggregator;
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol)pragma solidity ^0.8.20;/*** @dev Interface of the ERC-20 standard as defined in the ERC.*/interface IERC20 {/*** @dev Emitted when `value` tokens are moved from one account (`from`) to* another (`to`).** Note that `value` may be zero.*/event Transfer(address indexed from, address indexed to, uint256 value);/*** @dev Emitted when the allowance of a `spender` for an `owner` is set by* a call to {approve}. `value` is the new allowance.*/event Approval(address indexed owner, address indexed spender, uint256 value);/*** @dev Returns the value of tokens in existence.*/
1234567891011121314151617181920212223242526// SPDX-License-Identifier: BUSL-1.1pragma solidity ^0.8.28;import {IERC20Metadata} from "openzeppelin5/token/ERC20/extensions/IERC20Metadata.sol";import {IsContract} from "./IsContract.sol";library TokenHelper {uint256 private constant _BYTES32_SIZE = 32;error TokenIsNotAContract();function assertAndGetDecimals(address _token) internal view returns (uint256) {(bool hasMetadata, bytes memory data) =_tokenMetadataCall(_token, abi.encodeCall(IERC20Metadata.decimals, ()));// decimals() is optional in the ERC20 standard, so if metadata is not accessible// we assume there are no decimals and use 0.if (!hasMetadata) {return 0;}return abi.decode(data, (uint8));}/// @dev Returns the symbol for the provided ERC20 token.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity 0.8.28;import {IERC20Metadata} from "openzeppelin5/token/ERC20/extensions/IERC20Metadata.sol";/// @notice to keep config contract size low (this is the one that will be deployed each time)/// factory contract take over verification. You should not deploy or use config that was not created by factory./// @dev This is common config for Layer1 oraclesabstract contract Layer1OracleConfig {/// @dev price must be updated at least once every `_HEARTBEAT` seconds, otherwise something is wronguint256 internal immutable _HEARTBEAT; // solhint-disable-line var-name-mixedcase/// @dev constant used for normalising priceuint256 internal immutable _DECIMALS_NORMALIZATION_DIVIDER; // solhint-disable-line var-name-mixedcase/// @dev constant used for normalising priceuint256 internal immutable _DECIMALS_NORMALIZATION_MULTIPLIER; // solhint-disable-line var-name-mixedcaseIERC20Metadata internal immutable _BASE_TOKEN; // solhint-disable-line var-name-mixedcaseIERC20Metadata internal immutable _QUOTE_TOKEN; // solhint-disable-line var-name-mixedcase/// @dev all verification should be done by factoryconstructor(IERC20Metadata _baseToken,IERC20Metadata _quoteToken,uint256 _heartbeat,
1234567891011121314151617181920212223242526// SPDX-License-Identifier: BUSL-1.1pragma solidity ^0.8.24;library IsContract {/*** @dev Returns true if `account` is a contract.** [IMPORTANT]* ====* It is unsafe to assume that an address for which this function returns* false is an externally-owned account (EOA) and not a contract.** Among others, `isContract` will return false for the following* types of addresses:** - an externally-owned account* - a contract in construction* - an address where a contract will be created* - an address where a contract lived, but was destroyed** Furthermore, `isContract` will also return true if the target contract within* the same transaction is already scheduled for destruction by `SELFDESTRUCT`,* which only has an effect at the end of a transaction.* ====** [IMPORTANT]
1234567891011121314151617181920212223242526{"remappings": ["forge-std/=gitmodules/forge-std/src/","silo-foundry-utils/=gitmodules/silo-foundry-utils/contracts/","properties/=gitmodules/crytic/properties/contracts/","silo-core/=silo-core/","silo-oracles/=silo-oracles/","silo-vaults/=silo-vaults/","ve-silo/=ve-silo/","@openzeppelin/=gitmodules/openzeppelin-contracts-5/contracts/","morpho-blue/=gitmodules/morpho-blue/src/","openzeppelin5/=gitmodules/openzeppelin-contracts-5/contracts/","openzeppelin5-upgradeable/=gitmodules/openzeppelin-contracts-upgradeable-5/contracts/","chainlink/=gitmodules/chainlink/contracts/src/","chainlink-ccip/=gitmodules/chainlink-ccip/contracts/src/","uniswap/=gitmodules/uniswap/","@uniswap/v3-core/=gitmodules/uniswap/v3-core/","balancer-labs/v2-solidity-utils/=external/balancer-v2-monorepo/pkg/solidity-utils/contracts/","balancer-labs/v2-interfaces/=external/balancer-v2-monorepo/pkg/interfaces/contracts/","balancer-labs/v2-liquidity-mining/=external/balancer-v2-monorepo/pkg/liquidity-mining/contracts/","pyth-sdk-solidity/=gitmodules/pyth-sdk-solidity/target_chains/ethereum/sdk/solidity/","@balancer-labs/=node_modules/@balancer-labs/","@ensdomains/=node_modules/@ensdomains/","@openzeppelin/contracts-upgradeable/=gitmodules/openzeppelin-contracts-upgradeable-5/contracts/","@openzeppelin/contracts/=gitmodules/openzeppelin-contracts-5/contracts/","@solidity-parser/=node_modules/@solidity-parser/",
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AddressZero","type":"error"},{"inputs":[],"name":"AggregatorsAreTheSame","type":"error"},{"inputs":[],"name":"AssetNotSupported","type":"error"},{"inputs":[],"name":"BaseAmountOverflow","type":"error"},{"inputs":[],"name":"HugeDivider","type":"error"},{"inputs":[],"name":"HugeMultiplier","type":"error"},{"inputs":[],"name":"InvalidEthAggregatorDecimals","type":"error"},{"inputs":[],"name":"InvalidEthHeartbeat","type":"error"},{"inputs":[],"name":"InvalidHeartbeat","type":"error"},{"inputs":[],"name":"InvalidInitialization","type":"error"},{"inputs":[],"name":"InvalidPrice","type":"error"},{"inputs":[],"name":"InvalidSecondPrice","type":"error"},{"inputs":[],"name":"MultiplierAndDividerZero","type":"error"},{"inputs":[],"name":"NotInitializing","type":"error"},{"inputs":[],"name":"QuoteTokenNotMatchEth","type":"error"},{"inputs":[],"name":"TokensAreTheSame","type":"error"},{"inputs":[],"name":"ZeroQuote","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":true,"internalType":"contract AggregatorV3Interface","name":"aggregator","type":"address"}],"name":"AggregatorDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract ChainlinkV3OracleConfig","name":"configAddress","type":"address"}],"name":"ChainlinkV3ConfigDeployed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint64","name":"version","type":"uint64"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":true,"internalType":"contract AggregatorV3Interface","name":"aggregator","type":"address"},{"indexed":false,"internalType":"bool","name":"convertToQuote","type":"bool"}],"name":"NewAggregator","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"heartbeat","type":"uint256"}],"name":"NewHeartbeat","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"heartbeat","type":"uint256"}],"name":"NewQuoteAggregatorHeartbeat","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"beforeQuote","outputs":[],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bool","name":"_primary","type":"bool"}],"name":"getAggregatorPrice","outputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"uint256","name":"price","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract ChainlinkV3OracleConfig","name":"_configAddress","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"oracleConfig","outputs":[{"internalType":"contract ChainlinkV3OracleConfig","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_baseAmount","type":"uint256"},{"internalType":"address","name":"_baseToken","type":"address"}],"name":"quote","outputs":[{"internalType":"uint256","name":"quoteAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"quoteToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
6080604052348015600e575f5ffd5b5060156019565b60c9565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560685760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c65780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6108d7806100d65f395ff3fe608060405234801561000f575f5ffd5b5060043610610060575f3560e01c806313b0be3314610064578063217a4b701461008a578063324b8d6e146100aa578063c4d66de8146100bc578063c71ed1e6146100d1578063f9fa619a146100fb575b5f5ffd5b61007761007236600461069f565b61010c565b6040519081526020015b60405180910390f35b6100926102d6565b6040516001600160a01b039091168152602001610081565b5f54610092906001600160a01b031681565b6100cf6100ca3660046106cd565b61034c565b005b6100e46100df3660046106fc565b6104a1565b604080519215158352602083019190915201610081565b6100cf6101093660046106cd565b50565b5f8054604080516330fe427560e21b8152905183926001600160a01b03169163c3f909d4916004808301926101209291908290030181865afa158015610154573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101789190610768565b90508060c001516001600160a01b0316836001600160a01b0316146101b05760405163981a2a2b60e01b815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff8411156101e157604051631df5999960e21b815260040160405180910390fd5b5f5f6101f4835f01518460400151610551565b91509150816102155760405162bfc92160e01b815260040160405180910390fd5b82610100015161025d57610233868285608001518660a001516105f5565b9350835f03610255576040516301a7e28b60e61b815260040160405180910390fd5b5050506102d0565b5f5f61027185602001518660600151610551565b915091508161029357604051637c5ab47160e01b815260040160405180910390fd5b6102a888848388608001518960a0015161062f565b9550855f036102ca576040516301a7e28b60e61b815260040160405180910390fd5b50505050505b92915050565b5f8054604080516330fe427560e21b8152905183926001600160a01b03169163c3f909d4916004808301926101209291908290030181865afa15801561031e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103429190610768565b60e0015192915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff165f811580156103915750825b90505f8267ffffffffffffffff1660011480156103ad5750303b155b9050811580156103bb575080155b156103d95760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561040357845460ff60401b1916600160401b1785555b5f80546001600160a01b0319166001600160a01b0388169081179091556040519081527f077847d1fadf50041a730385b3d6b2de1cdeb5e078cb933fb091003e7f10e07a9060200160405180910390a1831561049957845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b5f5f5f5f5f9054906101000a90046001600160a01b03166001600160a01b031663c3f909d46040518163ffffffff1660e01b815260040161012060405180830381865afa1580156104f4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105189190610768565b9050836105365761053181602001518260600151610551565b610547565b610547815f01518260400151610551565b9250925050915091565b5f5f5f5f856001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610591573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105b5919061081c565b509350509250505f85420390505f831380156105d057508082115b156105e457600183945094505050506105ee565b5f5f945094505050505b9250929050565b5f815f0361061657828486028161060e5761060e61086a565b049050610627565b848402610623838261087e565b9150505b949350505050565b5f815f0361065f578383868802816106495761064961086a565b04816106575761065761086a565b049050610682565b85850261066c838261087e565b905084818161067d5761067d61086a565b049150505b95945050505050565b6001600160a01b0381168114610109575f5ffd5b5f5f604083850312156106b0575f5ffd5b8235915060208301356106c28161068b565b809150509250929050565b5f602082840312156106dd575f5ffd5b81356106e88161068b565b9392505050565b8015158114610109575f5ffd5b5f6020828403121561070c575f5ffd5b81356106e8816106ef565b604051610120810167ffffffffffffffff8111828210171561074757634e487b7160e01b5f52604160045260245ffd5b60405290565b80516107588161068b565b919050565b8051610758816106ef565b5f61012082840312801561077a575f5ffd5b50610783610717565b61078c8361074d565b815261079a6020840161074d565b602082015260408381015190820152606080840151908201526080808401519082015260a080840151908201526107d360c0840161074d565b60c08201526107e460e0840161074d565b60e08201526107f6610100840161075d565b6101008201529392505050565b805169ffffffffffffffffffff81168114610758575f5ffd5b5f5f5f5f5f60a08688031215610830575f5ffd5b61083986610803565b6020870151604088015160608901519297509095509350915061085e60808701610803565b90509295509295909350565b634e487b7160e01b5f52601260045260245ffd5b80820281158282048414176102d057634e487b7160e01b5f52601160045260245ffdfea264697066735822122086da21de5880bbb4feb19b5a0534d73302cfacd202e60b6f1d5458b01a3d99a964736f6c634300081c0033
Deployed Bytecode
0x608060405234801561000f575f5ffd5b5060043610610060575f3560e01c806313b0be3314610064578063217a4b701461008a578063324b8d6e146100aa578063c4d66de8146100bc578063c71ed1e6146100d1578063f9fa619a146100fb575b5f5ffd5b61007761007236600461069f565b61010c565b6040519081526020015b60405180910390f35b6100926102d6565b6040516001600160a01b039091168152602001610081565b5f54610092906001600160a01b031681565b6100cf6100ca3660046106cd565b61034c565b005b6100e46100df3660046106fc565b6104a1565b604080519215158352602083019190915201610081565b6100cf6101093660046106cd565b50565b5f8054604080516330fe427560e21b8152905183926001600160a01b03169163c3f909d4916004808301926101209291908290030181865afa158015610154573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101789190610768565b90508060c001516001600160a01b0316836001600160a01b0316146101b05760405163981a2a2b60e01b815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff8411156101e157604051631df5999960e21b815260040160405180910390fd5b5f5f6101f4835f01518460400151610551565b91509150816102155760405162bfc92160e01b815260040160405180910390fd5b82610100015161025d57610233868285608001518660a001516105f5565b9350835f03610255576040516301a7e28b60e61b815260040160405180910390fd5b5050506102d0565b5f5f61027185602001518660600151610551565b915091508161029357604051637c5ab47160e01b815260040160405180910390fd5b6102a888848388608001518960a0015161062f565b9550855f036102ca576040516301a7e28b60e61b815260040160405180910390fd5b50505050505b92915050565b5f8054604080516330fe427560e21b8152905183926001600160a01b03169163c3f909d4916004808301926101209291908290030181865afa15801561031e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103429190610768565b60e0015192915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff165f811580156103915750825b90505f8267ffffffffffffffff1660011480156103ad5750303b155b9050811580156103bb575080155b156103d95760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561040357845460ff60401b1916600160401b1785555b5f80546001600160a01b0319166001600160a01b0388169081179091556040519081527f077847d1fadf50041a730385b3d6b2de1cdeb5e078cb933fb091003e7f10e07a9060200160405180910390a1831561049957845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b5f5f5f5f5f9054906101000a90046001600160a01b03166001600160a01b031663c3f909d46040518163ffffffff1660e01b815260040161012060405180830381865afa1580156104f4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105189190610768565b9050836105365761053181602001518260600151610551565b610547565b610547815f01518260400151610551565b9250925050915091565b5f5f5f5f856001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610591573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105b5919061081c565b509350509250505f85420390505f831380156105d057508082115b156105e457600183945094505050506105ee565b5f5f945094505050505b9250929050565b5f815f0361061657828486028161060e5761060e61086a565b049050610627565b848402610623838261087e565b9150505b949350505050565b5f815f0361065f578383868802816106495761064961086a565b04816106575761065761086a565b049050610682565b85850261066c838261087e565b905084818161067d5761067d61086a565b049150505b95945050505050565b6001600160a01b0381168114610109575f5ffd5b5f5f604083850312156106b0575f5ffd5b8235915060208301356106c28161068b565b809150509250929050565b5f602082840312156106dd575f5ffd5b81356106e88161068b565b9392505050565b8015158114610109575f5ffd5b5f6020828403121561070c575f5ffd5b81356106e8816106ef565b604051610120810167ffffffffffffffff8111828210171561074757634e487b7160e01b5f52604160045260245ffd5b60405290565b80516107588161068b565b919050565b8051610758816106ef565b5f61012082840312801561077a575f5ffd5b50610783610717565b61078c8361074d565b815261079a6020840161074d565b602082015260408381015190820152606080840151908201526080808401519082015260a080840151908201526107d360c0840161074d565b60c08201526107e460e0840161074d565b60e08201526107f6610100840161075d565b6101008201529392505050565b805169ffffffffffffffffffff81168114610758575f5ffd5b5f5f5f5f5f60a08688031215610830575f5ffd5b61083986610803565b6020870151604088015160608901519297509095509350915061085e60808701610803565b90509295509295909350565b634e487b7160e01b5f52601260045260245ffd5b80820281158282048414176102d057634e487b7160e01b5f52601160045260245ffdfea264697066735822122086da21de5880bbb4feb19b5a0534d73302cfacd202e60b6f1d5458b01a3d99a964736f6c634300081c0033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 35 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.