ETH Price: $2,798.34 (-5.21%)

Contract

0xf3792bae7F35DCdE2916c6e6A72cCD3a5330d565

Overview

ETH Balance

0 ETH

ETH Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Block
From
To
Start4251850002026-01-25 20:32:0918 mins ago1769373129IN
0xf3792bae...a5330d565
0.00002861 ETH0.00001170.020206
Start4251752222026-01-25 19:51:311 hr ago1769370691IN
0xf3792bae...a5330d565
0.00000824 ETH0.00001410.02005
Start4251598402026-01-25 18:47:412 hrs ago1769366861IN
0xf3792bae...a5330d565
0.00000841 ETH0.000014050.020142
Start4251278022026-01-25 16:34:184 hrs ago1769358858IN
0xf3792bae...a5330d565
0.00000831 ETH0.000014250.020096
Start4251216582026-01-25 16:08:514 hrs ago1769357331IN
0xf3792bae...a5330d565
0.00014221 ETH0.000026310.020348
Start4247871682026-01-24 16:48:3228 hrs ago1769273312IN
0xf3792bae...a5330d565
0 ETH0.000006870.02442
Start4247698852026-01-24 15:36:2629 hrs ago1769268986IN
0xf3792bae...a5330d565
0.00002443 ETH0.000021410.020378
Start4247479932026-01-24 14:05:1330 hrs ago1769263513IN
0xf3792bae...a5330d565
0.001 ETH0.00001570.02
Start4247156992026-01-24 11:50:3533 hrs ago1769255435IN
0xf3792bae...a5330d565
0 ETH0.000005260.020062
Start4247072222026-01-24 11:15:1933 hrs ago1769253319IN
0xf3792bae...a5330d565
0 ETH0.000006320.020028
Start4246804212026-01-24 9:23:3535 hrs ago1769246615IN
0xf3792bae...a5330d565
1.041878 ETH0.000005430.02016
Start4245420842026-01-23 23:46:1945 hrs ago1769211979IN
0xf3792bae...a5330d565
0 ETH0.000005720.02
Start4245296622026-01-23 22:54:1545 hrs ago1769208855IN
0xf3792bae...a5330d565
0.00011368 ETH0.000021920.020016
Start4244706232026-01-23 18:47:452 days ago1769194065IN
0xf3792bae...a5330d565
0.00000784 ETH0.000014030.020016
Start4244011122026-01-23 13:59:032 days ago1769176743IN
0xf3792bae...a5330d565
0 ETH0.000010570.020094
Start4243495622026-01-23 10:24:382 days ago1769163878IN
0xf3792bae...a5330d565
0 ETH0.000005510.020574
Start4243415772026-01-23 9:51:272 days ago1769161887IN
0xf3792bae...a5330d565
0 ETH0.000006430.020106
Start4243128552026-01-23 7:51:572 days ago1769154717IN
0xf3792bae...a5330d565
0.00000823 ETH0.000013950.020056
Start4243116192026-01-23 7:46:482 days ago1769154408IN
0xf3792bae...a5330d565
0.00000823 ETH0.000013970.020086
Start4243111202026-01-23 7:44:442 days ago1769154284IN
0xf3792bae...a5330d565
0 ETH0.000013170.020106
Start4243026502026-01-23 7:09:272 days ago1769152167IN
0xf3792bae...a5330d565
0.00000784 ETH0.000014390.020058
Start4243013782026-01-23 7:04:112 days ago1769151851IN
0xf3792bae...a5330d565
0 ETH0.000005480.02
Start4242967232026-01-23 6:44:492 days ago1769150689IN
0xf3792bae...a5330d565
0.00000831 ETH0.000014010.02
Start4242696602026-01-23 4:51:582 days ago1769143918IN
0xf3792bae...a5330d565
0.00065 ETH0.000005050.020002
Start4242689322026-01-23 4:48:562 days ago1769143736IN
0xf3792bae...a5330d565
0 ETH0.000013970.02014
View all transactions

Latest 25 internal transactions (View All)

Parent Transaction Hash Block From To
4251850002026-01-25 20:32:0918 mins ago1769373129
0xf3792bae...a5330d565
0.00002861 ETH
4251752222026-01-25 19:51:311 hr ago1769370691
0xf3792bae...a5330d565
0.00000824 ETH
4251707002026-01-25 19:32:501 hr ago1769369570
0xf3792bae...a5330d565
0.14220023 ETH
4251707002026-01-25 19:32:501 hr ago1769369570
0xf3792bae...a5330d565
0.14220023 ETH
4251598402026-01-25 18:47:412 hrs ago1769366861
0xf3792bae...a5330d565
0.00000841 ETH
4251278022026-01-25 16:34:184 hrs ago1769358858
0xf3792bae...a5330d565
0.00000831 ETH
4251216582026-01-25 16:08:514 hrs ago1769357331
0xf3792bae...a5330d565
0.00014221 ETH
4250267842026-01-25 9:33:4811 hrs ago1769333628
0xf3792bae...a5330d565
0.34510646 ETH
4250267842026-01-25 9:33:4811 hrs ago1769333628
0xf3792bae...a5330d565
0.34510646 ETH
4249178212026-01-25 1:58:4118 hrs ago1769306321
0xf3792bae...a5330d565
0.16921716 ETH
4249178212026-01-25 1:58:4118 hrs ago1769306321
0xf3792bae...a5330d565
0.16921716 ETH
4249101622026-01-25 1:26:3919 hrs ago1769304399
0xf3792bae...a5330d565
0.16678193 ETH
4249101622026-01-25 1:26:3919 hrs ago1769304399
0xf3792bae...a5330d565
0.16678193 ETH
4247698852026-01-24 15:36:2629 hrs ago1769268986
0xf3792bae...a5330d565
0.00002443 ETH
4247479932026-01-24 14:05:1330 hrs ago1769263513
0xf3792bae...a5330d565
0.001 ETH
4246804212026-01-24 9:23:3535 hrs ago1769246615
0xf3792bae...a5330d565
1.041878 ETH
4246723182026-01-24 8:49:4836 hrs ago1769244588
0xf3792bae...a5330d565
3.757282 ETH
4246723182026-01-24 8:49:4836 hrs ago1769244588
0xf3792bae...a5330d565
3.757282 ETH
4245884642026-01-24 3:00:0541 hrs ago1769223605
0xf3792bae...a5330d565
0.0990184 ETH
4245884642026-01-24 3:00:0541 hrs ago1769223605
0xf3792bae...a5330d565
0.0990184 ETH
4245857342026-01-24 2:48:4242 hrs ago1769222922
0xf3792bae...a5330d565
0.09709945 ETH
4245857342026-01-24 2:48:4242 hrs ago1769222922
0xf3792bae...a5330d565
0.09709945 ETH
4245296622026-01-23 22:54:1545 hrs ago1769208855
0xf3792bae...a5330d565
0.00011368 ETH
4244706232026-01-23 18:47:452 days ago1769194065
0xf3792bae...a5330d565
0.00000784 ETH
4244042362026-01-23 14:12:022 days ago1769177522
0xf3792bae...a5330d565
0.3578431 ETH
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  ]
[ 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.