ETH Price: $2,090.27 (+0.44%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Unpause244463802026-02-13 7:30:352 days ago1770967835IN
0xf3792bae...a5330d565
0 ETH0.000002170.06028839
Diamond Cut244406672026-02-12 12:22:232 days ago1770898943IN
0xf3792bae...a5330d565
0 ETH0.000492643.89260372
Set Bungee Targe...244400252026-02-12 10:13:112 days ago1770891191IN
0xf3792bae...a5330d565
0 ETH0.000006630.11473486
Set Bungee Spend...244400222026-02-12 10:12:352 days ago1770891155IN
0xf3792bae...a5330d565
0 ETH0.00000640.11080167
Set Bungee Targe...244400172026-02-12 10:11:352 days ago1770891095IN
0xf3792bae...a5330d565
0 ETH0.000006770.11709236
Set Bungee Spend...244400142026-02-12 10:10:592 days ago1770891059IN
0xf3792bae...a5330d565
0 ETH0.000007310.12651511
Pause243644222026-02-01 20:32:5913 days ago1769977979IN
0xf3792bae...a5330d565
0 ETH0.000011680.2010421
Start243570872026-01-31 19:57:2314 days ago1769889443IN
0xf3792bae...a5330d565
0 ETH0.002880653.42002634
Start243565782026-01-31 18:14:3514 days ago1769883275IN
0xf3792bae...a5330d565
0.00042508 ETH0.003983046.16059664
Start243559012026-01-31 15:57:5914 days ago1769875079IN
0xf3792bae...a5330d565
8 ETH0.00024591.00715467
Start243558762026-01-31 15:52:5914 days ago1769874779IN
0xf3792bae...a5330d565
5 ETH0.000239040.97891561
Start243558542026-01-31 15:48:3514 days ago1769874515IN
0xf3792bae...a5330d565
1 ETH0.000239490.9167
Start243540802026-01-31 9:52:2314 days ago1769853143IN
0xf3792bae...a5330d565
0 ETH0.000825032.08103194
Start243497732026-01-30 19:27:4715 days ago1769801267IN
0xf3792bae...a5330d565
0 ETH0.001360542.65121685
Start243490492026-01-30 17:01:5915 days ago1769792519IN
0xf3792bae...a5330d565
0 ETH0.001968031.50135463
Start243481032026-01-30 13:52:2315 days ago1769781143IN
0xf3792bae...a5330d565
0 ETH0.000095510.21763506
Start243469232026-01-30 9:55:4715 days ago1769766947IN
0xf3792bae...a5330d565
0 ETH0.000634292.18166372
Start243446082026-01-30 2:11:1116 days ago1769739071IN
0xf3792bae...a5330d565
0 ETH0.000075810.28276445
Start243393842026-01-29 8:42:2316 days ago1769676143IN
0xf3792bae...a5330d565
0.00028854 ETH0.002233742.06623636
Start243387582026-01-29 6:36:3517 days ago1769668595IN
0xf3792bae...a5330d565
0 ETH0.000009120.03403098
Start243374272026-01-29 2:08:4717 days ago1769652527IN
0xf3792bae...a5330d565
0.00023941 ETH0.000066240.06059007
Start243358402026-01-28 20:49:5917 days ago1769633399IN
0xf3792bae...a5330d565
0.00032665 ETH0.000071610.06653745
Start243333262026-01-28 12:25:5917 days ago1769603159IN
0xf3792bae...a5330d565
0.00078755 ETH0.000212430.144522
Start243294212026-01-27 23:21:3518 days ago1769556095IN
0xf3792bae...a5330d565
0.001 ETH0.00048872.04655817
Start243293652026-01-27 23:10:2318 days ago1769555423IN
0xf3792bae...a5330d565
0.001 ETH0.000523382.04524582
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
Start Via Rubic243565782026-01-31 18:14:3514 days ago1769883275
0xf3792bae...a5330d565
0.00042508 ETH
Start Via Rubic243559012026-01-31 15:57:5914 days ago1769875079
0xf3792bae...a5330d565
8 ETH
Start Via Rubic243558762026-01-31 15:52:5914 days ago1769874779
0xf3792bae...a5330d565
5 ETH
Start Via Rubic243558542026-01-31 15:48:3514 days ago1769874515
0xf3792bae...a5330d565
1 ETH
Transfer243393842026-01-29 8:42:2316 days ago1769676143
0xf3792bae...a5330d565
0.00028854 ETH
Transfer243374272026-01-29 2:08:4717 days ago1769652527
0xf3792bae...a5330d565
0.00023941 ETH
Transfer243358402026-01-28 20:49:5917 days ago1769633399
0xf3792bae...a5330d565
0.00032665 ETH
Transfer243333262026-01-28 12:25:5917 days ago1769603159
0xf3792bae...a5330d565
0.00078755 ETH
Create Request243294212026-01-27 23:21:3518 days ago1769556095
0xf3792bae...a5330d565
0.001 ETH
Create Request243293652026-01-27 23:10:2318 days ago1769555423
0xf3792bae...a5330d565
0.001 ETH
Transfer243282362026-01-27 19:23:1118 days ago1769541791
0xf3792bae...a5330d565
0.00100854 ETH
Transfer243203782026-01-26 17:04:4719 days ago1769447087
0xf3792bae...a5330d565
0.00081218 ETH
Transfer243145292026-01-25 21:30:4720 days ago1769376647
0xf3792bae...a5330d565
0.00060261 ETH
Start Via Rubic243053652026-01-24 14:51:1121 days ago1769266271
0xf3792bae...a5330d565
0.0721 ETH
Start Via Rubic243011232026-01-24 0:39:3522 days ago1769215175
0xf3792bae...a5330d565
0.00517 ETH
Start Via Rubic243010402026-01-24 0:22:5922 days ago1769214179
0xf3792bae...a5330d565
0.00515 ETH
Start Via Rubic242978052026-01-23 13:32:4722 days ago1769175167
0xf3792bae...a5330d565
0.00001361 ETH
Transfer242928982026-01-22 21:05:1123 days ago1769115911
0xf3792bae...a5330d565
0.00023232 ETH
Start Via Rubic242904922026-01-22 13:02:2323 days ago1769086943
0xf3792bae...a5330d565
0.005 ETH
Transfer242812342026-01-21 6:01:1125 days ago1768975271
0xf3792bae...a5330d565
0.00037178 ETH
Start Via Rubic242798962026-01-21 1:32:3525 days ago1768959155
0xf3792bae...a5330d565
0.0004 ETH
Start Via Rubic242790872026-01-20 22:50:1125 days ago1768949411
0xf3792bae...a5330d565
0.003 ETH
Start Via Rubic242790252026-01-20 22:37:4725 days ago1768948667
0xf3792bae...a5330d565
0.017 ETH
Start Via Rubic242764082026-01-20 13:52:3525 days ago1768917155
0xf3792bae...a5330d565
0.006 ETH
Start Via Rubic242763782026-01-20 13:46:3525 days ago1768916795
0xf3792bae...a5330d565
0.05 ETH
View All Internal Transactions
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
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 Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
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.