Overview
S Balance
S Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 2 internal transactions
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
6375180 | 10 days ago | Contract Creation | 0 S | |||
5700011 | 16 days ago | Contract Creation | 0 S |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
ERC4626OracleFactory
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)
// SPDX-License-Identifier: BUSL-1.1 pragma solidity 0.8.28; import {IERC4626} from "openzeppelin5/interfaces/IERC4626.sol"; import {ISiloOracle} from "silo-core/contracts/interfaces/ISiloOracle.sol"; import {IERC4626OracleFactory} from "silo-oracles/contracts/interfaces/IERC4626OracleFactory.sol"; import {ERC4626Oracle} from "silo-oracles/contracts/erc4626/ERC4626Oracle.sol"; contract ERC4626OracleFactory is IERC4626OracleFactory { mapping(address => bool) public createdInFactory; function createERC4626Oracle(IERC4626 _vault) external returns (ISiloOracle oracle) { oracle = ISiloOracle(address(new ERC4626Oracle(_vault))); createdInFactory[address(oracle)] = true; emit ERC4626OracleCreated(oracle); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC4626.sol) pragma solidity ^0.8.20; import {IERC20} from "../token/ERC20/IERC20.sol"; import {IERC20Metadata} from "../token/ERC20/extensions/IERC20Metadata.sol"; /** * @dev Interface of the ERC-4626 "Tokenized Vault Standard", as defined in * https://eips.ethereum.org/EIPS/eip-4626[ERC-4626]. */ interface IERC4626 is IERC20, IERC20Metadata { event Deposit(address indexed sender, address indexed owner, uint256 assets, uint256 shares); event Withdraw( address indexed sender, address indexed receiver, address indexed owner, uint256 assets, uint256 shares ); /** * @dev Returns the address of the underlying token used for the Vault for accounting, depositing, and withdrawing. * * - MUST be an ERC-20 token contract. * - MUST NOT revert. */ function asset() external view returns (address assetTokenAddress); /** * @dev Returns the total amount of the underlying asset that is “managed” by Vault. * * - SHOULD include any compounding that occurs from yield. * - MUST be inclusive of any fees that are charged against assets in the Vault. * - MUST NOT revert. */ function totalAssets() external view returns (uint256 totalManagedAssets); /** * @dev Returns the amount of shares that the Vault would exchange for the amount of assets provided, in an ideal * scenario where all the conditions are met. * * - MUST NOT be inclusive of any fees that are charged against assets in the Vault. * - MUST NOT show any variations depending on the caller. * - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange. * - MUST NOT revert. * * NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the * “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and * from. */ function convertToShares(uint256 assets) external view returns (uint256 shares); /** * @dev Returns the amount of assets that the Vault would exchange for the amount of shares provided, in an ideal * scenario where all the conditions are met. * * - MUST NOT be inclusive of any fees that are charged against assets in the Vault. * - MUST NOT show any variations depending on the caller. * - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange. * - MUST NOT revert. * * NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the * “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and * from. */ function convertToAssets(uint256 shares) external view returns (uint256 assets); /** * @dev Returns the maximum amount of the underlying asset that can be deposited into the Vault for the receiver, * through a deposit call. * * - MUST return a limited value if receiver is subject to some deposit limit. * - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of assets that may be deposited. * - MUST NOT revert. */ function maxDeposit(address receiver) external view returns (uint256 maxAssets); /** * @dev Allows an on-chain or off-chain user to simulate the effects of their deposit at the current block, given * current on-chain conditions. * * - MUST return as close to and no more than the exact amount of Vault shares that would be minted in a deposit * call in the same transaction. I.e. deposit should return the same or more shares as previewDeposit if called * in the same transaction. * - MUST NOT account for deposit limits like those returned from maxDeposit and should always act as though the * deposit would be accepted, regardless if the user has enough tokens approved, etc. * - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees. * - MUST NOT revert. * * NOTE: any unfavorable discrepancy between convertToShares and previewDeposit SHOULD be considered slippage in * share price or some other type of condition, meaning the depositor will lose assets by depositing. */ function previewDeposit(uint256 assets) external view returns (uint256 shares); /** * @dev Mints shares Vault shares to receiver by depositing exactly amount of underlying tokens. * * - MUST emit the Deposit event. * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the * deposit execution, and are accounted for during deposit. * - MUST revert if all of assets cannot be deposited (due to deposit limit being reached, slippage, the user not * approving enough underlying tokens to the Vault contract, etc). * * NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token. */ function deposit(uint256 assets, address receiver) external returns (uint256 shares); /** * @dev Returns the maximum amount of the Vault shares that can be minted for the receiver, through a mint call. * - MUST return a limited value if receiver is subject to some mint limit. * - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of shares that may be minted. * - MUST NOT revert. */ function maxMint(address receiver) external view returns (uint256 maxShares); /** * @dev Allows an on-chain or off-chain user to simulate the effects of their mint at the current block, given * current on-chain conditions. * * - MUST return as close to and no fewer than the exact amount of assets that would be deposited in a mint call * in the same transaction. I.e. mint should return the same or fewer assets as previewMint if called in the * same transaction. * - MUST NOT account for mint limits like those returned from maxMint and should always act as though the mint * would be accepted, regardless if the user has enough tokens approved, etc. * - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees. * - MUST NOT revert. * * NOTE: any unfavorable discrepancy between convertToAssets and previewMint SHOULD be considered slippage in * share price or some other type of condition, meaning the depositor will lose assets by minting. */ function previewMint(uint256 shares) external view returns (uint256 assets); /** * @dev Mints exactly shares Vault shares to receiver by depositing amount of underlying tokens. * * - MUST emit the Deposit event. * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the mint * execution, and are accounted for during mint. * - MUST revert if all of shares cannot be minted (due to deposit limit being reached, slippage, the user not * approving enough underlying tokens to the Vault contract, etc). * * NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token. */ function mint(uint256 shares, address receiver) external returns (uint256 assets); /** * @dev Returns the maximum amount of the underlying asset that can be withdrawn from the owner balance in the * Vault, through a withdraw call. * * - MUST return a limited value if owner is subject to some withdrawal limit or timelock. * - MUST NOT revert. */ function maxWithdraw(address owner) external view returns (uint256 maxAssets); /** * @dev Allows an on-chain or off-chain user to simulate the effects of their withdrawal at the current block, * given current on-chain conditions. * * - MUST return as close to and no fewer than the exact amount of Vault shares that would be burned in a withdraw * call in the same transaction. I.e. withdraw should return the same or fewer shares as previewWithdraw if * called * in the same transaction. * - MUST NOT account for withdrawal limits like those returned from maxWithdraw and should always act as though * the withdrawal would be accepted, regardless if the user has enough shares, etc. * - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees. * - MUST NOT revert. * * NOTE: any unfavorable discrepancy between convertToShares and previewWithdraw SHOULD be considered slippage in * share price or some other type of condition, meaning the depositor will lose assets by depositing. */ function previewWithdraw(uint256 assets) external view returns (uint256 shares); /** * @dev Burns shares from owner and sends exactly assets of underlying tokens to receiver. * * - MUST emit the Withdraw event. * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the * withdraw execution, and are accounted for during withdraw. * - MUST revert if all of assets cannot be withdrawn (due to withdrawal limit being reached, slippage, the owner * not having enough shares, etc). * * Note that some implementations will require pre-requesting to the Vault before a withdrawal may be performed. * Those methods should be performed separately. */ function withdraw(uint256 assets, address receiver, address owner) external returns (uint256 shares); /** * @dev Returns the maximum amount of Vault shares that can be redeemed from the owner balance in the Vault, * through a redeem call. * * - MUST return a limited value if owner is subject to some withdrawal limit or timelock. * - MUST return balanceOf(owner) if owner is not subject to any withdrawal limit or timelock. * - MUST NOT revert. */ function maxRedeem(address owner) external view returns (uint256 maxShares); /** * @dev Allows an on-chain or off-chain user to simulate the effects of their redeemption at the current block, * given current on-chain conditions. * * - MUST return as close to and no more than the exact amount of assets that would be withdrawn in a redeem call * in the same transaction. I.e. redeem should return the same or more assets as previewRedeem if called in the * same transaction. * - MUST NOT account for redemption limits like those returned from maxRedeem and should always act as though the * redemption would be accepted, regardless if the user has enough shares, etc. * - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees. * - MUST NOT revert. * * NOTE: any unfavorable discrepancy between convertToAssets and previewRedeem SHOULD be considered slippage in * share price or some other type of condition, meaning the depositor will lose assets by redeeming. */ function previewRedeem(uint256 shares) external view returns (uint256 assets); /** * @dev Burns exactly shares from owner and sends assets of underlying tokens to receiver. * * - MUST emit the Withdraw event. * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the * redeem execution, and are accounted for during redeem. * - MUST revert if all of shares cannot be redeemed (due to withdrawal limit being reached, slippage, the owner * not having enough shares, etc). * * NOTE: some implementations will require pre-requesting to the Vault before a withdrawal may be performed. * Those methods should be performed separately. */ function redeem(uint256 shares, address receiver, address owner) external returns (uint256 assets); }
// SPDX-License-Identifier: MIT pragma 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 token function beforeQuote(address _baseToken) external; /// @return quoteAmount Returns quote price for _baseAmount of _baseToken /// @param _baseAmount Amount of priced token /// @param _baseToken Address of priced token function quote(uint256 _baseAmount, address _baseToken) external view returns (uint256 quoteAmount); /// @return address of token in which quote (price) is denominated function quoteToken() external view returns (address); }
// SPDX-License-Identifier: BUSL-1.1 pragma solidity 0.8.28; import {IERC4626} from "openzeppelin5/interfaces/IERC4626.sol"; import {ISiloOracle} from "silo-core/contracts/interfaces/ISiloOracle.sol"; interface IERC4626OracleFactory { event ERC4626OracleCreated(ISiloOracle indexed oracle); function createERC4626Oracle(IERC4626 _vault) external returns (ISiloOracle oracle); }
// SPDX-License-Identifier: BUSL-1.1 pragma solidity 0.8.28; import {IERC4626} from "openzeppelin5/interfaces/IERC4626.sol"; import {ISiloOracle} from "silo-core/contracts/interfaces/ISiloOracle.sol"; contract ERC4626Oracle is ISiloOracle { IERC4626 public immutable VAULT; address public immutable UNDERLYING; error AssetNotSupported(); constructor(IERC4626 _vault) { VAULT = _vault; UNDERLYING = _vault.asset(); } /// @inheritdoc ISiloOracle function beforeQuote(address _baseToken) external view { // only for an ISiloOracle interface implementation } /// @inheritdoc ISiloOracle function quote(uint256 _baseAmount, address _baseToken) external view returns (uint256 quoteAmount) { if (_baseToken != address(VAULT)) revert AssetNotSupported(); quoteAmount = VAULT.convertToAssets(_baseAmount); } /// @inheritdoc ISiloOracle function quoteToken() external view returns (address) { return UNDERLYING; } }
// 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. */ function totalSupply() external view returns (uint256); /** * @dev Returns the value of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves a `value` amount of tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 value) 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 a `value` amount of tokens 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 value) external returns (bool); /** * @dev Moves a `value` amount of tokens from `from` to `to` using the * allowance mechanism. `value` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 value) external returns (bool); }
// 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); }
{ "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/prettier-plugin-solidity/node_modules/@solidity-parser/", "ERC4626/=gitmodules/crytic/properties/lib/ERC4626/contracts/", "createx/=gitmodules/pyth-sdk-solidity/lazer/contracts/evm/lib/createx/src/", "crytic/=gitmodules/crytic/", "ds-test/=gitmodules/openzeppelin-contracts-5/lib/forge-std/lib/ds-test/src/", "erc4626-tests/=gitmodules/openzeppelin-contracts-5/lib/erc4626-tests/", "halmos-cheatcodes/=gitmodules/morpho-blue/lib/halmos-cheatcodes/src/", "hardhat/=node_modules/hardhat/", "openzeppelin-contracts-5/=gitmodules/openzeppelin-contracts-5/", "openzeppelin-contracts-upgradeable-5/=gitmodules/openzeppelin-contracts-upgradeable-5/", "openzeppelin-contracts-upgradeable/=gitmodules/pyth-sdk-solidity/lazer/contracts/evm/lib/openzeppelin-contracts-upgradeable/", "openzeppelin-contracts/=gitmodules/openzeppelin-contracts-upgradeable-5/lib/openzeppelin-contracts/", "prettier-plugin-solidity/=node_modules/prettier-plugin-solidity/", "proposals/=node_modules/proposals/", "solady/=gitmodules/pyth-sdk-solidity/lazer/contracts/evm/lib/createx/lib/solady/", "solmate/=gitmodules/crytic/properties/lib/solmate/src/" ], "optimizer": { "enabled": true, "runs": 200 }, "metadata": { "useLiteralContent": false, "bytecodeHash": "ipfs", "appendCBOR": true }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "evmVersion": "cancun", "viaIR": false, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract ISiloOracle","name":"oracle","type":"address"}],"name":"ERC4626OracleCreated","type":"event"},{"inputs":[{"internalType":"contract IERC4626","name":"_vault","type":"address"}],"name":"createERC4626Oracle","outputs":[{"internalType":"contract ISiloOracle","name":"oracle","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"createdInFactory","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
6080604052348015600e575f5ffd5b5061055e8061001c5f395ff3fe608060405234801561000f575f5ffd5b5060043610610034575f3560e01c80638b82e6a514610038578063b32d705b14610068575b5f5ffd5b61004b610046366004610148565b61009a565b6040516001600160a01b0390911681526020015b60405180910390f35b61008a610076366004610148565b5f6020819052908152604090205460ff1681565b604051901515815260200161005f565b5f816040516100a890610124565b6001600160a01b039091168152602001604051809103905ff0801580156100d1573d5f5f3e3d5ffd5b506001600160a01b0381165f81815260208190526040808220805460ff191660011790555192935090917f6d86f9fc5b1bde243720a4aa74177ac89431d9fa2331e29ff3bf8ebe23fcec7f9190a2919050565b6103be8061016b83390190565b6001600160a01b0381168114610145575f5ffd5b50565b5f60208284031215610158575f5ffd5b813561016381610131565b939250505056fe60c060405234801561000f575f5ffd5b506040516103be3803806103be83398101604081905261002e916100c3565b6001600160a01b0381166080819052604080516338d52e0f60e01b815290516338d52e0f916004808201926020929091908290030181865afa158015610076573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061009a91906100c3565b6001600160a01b031660a052506100e5565b6001600160a01b03811681146100c0575f5ffd5b50565b5f602082840312156100d3575f5ffd5b81516100de816100ac565b9392505050565b60805160a0516102a66101185f395f81816081015260e501525f818160be0152818161011d015261018301526102a65ff3fe608060405234801561000f575f5ffd5b5060043610610055575f3560e01c806313b0be3314610059578063217a4b701461007f578063411557d1146100b9578063c5d664c6146100e0578063f9fa619a14610107575b5f5ffd5b61006c610067366004610216565b61011a565b6040519081526020015b60405180910390f35b7f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160a01b039091168152602001610076565b6100a17f000000000000000000000000000000000000000000000000000000000000000081565b6100a17f000000000000000000000000000000000000000000000000000000000000000081565b610118610115366004610240565b50565b005b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161461016d5760405163981a2a2b60e01b815260040160405180910390fd5b6040516303d1689d60e11b8152600481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906307a2d13a90602401602060405180830381865afa1580156101d0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101f49190610259565b9392505050565b80356001600160a01b0381168114610211575f5ffd5b919050565b5f5f60408385031215610227575f5ffd5b82359150610237602084016101fb565b90509250929050565b5f60208284031215610250575f5ffd5b6101f4826101fb565b5f60208284031215610269575f5ffd5b505191905056fea26469706673582212209af58437504508fb10b4da7ef54900c0f4bd8100204ffe825bcb3fb8e3b4ea2d64736f6c634300081c0033a26469706673582212205288f0579618c5019742108645be207092e4fe893ae823e4408d47f13727e92664736f6c634300081c0033
Deployed Bytecode
0x608060405234801561000f575f5ffd5b5060043610610034575f3560e01c80638b82e6a514610038578063b32d705b14610068575b5f5ffd5b61004b610046366004610148565b61009a565b6040516001600160a01b0390911681526020015b60405180910390f35b61008a610076366004610148565b5f6020819052908152604090205460ff1681565b604051901515815260200161005f565b5f816040516100a890610124565b6001600160a01b039091168152602001604051809103905ff0801580156100d1573d5f5f3e3d5ffd5b506001600160a01b0381165f81815260208190526040808220805460ff191660011790555192935090917f6d86f9fc5b1bde243720a4aa74177ac89431d9fa2331e29ff3bf8ebe23fcec7f9190a2919050565b6103be8061016b83390190565b6001600160a01b0381168114610145575f5ffd5b50565b5f60208284031215610158575f5ffd5b813561016381610131565b939250505056fe60c060405234801561000f575f5ffd5b506040516103be3803806103be83398101604081905261002e916100c3565b6001600160a01b0381166080819052604080516338d52e0f60e01b815290516338d52e0f916004808201926020929091908290030181865afa158015610076573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061009a91906100c3565b6001600160a01b031660a052506100e5565b6001600160a01b03811681146100c0575f5ffd5b50565b5f602082840312156100d3575f5ffd5b81516100de816100ac565b9392505050565b60805160a0516102a66101185f395f81816081015260e501525f818160be0152818161011d015261018301526102a65ff3fe608060405234801561000f575f5ffd5b5060043610610055575f3560e01c806313b0be3314610059578063217a4b701461007f578063411557d1146100b9578063c5d664c6146100e0578063f9fa619a14610107575b5f5ffd5b61006c610067366004610216565b61011a565b6040519081526020015b60405180910390f35b7f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160a01b039091168152602001610076565b6100a17f000000000000000000000000000000000000000000000000000000000000000081565b6100a17f000000000000000000000000000000000000000000000000000000000000000081565b610118610115366004610240565b50565b005b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161461016d5760405163981a2a2b60e01b815260040160405180910390fd5b6040516303d1689d60e11b8152600481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906307a2d13a90602401602060405180830381865afa1580156101d0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101f49190610259565b9392505050565b80356001600160a01b0381168114610211575f5ffd5b919050565b5f5f60408385031215610227575f5ffd5b82359150610237602084016101fb565b90509250929050565b5f60208284031215610250575f5ffd5b6101f4826101fb565b5f60208284031215610269575f5ffd5b505191905056fea26469706673582212209af58437504508fb10b4da7ef54900c0f4bd8100204ffe825bcb3fb8e3b4ea2d64736f6c634300081c0033a26469706673582212205288f0579618c5019742108645be207092e4fe893ae823e4408d47f13727e92664736f6c634300081c0033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ Download: CSV Export ]
[ 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.