Source Code
Latest 25 from a total of 66 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Start | 31207507 | 11 hrs ago | IN | 0.1330652 FRAX | 0.00002329 | ||||
| Start | 31162356 | 36 hrs ago | IN | 0 FRAX | 0.00001427 | ||||
| Start | 31161729 | 37 hrs ago | IN | 0.11975777 FRAX | 0.00001869 | ||||
| Start | 31151362 | 42 hrs ago | IN | 0 FRAX | 0.00001747 | ||||
| Start | 31107557 | 2 days ago | IN | 0.10578042 FRAX | 0.00035592 | ||||
| Start | 31077606 | 3 days ago | IN | 0.11857565 FRAX | 0.00002188 | ||||
| Start | 31019777 | 4 days ago | IN | 0 FRAX | 0.0000292 | ||||
| Start | 31018669 | 4 days ago | IN | 0.86971844 FRAX | 0.00001378 | ||||
| Start | 30997410 | 5 days ago | IN | 0.10778305 FRAX | 0.00001653 | ||||
| Start | 30980369 | 5 days ago | IN | 0.10995684 FRAX | 0.00001376 | ||||
| Start | 30931366 | 6 days ago | IN | 0.15440275 FRAX | 0.00001577 | ||||
| Start | 30919248 | 7 days ago | IN | 0.15440241 FRAX | 0.00001563 | ||||
| Start | 30901878 | 7 days ago | IN | 0.15436583 FRAX | 0.00001444 | ||||
| Start | 30856142 | 8 days ago | IN | 0.12509262 FRAX | 0.00003414 | ||||
| Start | 30855481 | 8 days ago | IN | 0.12504119 FRAX | 0.00001325 | ||||
| Start | 30853566 | 8 days ago | IN | 0.12504284 FRAX | 0.00001969 | ||||
| Start | 30836179 | 9 days ago | IN | 0 FRAX | 0.00002833 | ||||
| Start | 30797466 | 9 days ago | IN | 112.60982457 FRAX | 0.00027962 | ||||
| Start | 30783537 | 10 days ago | IN | 0.14346065 FRAX | 0.00002455 | ||||
| Start | 30780024 | 10 days ago | IN | 0.14345458 FRAX | 0.00001684 | ||||
| Start | 30765877 | 10 days ago | IN | 0.14293891 FRAX | 0.00009652 | ||||
| Start | 30746302 | 11 days ago | IN | 0.14292847 FRAX | 0.00001885 | ||||
| Start | 30740917 | 11 days ago | IN | 0.14287757 FRAX | 0.00001468 | ||||
| Start | 30739222 | 11 days ago | IN | 0.14292866 FRAX | 0.00001489 | ||||
| Start | 30735278 | 11 days ago | IN | 0.14321088 FRAX | 0.00001326 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 31207507 | 11 hrs ago | 0.1330652 FRAX | ||||
| 31162356 | 36 hrs ago | 16.6884324 FRAX | ||||
| 31162356 | 36 hrs ago | 16.6884324 FRAX | ||||
| 31161729 | 37 hrs ago | 0.11975777 FRAX | ||||
| 31107557 | 2 days ago | 0.10578042 FRAX | ||||
| 31077606 | 3 days ago | 0.11857565 FRAX | ||||
| 31018669 | 4 days ago | 0.86971844 FRAX | ||||
| 30997410 | 5 days ago | 0.10778305 FRAX | ||||
| 30980369 | 5 days ago | 0.10995684 FRAX | ||||
| 30931366 | 6 days ago | 0.15440275 FRAX | ||||
| 30919248 | 7 days ago | 0.15440241 FRAX | ||||
| 30901878 | 7 days ago | 0.15436583 FRAX | ||||
| 30856142 | 8 days ago | 0.12509262 FRAX | ||||
| 30855481 | 8 days ago | 0.12504119 FRAX | ||||
| 30853566 | 8 days ago | 0.12504284 FRAX | ||||
| 30836179 | 9 days ago | 2 FRAX | ||||
| 30836179 | 9 days ago | 2 FRAX | ||||
| 30797466 | 9 days ago | 112.60982457 FRAX | ||||
| 30783537 | 10 days ago | 0.14346065 FRAX | ||||
| 30780024 | 10 days ago | 0.14345458 FRAX | ||||
| 30765877 | 10 days ago | 0.14293891 FRAX | ||||
| 30746302 | 11 days ago | 0.14292847 FRAX | ||||
| 30740917 | 11 days ago | 0.14287757 FRAX | ||||
| 30739222 | 11 days ago | 0.14292866 FRAX | ||||
| 30735278 | 11 days ago | 0.14321088 FRAX |
Cross-Chain Transactions
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
Diamond
Compiler Version
v0.8.25+commit.b61c2a91
Optimization Enabled:
Yes with 200 runs
Other Settings:
cancun EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// 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;
}
}// 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);
}// 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)
}
}
}// 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
}
}
}{
"optimizer": {
"enabled": true,
"runs": 200
},
"evmVersion": "cancun",
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
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"}]Contract Creation Code
6080604052348015600e575f80fd5b50335f9081527f89f132207fd53fa8a62addedf1f292af47df69bf17d6edd403280e2b00462f6a60205260408120805460ff1916600117905561144f90819061005690395ff3fe60806040526004361061004d575f3560e01c80631f931c1c146100c357806352ef6b2c146100e25780637a0ed6271461010c578063adfca15e1461012d578063cdffacc61461015957610054565b3661005457005b5f6100695f356001600160e01b031916610190565b90506001600160a01b0381166100a357604051630a82dd7360e31b81526001600160e01b03195f3516600482015260240160405180910390fd5b365f80375f80365f845af43d5f803e8080156100bd573d5ff35b3d5ffd5b005b3480156100ce575f80fd5b506100c16100dd366004610f04565b6101c0565b3480156100ed575f80fd5b506100f66104f4565b6040516101039190610fad565b60405180910390f35b348015610117575f80fd5b50610120610563565b6040516101039190610ff9565b348015610138575f80fd5b5061014c6101473660046110aa565b610717565b60405161010391906110ca565b348015610164575f80fd5b50610178610173366004611122565b610190565b6040516001600160a01b039091168152602001610103565b6001600160e01b0319165f9081525f805160206113fa83398151915260205260409020546001600160a01b031690565b335f9081527f89f132207fd53fa8a62addedf1f292af47df69bf17d6edd403280e2b00462f6a602052604090205460ff1661020e57604051635c427cd960e01b815260040160405180910390fd5b5f84900361022f576040516337a8a76360e11b815260040160405180910390fd5b5f805160206113fa8339815191525f5b85811015610405575f87878381811061025a5761025a61113b565b905060200281019061026c919061114f565b61027d90604081019060200161117b565b90505f81600281111561029257610292611194565b0361030957610304838989858181106102ad576102ad61113b565b90506020028101906102bf919061114f565b6102cd9060208101906110aa565b8a8a868181106102df576102df61113b565b90506020028101906102f1919061114f565b6102ff9060408101906111a8565b6107cb565b6103fc565b600181600281111561031d5761031d611194565b0361038f57610304838989858181106103385761033861113b565b905060200281019061034a919061114f565b6103589060208101906110aa565b8a8a8681811061036a5761036a61113b565b905060200281019061037c919061114f565b61038a9060408101906111a8565b610978565b60028160028111156103a3576103a3611194565b036103e357610304838989858181106103be576103be61113b565b90506020028101906103d0919061114f565b6103de9060408101906111a8565b610b5c565b60405163e4fc41f560e01b815260040160405180910390fd5b5060010161023f565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb673868686868660405161043d95949392919061125c565b60405180910390a16001600160a01b038416156104ec57836001600160a01b03163b5f0361047e5760405163239d8b5760e11b815260040160405180910390fd5b5f80856001600160a01b0316858560405161049a929190611382565b5f60405180830381855af49150503d805f81146104d2576040519150601f19603f3d011682016040523d82523d5f602084013e6104d7565b606091505b5091509150816104e957805160208201fd5b50505b505050505050565b60605f805160206113fa83398151915260020180548060200260200160405190810160405280929190818152602001828054801561055957602002820191905f5260205f20905b81546001600160a01b0316815260019091019060200180831161053b575b5050505050905090565b7f778dfe9e9bcb233aa2cc582f8ac4d0e848b68b4aec23bf924addf2c780d16628546060905f805160206113fa833981519152908067ffffffffffffffff8111156105b0576105b0611391565b6040519080825280602002602001820160405280156105f557816020015b604080518082019091525f8152606060208201528152602001906001900390816105ce5790505b5092505f5b81811015610711575f8360020182815481106106185761061861113b565b905f5260205f20015f9054906101000a90046001600160a01b03169050808583815181106106485761064861113b565b6020908102919091018101516001600160a01b0392831690529082165f908152600186018252604090819020805482518185028101850190935280835291929091908301828280156106e357602002820191905f5260205f20905f905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116106a55790505b50505050508583815181106106fa576106fa61113b565b6020908102919091018101510152506001016105fa565b50505090565b6001600160a01b0381165f9081527f778dfe9e9bcb233aa2cc582f8ac4d0e848b68b4aec23bf924addf2c780d1662760209081526040918290208054835181840281018401909452808452606093928301828280156107bf57602002820191905f5260205f20905f905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116107815790505b50505050509050919050565b6001600160a01b0383166107f257604051632002ac4b60e21b815260040160405180910390fd5b5f8190036108135760405163019daeeb60e21b815260040160405180910390fd5b6001600160a01b0383165f9081526003850160205260408120549003610879576002840180546001810182555f828152602080822090920180546001600160a01b0319166001600160a01b03881690811790915592549281526003870190915260409020555b5f5b81811015610971575f8383838181106108965761089661113b565b90506020020160208101906108ab9190611122565b6001600160e01b031981165f908152602088905260409020549091506001600160a01b0316156108ee5760405163455b052d60e11b815260040160405180910390fd5b6001600160e01b031981165f9081526020878152604080832080546001600160a01b0319166001600160a01b038a1690811790915583526001808a01835290832080548083018255908452919092206008820401805463ffffffff60079093166004026101000a928302191660e09490941c91909102929092179091550161087b565b5050505050565b6001600160a01b03831661099f57604051632002ac4b60e21b815260040160405180910390fd5b5f8190036109c05760405163019daeeb60e21b815260040160405180910390fd5b6001600160a01b0383165f9081526003850160205260408120549003610a26576002840180546001810182555f828152602080822090920180546001600160a01b0319166001600160a01b03881690811790915592549281526003870190915260409020555b5f5b81811015610971575f838383818110610a4357610a4361113b565b9050602002016020810190610a589190611122565b6001600160e01b031981165f908152602088905260409020549091506001600160a01b031680610a9b576040516327b1f42160e11b815260040160405180910390fd5b856001600160a01b0316816001600160a01b031603610acd57604051631ad7247d60e31b815260040160405180910390fd5b610ad8878284610c31565b506001600160e01b031981165f9081526020878152604080832080546001600160a01b0319166001600160a01b038a1690811790915583526001808a01835290832080548083018255908452919092206008820401805463ffffffff60079093166004026101000a928302191660e09490941c919091029290921790915501610a28565b5f819003610b7d5760405163019daeeb60e21b815260040160405180910390fd5b5f5b81811015610c2b575f838383818110610b9a57610b9a61113b565b9050602002016020810190610baf9190611122565b6001600160e01b031981165f908152602087905260409020549091506001600160a01b031680610bf2576040516327b1f42160e11b815260040160405180910390fd5b610bfd868284610c31565b506001600160e01b0319165f90815260208590526040902080546001600160a01b0319169055600101610b7f565b50505050565b6001600160a01b0382165f9081526001840160205260408120805490915b81811015610d6a57836001600160e01b031916838281548110610c7457610c7461113b565b905f5260205f2090600891828204019190066004029054906101000a900460e01b6001600160e01b03191603610d625782610cb06001846113b9565b81548110610cc057610cc061113b565b905f5260205f2090600891828204019190066004029054906101000a900460e01b838281548110610cf357610cf361113b565b905f5260205f2090600891828204019190066004026101000a81548163ffffffff021916908360e01c021790555082805480610d3157610d316113d2565b5f8281526020902060085f1990920191820401805463ffffffff600460078516026101000a02191690559055610d6a565b600101610c4f565b5081545f03610971576001600160a01b0384165f908152600386016020526040812054610d99906001906113b9565b60028701549091505f90610daf906001906113b9565b9050808214610e4d575f876002018281548110610dce57610dce61113b565b5f918252602090912001546002890180546001600160a01b039092169250829185908110610dfe57610dfe61113b565b5f91825260209091200180546001600160a01b0319166001600160a01b0392909216919091179055610e318360016113e6565b6001600160a01b039091165f9081526003890160205260409020555b86600201805480610e6057610e606113d2565b5f828152602080822083015f1990810180546001600160a01b03191690559092019092556001600160a01b0388168252600389019052604081205550505050505050565b80356001600160a01b0381168114610eba575f80fd5b919050565b5f8083601f840112610ecf575f80fd5b50813567ffffffffffffffff811115610ee6575f80fd5b602083019150836020828501011115610efd575f80fd5b9250929050565b5f805f805f60608688031215610f18575f80fd5b853567ffffffffffffffff80821115610f2f575f80fd5b818801915088601f830112610f42575f80fd5b813581811115610f50575f80fd5b8960208260051b8501011115610f64575f80fd5b60208301975080965050610f7a60208901610ea4565b94506040880135915080821115610f8f575f80fd5b50610f9c88828901610ebf565b969995985093965092949392505050565b602080825282518282018190525f9190848201906040850190845b81811015610fed5783516001600160a01b031683529284019291840191600101610fc8565b50909695505050505050565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b8381101561109c57888303603f19018552815180516001600160a01b031684528701518784018790528051878501819052908801905f9060608601905b808310156110875783516001600160e01b0319168252928a019260019290920191908a019061105d565b50968901969450505090860190600101611020565b509098975050505050505050565b5f602082840312156110ba575f80fd5b6110c382610ea4565b9392505050565b602080825282518282018190525f9190848201906040850190845b81811015610fed5783516001600160e01b031916835292840192918401916001016110e5565b80356001600160e01b031981168114610eba575f80fd5b5f60208284031215611132575f80fd5b6110c38261110b565b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112611163575f80fd5b9190910192915050565b803560038110610eba575f80fd5b5f6020828403121561118b575f80fd5b6110c38261116d565b634e487b7160e01b5f52602160045260245ffd5b5f808335601e198436030181126111bd575f80fd5b83018035915067ffffffffffffffff8211156111d7575f80fd5b6020019150600581901b3603821315610efd575f80fd5b8183525f60208085019450825f5b85811015611229576001600160e01b03196112168361110b565b16875295820195908201906001016111fc565b509495945050505050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b60608082528181018690525f90600560808085019089831b8601018a855b8b81101561134f57878303607f190184528135368e9003605e1901811261129f575f80fd5b8d016001600160a01b036112b282610ea4565b16845260206112c281830161116d565b600381106112de57634e487b7160e01b5f52602160045260245ffd5b8582015260408281013536849003601e190181126112fa575f80fd5b90920181810192903567ffffffffffffffff811115611317575f80fd5b80891b3603841315611327575f80fd5b89828801526113398a880182866111ee565b978301979650505092909201915060010161127a565b50506001600160a01b0389166020870152858103604087015261137381888a611234565b9b9a5050505050505050505050565b818382375f9101908152919050565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b818103818111156113cc576113cc6113a5565b92915050565b634e487b7160e01b5f52603160045260245ffd5b808201808211156113cc576113cc6113a556fe778dfe9e9bcb233aa2cc582f8ac4d0e848b68b4aec23bf924addf2c780d16626a26469706673582212203ecbf61dcddca34217a72a0ff0d6e05a5b2d5f1b9f2b43fc1da70d42e236b60c64736f6c63430008190033
Deployed Bytecode
0x60806040526004361061004d575f3560e01c80631f931c1c146100c357806352ef6b2c146100e25780637a0ed6271461010c578063adfca15e1461012d578063cdffacc61461015957610054565b3661005457005b5f6100695f356001600160e01b031916610190565b90506001600160a01b0381166100a357604051630a82dd7360e31b81526001600160e01b03195f3516600482015260240160405180910390fd5b365f80375f80365f845af43d5f803e8080156100bd573d5ff35b3d5ffd5b005b3480156100ce575f80fd5b506100c16100dd366004610f04565b6101c0565b3480156100ed575f80fd5b506100f66104f4565b6040516101039190610fad565b60405180910390f35b348015610117575f80fd5b50610120610563565b6040516101039190610ff9565b348015610138575f80fd5b5061014c6101473660046110aa565b610717565b60405161010391906110ca565b348015610164575f80fd5b50610178610173366004611122565b610190565b6040516001600160a01b039091168152602001610103565b6001600160e01b0319165f9081525f805160206113fa83398151915260205260409020546001600160a01b031690565b335f9081527f89f132207fd53fa8a62addedf1f292af47df69bf17d6edd403280e2b00462f6a602052604090205460ff1661020e57604051635c427cd960e01b815260040160405180910390fd5b5f84900361022f576040516337a8a76360e11b815260040160405180910390fd5b5f805160206113fa8339815191525f5b85811015610405575f87878381811061025a5761025a61113b565b905060200281019061026c919061114f565b61027d90604081019060200161117b565b90505f81600281111561029257610292611194565b0361030957610304838989858181106102ad576102ad61113b565b90506020028101906102bf919061114f565b6102cd9060208101906110aa565b8a8a868181106102df576102df61113b565b90506020028101906102f1919061114f565b6102ff9060408101906111a8565b6107cb565b6103fc565b600181600281111561031d5761031d611194565b0361038f57610304838989858181106103385761033861113b565b905060200281019061034a919061114f565b6103589060208101906110aa565b8a8a8681811061036a5761036a61113b565b905060200281019061037c919061114f565b61038a9060408101906111a8565b610978565b60028160028111156103a3576103a3611194565b036103e357610304838989858181106103be576103be61113b565b90506020028101906103d0919061114f565b6103de9060408101906111a8565b610b5c565b60405163e4fc41f560e01b815260040160405180910390fd5b5060010161023f565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb673868686868660405161043d95949392919061125c565b60405180910390a16001600160a01b038416156104ec57836001600160a01b03163b5f0361047e5760405163239d8b5760e11b815260040160405180910390fd5b5f80856001600160a01b0316858560405161049a929190611382565b5f60405180830381855af49150503d805f81146104d2576040519150601f19603f3d011682016040523d82523d5f602084013e6104d7565b606091505b5091509150816104e957805160208201fd5b50505b505050505050565b60605f805160206113fa83398151915260020180548060200260200160405190810160405280929190818152602001828054801561055957602002820191905f5260205f20905b81546001600160a01b0316815260019091019060200180831161053b575b5050505050905090565b7f778dfe9e9bcb233aa2cc582f8ac4d0e848b68b4aec23bf924addf2c780d16628546060905f805160206113fa833981519152908067ffffffffffffffff8111156105b0576105b0611391565b6040519080825280602002602001820160405280156105f557816020015b604080518082019091525f8152606060208201528152602001906001900390816105ce5790505b5092505f5b81811015610711575f8360020182815481106106185761061861113b565b905f5260205f20015f9054906101000a90046001600160a01b03169050808583815181106106485761064861113b565b6020908102919091018101516001600160a01b0392831690529082165f908152600186018252604090819020805482518185028101850190935280835291929091908301828280156106e357602002820191905f5260205f20905f905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116106a55790505b50505050508583815181106106fa576106fa61113b565b6020908102919091018101510152506001016105fa565b50505090565b6001600160a01b0381165f9081527f778dfe9e9bcb233aa2cc582f8ac4d0e848b68b4aec23bf924addf2c780d1662760209081526040918290208054835181840281018401909452808452606093928301828280156107bf57602002820191905f5260205f20905f905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116107815790505b50505050509050919050565b6001600160a01b0383166107f257604051632002ac4b60e21b815260040160405180910390fd5b5f8190036108135760405163019daeeb60e21b815260040160405180910390fd5b6001600160a01b0383165f9081526003850160205260408120549003610879576002840180546001810182555f828152602080822090920180546001600160a01b0319166001600160a01b03881690811790915592549281526003870190915260409020555b5f5b81811015610971575f8383838181106108965761089661113b565b90506020020160208101906108ab9190611122565b6001600160e01b031981165f908152602088905260409020549091506001600160a01b0316156108ee5760405163455b052d60e11b815260040160405180910390fd5b6001600160e01b031981165f9081526020878152604080832080546001600160a01b0319166001600160a01b038a1690811790915583526001808a01835290832080548083018255908452919092206008820401805463ffffffff60079093166004026101000a928302191660e09490941c91909102929092179091550161087b565b5050505050565b6001600160a01b03831661099f57604051632002ac4b60e21b815260040160405180910390fd5b5f8190036109c05760405163019daeeb60e21b815260040160405180910390fd5b6001600160a01b0383165f9081526003850160205260408120549003610a26576002840180546001810182555f828152602080822090920180546001600160a01b0319166001600160a01b03881690811790915592549281526003870190915260409020555b5f5b81811015610971575f838383818110610a4357610a4361113b565b9050602002016020810190610a589190611122565b6001600160e01b031981165f908152602088905260409020549091506001600160a01b031680610a9b576040516327b1f42160e11b815260040160405180910390fd5b856001600160a01b0316816001600160a01b031603610acd57604051631ad7247d60e31b815260040160405180910390fd5b610ad8878284610c31565b506001600160e01b031981165f9081526020878152604080832080546001600160a01b0319166001600160a01b038a1690811790915583526001808a01835290832080548083018255908452919092206008820401805463ffffffff60079093166004026101000a928302191660e09490941c919091029290921790915501610a28565b5f819003610b7d5760405163019daeeb60e21b815260040160405180910390fd5b5f5b81811015610c2b575f838383818110610b9a57610b9a61113b565b9050602002016020810190610baf9190611122565b6001600160e01b031981165f908152602087905260409020549091506001600160a01b031680610bf2576040516327b1f42160e11b815260040160405180910390fd5b610bfd868284610c31565b506001600160e01b0319165f90815260208590526040902080546001600160a01b0319169055600101610b7f565b50505050565b6001600160a01b0382165f9081526001840160205260408120805490915b81811015610d6a57836001600160e01b031916838281548110610c7457610c7461113b565b905f5260205f2090600891828204019190066004029054906101000a900460e01b6001600160e01b03191603610d625782610cb06001846113b9565b81548110610cc057610cc061113b565b905f5260205f2090600891828204019190066004029054906101000a900460e01b838281548110610cf357610cf361113b565b905f5260205f2090600891828204019190066004026101000a81548163ffffffff021916908360e01c021790555082805480610d3157610d316113d2565b5f8281526020902060085f1990920191820401805463ffffffff600460078516026101000a02191690559055610d6a565b600101610c4f565b5081545f03610971576001600160a01b0384165f908152600386016020526040812054610d99906001906113b9565b60028701549091505f90610daf906001906113b9565b9050808214610e4d575f876002018281548110610dce57610dce61113b565b5f918252602090912001546002890180546001600160a01b039092169250829185908110610dfe57610dfe61113b565b5f91825260209091200180546001600160a01b0319166001600160a01b0392909216919091179055610e318360016113e6565b6001600160a01b039091165f9081526003890160205260409020555b86600201805480610e6057610e606113d2565b5f828152602080822083015f1990810180546001600160a01b03191690559092019092556001600160a01b0388168252600389019052604081205550505050505050565b80356001600160a01b0381168114610eba575f80fd5b919050565b5f8083601f840112610ecf575f80fd5b50813567ffffffffffffffff811115610ee6575f80fd5b602083019150836020828501011115610efd575f80fd5b9250929050565b5f805f805f60608688031215610f18575f80fd5b853567ffffffffffffffff80821115610f2f575f80fd5b818801915088601f830112610f42575f80fd5b813581811115610f50575f80fd5b8960208260051b8501011115610f64575f80fd5b60208301975080965050610f7a60208901610ea4565b94506040880135915080821115610f8f575f80fd5b50610f9c88828901610ebf565b969995985093965092949392505050565b602080825282518282018190525f9190848201906040850190845b81811015610fed5783516001600160a01b031683529284019291840191600101610fc8565b50909695505050505050565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b8381101561109c57888303603f19018552815180516001600160a01b031684528701518784018790528051878501819052908801905f9060608601905b808310156110875783516001600160e01b0319168252928a019260019290920191908a019061105d565b50968901969450505090860190600101611020565b509098975050505050505050565b5f602082840312156110ba575f80fd5b6110c382610ea4565b9392505050565b602080825282518282018190525f9190848201906040850190845b81811015610fed5783516001600160e01b031916835292840192918401916001016110e5565b80356001600160e01b031981168114610eba575f80fd5b5f60208284031215611132575f80fd5b6110c38261110b565b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112611163575f80fd5b9190910192915050565b803560038110610eba575f80fd5b5f6020828403121561118b575f80fd5b6110c38261116d565b634e487b7160e01b5f52602160045260245ffd5b5f808335601e198436030181126111bd575f80fd5b83018035915067ffffffffffffffff8211156111d7575f80fd5b6020019150600581901b3603821315610efd575f80fd5b8183525f60208085019450825f5b85811015611229576001600160e01b03196112168361110b565b16875295820195908201906001016111fc565b509495945050505050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b60608082528181018690525f90600560808085019089831b8601018a855b8b81101561134f57878303607f190184528135368e9003605e1901811261129f575f80fd5b8d016001600160a01b036112b282610ea4565b16845260206112c281830161116d565b600381106112de57634e487b7160e01b5f52602160045260245ffd5b8582015260408281013536849003601e190181126112fa575f80fd5b90920181810192903567ffffffffffffffff811115611317575f80fd5b80891b3603841315611327575f80fd5b89828801526113398a880182866111ee565b978301979650505092909201915060010161127a565b50506001600160a01b0389166020870152858103604087015261137381888a611234565b9b9a5050505050505050505050565b818382375f9101908152919050565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b818103818111156113cc576113cc6113a5565b92915050565b634e487b7160e01b5f52603160045260245ffd5b808201808211156113cc576113cc6113a556fe778dfe9e9bcb233aa2cc582f8ac4d0e848b68b4aec23bf924addf2c780d16626a26469706673582212203ecbf61dcddca34217a72a0ff0d6e05a5b2d5f1b9f2b43fc1da70d42e236b60c64736f6c63430008190033
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in FRAX
0
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
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.