S Price: $0.725927 (-4.78%)

Contract

0x47f9f04DB109D25aEBA42b0d45E6f0Aee852B916

Overview

S Balance

Sonic LogoSonic LogoSonic Logo0 S

S Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To

There are no matching entries

Please try again later

Parent Transaction Hash Block From To
View All Internal Transactions
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
File 1 of 5 : OwnerFacet.sol
// 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);
    }
}

File 2 of 5 : IOwnerFacet.sol
// 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;
}

File 3 of 5 : LibErrors.sol
// 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);
}

File 4 of 5 : LibEvents.sol
// 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);
}

File 5 of 5 : LibOwner.sol
// 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));
    }
}

Settings
{
  "evmVersion": "cancun",
  "optimizer": {
    "enabled": true,
    "runs": 10000
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"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"}]

6080604052348015600e575f5ffd5b506109178061001c5f395ff3fe608060405234801561000f575f5ffd5b506004361061006f575f3560e01c8063ae7473ac1161004d578063ae7473ac146100f2578063e30c397814610168578063f2fde38b146101a5575f5ffd5b806379ba5097146100735780638da5cb5b1461007d578063a47dbf82146100df575b5f5ffd5b61007b6101b8565b005b7f52b130868e76fc87849159cef46eb9bb0156aa8877197d318e4437829044d0005473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b61007b6100ed366004610608565b6102ff565b6100b66101003660046106ad565b7fffffffff00000000000000000000000000000000000000000000000000000000165f9081527f52b130868e76fc87849159cef46eb9bb0156aa8877197d318e4437829044d002602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b7f52b130868e76fc87849159cef46eb9bb0156aa8877197d318e4437829044d0015473ffffffffffffffffffffffffffffffffffffffff166100b6565b61007b6101b33660046106f0565b6104ba565b7f52b130868e76fc87849159cef46eb9bb0156aa8877197d318e4437829044d001547f52b130868e76fc87849159cef46eb9bb0156aa8877197d318e4437829044d0009073ffffffffffffffffffffffffffffffffffffffff163380821461026a576040517f118cdaa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024015b60405180910390fd5b50815460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3815473ffffffffffffffffffffffffffffffffffffffff9091167fffffffffffffffffffffffff0000000000000000000000000000000000000000918216178255600190910180549091169055565b610307610578565b7f52b130868e76fc87849159cef46eb9bb0156aa8877197d318e4437829044d0005f5b828110156104b4575f84848381811061034557610345610709565b90506020028101906103579190610736565b61036090610817565b90505f5b8160200151518110156104aa57815f0151846002015f8460200151848151811061039057610390610709565b60200260200101517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550815f015173ffffffffffffffffffffffffffffffffffffffff168260200151828151811061045057610450610709565b60200260200101517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167e38aaccfeca40ea50135fcc37980765ee22033e320eaf575624561bdbbe930060405160405180910390a3600101610364565b505060010161032a565b50505050565b6104c2610578565b7f52b130868e76fc87849159cef46eb9bb0156aa8877197d318e4437829044d00180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8381169182179092557f52b130868e76fc87849159cef46eb9bb0156aa8877197d318e4437829044d0008054604051919316907f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700905f90a35050565b7f52b130868e76fc87849159cef46eb9bb0156aa8877197d318e4437829044d0008054339073ffffffffffffffffffffffffffffffffffffffff168114610604576040517f118cdaa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610261565b5050565b5f5f60208385031215610619575f5ffd5b823567ffffffffffffffff81111561062f575f5ffd5b8301601f8101851361063f575f5ffd5b803567ffffffffffffffff811115610655575f5ffd5b8560208260051b8401011115610669575f5ffd5b6020919091019590945092505050565b80357fffffffff00000000000000000000000000000000000000000000000000000000811681146106a8575f5ffd5b919050565b5f602082840312156106bd575f5ffd5b6106c682610679565b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106a8575f5ffd5b5f60208284031215610700575f5ffd5b6106c6826106cd565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112610768575f5ffd5b9190910192915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040805190810167ffffffffffffffff811182821017156107c2576107c2610772565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561080f5761080f610772565b604052919050565b5f60408236031215610827575f5ffd5b61082f61079f565b610838836106cd565b8152602083013567ffffffffffffffff811115610853575f5ffd5b830136601f820112610863575f5ffd5b803567ffffffffffffffff81111561087d5761087d610772565b8060051b61088d602082016107c8565b918252602081840181019290810190368411156108a8575f5ffd5b6020850194505b838510156108d1576108c085610679565b8252602094850194909101906108af565b602086015250929594505050505056fea2646970667358221220fa6e6743b3283a3d4c1050210d895e7b69d17cbdfb939bb7d2a67ea4cfc6368964736f6c634300081c0033

Deployed Bytecode

0x608060405234801561000f575f5ffd5b506004361061006f575f3560e01c8063ae7473ac1161004d578063ae7473ac146100f2578063e30c397814610168578063f2fde38b146101a5575f5ffd5b806379ba5097146100735780638da5cb5b1461007d578063a47dbf82146100df575b5f5ffd5b61007b6101b8565b005b7f52b130868e76fc87849159cef46eb9bb0156aa8877197d318e4437829044d0005473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b61007b6100ed366004610608565b6102ff565b6100b66101003660046106ad565b7fffffffff00000000000000000000000000000000000000000000000000000000165f9081527f52b130868e76fc87849159cef46eb9bb0156aa8877197d318e4437829044d002602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b7f52b130868e76fc87849159cef46eb9bb0156aa8877197d318e4437829044d0015473ffffffffffffffffffffffffffffffffffffffff166100b6565b61007b6101b33660046106f0565b6104ba565b7f52b130868e76fc87849159cef46eb9bb0156aa8877197d318e4437829044d001547f52b130868e76fc87849159cef46eb9bb0156aa8877197d318e4437829044d0009073ffffffffffffffffffffffffffffffffffffffff163380821461026a576040517f118cdaa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024015b60405180910390fd5b50815460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3815473ffffffffffffffffffffffffffffffffffffffff9091167fffffffffffffffffffffffff0000000000000000000000000000000000000000918216178255600190910180549091169055565b610307610578565b7f52b130868e76fc87849159cef46eb9bb0156aa8877197d318e4437829044d0005f5b828110156104b4575f84848381811061034557610345610709565b90506020028101906103579190610736565b61036090610817565b90505f5b8160200151518110156104aa57815f0151846002015f8460200151848151811061039057610390610709565b60200260200101517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550815f015173ffffffffffffffffffffffffffffffffffffffff168260200151828151811061045057610450610709565b60200260200101517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167e38aaccfeca40ea50135fcc37980765ee22033e320eaf575624561bdbbe930060405160405180910390a3600101610364565b505060010161032a565b50505050565b6104c2610578565b7f52b130868e76fc87849159cef46eb9bb0156aa8877197d318e4437829044d00180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8381169182179092557f52b130868e76fc87849159cef46eb9bb0156aa8877197d318e4437829044d0008054604051919316907f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700905f90a35050565b7f52b130868e76fc87849159cef46eb9bb0156aa8877197d318e4437829044d0008054339073ffffffffffffffffffffffffffffffffffffffff168114610604576040517f118cdaa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610261565b5050565b5f5f60208385031215610619575f5ffd5b823567ffffffffffffffff81111561062f575f5ffd5b8301601f8101851361063f575f5ffd5b803567ffffffffffffffff811115610655575f5ffd5b8560208260051b8401011115610669575f5ffd5b6020919091019590945092505050565b80357fffffffff00000000000000000000000000000000000000000000000000000000811681146106a8575f5ffd5b919050565b5f602082840312156106bd575f5ffd5b6106c682610679565b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106a8575f5ffd5b5f60208284031215610700575f5ffd5b6106c6826106cd565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112610768575f5ffd5b9190910192915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040805190810167ffffffffffffffff811182821017156107c2576107c2610772565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561080f5761080f610772565b604052919050565b5f60408236031215610827575f5ffd5b61082f61079f565b610838836106cd565b8152602083013567ffffffffffffffff811115610853575f5ffd5b830136601f820112610863575f5ffd5b803567ffffffffffffffff81111561087d5761087d610772565b8060051b61088d602082016107c8565b918252602081840181019290810190368411156108a8575f5ffd5b6020850194505b838510156108d1576108c085610679565b8252602094850194909101906108af565b602086015250929594505050505056fea2646970667358221220fa6e6743b3283a3d4c1050210d895e7b69d17cbdfb939bb7d2a67ea4cfc6368964736f6c634300081c0033

Block Transaction Gas Used Reward
view all blocks produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits

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.