FRAX Price: $1.03 (+6.56%)

Contract

0xf3792bae7F35DCdE2916c6e6A72cCD3a5330d565

Overview

FRAX Balance | FXTL Balance

0 FRAX | 55 FXTL

FRAX Value

$0.00

Token Holdings

More Info

Private Name Tags

Multichain Info

No addresses found
Age:7D
Reset Filter

Transaction Hash
Block
From
To

There are no matching entries

> 10 Internal Transactions and > 10 Token Transfers found.

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
312075072026-01-24 3:35:2515 hrs ago1769225725
0xf3792bae...a5330d565
0.1330652 FRAX
311623562026-01-23 2:30:2340 hrs ago1769135423
0xf3792bae...a5330d565
16.6884324 FRAX
311623562026-01-23 2:30:2340 hrs ago1769135423
0xf3792bae...a5330d565
16.6884324 FRAX
311617292026-01-23 2:09:2940 hrs ago1769134169
0xf3792bae...a5330d565
0.11975777 FRAX
311075572026-01-21 20:03:452 days ago1769025825
0xf3792bae...a5330d565
0.10578042 FRAX
310776062026-01-21 3:25:233 days ago1768965923
0xf3792bae...a5330d565
0.11857565 FRAX
310186692026-01-19 18:40:495 days ago1768848049
0xf3792bae...a5330d565
0.86971844 FRAX
309974102026-01-19 6:52:115 days ago1768805531
0xf3792bae...a5330d565
0.10778305 FRAX
309803692026-01-18 21:24:095 days ago1768771449
0xf3792bae...a5330d565
0.10995684 FRAX
309313662026-01-17 18:10:437 days ago1768673443
0xf3792bae...a5330d565
0.15440275 FRAX
309192482026-01-17 11:26:477 days ago1768649207
0xf3792bae...a5330d565
0.15440241 FRAX
309018782026-01-17 1:47:477 days ago1768614467
0xf3792bae...a5330d565
0.15436583 FRAX
308561422026-01-16 0:23:158 days ago1768522995
0xf3792bae...a5330d565
0.12509262 FRAX
308554812026-01-16 0:01:138 days ago1768521673
0xf3792bae...a5330d565
0.12504119 FRAX
308535662026-01-15 22:57:238 days ago1768517843
0xf3792bae...a5330d565
0.12504284 FRAX
308361792026-01-15 13:17:499 days ago1768483069
0xf3792bae...a5330d565
2 FRAX
308361792026-01-15 13:17:499 days ago1768483069
0xf3792bae...a5330d565
2 FRAX
307974662026-01-14 15:47:2310 days ago1768405643
0xf3792bae...a5330d565
112.60982457 FRAX
307835372026-01-14 8:03:0510 days ago1768377785
0xf3792bae...a5330d565
0.14346065 FRAX
307800242026-01-14 6:05:5910 days ago1768370759
0xf3792bae...a5330d565
0.14345458 FRAX
307658772026-01-13 22:14:2510 days ago1768342465
0xf3792bae...a5330d565
0.14293891 FRAX
307463022026-01-13 11:21:5511 days ago1768303315
0xf3792bae...a5330d565
0.14292847 FRAX
307409172026-01-13 8:22:2511 days ago1768292545
0xf3792bae...a5330d565
0.14287757 FRAX
307392222026-01-13 7:25:5511 days ago1768289155
0xf3792bae...a5330d565
0.14292866 FRAX
307352782026-01-13 5:14:2711 days ago1768281267
0xf3792bae...a5330d565
0.14321088 FRAX
View All Internal Transactions

Cross-Chain Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Diamond

Compiler Version
v0.8.25+commit.b61c2a91

Optimization Enabled:
Yes with 200 runs

Other Settings:
cancun EvmVersion
// SPDX-License-Identifier: UNLICENSED
// Copyright (c) Eywa.Fi, 2021-2025 - all rights reserved
pragma solidity 0.8.25;

import {IDiamond, IDiamondCut, IDiamondLoupe} from "./interfaces/IDiamond.sol";
import {AccessControlFacetStorage} from "./libraries/AccessControlFacetStorage.sol";
import {CoreFacetStorage} from "./libraries/CoreFacetStorage.sol";
import {DiamondStorage} from "./libraries/DiamondStorage.sol";


contract Diamond is IDiamond {
    using DiamondStorage for DiamondStorage.DS;
    using CoreFacetStorage for CoreFacetStorage.DS;
    using AccessControlFacetStorage for AccessControlFacetStorage.DS;

    /// @notice Default admin role identifier (0x00).
    bytes32 private constant DEFAULT_ADMIN_ROLE = 0x00;

    constructor() {
        AccessControlFacetStorage.ds().roles[DEFAULT_ADMIN_ROLE].members[msg.sender] = true;
    }

    /// @notice Fallback function to allow the contract to receive ETH.
    /// @dev Triggered when the contract receives ETH without any calldata.
    receive() external payable {}

    /// @notice Delegates calls to the appropriate facet based on function selector.
    /// @dev Uses low-level `delegatecall`. Reverts if no facet implements the selector.
    fallback() external payable {
        address facet = facetAddress(msg.sig);
        if (facet == address(0)) {
            revert FunctionNotFound(msg.sig);
        }
        assembly {
            calldatacopy(0, 0, calldatasize())
            let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)
            returndatacopy(0, 0, returndatasize())
            switch result
            case 0 { revert(0, returndatasize()) }
            default { return(0, returndatasize()) }
        }
    }

    /// @inheritdoc IDiamondCut
    function diamondCut(
        FacetCut[] calldata cut,
        address init,
        bytes calldata data
    ) 
        external
    {
        if (!AccessControlFacetStorage.ds().roles[DEFAULT_ADMIN_ROLE].members[msg.sender]) {
            revert UnauthorizedCaller();
        }
        if (cut.length == 0) {
            revert EmptyCut();
        }
        DiamondStorage.DS storage ds = DiamondStorage.ds();
        for (uint256 i = 0; i < cut.length; ++i) {
            FacetCutAction action = cut[i].action;
            if (action == FacetCutAction.Add) {
                _addFunctions(ds, cut[i].facetAddress, cut[i].functionSelectors);
            } else if (action == FacetCutAction.Replace) {
                _replaceFunctions(ds, cut[i].facetAddress, cut[i].functionSelectors);
            } else if (action == FacetCutAction.Remove) {
                _removeFunctions(ds, cut[i].functionSelectors);
            } else {
                revert UnknownFacetCutAction();
            }
        }
        emit DiamondCut(cut, init, data);
        if (init != address(0)) {
            if (init.code.length == 0) {
                revert InitHasNoCode();
            }
            (bool success, bytes memory result) = init.delegatecall(data);
            if (!success) assembly {
                revert(add(result, 32), mload(result))
            }
        }
    }

    /// @inheritdoc IDiamondLoupe
    function facetFunctionSelectors(address facet) external view returns (bytes4[] memory) {
        return DiamondStorage.ds().facetToSelectors[facet];
    }

    /// @inheritdoc IDiamondLoupe
    function facetAddresses() external view returns (address[] memory) {
        return DiamondStorage.ds().facets;
    }

    /// @inheritdoc IDiamondLoupe
    function facets() external view returns (Facet[] memory res) {
        DiamondStorage.DS storage ds = DiamondStorage.ds();
        uint256 count = ds.facets.length;
        res = new Facet[](count);
        for (uint256 i = 0; i < count; ++i) {
            address facet = ds.facets[i];
            res[i].facetAddress = facet;
            res[i].functionSelectors = ds.facetToSelectors[facet];
        }
    }

    /// @inheritdoc IDiamondLoupe
    function facetAddress(bytes4 selector) public view override returns (address) {
        return DiamondStorage.ds().selectorToFacet[selector];
    }

    /// @notice Registers new function selectors and maps them to a facet.
    /// @dev O(n) over `selectors`. Reverts: `FacetNotFound` (zero facet), `SelectorAlreadyExists` (selector mapped).
    /// @param ds Reference to Dispatcher storage struct.
    /// @param facet Facet address to assign selectors to.
    /// @param selectors Selectors to register.
    function _addFunctions(
        DiamondStorage.DS storage ds,
        address facet,
        bytes4[] calldata selectors
    ) 
        private 
    {
        if (facet == address(0)) {
            revert FacetNotFound();
        }
        if (selectors.length == 0) {
            revert EmptySelectors();
        }
        if (ds.facetIndex[facet] == 0) {
            ds.facets.push(facet);
            ds.facetIndex[facet] = ds.facets.length;
        }
        for (uint256 i = 0; i < selectors.length; ++i) {
            bytes4 selector = selectors[i];
            if (ds.selectorToFacet[selector] != address(0)) {
                revert SelectorAlreadyExists();
            }
            ds.selectorToFacet[selector] = facet;
            ds.facetToSelectors[facet].push(selector);
        }
    }

    /// @notice Replaces existing selectors with a new facet.
    /// @dev O(n). Reverts: `FacetNotFound` (zero facet), `SelectorAbsent` (selector missing), `SameFacet` (already mapped).
    /// @param ds Dispatcher storage.
    /// @param facet New facet address.
    /// @param selectors Selectors to replace.
    function _replaceFunctions(
        DiamondStorage.DS storage ds,
        address facet,
        bytes4[] calldata selectors
    ) 
        private 
    {
        if (facet == address(0)) {
            revert FacetNotFound();
        }
        if (selectors.length == 0) {
            revert EmptySelectors();
        }
        if (ds.facetIndex[facet] == 0) {
            ds.facets.push(facet);
            ds.facetIndex[facet] = ds.facets.length;
        }
        for (uint256 i = 0; i < selectors.length; ++i) {
            bytes4 selector = selectors[i];
            address oldFacet = ds.selectorToFacet[selector];
            if (oldFacet == address(0)) {
                revert SelectorAbsent();
            }
            if (oldFacet == facet) {
                revert SameFacet();
            }
            _unlinkSelector(ds, oldFacet, selector);
            ds.selectorToFacet[selector] = facet;
            ds.facetToSelectors[facet].push(selector);
        }
    }

    /// @notice Removes selectors from the dispatcher.
    /// @dev O(n). Reverts `SelectorAbsent` if selector not registered. Deletes facet if last selector removed.
    /// @param ds Dispatcher storage.
    /// @param selectors Selectors to remove.
    function _removeFunctions(
        DiamondStorage.DS storage ds,
        bytes4[] calldata selectors
    ) 
        private 
    {
        if (selectors.length == 0) {
            revert EmptySelectors();
        }
        for (uint256 i = 0; i < selectors.length; ++i) {
            bytes4 selector = selectors[i];
            address oldFacet = ds.selectorToFacet[selector];
            if (oldFacet == address(0)) {
                revert SelectorAbsent();
            }
            _unlinkSelector(ds, oldFacet, selector);
            delete ds.selectorToFacet[selector];
        }
    }

    /// @notice Detaches a selector from its facet and prunes facet if empty.
    /// @dev O(n) over facet’s selector list.
    /// @param ds Dispatcher storage.
    /// @param facet Facet address.
    /// @param selector Selector to unlink.
    function _unlinkSelector(
        DiamondStorage.DS storage ds,
        address facet,
        bytes4 selector
    ) 
        private 
    {
        bytes4[] storage selectors = ds.facetToSelectors[facet];
        uint256 length = selectors.length;
        for (uint256 i = 0; i < length; ++i) {
            if (selectors[i] == selector) {
                selectors[i] = selectors[length - 1];
                selectors.pop();
                break;
            }
        }
        if (selectors.length == 0) {
            uint256 currentIndex = ds.facetIndex[facet] - 1;
            uint256 lastIndex = ds.facets.length - 1;
            if (currentIndex != lastIndex) {
                address lastFacet = ds.facets[lastIndex];
                ds.facets[currentIndex] = lastFacet;
                ds.facetIndex[lastFacet] = currentIndex + 1;
            }
            ds.facets.pop();
            delete ds.facetIndex[facet];
        }
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Counters.sol)

pragma solidity ^0.8.0;

/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}

File 3 of 8 : IDiamond.sol
// SPDX-License-Identifier: UNLICENSED
// Copyright (c) Eywa.Fi, 2021-2025 - all rights reserved
pragma solidity 0.8.25;

import {IDiamondCut} from "./IDiamondCut.sol";
import {IDiamondLoupe} from "./IDiamondLoupe.sol";


interface IDiamond is IDiamondCut, IDiamondLoupe {
    /// @notice Thrown when an ETH transfer is attempted from an unauthorized sender.
    /// @param sender The address that tried to send ETH.
    error InvalidEthSender(address sender);

    /// @notice Thrown when trying to route a call with a selector that is not registered.
    /// @param selector The function selector that was not found.
    error FunctionNotFound(bytes4 selector);

    /// @notice Thrown when the provided facet address has no code.
    error InitHasNoCode();

    /// @notice Thrown when a facet address is zero during add or replace operation.
    error FacetNotFound();

    /// @notice Thrown when attempting to add a function selector that already exists.
    error SelectorAlreadyExists();

    /// @notice Thrown when trying to replace or remove a selector that does not exist.
    error SelectorAbsent();

    /// @notice Thrown when trying to replace a selector with the same facet it already belongs to.
    error SameFacet();

    /// @notice Thrown when an unknown `FacetCutAction` is passed to the `diamondCut` function.
    error UnknownFacetCutAction();

    /// @notice Thrown when `diamondCut` is called with an empty array.
    error EmptyCut();

    /// @notice Thrown when an empty selector array is passed to add/replace helpers.
    error EmptySelectors();

    /// @notice Thrown when the caller is not authorized to perform the action.
    error UnauthorizedCaller();
}

// SPDX-License-Identifier: UNLICENSED
// Copyright (c) Eywa.Fi, 2021-2025 - all rights reserved
pragma solidity 0.8.25;


interface IDiamondCut {
    /// @notice Enum describing the type of facet cut operation.
    /// @dev Used in `diamondCut` to define how selectors should be applied.
    enum FacetCutAction {
        Add, // Add new selectors
        Replace, // Replace existing selectors with new facet implementation
        Remove // Remove selectors from the diamond
    }

    /// @notice Struct representing a single change to the diamond's function selector table.
    /// @param facetAddress The address of the facet to which the selectors will be added or replaced.
    /// Must be zero address if action is Remove.
    /// @param action The type of operation (Add, Replace, Remove).
    /// @param functionSelectors The list of function selectors to apply.
    struct FacetCut {
        address facetAddress;
        FacetCutAction action;
        bytes4[] functionSelectors;
    }

    /// @notice Emitted when the diamond is updated via `diamondCut`.
    /// @param cut The list of facet changes applied.
    /// @param init The address of the initialization contract (if any).
    /// @param data The calldata passed to `init` via delegatecall after the cut.
    event DiamondCut(FacetCut[] cut, address init, bytes data);

    /// @notice Performs add/replace/remove operations on function selectors.
    /// @dev Follows the EIP-2535 `diamondCut` standard. Can optionally delegatecall an init function.
    /// @param cut The array of facet changes to apply.
    /// @param init The address of a contract with an initializer function (optional).
    /// @param data The calldata to pass to the initializer via delegatecall (optional).
    function diamondCut(FacetCut[] calldata cut, address init, bytes calldata data) external;
}

// SPDX-License-Identifier: UNLICENSED
// Copyright (c) Eywa.Fi, 2021-2025 - all rights reserved
pragma solidity 0.8.25;


interface IDiamondLoupe {
    /// @notice Struct returned by loupe functions to inspect facets and their selectors.
    /// @param facetAddress The address of the facet.
    /// @param functionSelectors The list of selectors implemented by this facet.
    struct Facet {
        address facetAddress;
        bytes4[] functionSelectors;
    }

    /// @notice Returns all facet addresses and the selectors they implement.
    /// @dev Used by tooling and scanners to inspect the structure of the diamond.
    /// @return An array of all facets with their function selectors.
    function facets() external view returns (Facet[] memory);

    /// @notice Returns the list of selectors for a given facet address.
    /// @param facet The address of the facet to inspect.
    /// @return The list of function selectors implemented by the facet.
    function facetFunctionSelectors(address facet) external view returns (bytes4[] memory);

    /// @notice Returns all unique facet addresses used by the diamond.
    /// @return An array of all facet addresses currently active in the diamond.
    function facetAddresses() external view returns (address[] memory);

    /// @notice Returns the facet address responsible for a specific selector.
    /// @param selector The function selector to lookup.
    /// @return The address of the facet that implements the selector, or address(0) if none.
    function facetAddress(bytes4 selector) external view returns (address);
}

File 6 of 8 : AccessControlFacetStorage.sol
// SPDX-License-Identifier: UNLICENSED
// Copyright (c) Eywa.Fi, 2021-2025 - all rights reserved
pragma solidity 0.8.25;


library AccessControlFacetStorage {
    /// @notice Fixed storage slot for the AccessControlFacet data structure.
    bytes32 private constant POSITION = keccak256("crosscurve.access.control.storage");

    /// @notice Structure representing a role and its associated data.
    /// @dev Each role stores its members and the admin role that controls it.
    struct RoleData {
        mapping(address => bool) members;
        bytes32 adminRole;
    }

    /// @notice Layout for all persistent AccessControlFacet state.  
    /// @dev Every variable needed by AccessControlFacet logic is grouped here and kept
    /// at the single slot defined in `POSITION`.
    struct DS {
        mapping(bytes32 => RoleData) roles;
    }

    /// @notice Accessor to the AccessControlFacet storage struct.
    /// @dev Assembly ties the returned reference to the predefined slot so the
    /// compiler understands where the struct actually lives in storage.
    /// @return s Pointer to the `DS` struct residing at `POSITION`.
    function ds() internal pure returns (DS storage s) {
        bytes32 pos = POSITION;
        assembly {
            s.slot := pos
        }
    }
}

// SPDX-License-Identifier: UNLICENSED
// Copyright (c) Eywa.Fi, 2021-2025 - all rights reserved
pragma solidity 0.8.25;

import "@openzeppelin/contracts/utils/Counters.sol";

/// @notice Structure with information about cross-chain transaction delivery.
/// @param hashSynthParams hash from the parameters of a successfully delivered cross-chain transaction.
/// @param crossChainOpState cross-chain transaction delivery status.
struct ProcessedOps {
    bytes32 hashSynthParams;
    uint8 crossChainOpState;
}

library CoreFacetStorage {
    /// @notice Fixed storage slot for the CoreFacet data structure.
    bytes32 private constant POSITION = keccak256("crosscurve.core.facet.storage");

    /// @notice Slot for the currentRequestId.
    /// @dev keccak256("crosscurve.core.facet.transient.currentRequestId");
    bytes32 private constant CURRENT_REQUEST_ID_POS = 0x4c0fc00f7060fb51f491b90bbb038205c36b6fbc6a8aed52d27b18d2967b53f4;

    /// @notice Slot for the currentChainIdFrom.
    /// @dev keccak256("crosscurve.core.facet.transient.currentChainIdFrom");
    bytes32 private constant CURRENT_CHAIN_ID_FROM_POS = 0x67b6f0fb6bca8398a49a7966c252819542f4d36560c9c6961937957fdf20f9f4;

    /// @notice Slot for the isOriginNetwork.
    /// @dev keccak256("crosscurve.core.facet.transient.isOriginNetwork");
    bytes32 private constant IS_ORIGIN_NETWORK_POS = 0xb13bd13498ce9409b85a4287d16ff0fcdaca732822a47a97d2bdada3325aa451;

    /// @notice Slot for the isDiamondCall.
    /// @dev keccak256("crosscurve.core.facet.transient.isDiamondCall");
    bytes32 private constant IS_DIAMOND_CALL = 0x2e445143a211ecbb689de5812742d02a96369c482aec76832fc56490cf3cc6f2;

    /// @notice Slot for the isReentrancyLocked.
    /// @dev keccak256("crosscurve.core.facet.transient.isReentrancyLocked");
    bytes32 private constant IS_REENTRANCY_LOCKED = 0x1e0578bb15c7ba996e367f5cb2606a2c0e49f47e3ec9ce25487e41761d562498;

    /// @notice Slot for msgValueLeft budget (origin start only).
    /// @dev keccak256("crosscurve.core.facet.transient.msgValueLeft");
    bytes32 private constant MSG_VALUE_LEFT_POS = 0x7f3e5ed8ce4a8806c618eaa07afc27516c5c690793b80b8262a28aa8675561fc;

    /// @notice Thrown when an op tries to spend more ETH than was provided in msg.value for the whole start().
    error MsgValueBudgetExceeded(uint256 requested, uint256 left);

    /// @notice Layout for all persistent CoreFacet state.  
    /// @dev Every variable needed by CoreFacet logic is grouped here and kept
    /// at the single slot defined in `POSITION`.
    struct DS {
        mapping(address => Counters.Counter) nonces;
        mapping(bytes32 => bytes32) startedOps;
        mapping(bytes32 => ProcessedOps) processedOps;
        address addressBook;
        address treasury;
        address WETH;
    }

    /// @notice Accessor to the CoreFacet storage struct.
    /// @dev Assembly ties the returned reference to the predefined slot so the
    /// compiler understands where the struct actually lives in storage.
    /// @return s Pointer to the `DS` struct residing at `POSITION`.
    function ds() internal pure returns (DS storage s) {
        bytes32 pos = POSITION;
        assembly {
            s.slot := pos
        }
    }

    function setCurrentRequestId(bytes32 currentRequestId_) internal {
        assembly ("memory-safe") {
            tstore(CURRENT_REQUEST_ID_POS, currentRequestId_)
        }
    }

    function currentRequestId() internal view returns (bytes32 currentRequestId_) {
        assembly ("memory-safe") {
            currentRequestId_ := tload(CURRENT_REQUEST_ID_POS)
        }
    }

    function setCurrentChainIdFrom(uint64 currentChainIdFrom_) internal {
        assembly ("memory-safe") {
            tstore(CURRENT_CHAIN_ID_FROM_POS, currentChainIdFrom_)
        }
    }

    function currentChainIdFrom() internal view returns (uint64 currentChainIdFrom_) {
        assembly ("memory-safe") {
            currentChainIdFrom_ := tload(CURRENT_CHAIN_ID_FROM_POS)
        }
    }

    function setOriginNetwork(bool isOriginNetwork_) internal {
        assembly ("memory-safe") {
            tstore(IS_ORIGIN_NETWORK_POS, isOriginNetwork_)
        }
    }

    function isOriginNetwork() internal view returns (bool isOriginNetwork_) {
        assembly ("memory-safe") {
            isOriginNetwork_ := tload(IS_ORIGIN_NETWORK_POS)
        }
    }

    function setDiamondCall(bool isDiamondCall_) internal {
        assembly ("memory-safe") {
            tstore(IS_DIAMOND_CALL, isDiamondCall_)
        }
    }

    function isDiamondCall() internal view returns (bool isDiamondCall_) {
        assembly ("memory-safe") {
            isDiamondCall_ := tload(IS_DIAMOND_CALL)
        }
    }

    function setReentrancyLock(bool isLocked_) internal {
        assembly ("memory-safe") {
            tstore(IS_REENTRANCY_LOCKED, isLocked_)
        }
    }

    function isReentrancyLocked() internal view returns (bool isLocked_) {
        assembly ("memory-safe") {
            isLocked_ := tload(IS_REENTRANCY_LOCKED)
        }
    }

    function setMsgValueLeft(uint256 msgValueLeft_) internal {
        assembly ("memory-safe") {
            tstore(MSG_VALUE_LEFT_POS, msgValueLeft_)
        }
    }

    function msgValueLeft() internal view returns (uint256 msgValueLeft_) {
        assembly ("memory-safe") {
            msgValueLeft_ := tload(MSG_VALUE_LEFT_POS)
        }
    }

    function consumeMsgValue(uint256 amount) internal {
        uint256 left;
        assembly ("memory-safe") {
            left := tload(MSG_VALUE_LEFT_POS)
        }
        if (amount > left) {
            revert MsgValueBudgetExceeded(amount, left);
        }
        unchecked {
            left -= amount;
        }
        assembly ("memory-safe") {
            tstore(MSG_VALUE_LEFT_POS, left)
        }
    }
}

File 8 of 8 : DiamondStorage.sol
// SPDX-License-Identifier: UNLICENSED
// Copyright (c) Eywa.Fi, 2021-2025 - all rights reserved
pragma solidity 0.8.25;


library DiamondStorage {
    /// @notice Fixed storage slot for the Diamond data structure.
    bytes32 private constant POSITION = keccak256("crosscurve.diamond.storage");

    /// @notice Layout for all persistent Diamond state.  
    /// @dev Every variable needed by Diamond logic is grouped here and kept
    /// at the single slot defined in `POSITION`.
    struct DS {
        mapping(bytes4 => address) selectorToFacet;
        mapping(address => bytes4[]) facetToSelectors;
        address[] facets;
        mapping(address => uint256) facetIndex;
    }

    /// @notice Accessor to the Diamond storage struct.
    /// @dev Assembly ties the returned reference to the predefined slot so the
    /// compiler understands where the struct actually lives in storage.
    /// @return s Pointer to the `DS` struct residing at `POSITION`.
    function ds() internal pure returns (DS storage s) {
        bytes32 pos = POSITION;
        assembly {
            s.slot := pos
        }
    }
}

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

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"EmptyCut","type":"error"},{"inputs":[],"name":"EmptySelectors","type":"error"},{"inputs":[],"name":"FacetNotFound","type":"error"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"FunctionNotFound","type":"error"},{"inputs":[],"name":"InitHasNoCode","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"InvalidEthSender","type":"error"},{"inputs":[],"name":"SameFacet","type":"error"},{"inputs":[],"name":"SelectorAbsent","type":"error"},{"inputs":[],"name":"SelectorAlreadyExists","type":"error"},{"inputs":[],"name":"UnauthorizedCaller","type":"error"},{"inputs":[],"name":"UnknownFacetCutAction","type":"error"},{"anonymous":false,"inputs":[{"components":[{"internalType":"address","name":"facetAddress","type":"address"},{"internalType":"enum IDiamondCut.FacetCutAction","name":"action","type":"uint8"},{"internalType":"bytes4[]","name":"functionSelectors","type":"bytes4[]"}],"indexed":false,"internalType":"struct IDiamondCut.FacetCut[]","name":"cut","type":"tuple[]"},{"indexed":false,"internalType":"address","name":"init","type":"address"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"DiamondCut","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"components":[{"internalType":"address","name":"facetAddress","type":"address"},{"internalType":"enum IDiamondCut.FacetCutAction","name":"action","type":"uint8"},{"internalType":"bytes4[]","name":"functionSelectors","type":"bytes4[]"}],"internalType":"struct IDiamondCut.FacetCut[]","name":"cut","type":"tuple[]"},{"internalType":"address","name":"init","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"diamondCut","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"facetAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"facetAddresses","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"facet","type":"address"}],"name":"facetFunctionSelectors","outputs":[{"internalType":"bytes4[]","name":"","type":"bytes4[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"facets","outputs":[{"components":[{"internalType":"address","name":"facetAddress","type":"address"},{"internalType":"bytes4[]","name":"functionSelectors","type":"bytes4[]"}],"internalType":"struct IDiamondLoupe.Facet[]","name":"res","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052348015600e575f80fd5b50335f9081527f89f132207fd53fa8a62addedf1f292af47df69bf17d6edd403280e2b00462f6a60205260408120805460ff1916600117905561144f90819061005690395ff3fe60806040526004361061004d575f3560e01c80631f931c1c146100c357806352ef6b2c146100e25780637a0ed6271461010c578063adfca15e1461012d578063cdffacc61461015957610054565b3661005457005b5f6100695f356001600160e01b031916610190565b90506001600160a01b0381166100a357604051630a82dd7360e31b81526001600160e01b03195f3516600482015260240160405180910390fd5b365f80375f80365f845af43d5f803e8080156100bd573d5ff35b3d5ffd5b005b3480156100ce575f80fd5b506100c16100dd366004610f04565b6101c0565b3480156100ed575f80fd5b506100f66104f4565b6040516101039190610fad565b60405180910390f35b348015610117575f80fd5b50610120610563565b6040516101039190610ff9565b348015610138575f80fd5b5061014c6101473660046110aa565b610717565b60405161010391906110ca565b348015610164575f80fd5b50610178610173366004611122565b610190565b6040516001600160a01b039091168152602001610103565b6001600160e01b0319165f9081525f805160206113fa83398151915260205260409020546001600160a01b031690565b335f9081527f89f132207fd53fa8a62addedf1f292af47df69bf17d6edd403280e2b00462f6a602052604090205460ff1661020e57604051635c427cd960e01b815260040160405180910390fd5b5f84900361022f576040516337a8a76360e11b815260040160405180910390fd5b5f805160206113fa8339815191525f5b85811015610405575f87878381811061025a5761025a61113b565b905060200281019061026c919061114f565b61027d90604081019060200161117b565b90505f81600281111561029257610292611194565b0361030957610304838989858181106102ad576102ad61113b565b90506020028101906102bf919061114f565b6102cd9060208101906110aa565b8a8a868181106102df576102df61113b565b90506020028101906102f1919061114f565b6102ff9060408101906111a8565b6107cb565b6103fc565b600181600281111561031d5761031d611194565b0361038f57610304838989858181106103385761033861113b565b905060200281019061034a919061114f565b6103589060208101906110aa565b8a8a8681811061036a5761036a61113b565b905060200281019061037c919061114f565b61038a9060408101906111a8565b610978565b60028160028111156103a3576103a3611194565b036103e357610304838989858181106103be576103be61113b565b90506020028101906103d0919061114f565b6103de9060408101906111a8565b610b5c565b60405163e4fc41f560e01b815260040160405180910390fd5b5060010161023f565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb673868686868660405161043d95949392919061125c565b60405180910390a16001600160a01b038416156104ec57836001600160a01b03163b5f0361047e5760405163239d8b5760e11b815260040160405180910390fd5b5f80856001600160a01b0316858560405161049a929190611382565b5f60405180830381855af49150503d805f81146104d2576040519150601f19603f3d011682016040523d82523d5f602084013e6104d7565b606091505b5091509150816104e957805160208201fd5b50505b505050505050565b60605f805160206113fa83398151915260020180548060200260200160405190810160405280929190818152602001828054801561055957602002820191905f5260205f20905b81546001600160a01b0316815260019091019060200180831161053b575b5050505050905090565b7f778dfe9e9bcb233aa2cc582f8ac4d0e848b68b4aec23bf924addf2c780d16628546060905f805160206113fa833981519152908067ffffffffffffffff8111156105b0576105b0611391565b6040519080825280602002602001820160405280156105f557816020015b604080518082019091525f8152606060208201528152602001906001900390816105ce5790505b5092505f5b81811015610711575f8360020182815481106106185761061861113b565b905f5260205f20015f9054906101000a90046001600160a01b03169050808583815181106106485761064861113b565b6020908102919091018101516001600160a01b0392831690529082165f908152600186018252604090819020805482518185028101850190935280835291929091908301828280156106e357602002820191905f5260205f20905f905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116106a55790505b50505050508583815181106106fa576106fa61113b565b6020908102919091018101510152506001016105fa565b50505090565b6001600160a01b0381165f9081527f778dfe9e9bcb233aa2cc582f8ac4d0e848b68b4aec23bf924addf2c780d1662760209081526040918290208054835181840281018401909452808452606093928301828280156107bf57602002820191905f5260205f20905f905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116107815790505b50505050509050919050565b6001600160a01b0383166107f257604051632002ac4b60e21b815260040160405180910390fd5b5f8190036108135760405163019daeeb60e21b815260040160405180910390fd5b6001600160a01b0383165f9081526003850160205260408120549003610879576002840180546001810182555f828152602080822090920180546001600160a01b0319166001600160a01b03881690811790915592549281526003870190915260409020555b5f5b81811015610971575f8383838181106108965761089661113b565b90506020020160208101906108ab9190611122565b6001600160e01b031981165f908152602088905260409020549091506001600160a01b0316156108ee5760405163455b052d60e11b815260040160405180910390fd5b6001600160e01b031981165f9081526020878152604080832080546001600160a01b0319166001600160a01b038a1690811790915583526001808a01835290832080548083018255908452919092206008820401805463ffffffff60079093166004026101000a928302191660e09490941c91909102929092179091550161087b565b5050505050565b6001600160a01b03831661099f57604051632002ac4b60e21b815260040160405180910390fd5b5f8190036109c05760405163019daeeb60e21b815260040160405180910390fd5b6001600160a01b0383165f9081526003850160205260408120549003610a26576002840180546001810182555f828152602080822090920180546001600160a01b0319166001600160a01b03881690811790915592549281526003870190915260409020555b5f5b81811015610971575f838383818110610a4357610a4361113b565b9050602002016020810190610a589190611122565b6001600160e01b031981165f908152602088905260409020549091506001600160a01b031680610a9b576040516327b1f42160e11b815260040160405180910390fd5b856001600160a01b0316816001600160a01b031603610acd57604051631ad7247d60e31b815260040160405180910390fd5b610ad8878284610c31565b506001600160e01b031981165f9081526020878152604080832080546001600160a01b0319166001600160a01b038a1690811790915583526001808a01835290832080548083018255908452919092206008820401805463ffffffff60079093166004026101000a928302191660e09490941c919091029290921790915501610a28565b5f819003610b7d5760405163019daeeb60e21b815260040160405180910390fd5b5f5b81811015610c2b575f838383818110610b9a57610b9a61113b565b9050602002016020810190610baf9190611122565b6001600160e01b031981165f908152602087905260409020549091506001600160a01b031680610bf2576040516327b1f42160e11b815260040160405180910390fd5b610bfd868284610c31565b506001600160e01b0319165f90815260208590526040902080546001600160a01b0319169055600101610b7f565b50505050565b6001600160a01b0382165f9081526001840160205260408120805490915b81811015610d6a57836001600160e01b031916838281548110610c7457610c7461113b565b905f5260205f2090600891828204019190066004029054906101000a900460e01b6001600160e01b03191603610d625782610cb06001846113b9565b81548110610cc057610cc061113b565b905f5260205f2090600891828204019190066004029054906101000a900460e01b838281548110610cf357610cf361113b565b905f5260205f2090600891828204019190066004026101000a81548163ffffffff021916908360e01c021790555082805480610d3157610d316113d2565b5f8281526020902060085f1990920191820401805463ffffffff600460078516026101000a02191690559055610d6a565b600101610c4f565b5081545f03610971576001600160a01b0384165f908152600386016020526040812054610d99906001906113b9565b60028701549091505f90610daf906001906113b9565b9050808214610e4d575f876002018281548110610dce57610dce61113b565b5f918252602090912001546002890180546001600160a01b039092169250829185908110610dfe57610dfe61113b565b5f91825260209091200180546001600160a01b0319166001600160a01b0392909216919091179055610e318360016113e6565b6001600160a01b039091165f9081526003890160205260409020555b86600201805480610e6057610e606113d2565b5f828152602080822083015f1990810180546001600160a01b03191690559092019092556001600160a01b0388168252600389019052604081205550505050505050565b80356001600160a01b0381168114610eba575f80fd5b919050565b5f8083601f840112610ecf575f80fd5b50813567ffffffffffffffff811115610ee6575f80fd5b602083019150836020828501011115610efd575f80fd5b9250929050565b5f805f805f60608688031215610f18575f80fd5b853567ffffffffffffffff80821115610f2f575f80fd5b818801915088601f830112610f42575f80fd5b813581811115610f50575f80fd5b8960208260051b8501011115610f64575f80fd5b60208301975080965050610f7a60208901610ea4565b94506040880135915080821115610f8f575f80fd5b50610f9c88828901610ebf565b969995985093965092949392505050565b602080825282518282018190525f9190848201906040850190845b81811015610fed5783516001600160a01b031683529284019291840191600101610fc8565b50909695505050505050565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b8381101561109c57888303603f19018552815180516001600160a01b031684528701518784018790528051878501819052908801905f9060608601905b808310156110875783516001600160e01b0319168252928a019260019290920191908a019061105d565b50968901969450505090860190600101611020565b509098975050505050505050565b5f602082840312156110ba575f80fd5b6110c382610ea4565b9392505050565b602080825282518282018190525f9190848201906040850190845b81811015610fed5783516001600160e01b031916835292840192918401916001016110e5565b80356001600160e01b031981168114610eba575f80fd5b5f60208284031215611132575f80fd5b6110c38261110b565b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112611163575f80fd5b9190910192915050565b803560038110610eba575f80fd5b5f6020828403121561118b575f80fd5b6110c38261116d565b634e487b7160e01b5f52602160045260245ffd5b5f808335601e198436030181126111bd575f80fd5b83018035915067ffffffffffffffff8211156111d7575f80fd5b6020019150600581901b3603821315610efd575f80fd5b8183525f60208085019450825f5b85811015611229576001600160e01b03196112168361110b565b16875295820195908201906001016111fc565b509495945050505050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b60608082528181018690525f90600560808085019089831b8601018a855b8b81101561134f57878303607f190184528135368e9003605e1901811261129f575f80fd5b8d016001600160a01b036112b282610ea4565b16845260206112c281830161116d565b600381106112de57634e487b7160e01b5f52602160045260245ffd5b8582015260408281013536849003601e190181126112fa575f80fd5b90920181810192903567ffffffffffffffff811115611317575f80fd5b80891b3603841315611327575f80fd5b89828801526113398a880182866111ee565b978301979650505092909201915060010161127a565b50506001600160a01b0389166020870152858103604087015261137381888a611234565b9b9a5050505050505050505050565b818382375f9101908152919050565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b818103818111156113cc576113cc6113a5565b92915050565b634e487b7160e01b5f52603160045260245ffd5b808201808211156113cc576113cc6113a556fe778dfe9e9bcb233aa2cc582f8ac4d0e848b68b4aec23bf924addf2c780d16626a26469706673582212203ecbf61dcddca34217a72a0ff0d6e05a5b2d5f1b9f2b43fc1da70d42e236b60c64736f6c63430008190033

Deployed Bytecode

0x60806040526004361061004d575f3560e01c80631f931c1c146100c357806352ef6b2c146100e25780637a0ed6271461010c578063adfca15e1461012d578063cdffacc61461015957610054565b3661005457005b5f6100695f356001600160e01b031916610190565b90506001600160a01b0381166100a357604051630a82dd7360e31b81526001600160e01b03195f3516600482015260240160405180910390fd5b365f80375f80365f845af43d5f803e8080156100bd573d5ff35b3d5ffd5b005b3480156100ce575f80fd5b506100c16100dd366004610f04565b6101c0565b3480156100ed575f80fd5b506100f66104f4565b6040516101039190610fad565b60405180910390f35b348015610117575f80fd5b50610120610563565b6040516101039190610ff9565b348015610138575f80fd5b5061014c6101473660046110aa565b610717565b60405161010391906110ca565b348015610164575f80fd5b50610178610173366004611122565b610190565b6040516001600160a01b039091168152602001610103565b6001600160e01b0319165f9081525f805160206113fa83398151915260205260409020546001600160a01b031690565b335f9081527f89f132207fd53fa8a62addedf1f292af47df69bf17d6edd403280e2b00462f6a602052604090205460ff1661020e57604051635c427cd960e01b815260040160405180910390fd5b5f84900361022f576040516337a8a76360e11b815260040160405180910390fd5b5f805160206113fa8339815191525f5b85811015610405575f87878381811061025a5761025a61113b565b905060200281019061026c919061114f565b61027d90604081019060200161117b565b90505f81600281111561029257610292611194565b0361030957610304838989858181106102ad576102ad61113b565b90506020028101906102bf919061114f565b6102cd9060208101906110aa565b8a8a868181106102df576102df61113b565b90506020028101906102f1919061114f565b6102ff9060408101906111a8565b6107cb565b6103fc565b600181600281111561031d5761031d611194565b0361038f57610304838989858181106103385761033861113b565b905060200281019061034a919061114f565b6103589060208101906110aa565b8a8a8681811061036a5761036a61113b565b905060200281019061037c919061114f565b61038a9060408101906111a8565b610978565b60028160028111156103a3576103a3611194565b036103e357610304838989858181106103be576103be61113b565b90506020028101906103d0919061114f565b6103de9060408101906111a8565b610b5c565b60405163e4fc41f560e01b815260040160405180910390fd5b5060010161023f565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb673868686868660405161043d95949392919061125c565b60405180910390a16001600160a01b038416156104ec57836001600160a01b03163b5f0361047e5760405163239d8b5760e11b815260040160405180910390fd5b5f80856001600160a01b0316858560405161049a929190611382565b5f60405180830381855af49150503d805f81146104d2576040519150601f19603f3d011682016040523d82523d5f602084013e6104d7565b606091505b5091509150816104e957805160208201fd5b50505b505050505050565b60605f805160206113fa83398151915260020180548060200260200160405190810160405280929190818152602001828054801561055957602002820191905f5260205f20905b81546001600160a01b0316815260019091019060200180831161053b575b5050505050905090565b7f778dfe9e9bcb233aa2cc582f8ac4d0e848b68b4aec23bf924addf2c780d16628546060905f805160206113fa833981519152908067ffffffffffffffff8111156105b0576105b0611391565b6040519080825280602002602001820160405280156105f557816020015b604080518082019091525f8152606060208201528152602001906001900390816105ce5790505b5092505f5b81811015610711575f8360020182815481106106185761061861113b565b905f5260205f20015f9054906101000a90046001600160a01b03169050808583815181106106485761064861113b565b6020908102919091018101516001600160a01b0392831690529082165f908152600186018252604090819020805482518185028101850190935280835291929091908301828280156106e357602002820191905f5260205f20905f905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116106a55790505b50505050508583815181106106fa576106fa61113b565b6020908102919091018101510152506001016105fa565b50505090565b6001600160a01b0381165f9081527f778dfe9e9bcb233aa2cc582f8ac4d0e848b68b4aec23bf924addf2c780d1662760209081526040918290208054835181840281018401909452808452606093928301828280156107bf57602002820191905f5260205f20905f905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116107815790505b50505050509050919050565b6001600160a01b0383166107f257604051632002ac4b60e21b815260040160405180910390fd5b5f8190036108135760405163019daeeb60e21b815260040160405180910390fd5b6001600160a01b0383165f9081526003850160205260408120549003610879576002840180546001810182555f828152602080822090920180546001600160a01b0319166001600160a01b03881690811790915592549281526003870190915260409020555b5f5b81811015610971575f8383838181106108965761089661113b565b90506020020160208101906108ab9190611122565b6001600160e01b031981165f908152602088905260409020549091506001600160a01b0316156108ee5760405163455b052d60e11b815260040160405180910390fd5b6001600160e01b031981165f9081526020878152604080832080546001600160a01b0319166001600160a01b038a1690811790915583526001808a01835290832080548083018255908452919092206008820401805463ffffffff60079093166004026101000a928302191660e09490941c91909102929092179091550161087b565b5050505050565b6001600160a01b03831661099f57604051632002ac4b60e21b815260040160405180910390fd5b5f8190036109c05760405163019daeeb60e21b815260040160405180910390fd5b6001600160a01b0383165f9081526003850160205260408120549003610a26576002840180546001810182555f828152602080822090920180546001600160a01b0319166001600160a01b03881690811790915592549281526003870190915260409020555b5f5b81811015610971575f838383818110610a4357610a4361113b565b9050602002016020810190610a589190611122565b6001600160e01b031981165f908152602088905260409020549091506001600160a01b031680610a9b576040516327b1f42160e11b815260040160405180910390fd5b856001600160a01b0316816001600160a01b031603610acd57604051631ad7247d60e31b815260040160405180910390fd5b610ad8878284610c31565b506001600160e01b031981165f9081526020878152604080832080546001600160a01b0319166001600160a01b038a1690811790915583526001808a01835290832080548083018255908452919092206008820401805463ffffffff60079093166004026101000a928302191660e09490941c919091029290921790915501610a28565b5f819003610b7d5760405163019daeeb60e21b815260040160405180910390fd5b5f5b81811015610c2b575f838383818110610b9a57610b9a61113b565b9050602002016020810190610baf9190611122565b6001600160e01b031981165f908152602087905260409020549091506001600160a01b031680610bf2576040516327b1f42160e11b815260040160405180910390fd5b610bfd868284610c31565b506001600160e01b0319165f90815260208590526040902080546001600160a01b0319169055600101610b7f565b50505050565b6001600160a01b0382165f9081526001840160205260408120805490915b81811015610d6a57836001600160e01b031916838281548110610c7457610c7461113b565b905f5260205f2090600891828204019190066004029054906101000a900460e01b6001600160e01b03191603610d625782610cb06001846113b9565b81548110610cc057610cc061113b565b905f5260205f2090600891828204019190066004029054906101000a900460e01b838281548110610cf357610cf361113b565b905f5260205f2090600891828204019190066004026101000a81548163ffffffff021916908360e01c021790555082805480610d3157610d316113d2565b5f8281526020902060085f1990920191820401805463ffffffff600460078516026101000a02191690559055610d6a565b600101610c4f565b5081545f03610971576001600160a01b0384165f908152600386016020526040812054610d99906001906113b9565b60028701549091505f90610daf906001906113b9565b9050808214610e4d575f876002018281548110610dce57610dce61113b565b5f918252602090912001546002890180546001600160a01b039092169250829185908110610dfe57610dfe61113b565b5f91825260209091200180546001600160a01b0319166001600160a01b0392909216919091179055610e318360016113e6565b6001600160a01b039091165f9081526003890160205260409020555b86600201805480610e6057610e606113d2565b5f828152602080822083015f1990810180546001600160a01b03191690559092019092556001600160a01b0388168252600389019052604081205550505050505050565b80356001600160a01b0381168114610eba575f80fd5b919050565b5f8083601f840112610ecf575f80fd5b50813567ffffffffffffffff811115610ee6575f80fd5b602083019150836020828501011115610efd575f80fd5b9250929050565b5f805f805f60608688031215610f18575f80fd5b853567ffffffffffffffff80821115610f2f575f80fd5b818801915088601f830112610f42575f80fd5b813581811115610f50575f80fd5b8960208260051b8501011115610f64575f80fd5b60208301975080965050610f7a60208901610ea4565b94506040880135915080821115610f8f575f80fd5b50610f9c88828901610ebf565b969995985093965092949392505050565b602080825282518282018190525f9190848201906040850190845b81811015610fed5783516001600160a01b031683529284019291840191600101610fc8565b50909695505050505050565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b8381101561109c57888303603f19018552815180516001600160a01b031684528701518784018790528051878501819052908801905f9060608601905b808310156110875783516001600160e01b0319168252928a019260019290920191908a019061105d565b50968901969450505090860190600101611020565b509098975050505050505050565b5f602082840312156110ba575f80fd5b6110c382610ea4565b9392505050565b602080825282518282018190525f9190848201906040850190845b81811015610fed5783516001600160e01b031916835292840192918401916001016110e5565b80356001600160e01b031981168114610eba575f80fd5b5f60208284031215611132575f80fd5b6110c38261110b565b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112611163575f80fd5b9190910192915050565b803560038110610eba575f80fd5b5f6020828403121561118b575f80fd5b6110c38261116d565b634e487b7160e01b5f52602160045260245ffd5b5f808335601e198436030181126111bd575f80fd5b83018035915067ffffffffffffffff8211156111d7575f80fd5b6020019150600581901b3603821315610efd575f80fd5b8183525f60208085019450825f5b85811015611229576001600160e01b03196112168361110b565b16875295820195908201906001016111fc565b509495945050505050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b60608082528181018690525f90600560808085019089831b8601018a855b8b81101561134f57878303607f190184528135368e9003605e1901811261129f575f80fd5b8d016001600160a01b036112b282610ea4565b16845260206112c281830161116d565b600381106112de57634e487b7160e01b5f52602160045260245ffd5b8582015260408281013536849003601e190181126112fa575f80fd5b90920181810192903567ffffffffffffffff811115611317575f80fd5b80891b3603841315611327575f80fd5b89828801526113398a880182866111ee565b978301979650505092909201915060010161127a565b50506001600160a01b0389166020870152858103604087015261137381888a611234565b9b9a5050505050505050505050565b818382375f9101908152919050565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b818103818111156113cc576113cc6113a5565b92915050565b634e487b7160e01b5f52603160045260245ffd5b808201808211156113cc576113cc6113a556fe778dfe9e9bcb233aa2cc582f8ac4d0e848b68b4aec23bf924addf2c780d16626a26469706673582212203ecbf61dcddca34217a72a0ff0d6e05a5b2d5f1b9f2b43fc1da70d42e236b60c64736f6c63430008190033

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.