XAI Price: $0.10 (-7.35%)

Contract

0x64060aB139Feaae7f06Ca4E63189D86aDEb51691

Overview

XAI Balance

Xai LogoXai LogoXai Logo0 XAI

XAI Value

$0.00

More Info

Private Name Tags

TokenTracker

Unicorn Milk (UNIM) (@$0.0002)
Transaction Hash
Method
Block
From
To
Approve820210212025-02-18 20:13:292 hrs ago1739909609IN
Crypto Unicorns: UNIM Token
0 XAI0.000003620.1
Approve820174922025-02-18 19:36:213 hrs ago1739907381IN
Crypto Unicorns: UNIM Token
0 XAI0.000003620.1
Approve820013172025-02-18 16:46:416 hrs ago1739897201IN
Crypto Unicorns: UNIM Token
0 XAI0.000003620.1
Approve819997242025-02-18 16:29:316 hrs ago1739896171IN
Crypto Unicorns: UNIM Token
0 XAI0.000003620.1
Approve819961082025-02-18 15:59:046 hrs ago1739894344IN
Crypto Unicorns: UNIM Token
0 XAI0.000005330.1
Approve819865962025-02-18 14:32:448 hrs ago1739889164IN
Crypto Unicorns: UNIM Token
0 XAI0.000005330.1
Approve819835832025-02-18 14:14:058 hrs ago1739888045IN
Crypto Unicorns: UNIM Token
0 XAI0.000003620.1
Approve819646112025-02-18 12:52:459 hrs ago1739883165IN
Crypto Unicorns: UNIM Token
0 XAI0.000005330.1
Approve819620912025-02-18 12:40:0710 hrs ago1739882407IN
Crypto Unicorns: UNIM Token
0 XAI0.000005330.1
Approve819556362025-02-18 12:09:1410 hrs ago1739880554IN
Crypto Unicorns: UNIM Token
0 XAI0.000003620.1
Approve819494222025-02-18 11:38:1711 hrs ago1739878697IN
Crypto Unicorns: UNIM Token
0 XAI0.000005330.1
Approve819459992025-02-18 11:21:1311 hrs ago1739877673IN
Crypto Unicorns: UNIM Token
0 XAI0.000003620.1
Approve819402112025-02-18 10:52:5911 hrs ago1739875979IN
Crypto Unicorns: UNIM Token
0 XAI0.000003620.1
Approve819348512025-02-18 10:26:3812 hrs ago1739874398IN
Crypto Unicorns: UNIM Token
0 XAI0.000003620.1
Approve819290742025-02-18 9:59:4812 hrs ago1739872788IN
Crypto Unicorns: UNIM Token
0 XAI0.000003620.1
Approve819265912025-02-18 9:44:3013 hrs ago1739871870IN
Crypto Unicorns: UNIM Token
0 XAI0.000005330.1
Approve819090562025-02-18 6:44:0516 hrs ago1739861045IN
Crypto Unicorns: UNIM Token
0 XAI0.000003620.1
Approve819021822025-02-18 5:25:0617 hrs ago1739856306IN
Crypto Unicorns: UNIM Token
0 XAI0.000003620.1
Approve818995962025-02-18 4:52:2117 hrs ago1739854341IN
Crypto Unicorns: UNIM Token
0 XAI0.000003620.1
Approve818854532025-02-18 2:09:0520 hrs ago1739844545IN
Crypto Unicorns: UNIM Token
0 XAI0.000005330.1
Approve818789272025-02-18 1:00:4421 hrs ago1739840444IN
Crypto Unicorns: UNIM Token
0 XAI0.000005330.1
Approve818716142025-02-17 22:27:3024 hrs ago1739831250IN
Crypto Unicorns: UNIM Token
0 XAI0.000005330.1
Approve818715052025-02-17 22:11:1024 hrs ago1739830270IN
Crypto Unicorns: UNIM Token
0 XAI0.000003620.1
Approve818576492025-02-17 19:40:4727 hrs ago1739821247IN
Crypto Unicorns: UNIM Token
0 XAI0.000003620.1
Approve818455512025-02-17 18:49:1327 hrs ago1739818153IN
Crypto Unicorns: UNIM Token
0 XAI0.000005330.1
View all transactions

Parent Transaction Hash Block From To
View All Internal Transactions

Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0x94f84d94...bf9Bf598c
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
Diamond

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 999999 runs

Other Settings:
paris EvmVersion
File 1 of 4 : LGDiamond.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;

import {IDiamondCut} from '../interfaces/IDiamondCut.sol';
import {LibContractOwner} from '../libraries/LibContractOwner.sol';
import {LibDiamond} from '../libraries/LibDiamond.sol';

/// @title LG Diamond
/// @notice Adapted from the Diamond 3 reference implementation by Nick Mudge:
/// @notice https://github.com/mudgen/diamond-3-hardhat
contract Diamond {
    error FunctionDoesNotExist(bytes4 methodSelector);
    error DiamondAlreadyInitialized();

    constructor(address diamondCutFacet) payable {
        initializeDiamond(diamondCutFacet);
    }

    // Find facet for function that is called and execute the
    // function if a facet is found and return any value.
    fallback() external payable {
        /* solhint-disable no-inline-assembly */
        // get facet from function selector
        address facet = LibDiamond.diamondStorage().selectorToFacetAndPosition[msg.sig].facetAddress;
        if (facet == address(0)) revert FunctionDoesNotExist(msg.sig);
        // Execute external function from facet using delegatecall and return any value.
        assembly {
            // copy function selector and any arguments
            calldatacopy(0, 0, calldatasize())
            // execute function call using the facet
            let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)
            // get any return value
            returndatacopy(0, 0, returndatasize())
            // return any return value or error back to the caller
            switch result
            case 0 {
                revert(0, returndatasize())
            }
            default {
                return(0, returndatasize())
            }
        }
        /* solhint-enable no-inline-assembly */
    }

    /// @notice Initializes the diamond, by adding the `diamondCut` method and setting the owner.
    /// @dev This function is automatically called by the constructor.
    /// @dev The code is separated out to facilitate on-chain copying utilities.
    function initializeDiamond(address diamondCutFacet) public {
        LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();
        if (ds.initialized) revert DiamondAlreadyInitialized();

        // Attach the diamondCut function from the diamondCutFacet
        IDiamondCut.FacetCut[] memory cut = new IDiamondCut.FacetCut[](1);
        cut[0] = IDiamondCut.FacetCut({
            facetAddress: diamondCutFacet,
            action: IDiamondCut.FacetCutAction.Add,
            functionSelectors: new bytes4[](1)
        });
        cut[0].functionSelectors[0] = IDiamondCut.diamondCut.selector;

        LibDiamond.diamondCut(cut);

        //  When deployed from an EOA this will be the owner wallet,
        //  when deployed from the clone function, the copier contract will be the owner.
        LibContractOwner.setContractOwner(msg.sender);

        ds.initialized = true;
    }

    receive() external payable {}
}

File 2 of 4 : IDiamondCut.sol
//SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.19;

/******************************************************************************\
* Author: Nick Mudge <[email protected]> (https://twitter.com/mudgen)
* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535
/******************************************************************************/

interface IDiamondCut {
    enum FacetCutAction {
        Add,
        Replace,
        Remove
    }
    // Add=0, Replace=1, Remove=2

    struct FacetCut {
        address facetAddress;
        FacetCutAction action;
        bytes4[] functionSelectors;
    }

    /// @notice Add/replace/remove any number of functions and optionally execute
    ///         a function with delegatecall
    /// @param _diamondCut Contains the facet addresses and function selectors
    /// @param _init The address of the contract or facet to execute _calldata
    /// @param _calldata A function call, including function selector and arguments
    ///                  _calldata is executed with delegatecall on _init
    function diamondCut(FacetCut[] calldata _diamondCut, address _init, bytes calldata _calldata) external;

    event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);
}

File 3 of 4 : LibContractOwner.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;

/// @title Library for the common LG implementation of ERC-173 Contract Ownership Standard
/// @author [email protected]
/// @custom:storage-location erc1967:eip1967.proxy.admin
library LibContractOwner {
    error CallerIsNotContractOwner();

    /// @notice This emits when ownership of a contract changes.
    /// @dev ERC-173
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /// @notice Emitted when the admin account has changed.
    /// @dev ERC-1967
    event AdminChanged(address previousAdmin, address newAdmin);

    //  @dev Standard storage slot for the ERC-1967 admin address
    //  @dev bytes32(uint256(keccak256('eip1967.proxy.admin')) - 1)
    bytes32 private constant ADMIN_SLOT_POSITION = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;

    struct LibOwnerStorage {
        address contractOwner;
    }

    /// @notice Storage slot for Contract Owner state data
    function ownerStorage() internal pure returns (LibOwnerStorage storage storageSlot) {
        bytes32 position = ADMIN_SLOT_POSITION;

        // solhint-disable-next-line no-inline-assembly
        assembly {
            storageSlot.slot := position
        }
    }

    /// @notice Sets the contract owner
    /// @param newOwner The new owner
    /// @custom:emits OwnershipTransferred
    function setContractOwner(address newOwner) internal {
        LibOwnerStorage storage ls = ownerStorage();
        address previousOwner = ls.contractOwner;
        ls.contractOwner = newOwner;
        emit OwnershipTransferred(previousOwner, newOwner);
        emit AdminChanged(previousOwner, newOwner);
    }

    /// @notice Gets the contract owner wallet
    /// @return owner The contract owner
    function contractOwner() internal view returns (address owner) {
        owner = ownerStorage().contractOwner;
    }

    /// @notice Ensures that the caller is the contract owner, or throws an error.
    /// @custom:throws LibAccess: Must be contract owner
    function enforceIsContractOwner() internal view {
        if (msg.sender != ownerStorage().contractOwner) revert CallerIsNotContractOwner();
    }
}

File 4 of 4 : LibDiamond.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;

import {IDiamondCut} from '../interfaces/IDiamondCut.sol';
import {LibContractOwner} from './LibContractOwner.sol';

/// @title LibDiamond
/// @notice Library for the common LG implementation of ERC-2535 Diamond Proxy
/// @notice Adapted from the Diamond 3 reference implementation by Nick Mudge:
/// @notice https://github.com/mudgen/diamond-3-hardhat
/// @custom:storage-location erc2535:diamond.standard.diamond.storage
library LibDiamond {
    error InvalidFacetCutAction(IDiamondCut.FacetCutAction action);

    /// @notice Emitted when facets are added or removed
    /// @dev ERC-2535
    event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);

    //  @dev Standard storage slot for the ERC-2535 Diamond storage
    //  @dev keccak256('diamond.standard.diamond.storage')
    bytes32 internal constant DIAMOND_STORAGE_POSITION =
        0xc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c;

    struct FacetAddressAndPosition {
        address facetAddress;
        uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array
    }

    struct FacetFunctionSelectors {
        bytes4[] functionSelectors;
        uint256 facetAddressPosition; // position of facetAddress in facetAddresses array
    }

    struct DiamondStorage {
        // maps function selector to the facet address and
        // the position of the selector in the facetFunctionSelectors.selectors array
        mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;
        // maps facet addresses to function selectors
        mapping(address => FacetFunctionSelectors) facetFunctionSelectors;
        // facet addresses
        address[] facetAddresses;
        // true if the diamond has been initialized
        bool initialized; //  THIS IS ONLY SET BY THE DIAMOND CONSTRUCTOR!
    }

    /// @notice Storage slot for Diamond storage
    function diamondStorage() internal pure returns (DiamondStorage storage ds) {
        bytes32 position = DIAMOND_STORAGE_POSITION;
        assembly {
            ds.slot := position
        }
    }

    /// @notice Ensures that the caller is the contract owner, or throws an error.
    /// @dev Passthrough to LibContractOwner.enforceIsContractOwner()
    /// @custom:throws LibAccess: Must be contract owner
    function enforceIsContractOwner() internal view {
        LibContractOwner.enforceIsContractOwner();
    }

    // Internal function version of diamondCut
    function diamondCut(IDiamondCut.FacetCut[] memory _diamondCut) internal {
        for (uint256 facetIndex; facetIndex < _diamondCut.length; ++facetIndex) {
            IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;
            if (action == IDiamondCut.FacetCutAction.Add) {
                addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);
            } else if (action == IDiamondCut.FacetCutAction.Replace) {
                replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);
            } else if (action == IDiamondCut.FacetCutAction.Remove) {
                removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);
            } else {
                revert InvalidFacetCutAction(action);
            }
        }
        emit DiamondCut(_diamondCut, address(0), '');
    }

    function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {
        require(_functionSelectors.length > 0, 'LibDiamondCut: No selectors in facet to cut');
        DiamondStorage storage ds = diamondStorage();
        require(_facetAddress != address(0), "LibDiamondCut: Add facet can't be address(0)");
        uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);
        // add new facet address if it does not exist
        if (selectorPosition == 0) {
            addFacet(ds, _facetAddress);
        }
        for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; ++selectorIndex) {
            bytes4 selector = _functionSelectors[selectorIndex];
            address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;
            require(oldFacetAddress == address(0), "LibDiamondCut: Can't add function that already exists");
            addFunction(ds, selector, selectorPosition, _facetAddress);
            ++selectorPosition;
        }
    }

    function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {
        require(_functionSelectors.length > 0, 'LibDiamondCut: No selectors in facet to cut');
        DiamondStorage storage ds = diamondStorage();
        require(_facetAddress != address(0), "LibDiamondCut: Add facet can't be address(0)");
        uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);
        // add new facet address if it does not exist
        if (selectorPosition == 0) {
            addFacet(ds, _facetAddress);
        }
        for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; ++selectorIndex) {
            bytes4 selector = _functionSelectors[selectorIndex];
            address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;
            require(oldFacetAddress != _facetAddress, "LibDiamondCut: Can't replace function with same function");
            removeFunction(ds, oldFacetAddress, selector);
            addFunction(ds, selector, selectorPosition, _facetAddress);
            ++selectorPosition;
        }
    }

    function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {
        require(_functionSelectors.length > 0, 'LibDiamondCut: No selectors in facet to cut');
        DiamondStorage storage ds = diamondStorage();
        // if function does not exist then do nothing and return
        require(_facetAddress == address(0), 'LibDiamondCut: Remove facet address must be address(0)');
        for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; ++selectorIndex) {
            bytes4 selector = _functionSelectors[selectorIndex];
            address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;
            removeFunction(ds, oldFacetAddress, selector);
        }
    }

    function addFacet(DiamondStorage storage ds, address _facetAddress) internal {
        enforceHasContractCode(_facetAddress, 'LibDiamondCut: New facet has no code');
        ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;
        ds.facetAddresses.push(_facetAddress);
    }

    function addFunction(
        DiamondStorage storage ds,
        bytes4 _selector,
        uint96 _selectorPosition,
        address _facetAddress
    ) internal {
        ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;
        ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);
        ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;
    }

    function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal {
        require(_facetAddress != address(0), "LibDiamondCut: Can't remove function that doesn't exist");
        // an immutable function is a function defined directly in a diamond
        require(_facetAddress != address(this), "LibDiamondCut: Can't remove immutable function");
        // replace selector with last selector, then delete last selector
        uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;
        uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;
        // if not the same then replace _selector with lastSelector
        if (selectorPosition != lastSelectorPosition) {
            bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];
            ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;
            ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);
        }
        // delete the last selector
        ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();
        delete ds.selectorToFacetAndPosition[_selector];

        // if no more selectors for facet address then delete the facet address
        if (lastSelectorPosition == 0) {
            // replace facet address with last facet address and delete last facet address
            uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;
            uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;
            if (facetAddressPosition != lastFacetAddressPosition) {
                address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];
                ds.facetAddresses[facetAddressPosition] = lastFacetAddress;
                ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;
            }
            ds.facetAddresses.pop();
            delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;
        }
    }

    function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {
        uint256 contractSize;
        assembly {
            contractSize := extcodesize(_contract)
        }
        require(contractSize > 0, _errorMessage);
    }
}

Settings
{
  "remappings": [
    "ds-test/=lib/forge-std/lib/ds-test/src/",
    "forge-std/=lib/forge-std/src/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 999999,
    "details": {
      "peephole": true,
      "inliner": true,
      "deduplicate": true,
      "cse": true,
      "yul": true,
      "yulDetails": {
        "stackAllocation": true,
        "optimizerSteps": "dhfoDgvulfnTUtnIf"
      }
    }
  },
  "metadata": {
    "useLiteralContent": false,
    "bytecodeHash": "ipfs",
    "appendCBOR": true
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "paris",
  "viaIR": true,
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"diamondCutFacet","type":"address"}],"stateMutability":"payable","type":"constructor"},{"inputs":[],"name":"DiamondAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"bytes4","name":"methodSelector","type":"bytes4"}],"name":"FunctionDoesNotExist","type":"error"},{"inputs":[{"internalType":"enum IDiamondCut.FacetCutAction","name":"action","type":"uint8"}],"name":"InvalidFacetCutAction","type":"error"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"diamondCutFacet","type":"address"}],"name":"initializeDiamond","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

Deployed Bytecode

0x60806040526004361015610015575b366100f557005b60003560e01c630751e5b50361000e5761008c565b73ffffffffffffffffffffffffffffffffffffffff1690565b90565b73ffffffffffffffffffffffffffffffffffffffff81160361006457565b600080fd5b9050359061007682610046565b565b906020828203126100645761004391610069565b34610064576100a461009f366004610078565b61047f565b604051005b907fffffffff00000000000000000000000000000000000000000000000000000000165b600052602052604060002090565b61002a6100436100439290565b610043906100db565b9052565b61014c600061013181610106610776565b017fffffffff00000000000000000000000000000000000000000000000000000000833516906100a9565b015473ffffffffffffffffffffffffffffffffffffffff1690565b60009061015b61002a836100e8565b73ffffffffffffffffffffffffffffffffffffffff82161461019457818091368280378136915af43d82803e15610190573d90f35b3d90fd5b61021a7fffffffff000000000000000000000000000000000000000000000000000000008335166101c460405190565b9182917ff8473e6b000000000000000000000000000000000000000000000000000000008352600483017fffffffff00000000000000000000000000000000000000000000000000000000909116815260200190565b0390fd5b6100436100436100439290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810190811067ffffffffffffffff82111761029a57604052565b61022b565b906100766102ac60405190565b928361025a565b67ffffffffffffffff811161029a5760208091020190565b906102dd6102d8836102b3565b61029f565b918252565b610043606061029f565b6102f46102e2565b600080825260208201526060604082015290565b6100436102ec565b60005b82811061031f57505050565b60209061032a610308565b8184015201610313565b9061007661034a610344846102cb565b936102b3565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00160208401610310565b369037565b9061007661038a610344846102cb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00160208401610375565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600311156103ee57565b6103b5565b90610076826103e4565b906100f1906103f3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9061043f825190565b811015610450576020809102010190565b610407565b9060ff905b9181191691161790565b9061047461004361047b92151590565b8254610455565b9055565b6003610489610776565b0190610496825460ff1690565b6105b157610076916105a360019261059e6104b08561021e565b6104b981610334565b926105056104c860009361037a565b6104f16104d36102e2565b73ffffffffffffffffffffffffffffffffffffffff90941685850152565b6104fe84602085016103fd565b6040830152565b6105176105118361021e565b85610436565b5261052a6105248261021e565b84610436565b51506105777f1f931c1c000000000000000000000000000000000000000000000000000000009161057160406105686105628461021e565b88610436565b5101519161021e565b90610436565b907fffffffff00000000000000000000000000000000000000000000000000000000169052565b610991565b6105ac3361066b565b610464565b6040517f9289b961000000000000000000000000000000000000000000000000000000008152600490fd5b9073ffffffffffffffffffffffffffffffffffffffff9061045a565b61002a6100436100439273ffffffffffffffffffffffffffffffffffffffff1690565b610043906105f8565b6100439061061b565b9061063d61004361047b92610624565b82546105dc565b73ffffffffffffffffffffffffffffffffffffffff91821681529116602082015260400190565b6000610675610745565b019061069f81610699845473ffffffffffffffffffffffffffffffffffffffff1690565b9361062d565b7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e06106c983610624565b6106d283610624565b916106dc60405190565b600090a37f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f9161071761070e60405190565b92839283610644565b0390a1565b6100437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610361021e565b61004361071c565b6100437fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c61021e565b61004361074d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146107da5760010190565b61077e565b61004390516103f3565b610043906103f3565b6100f1906107e9565b60208101929161007691906107f2565b0190565b9061082f61082861081e845190565b8084529260200190565b9260200190565b9060005b8181106108405750505090565b90919261087f61087860019286517fffffffff0000000000000000000000000000000000000000000000000000000016815260200190565b9460200190565b929101610833565b805173ffffffffffffffffffffffffffffffffffffffff1682526100439160608101916040906108bf602082015160208501906107f2565b015190604081840391015261080f565b9061004391610887565b906108ef6108e5835190565b8083529160200190565b90816109016020830284019460200190565b926000915b83831061091557505050505090565b90919293946020610938610931838560019503875289516108cf565b9760200190565b9301930191939290610906565b6060808252610043939261097f9161096091908401906108d9565b73ffffffffffffffffffffffffffffffffffffffff9093166020830152565b60408183039101526000815260200190565b9060005b6109a0610043845190565b811015610aea576109bd60206109b68386610436565b51016107df565b6000906109c9826103f3565b6109d2826103f3565b03610a28575090610a1e610a09610a23936109ed8488610436565b51015173ffffffffffffffffffffffffffffffffffffffff1690565b6040610a158488610436565b51015190610d20565b6107ad565b610995565b610a3260016103f3565b610a3b826103f3565b03610a6b575090610a1e610a56610a23936109ed8488610436565b6040610a628488610436565b51015190610f37565b610a7560026103f3565b610a7e826103f3565b03610aae575090610a1e610a99610a23936109ed8488610436565b6040610aa58488610436565b510151906110de565b61021a90610abb60405190565b9182917f32191c29000000000000000000000000000000000000000000000000000000008352600483016107fb565b5090610af660006100e8565b7f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb67391610717610b2460405190565b92839283610945565b15610b3457565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660448201527f6163657420746f206375740000000000000000000000000000000000000000006064820152608490fd5b15610bc057565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4c69624469616d6f6e644375743a204164642066616365742063616e2774206260448201527f65206164647265737328302900000000000000000000000000000000000000006064820152608490fd5b906100cd90610624565b610c5c6100436100439290565b6bffffffffffffffffffffffff1690565b15610c7457565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f60448201527f6e207468617420616c72656164792065786973747300000000000000000000006064820152608490fd5b6bffffffffffffffffffffffff166bffffffffffffffffffffffff81146107da5760010190565b9190610d2a815190565b610d46600091610d40610d3c8461021e565b9190565b11610b2d565b610d4e610776565b610d57826100e8565b610d9073ffffffffffffffffffffffffffffffffffffffff821673ffffffffffffffffffffffffffffffffffffffff88165b1415610bb9565b610dae610da984610da48960018701610c45565b015490565b610c4f565b9384610dce610dbc86610c4f565b916bffffffffffffffffffffffff1690565b14610e9c575b6000945b610de3610043835190565b861015610e9257610e8681610e818a610e8c9489610e7b610e40826101318f610e378f91610e11908f610436565b517fffffffff000000000000000000000000000000000000000000000000000000001690565b958691016100a9565b610e7573ffffffffffffffffffffffffffffffffffffffff8c165b9173ffffffffffffffffffffffffffffffffffffffff1690565b14610c6d565b8961142b565b610cf9565b956107ad565b94610dd8565b5050505050509050565b610ea687846112df565b610dd4565b15610eb257565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e60448201527f6374696f6e20776974682073616d652066756e6374696f6e00000000000000006064820152608490fd5b8151919291610f4e600091610d40610d3c8461021e565b610f56610776565b90610f82610f6661002a836100e8565b73ffffffffffffffffffffffffffffffffffffffff8516610d89565b610f96610da982610da48660018701610c45565b9485610fa4610dbc84610c4f565b14611043575b6000955b610fb9610043835190565b87101561103a5761102e81610e81876110349487610e7b8a610ff08f610131610fe6610e1187938f610436565b80968195016100a9565b61102873ffffffffffffffffffffffffffffffffffffffff871673ffffffffffffffffffffffffffffffffffffffff83161415610eab565b8c611770565b966107ad565b95610fae565b50505050509050565b61104d84846112df565b610faa565b1561105957565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f4c69624469616d6f6e644375743a2052656d6f7665206661636574206164647260448201527f657373206d7573742062652061646472657373283029000000000000000000006064820152608490fd5b815160009392906110f590610d40610d3c8761021e565b611116611100610776565b92611110610e5b61002a886100e8565b14611052565b60005b611124610043835190565b81101561115a5780610a1e61113f610e116111559486610436565b61114f8861013183828a016100a9565b86611770565b611119565b5050509050565b67ffffffffffffffff811161029a57602090601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160190565b906102dd6102d883611161565b6111b3602461119c565b7f4c69624469616d6f6e644375743a204e657720666163657420686173206e6f2060208201527f636f646500000000000000000000000000000000000000000000000000000000604082015290565b6100436111a9565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9061045a565b9061124261004361047b9261021e565b825461120a565b805482101561045057611263600191600052602060002090565b91020190600090565b9190600861045a91029161129373ffffffffffffffffffffffffffffffffffffffff841b90565b921b90565b91906112a961004361047b93610624565b90835461126c565b908154916801000000000000000083101561029a57826112d991600161007695018155611249565b90611298565b9061131c610076926112f86112f2611202565b84611a21565b61004360028201916001611316868261130f875490565b9401610c45565b01611232565b6112b1565b907fffffffffffffffffffffffff00000000000000000000000000000000000000009060a01b61045a565b610c5c610043610043926bffffffffffffffffffffffff1690565b9061137761004361047b9261134c565b8254611321565b805491929183101561045057600861139d600492600052602060002090565b8185040193060290565b9190600861045a91029161129363ffffffff841b90565b91906113f56113ef61047b937fffffffff000000000000000000000000000000000000000000000000000000001690565b60e01c90565b9083546113a7565b908154916801000000000000000083101561029a57826114259160016100769501815561137e565b906113be565b8184936114686000946114638661080b6100769a600161146d9961145d85820199866114578a8d6100a9565b01611367565b01610c45565b6113fd565b6100a9565b0161062d565b1561147a57565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e6360448201527f74696f6e207468617420646f65736e27742065786973740000000000000000006064820152608490fd5b1561150657565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d7560448201527f7461626c652066756e6374696f6e0000000000000000000000000000000000006064820152608490fd5b6100439060a01c610c5c565b610043905461158b565b610043610043610043926bffffffffffffffffffffffff1690565b919082039182116107da57565b610043916008021c60e01b90565b9061004391546115c9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b610076916000916113be565b8054801561165e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019061165b611655838361137e565b90611611565b55565b6115e2565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b906000036116a05760009055565b611663565b6100439081565b61004390546116a5565b610043916008021c61002a565b9061004391546116b6565b61007691600091611298565b8054801561165e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019061165b6117128383611249565b906116ce565b9190600861045a9102916112937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841b90565b919061175c61004361047b9361021e565b908354611718565b6100769160009161174b565b61182590929192836000936117a861178a61002a876100e8565b73ffffffffffffffffffffffffffffffffffffffff84161415611473565b6117d56117b761002a30610624565b73ffffffffffffffffffffffffffffffffffffffff841614156114ff565b61185685611851818601936117fc6117f7846117f184896100a9565b01611597565b6115a1565b9461180e84610da48960018c01610c45565b87858a60019c8d9461181f8661021e565b906115bc565b809a61182e8290565b8103611906575b505061184c92506114689361080b91019e8f610c45565b61161d565b611692565b611862610d3c8661021e565b1461186f575b5050505050565b6118c7946118bc6118b760026118c1950161189461188b825490565b61181f8961021e565b6118a8886118a28888610c45565b016116ac565b888282036118d1575b50505090565b6116da565b610c45565b01611764565b3880808080611868565b6113166118ea6118e46118fe9587611249565b906116c3565b6118f8816112d98689611249565b88610c45565b3880886118b1565b610da985611425838761193161193d611937611945998461194c9f611931906114579e01998a610c45565b0161137e565b906115d7565b9a8b95610c45565b92856100a9565b8887858a8938611835565b60005b83811061196a5750506000910152565b818101518382015260200161195a565b61199b6119a460209361080b9361198f815190565b80835293849260200190565b95869101611957565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690565b60208082526100439291019061197a565b156119e55750565b61021a906119f260405190565b9182917f08c379a0000000000000000000000000000000000000000000000000000000008352600483016119cc565b61007691903b611a34610d3c600061021e565b116119dd56fea264697066735822122088a2abace83ea1422d9077a1c7995d26ab25a5fcc23a713b0d9e721d442752f864736f6c63430008130033

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

OVERVIEW

Crypto Unicorns is a new blockchain-based game centered around awesomely unique Unicorn NFTs which players can use in a fun farming simulation and in a variety of exciting battle loops.

Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
[ 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.