More Info
Private Name Tags
ContractCreator
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
107557884 | 599 days ago | 0 ETH | ||||
107557884 | 599 days ago | 0 ETH | ||||
107557884 | 599 days ago | 0 ETH | ||||
107557857 | 599 days ago | 0 ETH | ||||
107557857 | 599 days ago | 0 ETH | ||||
107557794 | 599 days ago | 0 ETH | ||||
107557794 | 599 days ago | 0 ETH | ||||
107557794 | 599 days ago | 0 ETH | ||||
107557451 | 599 days ago | 0 ETH | ||||
107555511 | 599 days ago | 0 ETH | ||||
107555511 | 599 days ago | 0 ETH | ||||
107555511 | 599 days ago | 0 ETH | ||||
107555511 | 599 days ago | 0 ETH | ||||
107552833 | 599 days ago | 0 ETH | ||||
107552833 | 599 days ago | 0 ETH | ||||
107552833 | 599 days ago | 0 ETH | ||||
107552833 | 599 days ago | 0 ETH | ||||
107552833 | 599 days ago | 0 ETH | ||||
107551066 | 599 days ago | 0 ETH | ||||
107551066 | 599 days ago | 0 ETH | ||||
107551066 | 599 days ago | 0 ETH | ||||
107551066 | 599 days ago | 0 ETH | ||||
107551066 | 599 days ago | 0 ETH | ||||
107551066 | 599 days ago | 0 ETH | ||||
107551066 | 599 days ago | 0 ETH |
Loading...
Loading
Contract Name:
AddressProvider
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity 0.8.9; import "@openzeppelin/contracts/proxy/utils/Initializable.sol"; import "../interfaces/core/IAddressProvider.sol"; contract AddressProvider is IAddressProvider, Initializable { /// @notice The governor account address public governor; /// @notice The proposed governor account. Becomes the new governor after acceptance address public proposedGovernor; /// @notice The PriceProvidersAggregator contract IPriceProvidersAggregator public override providersAggregator; /// @notice The StableCoinProvider contract IStableCoinProvider public override stableCoinProvider; /// @notice Emitted when providers aggregator is updated event ProvidersAggregatorUpdated( IPriceProvidersAggregator oldProvidersAggregator, IPriceProvidersAggregator newProvidersAggregator ); /// @notice Emitted when stable coin provider is updated event StableCoinProviderUpdated( IStableCoinProvider oldStableCoinProvider, IStableCoinProvider newStableCoinProvider ); /// @notice Emitted when governor is updated event UpdatedGovernor(address indexed previousGovernor, address indexed proposedGovernor); /** * @dev Throws if called by any account other than the governor. */ modifier onlyGovernor() { require(governor == msg.sender, "not-governor"); _; } function initialize(address governor_) external initializer { governor = governor_; emit UpdatedGovernor(address(0), governor_); } /** * @dev Allows new governor to accept governorship of the contract. */ function acceptGovernorship() external { require(msg.sender == proposedGovernor, "not-the-proposed-governor"); emit UpdatedGovernor(governor, proposedGovernor); governor = proposedGovernor; proposedGovernor = address(0); } /** * @dev Transfers governorship of the contract to a new account (`proposedGovernor`). * Can only be called by the current owner. */ function transferGovernorship(address _proposedGovernor) external onlyGovernor { require(_proposedGovernor != address(0), "proposed-governor-is-zero"); proposedGovernor = _proposedGovernor; } /** * @notice Update PriceProvidersAggregator contract */ function updateProvidersAggregator(IPriceProvidersAggregator providersAggregator_) external onlyGovernor { require(address(providersAggregator_) != address(0), "address-is-null"); emit ProvidersAggregatorUpdated(providersAggregator, providersAggregator_); providersAggregator = providersAggregator_; } /** * @notice Update StableCoinProvider contract */ function updateStableCoinProvider(IStableCoinProvider stableCoinProvider_) external onlyGovernor { emit StableCoinProviderUpdated(stableCoinProvider, stableCoinProvider_); stableCoinProvider = stableCoinProvider_; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (proxy/utils/Initializable.sol) pragma solidity ^0.8.2; import "../../utils/Address.sol"; /** * @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] * ``` * contract MyToken is ERC20Upgradeable { * function initialize() initializer public { * __ERC20_init("MyToken", "MTK"); * } * } * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable { * function initializeV2() reinitializer(2) public { * __ERC20Permit_init("MyToken"); * } * } * ``` * * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}. * * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity. * * [CAUTION] * ==== * Avoid leaving a contract uninitialized. * * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed: * * [.hljs-theme-light.nopadding] * ``` * /// @custom:oz-upgrades-unsafe-allow constructor * constructor() { * _disableInitializers(); * } * ``` * ==== */ abstract contract Initializable { /** * @dev Indicates that the contract has been initialized. * @custom:oz-retyped-from bool */ uint8 private _initialized; /** * @dev Indicates that the contract is in the process of being initialized. */ bool private _initializing; /** * @dev Triggered when the contract has been initialized or reinitialized. */ event Initialized(uint8 version); /** * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope, * `onlyInitializing` functions can be used to initialize parent contracts. Equivalent to `reinitializer(1)`. */ modifier initializer() { bool isTopLevelCall = _setInitializedVersion(1); if (isTopLevelCall) { _initializing = true; } _; if (isTopLevelCall) { _initializing = false; emit Initialized(1); } } /** * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be * used to initialize parent contracts. * * `initializer` is equivalent to `reinitializer(1)`, so a reinitializer may be used after the original * initialization step. This is essential to configure modules that are added through upgrades and that require * initialization. * * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in * a contract, executing them in the right order is up to the developer or operator. */ modifier reinitializer(uint8 version) { bool isTopLevelCall = _setInitializedVersion(version); if (isTopLevelCall) { _initializing = true; } _; if (isTopLevelCall) { _initializing = false; emit Initialized(version); } } /** * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the * {initializer} and {reinitializer} modifiers, directly or indirectly. */ modifier onlyInitializing() { require(_initializing, "Initializable: contract is not initializing"); _; } /** * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call. * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized * to any version. It is recommended to use this to lock implementation contracts that are designed to be called * through proxies. */ function _disableInitializers() internal virtual { _setInitializedVersion(type(uint8).max); } function _setInitializedVersion(uint8 version) private returns (bool) { // If the contract is initializing we ignore whether _initialized is set in order to support multiple // inheritance patterns, but we only do this in the context of a constructor, and for the lowest level // of initializers, because in other contexts the contract may have been reentered. if (_initializing) { require( version == 1 && !Address.isContract(address(this)), "Initializable: contract is already initialized" ); return false; } else { require(_initialized < version, "Initializable: contract is already initialized"); _initialized = version; return true; } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @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 * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT pragma solidity 0.8.9; import "./IStableCoinProvider.sol"; import "./IPriceProvidersAggregator.sol"; interface IAddressProvider { function governor() external view returns (address); function providersAggregator() external view returns (IPriceProvidersAggregator); function stableCoinProvider() external view returns (IStableCoinProvider); }
// SPDX-License-Identifier: MIT pragma solidity 0.8.9; interface IPriceProvider { /** * @notice Get USD (or equivalent) price of an asset * @param token_ The address of asset * @return _priceInUsd The USD price * @return _lastUpdatedAt Last updated timestamp */ function getPriceInUsd(address token_) external view returns (uint256 _priceInUsd, uint256 _lastUpdatedAt); /** * @notice Get quote * @param tokenIn_ The address of assetIn * @param tokenOut_ The address of assetOut * @param amountIn_ Amount of input token * @return _amountOut Amount out * @return _lastUpdatedAt Last updated timestamp */ function quote( address tokenIn_, address tokenOut_, uint256 amountIn_ ) external view returns (uint256 _amountOut, uint256 _lastUpdatedAt); /** * @notice Get quote in USD (or equivalent) amount * @param token_ The address of assetIn * @param amountIn_ Amount of input token. * @return amountOut_ Amount in USD * @return _lastUpdatedAt Last updated timestamp */ function quoteTokenToUsd(address token_, uint256 amountIn_) external view returns (uint256 amountOut_, uint256 _lastUpdatedAt); /** * @notice Get quote from USD (or equivalent) amount to amount of token * @param token_ The address of assetOut * @param amountIn_ Input amount in USD * @return _amountOut Output amount of token * @return _lastUpdatedAt Last updated timestamp */ function quoteUsdToToken(address token_, uint256 amountIn_) external view returns (uint256 _amountOut, uint256 _lastUpdatedAt); }
// SPDX-License-Identifier: MIT pragma solidity 0.8.9; import "../../libraries/DataTypes.sol"; import "./IPriceProvider.sol"; /** * @notice PriceProvidersAggregator interface * @dev Worth noting that the `_lastUpdatedAt` logic depends on the underlying price provider. In summary: * ChainLink: returns the last updated date from the aggregator * UniswapV2: returns the date of the latest pair oracle update * UniswapV3: assumes that the price is always updated (returns block.timestamp) * Flux: returns the last updated date from the aggregator * Umbrella (FCD): returns the last updated date returned from their oracle contract * Umbrella (Passport): returns the date of the latest pallet submission * Anytime that a quote performs more than one query, it uses the oldest date as the `_lastUpdatedAt`. * See more: https://github.com/bloqpriv/one-oracle/issues/64 */ interface IPriceProvidersAggregator { /** * @notice Get USD (or equivalent) price of an asset * @param provider_ The price provider to get quote from * @param token_ The address of asset * @return _priceInUsd The USD price * @return _lastUpdatedAt Last updated timestamp */ function getPriceInUsd(DataTypes.Provider provider_, address token_) external view returns (uint256 _priceInUsd, uint256 _lastUpdatedAt); /** * @notice Provider Providers' mapping */ function priceProviders(DataTypes.Provider provider_) external view returns (IPriceProvider _priceProvider); /** * @notice Get quote * @param provider_ The price provider to get quote from * @param tokenIn_ The address of assetIn * @param tokenOut_ The address of assetOut * @param amountIn_ Amount of input token * @return _amountOut Amount out * @return _lastUpdatedAt Last updated timestamp */ function quote( DataTypes.Provider provider_, address tokenIn_, address tokenOut_, uint256 amountIn_ ) external view returns (uint256 _amountOut, uint256 _lastUpdatedAt); /** * @notice Get quote * @dev If providers aren't the same, uses native token as "bridge" * @param providerIn_ The price provider to get quote for the tokenIn * @param tokenIn_ The address of assetIn * @param providerOut_ The price provider to get quote for the tokenOut * @param tokenOut_ The address of assetOut * @param amountIn_ Amount of input token * @return _amountOut Amount out * @return _lastUpdatedAt Last updated timestamp */ function quote( DataTypes.Provider providerIn_, address tokenIn_, DataTypes.Provider providerOut_, address tokenOut_, uint256 amountIn_ ) external view returns (uint256 _amountOut, uint256 _lastUpdatedAt); /** * @notice Get quote in USD (or equivalent) amount * @param provider_ The price provider to get quote from * @param token_ The address of assetIn * @param amountIn_ Amount of input token. * @return amountOut_ Amount in USD * @return _lastUpdatedAt Last updated timestamp */ function quoteTokenToUsd( DataTypes.Provider provider_, address token_, uint256 amountIn_ ) external view returns (uint256 amountOut_, uint256 _lastUpdatedAt); /** * @notice Get quote from USD (or equivalent) amount to amount of token * @param provider_ The price provider to get quote from * @param token_ The address of assetOut * @param amountIn_ Input amount in USD * @return _amountOut Output amount of token * @return _lastUpdatedAt Last updated timestamp */ function quoteUsdToToken( DataTypes.Provider provider_, address token_, uint256 amountIn_ ) external view returns (uint256 _amountOut, uint256 _lastUpdatedAt); /** * @notice Set a price provider * @dev Administrative function * @param provider_ The provider (from enum) * @param priceProvider_ The price provider contract */ function setPriceProvider(DataTypes.Provider provider_, IPriceProvider priceProvider_) external; }
// SPDX-License-Identifier: MIT pragma solidity 0.8.9; interface IStableCoinProvider { /** * @notice Return the stable coin if pegged * @dev Check price relation between both stable coins and revert if peg is too loose * @return _stableCoin The primary stable coin if pass all checks */ function getStableCoinIfPegged() external view returns (address _stableCoin); /** * @notice Convert given amount of stable coin to USD representation (18 decimals) */ function toUsdRepresentation(uint256 stableCoinAmount_) external view returns (uint256 _usdAmount); }
// SPDX-License-Identifier: MIT pragma solidity 0.8.9; library DataTypes { /** * @notice Price providers enumeration */ enum Provider { NONE, CHAINLINK, UNISWAP_V3, UNISWAP_V2, SUSHISWAP, TRADERJOE, PANGOLIN, QUICKSWAP, UMBRELLA_FIRST_CLASS, UMBRELLA_PASSPORT, FLUX } enum ExchangeType { UNISWAP_V2, SUSHISWAP, TRADERJOE, PANGOLIN, QUICKSWAP, UNISWAP_V3 } enum SwapType { EXACT_INPUT, EXACT_OUTPUT } }
{ "evmVersion": "london", "libraries": {}, "metadata": { "bytecodeHash": "ipfs", "useLiteralContent": true }, "optimizer": { "enabled": true, "runs": 5000 }, "remappings": [], "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract IPriceProvidersAggregator","name":"oldProvidersAggregator","type":"address"},{"indexed":false,"internalType":"contract IPriceProvidersAggregator","name":"newProvidersAggregator","type":"address"}],"name":"ProvidersAggregatorUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract IStableCoinProvider","name":"oldStableCoinProvider","type":"address"},{"indexed":false,"internalType":"contract IStableCoinProvider","name":"newStableCoinProvider","type":"address"}],"name":"StableCoinProviderUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousGovernor","type":"address"},{"indexed":true,"internalType":"address","name":"proposedGovernor","type":"address"}],"name":"UpdatedGovernor","type":"event"},{"inputs":[],"name":"acceptGovernorship","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"governor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"governor_","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"proposedGovernor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"providersAggregator","outputs":[{"internalType":"contract IPriceProvidersAggregator","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stableCoinProvider","outputs":[{"internalType":"contract IStableCoinProvider","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_proposedGovernor","type":"address"}],"name":"transferGovernorship","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IPriceProvidersAggregator","name":"providersAggregator_","type":"address"}],"name":"updateProvidersAggregator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IStableCoinProvider","name":"stableCoinProvider_","type":"address"}],"name":"updateStableCoinProvider","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50610951806100206000396000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c80638a11a37011610076578063b6aa515b1161005b578063b6aa515b1461017f578063c4d66de814610192578063f3b27bc3146101a557600080fd5b80638a11a3701461013f5780638f8e162c1461015f57600080fd5b80630bb0b89d146100a85780630c340a24146100bd5780632082615f1461010c57806320adc8131461012c575b600080fd5b6100bb6100b63660046108f7565b6101ad565b005b6000546100e39062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6003546100e39073ffffffffffffffffffffffffffffffffffffffff1681565b6100bb61013a3660046108f7565b61031d565b6001546100e39073ffffffffffffffffffffffffffffffffffffffff1681565b6002546100e39073ffffffffffffffffffffffffffffffffffffffff1681565b6100bb61018d3660046108f7565b610425565b6100bb6101a03660046108f7565b61053c565b6100bb610659565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff16331461021f5760405162461bcd60e51b815260206004820152600c60248201527f6e6f742d676f7665726e6f72000000000000000000000000000000000000000060448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166102825760405162461bcd60e51b815260206004820152600f60248201527f616464726573732d69732d6e756c6c00000000000000000000000000000000006044820152606401610216565b6002546040805173ffffffffffffffffffffffffffffffffffffffff928316815291831660208301527fbcc4066cae087918db8d7695e80f5dc69eb597f904c8d513f27f2d04eed8f7ca910160405180910390a1600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff16331461038a5760405162461bcd60e51b815260206004820152600c60248201527f6e6f742d676f7665726e6f7200000000000000000000000000000000000000006044820152606401610216565b6003546040805173ffffffffffffffffffffffffffffffffffffffff928316815291831660208301527fae68fa83120514f5b4621d968a310169ce214a66994debd1638e3ff3ec61dc9d910160405180910390a1600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633146104925760405162461bcd60e51b815260206004820152600c60248201527f6e6f742d676f7665726e6f7200000000000000000000000000000000000000006044820152606401610216565b73ffffffffffffffffffffffffffffffffffffffff81166104f55760405162461bcd60e51b815260206004820152601960248201527f70726f706f7365642d676f7665726e6f722d69732d7a65726f000000000000006044820152606401610216565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60006105486001610780565b9050801561057d57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff166201000073ffffffffffffffffffffffffffffffffffffffff85169081029190911782556040519091907fd4459d5b8b913cab0244230fd9b1c08b6ceace7fe9230e60d0f74cbffdf849d0908290a3801561065557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b60015473ffffffffffffffffffffffffffffffffffffffff1633146106c05760405162461bcd60e51b815260206004820152601960248201527f6e6f742d7468652d70726f706f7365642d676f7665726e6f72000000000000006044820152606401610216565b6001546000805460405173ffffffffffffffffffffffffffffffffffffffff9384169362010000909204909116917fd4459d5b8b913cab0244230fd9b1c08b6ceace7fe9230e60d0f74cbffdf849d091a360018054600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff1673ffffffffffffffffffffffffffffffffffffffff831662010000021790557fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60008054610100900460ff161561081d578160ff1660011480156107a35750303b155b6108155760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610216565b506000919050565b60005460ff80841691161061089a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610216565b50600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff92909216919091179055600190565b73ffffffffffffffffffffffffffffffffffffffff811681146108f457600080fd5b50565b60006020828403121561090957600080fd5b8135610914816108d2565b939250505056fea2646970667358221220adf49d613e973c0250fe944b2797054eb20a4f1933e6a9d6d6efe55b0279eac964736f6c63430008090033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100a35760003560e01c80638a11a37011610076578063b6aa515b1161005b578063b6aa515b1461017f578063c4d66de814610192578063f3b27bc3146101a557600080fd5b80638a11a3701461013f5780638f8e162c1461015f57600080fd5b80630bb0b89d146100a85780630c340a24146100bd5780632082615f1461010c57806320adc8131461012c575b600080fd5b6100bb6100b63660046108f7565b6101ad565b005b6000546100e39062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6003546100e39073ffffffffffffffffffffffffffffffffffffffff1681565b6100bb61013a3660046108f7565b61031d565b6001546100e39073ffffffffffffffffffffffffffffffffffffffff1681565b6002546100e39073ffffffffffffffffffffffffffffffffffffffff1681565b6100bb61018d3660046108f7565b610425565b6100bb6101a03660046108f7565b61053c565b6100bb610659565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff16331461021f5760405162461bcd60e51b815260206004820152600c60248201527f6e6f742d676f7665726e6f72000000000000000000000000000000000000000060448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166102825760405162461bcd60e51b815260206004820152600f60248201527f616464726573732d69732d6e756c6c00000000000000000000000000000000006044820152606401610216565b6002546040805173ffffffffffffffffffffffffffffffffffffffff928316815291831660208301527fbcc4066cae087918db8d7695e80f5dc69eb597f904c8d513f27f2d04eed8f7ca910160405180910390a1600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff16331461038a5760405162461bcd60e51b815260206004820152600c60248201527f6e6f742d676f7665726e6f7200000000000000000000000000000000000000006044820152606401610216565b6003546040805173ffffffffffffffffffffffffffffffffffffffff928316815291831660208301527fae68fa83120514f5b4621d968a310169ce214a66994debd1638e3ff3ec61dc9d910160405180910390a1600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633146104925760405162461bcd60e51b815260206004820152600c60248201527f6e6f742d676f7665726e6f7200000000000000000000000000000000000000006044820152606401610216565b73ffffffffffffffffffffffffffffffffffffffff81166104f55760405162461bcd60e51b815260206004820152601960248201527f70726f706f7365642d676f7665726e6f722d69732d7a65726f000000000000006044820152606401610216565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60006105486001610780565b9050801561057d57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff166201000073ffffffffffffffffffffffffffffffffffffffff85169081029190911782556040519091907fd4459d5b8b913cab0244230fd9b1c08b6ceace7fe9230e60d0f74cbffdf849d0908290a3801561065557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b60015473ffffffffffffffffffffffffffffffffffffffff1633146106c05760405162461bcd60e51b815260206004820152601960248201527f6e6f742d7468652d70726f706f7365642d676f7665726e6f72000000000000006044820152606401610216565b6001546000805460405173ffffffffffffffffffffffffffffffffffffffff9384169362010000909204909116917fd4459d5b8b913cab0244230fd9b1c08b6ceace7fe9230e60d0f74cbffdf849d091a360018054600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff1673ffffffffffffffffffffffffffffffffffffffff831662010000021790557fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60008054610100900460ff161561081d578160ff1660011480156107a35750303b155b6108155760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610216565b506000919050565b60005460ff80841691161061089a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610216565b50600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff92909216919091179055600190565b73ffffffffffffffffffffffffffffffffffffffff811681146108f457600080fd5b50565b60006020828403121561090957600080fd5b8135610914816108d2565b939250505056fea2646970667358221220adf49d613e973c0250fe944b2797054eb20a4f1933e6a9d6d6efe55b0279eac964736f6c63430008090033
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.