Overview
S Balance
S Value
$0.00More Info
Private Name Tags
ContractCreator
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
OwnerFacet
Compiler Version
v0.8.28+commit.7893614a
Optimization Enabled:
Yes with 10000 runs
Other Settings:
cancun EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.28; import {IOwnerFacet, SelectorsToFacet} from "src/interfaces/IOwnerFacet.sol"; import {LibOwner} from "src/libraries/LibOwner.sol"; import {LibEvents} from "src/libraries/LibEvents.sol"; import {LibErrors} from "src/libraries/LibErrors.sol"; /** * @title OwnerFacet * @dev Contract that provides ownership management functionality. */ contract OwnerFacet is IOwnerFacet { /// @inheritdoc IOwnerFacet function owner() external view returns (address) { return LibOwner._getOwnerStorage().owner; } /// @inheritdoc IOwnerFacet function pendingOwner() external view returns (address) { return LibOwner._getOwnerStorage().pendingOwner; } /// @inheritdoc IOwnerFacet function setSelectorToFacets(SelectorsToFacet[] calldata arr) external { LibOwner.onlyOwner(); LibOwner.OwnerStorage storage s = LibOwner._getOwnerStorage(); for (uint256 i = 0; i < arr.length; i++) { SelectorsToFacet memory selectorsToFacet = arr[i]; for (uint256 j = 0; j < selectorsToFacet.selectors.length; j++) { s.selectorToFacet[selectorsToFacet.selectors[j]] = selectorsToFacet.facet; emit LibEvents.SelectorToFacetSet(selectorsToFacet.selectors[j], selectorsToFacet.facet); } } } /// @inheritdoc IOwnerFacet function selectorToFacet(bytes4 selector) external view returns (address) { LibOwner.OwnerStorage storage s = LibOwner._getOwnerStorage(); return s.selectorToFacet[selector]; } /// @inheritdoc IOwnerFacet function transferOwnership(address newOwner) external { LibOwner.onlyOwner(); LibOwner.OwnerStorage storage s = LibOwner._getOwnerStorage(); s.pendingOwner = newOwner; emit LibEvents.OwnershipTransferStarted(s.owner, s.pendingOwner); } /// @inheritdoc IOwnerFacet function acceptOwnership() external { LibOwner.OwnerStorage storage s = LibOwner._getOwnerStorage(); address _pendingOwner = s.pendingOwner; require(_pendingOwner == msg.sender, LibErrors.OwnableUnauthorizedAccount(msg.sender)); emit LibEvents.OwnershipTransferred(s.owner, _pendingOwner); s.owner = _pendingOwner; s.pendingOwner = address(0); } }
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity ^0.8.0; struct SelectorsToFacet { address facet; bytes4[] selectors; } interface IOwnerFacet { /** * @dev Returns the address of the current owner. * @return The address of the current owner. */ function owner() external view returns (address); /** * @dev Returns the address of the pending owner. * @return The address of the pending owner. */ function pendingOwner() external view returns (address); /** * @dev Sets the mapping of function selectors to facet addresses. * @param arr An array of SelectorsToFacet structs containing the selectors and their corresponding facet addresses. */ function setSelectorToFacets(SelectorsToFacet[] calldata arr) external; /** * @dev Returns the facet address for a given function selector. * @param selector The function selector. * @return The address of the facet. */ function selectorToFacet(bytes4 selector) external view returns (address); /** * @dev Initiates the transfer of ownership to a new owner. * @param newOwner The address of the new owner. */ function transferOwnership(address newOwner) external; /** * @dev Accepts the transfer of ownership. */ function acceptOwnership() external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.28; library LibErrors { // ===================== OwnerFacet ================================ /** * @dev The caller account is not authorized to perform an operation. * @param account The address of the unauthorized account. */ error OwnableUnauthorizedAccount(address account); /** * @dev The function selector is invalid. * @param selector The invalid function selector. */ error InvalidSelector(bytes4 selector); // ===================== ClientsFacet ================================ /** * @dev The owner address is already used by some client. */ error ClientOwnerReserved(); /** * @dev The caller is not the client owner. */ error NotClientOwner(); /** * @dev The project ID is out of bounds. */ error OutOfBoundProjectId(); /** * @dev The project is already active. */ error ProjectActive(); /** * @dev The client name is empty. */ error ClientNameEmpty(); /** * @dev The client name is empty. */ error ReservedProjectsIsZero(); /** * @dev The client name is already taken. */ error ClientNameTaken(); // ===================== FundsFacet ================================ /** * @dev The project is inactive. */ error ProjectInactive(); /** * @dev The function can only be called in a view context. */ error OnlyView(); /** * @dev Compounding the underlying asset is forbidden. */ error CompoundUnderlyingForbidden(); /** * @dev Position migration is forbidden. */ error PositionMigrationForbidden(); /** * @dev There is not enough underlying assets in YelayLiteVault to cover redeem. */ error NotEnoughInternalFunds(); /** * @dev Redeem doesn't pass minimum asset amount */ error MinRedeem(); // ===================== SwapWrapper ================================ /** * @dev The token is not WETH. */ error NotWeth(); /** * @dev No ETH available. */ error NoEth(); // ===================== ManagementFacet ================================ /** * @dev The assets were not withdrawn from strategy. */ error StrategyNotEmpty(); /** * @dev The strategy is already registered. */ error StrategyRegistered(); /** * @dev The strategy is already active. */ error StrategyActive(); // ===================== LibPausable ================================ /** * @dev The function is paused. * @param selector The function selector that is paused. */ error Paused(bytes4 selector); // ===================== Swapper ================================ /** * @notice Used when trying to do a swap via an exchange that is not allowed to execute a swap. * @param exchange Exchange used. */ error ExchangeNotAllowed(address exchange); /** * @notice Used when there is nothing to swap. * @param tokenIn The token that was intended to be swapped. */ error NothingToSwap(address tokenIn); /** * @notice Used when nothing was swapped. * @param tokenOut The token that was intended to be received. */ error NothingSwapped(address tokenOut); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.28; library LibEvents { // FundsFacet /** * @dev Emitted when assets are deposited. * @param projectId The ID of the project. * @param sender The address of the sender. * @param receiver The address of the receiver. * @param assets The amount of assets deposited. * @param shares The amount of shares minted. */ event Deposit( uint256 indexed projectId, address indexed sender, address indexed receiver, uint256 assets, uint256 shares ); /** * @dev Emitted when assets are redeemed. * @param projectId The ID of the project. * @param sender The address of the sender. * @param receiver The address of the receiver. * @param assets The amount of assets redeemed. * @param shares The amount of shares burned. */ event Redeem( uint256 indexed projectId, address indexed sender, address indexed receiver, uint256 assets, uint256 shares ); /** * @dev Emitted when assets are deposited into a strategy. * @param strategy The name of the strategy. * @param amount The amount of assets deposited. */ event ManagedDeposit(bytes32 indexed strategy, uint256 amount); /** * @dev Emitted when assets are withdrawn from a strategy. * @param strategy The name of the strategy. * @param amount The amount of assets withdrawn. */ event ManagedWithdraw(bytes32 indexed strategy, uint256 amount); /** * @dev Emitted when interest is accrued. * @param newTotalAssets The new total assets value. * @param interest The amount of interest accrued. * @param feeShares The amount of fee shares minted. */ event AccrueInterest(uint256 newTotalAssets, uint256 interest, uint256 feeShares); /** * @dev Emitted when the last total assets value is updated. * @param lastTotalAssets The updated last total assets value. */ event UpdateLastTotalAssets(uint256 lastTotalAssets); /** * @dev Emitted when assets are compounded. * @param amount The amount of assets compounded. */ event Compounded(uint256 amount); /** * @dev Emitted when a position is migrated. * @param account The address of the account. * @param fromProjectId The ID of the project from which the position is migrated. * @param toProjectId The ID of the project to which the position is migrated. * @param shares The amount of shares migrated. */ event PositionMigrated( address indexed account, uint256 indexed fromProjectId, uint256 indexed toProjectId, uint256 shares ); /** * @dev Emitted when lastTotalAssetsUpdateInterval is updated. * @param newInterval The new interval for updating lastTotalAssets. */ event UpdateLastTotalAssetsUpdateInterval(uint256 newInterval); // ManagementFacet /** * @dev Emitted when the deposit queue is updated. */ event UpdateDepositQueue(); /** * @dev Emitted when the withdraw queue is updated. */ event UpdateWithdrawQueue(); /** * @dev Emitted when a strategy is added. * @param strategy The address of the strategy. * @param supplement Additional data for the strategy. */ event AddStrategy(address indexed strategy, bytes supplement); /** * @dev Emitted when a strategy is removed. * @param strategy The address of the strategy. * @param supplement Additional data for the strategy. */ event RemoveStrategy(address indexed strategy, bytes supplement); /** * @dev Emitted when a strategy is activate. * @param strategy The address of the strategy. * @param supplement Additional data for the strategy. */ event ActivateStrategy(address indexed strategy, bytes supplement); /** * @dev Emitted when a strategy is deactivated. * @param strategy The address of the strategy. * @param supplement Additional data for the strategy. */ event DeactivateStrategy(address indexed strategy, bytes supplement); // ClientsFacet /** * @dev Emitted when new project IDs are assigned to a client. * @param owner The address of the client owner. * @param minProjectId The minimum project ID. * @param maxProjectId The maximum project ID. */ event NewProjectIds(address indexed owner, uint256 minProjectId, uint256 maxProjectId); /** * @dev Emitted when project ownership is transferred. * @param clientName The name of the client. * @param oldOwner The address of the old owner. * @param newOwner The address of the new owner. */ event ClientOwnershipTransfer(bytes32 indexed clientName, address indexed oldOwner, address indexed newOwner); /** * @dev Emitted when a project is activated. * @param project The ID of the activated project. */ event ProjectActivated(uint256 indexed project); // OwnerFacet /** * @dev Emitted when the ownership transfer process is started. * @param previousOwner The address of the previous owner. * @param newOwner The address of the new owner. */ event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner); /** * @dev Emitted when the ownership transfer process is completed. * @param previousOwner The address of the previous owner. * @param newOwner The address of the new owner. */ event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Emitted when a function selector is mapped to a facet. * @param selector The function selector. * @param facet The address of the facet. */ event SelectorToFacetSet(bytes4 indexed selector, address indexed facet); // AccessFacet /** * @dev Emitted when a method is paused or unpaused. * @param selector The function selector. * @param paused The paused state. */ event PausedChange(bytes4 selector, bool paused); // Swapper /** * @notice Emitted when the exchange allowlist is updated. * @param exchange Exchange that was updated. * @param isAllowed Whether the exchange is allowed to be used in a swap or not after the update. */ event ExchangeAllowlistUpdated(address indexed exchange, bool isAllowed); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.28; import {LibErrors} from "src/libraries/LibErrors.sol"; library LibOwner { /** * @custom:storage-location erc7201:yelay-vault.storage.OwnerFacet * @custom:member owner The owner of the contract. * @custom:member pendingOwner The address pending to become the owner. * @custom:member selectorToFacet Mapping from selector to facet address. */ struct OwnerStorage { address owner; address pendingOwner; mapping(bytes4 => address) selectorToFacet; } // keccak256(abi.encode(uint256(keccak256("yelay-vault.storage.OwnerFacet")) - 1)) & ~bytes32(uint256(0xff)) bytes32 private constant OWNER_STORAGE_LOCATION = 0x52b130868e76fc87849159cef46eb9bb0156aa8877197d318e4437829044d000; function _getOwnerStorage() internal pure returns (OwnerStorage storage $) { assembly { $.slot := OWNER_STORAGE_LOCATION } } /** * @dev Reverts if the caller is not the owner. */ function onlyOwner() internal view { OwnerStorage storage s = _getOwnerStorage(); require(s.owner == msg.sender, LibErrors.OwnableUnauthorizedAccount(msg.sender)); } }
{ "evmVersion": "cancun", "optimizer": { "enabled": true, "runs": 10000 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes4","name":"selector","type":"bytes4"},{"indexed":true,"internalType":"address","name":"facet","type":"address"}],"name":"SelectorToFacetSet","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"selectorToFacet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"facet","type":"address"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}],"internalType":"struct SelectorsToFacet[]","name":"arr","type":"tuple[]"}],"name":"setSelectorToFacets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052348015600e575f5ffd5b506109178061001c5f395ff3fe608060405234801561000f575f5ffd5b506004361061006f575f3560e01c8063ae7473ac1161004d578063ae7473ac146100f2578063e30c397814610168578063f2fde38b146101a5575f5ffd5b806379ba5097146100735780638da5cb5b1461007d578063a47dbf82146100df575b5f5ffd5b61007b6101b8565b005b7f52b130868e76fc87849159cef46eb9bb0156aa8877197d318e4437829044d0005473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b61007b6100ed366004610608565b6102ff565b6100b66101003660046106ad565b7fffffffff00000000000000000000000000000000000000000000000000000000165f9081527f52b130868e76fc87849159cef46eb9bb0156aa8877197d318e4437829044d002602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b7f52b130868e76fc87849159cef46eb9bb0156aa8877197d318e4437829044d0015473ffffffffffffffffffffffffffffffffffffffff166100b6565b61007b6101b33660046106f0565b6104ba565b7f52b130868e76fc87849159cef46eb9bb0156aa8877197d318e4437829044d001547f52b130868e76fc87849159cef46eb9bb0156aa8877197d318e4437829044d0009073ffffffffffffffffffffffffffffffffffffffff163380821461026a576040517f118cdaa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024015b60405180910390fd5b50815460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3815473ffffffffffffffffffffffffffffffffffffffff9091167fffffffffffffffffffffffff0000000000000000000000000000000000000000918216178255600190910180549091169055565b610307610578565b7f52b130868e76fc87849159cef46eb9bb0156aa8877197d318e4437829044d0005f5b828110156104b4575f84848381811061034557610345610709565b90506020028101906103579190610736565b61036090610817565b90505f5b8160200151518110156104aa57815f0151846002015f8460200151848151811061039057610390610709565b60200260200101517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550815f015173ffffffffffffffffffffffffffffffffffffffff168260200151828151811061045057610450610709565b60200260200101517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167e38aaccfeca40ea50135fcc37980765ee22033e320eaf575624561bdbbe930060405160405180910390a3600101610364565b505060010161032a565b50505050565b6104c2610578565b7f52b130868e76fc87849159cef46eb9bb0156aa8877197d318e4437829044d00180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8381169182179092557f52b130868e76fc87849159cef46eb9bb0156aa8877197d318e4437829044d0008054604051919316907f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700905f90a35050565b7f52b130868e76fc87849159cef46eb9bb0156aa8877197d318e4437829044d0008054339073ffffffffffffffffffffffffffffffffffffffff168114610604576040517f118cdaa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610261565b5050565b5f5f60208385031215610619575f5ffd5b823567ffffffffffffffff81111561062f575f5ffd5b8301601f8101851361063f575f5ffd5b803567ffffffffffffffff811115610655575f5ffd5b8560208260051b8401011115610669575f5ffd5b6020919091019590945092505050565b80357fffffffff00000000000000000000000000000000000000000000000000000000811681146106a8575f5ffd5b919050565b5f602082840312156106bd575f5ffd5b6106c682610679565b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106a8575f5ffd5b5f60208284031215610700575f5ffd5b6106c6826106cd565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112610768575f5ffd5b9190910192915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040805190810167ffffffffffffffff811182821017156107c2576107c2610772565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561080f5761080f610772565b604052919050565b5f60408236031215610827575f5ffd5b61082f61079f565b610838836106cd565b8152602083013567ffffffffffffffff811115610853575f5ffd5b830136601f820112610863575f5ffd5b803567ffffffffffffffff81111561087d5761087d610772565b8060051b61088d602082016107c8565b918252602081840181019290810190368411156108a8575f5ffd5b6020850194505b838510156108d1576108c085610679565b8252602094850194909101906108af565b602086015250929594505050505056fea2646970667358221220fa6e6743b3283a3d4c1050210d895e7b69d17cbdfb939bb7d2a67ea4cfc6368964736f6c634300081c0033
Deployed Bytecode
0x608060405234801561000f575f5ffd5b506004361061006f575f3560e01c8063ae7473ac1161004d578063ae7473ac146100f2578063e30c397814610168578063f2fde38b146101a5575f5ffd5b806379ba5097146100735780638da5cb5b1461007d578063a47dbf82146100df575b5f5ffd5b61007b6101b8565b005b7f52b130868e76fc87849159cef46eb9bb0156aa8877197d318e4437829044d0005473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b61007b6100ed366004610608565b6102ff565b6100b66101003660046106ad565b7fffffffff00000000000000000000000000000000000000000000000000000000165f9081527f52b130868e76fc87849159cef46eb9bb0156aa8877197d318e4437829044d002602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b7f52b130868e76fc87849159cef46eb9bb0156aa8877197d318e4437829044d0015473ffffffffffffffffffffffffffffffffffffffff166100b6565b61007b6101b33660046106f0565b6104ba565b7f52b130868e76fc87849159cef46eb9bb0156aa8877197d318e4437829044d001547f52b130868e76fc87849159cef46eb9bb0156aa8877197d318e4437829044d0009073ffffffffffffffffffffffffffffffffffffffff163380821461026a576040517f118cdaa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024015b60405180910390fd5b50815460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3815473ffffffffffffffffffffffffffffffffffffffff9091167fffffffffffffffffffffffff0000000000000000000000000000000000000000918216178255600190910180549091169055565b610307610578565b7f52b130868e76fc87849159cef46eb9bb0156aa8877197d318e4437829044d0005f5b828110156104b4575f84848381811061034557610345610709565b90506020028101906103579190610736565b61036090610817565b90505f5b8160200151518110156104aa57815f0151846002015f8460200151848151811061039057610390610709565b60200260200101517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550815f015173ffffffffffffffffffffffffffffffffffffffff168260200151828151811061045057610450610709565b60200260200101517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167e38aaccfeca40ea50135fcc37980765ee22033e320eaf575624561bdbbe930060405160405180910390a3600101610364565b505060010161032a565b50505050565b6104c2610578565b7f52b130868e76fc87849159cef46eb9bb0156aa8877197d318e4437829044d00180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8381169182179092557f52b130868e76fc87849159cef46eb9bb0156aa8877197d318e4437829044d0008054604051919316907f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700905f90a35050565b7f52b130868e76fc87849159cef46eb9bb0156aa8877197d318e4437829044d0008054339073ffffffffffffffffffffffffffffffffffffffff168114610604576040517f118cdaa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610261565b5050565b5f5f60208385031215610619575f5ffd5b823567ffffffffffffffff81111561062f575f5ffd5b8301601f8101851361063f575f5ffd5b803567ffffffffffffffff811115610655575f5ffd5b8560208260051b8401011115610669575f5ffd5b6020919091019590945092505050565b80357fffffffff00000000000000000000000000000000000000000000000000000000811681146106a8575f5ffd5b919050565b5f602082840312156106bd575f5ffd5b6106c682610679565b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106a8575f5ffd5b5f60208284031215610700575f5ffd5b6106c6826106cd565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112610768575f5ffd5b9190910192915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040805190810167ffffffffffffffff811182821017156107c2576107c2610772565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561080f5761080f610772565b604052919050565b5f60408236031215610827575f5ffd5b61082f61079f565b610838836106cd565b8152602083013567ffffffffffffffff811115610853575f5ffd5b830136601f820112610863575f5ffd5b803567ffffffffffffffff81111561087d5761087d610772565b8060051b61088d602082016107c8565b918252602081840181019290810190368411156108a8575f5ffd5b6020850194505b838510156108d1576108c085610679565b8252602094850194909101906108af565b602086015250929594505050505056fea2646970667358221220fa6e6743b3283a3d4c1050210d895e7b69d17cbdfb939bb7d2a67ea4cfc6368964736f6c634300081c0033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 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.