Source Code
Overview
S Balance
0 S
More Info
ContractCreator
Loading...
Loading
Contract Name:
AaveOracle
Compiler Version
v0.7.6+commit.7338295f
Optimization Enabled:
Yes with 2000 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: agpl-3.0 pragma solidity 0.7.6; import {Ownable} from '../dependencies/openzeppelin/contracts/Ownable.sol'; import {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol'; import {IPriceOracleGetter} from '../interfaces/IPriceOracleGetter.sol'; import {IPriceFeed} from '../interfaces/IPriceFeed.sol'; import {SafeERC20} from '../dependencies/openzeppelin/contracts/SafeERC20.sol'; /// @title AaveOracle /// @author Aave /// @notice Proxy smart contract to get the price of an asset from a price source contract AaveOracle is IPriceOracleGetter, Ownable { using SafeERC20 for IERC20; event AssetSourceUpdated(address indexed asset, address indexed source); mapping(address => IPriceFeed) private assetsSources; /// @notice Constructor /// @param assets The addresses of the assets /// @param sources The address of the source of each asset constructor( address[] memory assets, address[] memory sources ) { _setAssetsSources(assets, sources); } /// @notice External function called by the Aave governance to set or replace sources of assets /// @param assets The addresses of the assets /// @param sources The address of the source of each asset function setAssetSources(address[] calldata assets, address[] calldata sources) external onlyOwner { _setAssetsSources(assets, sources); } /// @notice Internal function to set the sources for each asset /// @param assets The addresses of the assets /// @param sources The address of the source of each asset function _setAssetsSources(address[] memory assets, address[] memory sources) internal { require(assets.length == sources.length, 'INCONSISTENT_PARAMS_LENGTH'); for (uint256 i = 0; i < assets.length; i++) { assetsSources[assets[i]] = IPriceFeed(sources[i]); emit AssetSourceUpdated(assets[i], sources[i]); } } /// @notice Gets an asset price by address /// @dev All assets are priced relative to USD /// @param asset The asset address function updateAssetPrice(address asset) public override returns (uint256) { IPriceFeed source = assetsSources[asset]; return source.updatePrice(); } /// @notice Gets an asset price by address /// @dev All assets are priced relative to USD /// @param asset The asset address function getAssetPrice(address asset) public view override returns (uint256) { IPriceFeed source = assetsSources[asset]; return source.fetchPrice(); } /// @notice Gets a list of prices from a list of assets addresses /// @param assets The list of assets addresses function getAssetsPrices(address[] calldata assets) external view returns (uint256[] memory) { uint256[] memory prices = new uint256[](assets.length); for (uint256 i = 0; i < assets.length; i++) { prices[i] = getAssetPrice(assets[i]); } return prices; } /// @notice Gets the address of the source for an asset address /// @param asset The address of the asset /// @return address The address of the source function getSourceOfAsset(address asset) external view returns (address) { return address(assetsSources[asset]); } }
// SPDX-License-Identifier: agpl-3.0 pragma solidity 0.7.6; /** * @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 * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @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'); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{value: amount}(''); require(success, 'Address: unable to send value, recipient may have reverted'); } }
// SPDX-License-Identifier: MIT pragma solidity 0.7.6; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } }
// SPDX-License-Identifier: agpl-3.0 pragma solidity 0.7.6; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @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); }
// SPDX-License-Identifier: MIT pragma solidity 0.7.6; import './Context.sol'; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), 'Ownable: caller is not the owner'); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), 'Ownable: new owner is the zero address'); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } }
// SPDX-License-Identifier: MIT pragma solidity 0.7.6; import {IERC20} from './IERC20.sol'; import {SafeMath} from './SafeMath.sol'; import {Address} from './Address.sol'; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer( IERC20 token, address to, uint256 value ) internal { callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } function safeApprove( IERC20 token, address spender, uint256 value ) internal { require( (value == 0) || (token.allowance(address(this), spender) == 0), 'SafeERC20: approve from non-zero to non-zero allowance' ); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function callOptionalReturn(IERC20 token, bytes memory data) private { require(address(token).isContract(), 'SafeERC20: call to non-contract'); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = address(token).call(data); require(success, 'SafeERC20: low-level call failed'); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), 'SafeERC20: ERC20 operation did not succeed'); } } }
// SPDX-License-Identifier: agpl-3.0 pragma solidity 0.7.6; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, 'SafeMath: addition overflow'); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, 'SafeMath: subtraction overflow'); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, 'SafeMath: multiplication overflow'); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, 'SafeMath: division by zero'); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, 'SafeMath: modulo by zero'); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } }
// SPDX-License-Identifier: MIT pragma solidity 0.7.6; interface IPriceFeed { // --- Function --- function fetchPrice() external view returns (uint); function updatePrice() external returns (uint); }
// SPDX-License-Identifier: agpl-3.0 pragma solidity 0.7.6; /** * @title IPriceOracleGetter interface * @notice Interface for the Aave price oracle. **/ interface IPriceOracleGetter { /** * @dev returns the asset price in ETH * @param asset the address of the asset * @return the ETH price of the asset **/ function getAssetPrice(address asset) external view returns (uint256); function updateAssetPrice(address asset) external returns (uint256); }
{ "optimizer": { "enabled": true, "runs": 2000 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "metadata": { "useLiteralContent": true }, "libraries": {} }
[{"inputs":[{"internalType":"address[]","name":"assets","type":"address[]"},{"internalType":"address[]","name":"sources","type":"address[]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":true,"internalType":"address","name":"source","type":"address"}],"name":"AssetSourceUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getAssetPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"assets","type":"address[]"}],"name":"getAssetsPrices","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getSourceOfAsset","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"assets","type":"address[]"},{"internalType":"address[]","name":"sources","type":"address[]"}],"name":"setAssetSources","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"updateAssetPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50604051610c4a380380610c4a8339818101604052604081101561003357600080fd5b810190808051604051939291908464010000000082111561005357600080fd5b90830190602082018581111561006857600080fd5b825186602082028301116401000000008211171561008557600080fd5b82525081516020918201928201910280838360005b838110156100b257818101518382015260200161009a565b50505050905001604052602001805160405193929190846401000000008211156100db57600080fd5b9083019060208201858111156100f057600080fd5b825186602082028301116401000000008211171561010d57600080fd5b82525081516020918201928201910280838360005b8381101561013a578181015183820152602001610122565b5050505090500160405250505060006101576101b260201b60201c565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506101ab82826101b6565b50506102fb565b3390565b805182511461020c576040805162461bcd60e51b815260206004820152601a60248201527f494e434f4e53495354454e545f504152414d535f4c454e475448000000000000604482015290519081900360640190fd5b60005b82518110156102f65781818151811061022457fe5b60200260200101516001600085848151811061023c57fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555081818151811061029457fe5b60200260200101516001600160a01b03168382815181106102b157fe5b60200260200101516001600160a01b03167f22c5b7b2d8561d39f7f210b6b326a1aa69f15311163082308ac4877db6339dc160405160405180910390a360010161020f565b505050565b6109408061030a6000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063abfd53101161005b578063abfd5310146101a1578063b3596f0714610263578063b62cad691461029b578063f2fde38b146102c157610088565b8063715018a61461008d5780638da5cb5b1461009757806392bf2be0146100bb5780639d23d9f2146100e1575b600080fd5b6100956102e7565b005b61009f6103b3565b604080516001600160a01b039092168252519081900360200190f35b61009f600480360360208110156100d157600080fd5b50356001600160a01b03166103c2565b610151600480360360208110156100f757600080fd5b81019060208101813564010000000081111561011257600080fd5b82018360208201111561012457600080fd5b8035906020019184602083028401116401000000008311171561014657600080fd5b5090925090506103e0565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561018d578181015183820152602001610175565b505050509050019250505060405180910390f35b610095600480360360408110156101b757600080fd5b8101906020810181356401000000008111156101d257600080fd5b8201836020820111156101e457600080fd5b8035906020019184602083028401116401000000008311171561020657600080fd5b91939092909160208101903564010000000081111561022457600080fd5b82018360208201111561023657600080fd5b8035906020019184602083028401116401000000008311171561025857600080fd5b50909250905061047e565b6102896004803603602081101561027957600080fd5b50356001600160a01b031661055b565b60408051918252519081900360200190f35b610289600480360360208110156102b157600080fd5b50356001600160a01b03166105f9565b610095600480360360208110156102d757600080fd5b50356001600160a01b0316610679565b6102ef61079b565b6000546001600160a01b03908116911614610351576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b6000546001600160a01b031690565b6001600160a01b039081166000908152600160205260409020541690565b606060008267ffffffffffffffff811180156103fb57600080fd5b50604051908082528060200260200182016040528015610425578160200160208202803683370190505b50905060005b838110156104765761045785858381811061044257fe5b905060200201356001600160a01b031661055b565b82828151811061046357fe5b602090810291909101015260010161042b565b509392505050565b61048661079b565b6000546001600160a01b039081169116146104e8576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6105558484808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505060408051602080880282810182019093528782529093508792508691829185019084908082843760009201919091525061079f92505050565b50505050565b6001600160a01b0380821660009081526001602090815260408083205481517f0fdb11cf0000000000000000000000000000000000000000000000000000000081529151939416928392630fdb11cf9260048082019391829003018186803b1580156105c657600080fd5b505afa1580156105da573d6000803e3d6000fd5b505050506040513d60208110156105f057600080fd5b50519392505050565b6001600160a01b0380821660009081526001602090815260408083205481517f673a7e28000000000000000000000000000000000000000000000000000000008152915193941692839263673a7e28926004808201939182900301818887803b15801561066557600080fd5b505af11580156105da573d6000803e3d6000fd5b61068161079b565b6000546001600160a01b039081169116146106e3576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166107285760405162461bcd60e51b81526004018080602001828103825260268152602001806108e56026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b3390565b80518251146107f5576040805162461bcd60e51b815260206004820152601a60248201527f494e434f4e53495354454e545f504152414d535f4c454e475448000000000000604482015290519081900360640190fd5b60005b82518110156108df5781818151811061080d57fe5b60200260200101516001600085848151811061082557fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555081818151811061087d57fe5b60200260200101516001600160a01b031683828151811061089a57fe5b60200260200101516001600160a01b03167f22c5b7b2d8561d39f7f210b6b326a1aa69f15311163082308ac4877db6339dc160405160405180910390a36001016107f8565b50505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a26469706673582212201693d1f18ce80a284bab1c921102c51db44dd69139c8a39c5a20a5a2bf210a4464736f6c63430007060033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000005000000000000000000000000f66a627199a85c41dce5ec7f900177d19d99f7a7000000000000000000000000af93888cbd250300470a1618206e036e1147014900000000000000000000000030bf3761147ef0c86e2f84c3784fbd89e79546700000000000000000000000002fd1272bc0cf9746c9bf68e5aa6d7253591875cf000000000000000000000000f3e4e939939fa0040b8ceb6efa7c0bf0039dc7810000000000000000000000000000000000000000000000000000000000000005000000000000000000000000b87b0bc89a6cf94ab2ba7dd169b5372e35f0fbae000000000000000000000000c6a26181998df880a032e26e2f3bd3e3375e0671000000000000000000000000901f8a9d696ddf50d12f65d6025aa0c81f44e81e000000000000000000000000df0bd60ab5b7768427a6f4ee87651e35c4ba26300000000000000000000000007eb09e0988a953e71ce304f26b4dc6f5ce396b6d
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100885760003560e01c8063abfd53101161005b578063abfd5310146101a1578063b3596f0714610263578063b62cad691461029b578063f2fde38b146102c157610088565b8063715018a61461008d5780638da5cb5b1461009757806392bf2be0146100bb5780639d23d9f2146100e1575b600080fd5b6100956102e7565b005b61009f6103b3565b604080516001600160a01b039092168252519081900360200190f35b61009f600480360360208110156100d157600080fd5b50356001600160a01b03166103c2565b610151600480360360208110156100f757600080fd5b81019060208101813564010000000081111561011257600080fd5b82018360208201111561012457600080fd5b8035906020019184602083028401116401000000008311171561014657600080fd5b5090925090506103e0565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561018d578181015183820152602001610175565b505050509050019250505060405180910390f35b610095600480360360408110156101b757600080fd5b8101906020810181356401000000008111156101d257600080fd5b8201836020820111156101e457600080fd5b8035906020019184602083028401116401000000008311171561020657600080fd5b91939092909160208101903564010000000081111561022457600080fd5b82018360208201111561023657600080fd5b8035906020019184602083028401116401000000008311171561025857600080fd5b50909250905061047e565b6102896004803603602081101561027957600080fd5b50356001600160a01b031661055b565b60408051918252519081900360200190f35b610289600480360360208110156102b157600080fd5b50356001600160a01b03166105f9565b610095600480360360208110156102d757600080fd5b50356001600160a01b0316610679565b6102ef61079b565b6000546001600160a01b03908116911614610351576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b6000546001600160a01b031690565b6001600160a01b039081166000908152600160205260409020541690565b606060008267ffffffffffffffff811180156103fb57600080fd5b50604051908082528060200260200182016040528015610425578160200160208202803683370190505b50905060005b838110156104765761045785858381811061044257fe5b905060200201356001600160a01b031661055b565b82828151811061046357fe5b602090810291909101015260010161042b565b509392505050565b61048661079b565b6000546001600160a01b039081169116146104e8576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6105558484808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505060408051602080880282810182019093528782529093508792508691829185019084908082843760009201919091525061079f92505050565b50505050565b6001600160a01b0380821660009081526001602090815260408083205481517f0fdb11cf0000000000000000000000000000000000000000000000000000000081529151939416928392630fdb11cf9260048082019391829003018186803b1580156105c657600080fd5b505afa1580156105da573d6000803e3d6000fd5b505050506040513d60208110156105f057600080fd5b50519392505050565b6001600160a01b0380821660009081526001602090815260408083205481517f673a7e28000000000000000000000000000000000000000000000000000000008152915193941692839263673a7e28926004808201939182900301818887803b15801561066557600080fd5b505af11580156105da573d6000803e3d6000fd5b61068161079b565b6000546001600160a01b039081169116146106e3576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166107285760405162461bcd60e51b81526004018080602001828103825260268152602001806108e56026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b3390565b80518251146107f5576040805162461bcd60e51b815260206004820152601a60248201527f494e434f4e53495354454e545f504152414d535f4c454e475448000000000000604482015290519081900360640190fd5b60005b82518110156108df5781818151811061080d57fe5b60200260200101516001600085848151811061082557fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555081818151811061087d57fe5b60200260200101516001600160a01b031683828151811061089a57fe5b60200260200101516001600160a01b03167f22c5b7b2d8561d39f7f210b6b326a1aa69f15311163082308ac4877db6339dc160405160405180910390a36001016107f8565b50505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a26469706673582212201693d1f18ce80a284bab1c921102c51db44dd69139c8a39c5a20a5a2bf210a4464736f6c63430007060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000005000000000000000000000000f66a627199a85c41dce5ec7f900177d19d99f7a7000000000000000000000000af93888cbd250300470a1618206e036e1147014900000000000000000000000030bf3761147ef0c86e2f84c3784fbd89e79546700000000000000000000000002fd1272bc0cf9746c9bf68e5aa6d7253591875cf000000000000000000000000f3e4e939939fa0040b8ceb6efa7c0bf0039dc7810000000000000000000000000000000000000000000000000000000000000005000000000000000000000000b87b0bc89a6cf94ab2ba7dd169b5372e35f0fbae000000000000000000000000c6a26181998df880a032e26e2f3bd3e3375e0671000000000000000000000000901f8a9d696ddf50d12f65d6025aa0c81f44e81e000000000000000000000000df0bd60ab5b7768427a6f4ee87651e35c4ba26300000000000000000000000007eb09e0988a953e71ce304f26b4dc6f5ce396b6d
-----Decoded View---------------
Arg [0] : assets (address[]): 0xf66a627199a85c41DcE5Ec7f900177D19d99F7a7,0xAF93888cbD250300470A1618206e036E11470149,0x30BF3761147Ef0c86E2f84c3784FBD89E7954670,0x2fD1272bc0CF9746C9bf68E5aa6D7253591875Cf,0xF3e4E939939fa0040b8ceb6Efa7c0BF0039dc781
Arg [1] : sources (address[]): 0xb87b0bC89a6cf94AB2bA7dd169b5372e35F0fbAE,0xC6A26181998DF880a032e26E2F3Bd3E3375E0671,0x901f8A9d696ddf50d12f65D6025aA0C81f44E81E,0xdf0bD60ab5B7768427A6F4EE87651E35c4Ba2630,0x7Eb09e0988a953E71Ce304F26b4DC6F5Ce396b6D
-----Encoded View---------------
14 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [3] : 000000000000000000000000f66a627199a85c41dce5ec7f900177d19d99f7a7
Arg [4] : 000000000000000000000000af93888cbd250300470a1618206e036e11470149
Arg [5] : 00000000000000000000000030bf3761147ef0c86e2f84c3784fbd89e7954670
Arg [6] : 0000000000000000000000002fd1272bc0cf9746c9bf68e5aa6d7253591875cf
Arg [7] : 000000000000000000000000f3e4e939939fa0040b8ceb6efa7c0bf0039dc781
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [9] : 000000000000000000000000b87b0bc89a6cf94ab2ba7dd169b5372e35f0fbae
Arg [10] : 000000000000000000000000c6a26181998df880a032e26e2f3bd3e3375e0671
Arg [11] : 000000000000000000000000901f8a9d696ddf50d12f65d6025aa0c81f44e81e
Arg [12] : 000000000000000000000000df0bd60ab5b7768427a6f4ee87651e35c4ba2630
Arg [13] : 0000000000000000000000007eb09e0988a953e71ce304f26b4dc6f5ce396b6d
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.