ETH Price: $3,338.82 (-3.72%)
Gas: 7.82 Gwei

Contract

0x626B8f396d79459655102C04E94905b0f7Cbd36B
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Set Approval For...193583902024-03-04 1:02:23297 days ago1709514143IN
0x626B8f39...0f7Cbd36B
0 ETH0.0036251967.81905553
Set Approval For...192850892024-02-22 19:00:23307 days ago1708628423IN
0x626B8f39...0f7Cbd36B
0 ETH0.0032972761.68427411
Set Approval For...192632782024-02-19 17:32:11310 days ago1708363931IN
0x626B8f39...0f7Cbd36B
0 ETH0.0027857652.11517644

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
198542042024-05-12 13:21:47228 days ago1715520107
0x626B8f39...0f7Cbd36B
0 ETH
193583902024-03-04 1:02:23297 days ago1709514143
0x626B8f39...0f7Cbd36B
0 ETH
192850892024-02-22 19:00:23307 days ago1708628423
0x626B8f39...0f7Cbd36B
0 ETH
192697932024-02-20 15:26:23310 days ago1708442783
0x626B8f39...0f7Cbd36B
0 ETH
192686092024-02-20 11:26:23310 days ago1708428383
0x626B8f39...0f7Cbd36B
0 ETH
192682902024-02-20 10:21:35310 days ago1708424495
0x626B8f39...0f7Cbd36B
0 ETH
192682652024-02-20 10:16:11310 days ago1708424171
0x626B8f39...0f7Cbd36B
0 ETH
192677422024-02-20 8:30:11310 days ago1708417811
0x626B8f39...0f7Cbd36B
0 ETH
192674062024-02-20 7:22:47310 days ago1708413767
0x626B8f39...0f7Cbd36B
0 ETH
192665012024-02-20 4:21:11310 days ago1708402871
0x626B8f39...0f7Cbd36B
0 ETH
192664942024-02-20 4:19:47310 days ago1708402787
0x626B8f39...0f7Cbd36B
0 ETH
192661802024-02-20 3:16:35310 days ago1708398995
0x626B8f39...0f7Cbd36B
0 ETH
192657012024-02-20 1:40:23310 days ago1708393223
0x626B8f39...0f7Cbd36B
0 ETH
192650912024-02-19 23:37:35310 days ago1708385855
0x626B8f39...0f7Cbd36B
0 ETH
192649852024-02-19 23:16:23310 days ago1708384583
0x626B8f39...0f7Cbd36B
0 ETH
192642692024-02-19 20:51:35310 days ago1708375895
0x626B8f39...0f7Cbd36B
0 ETH
192638992024-02-19 19:37:23310 days ago1708371443
0x626B8f39...0f7Cbd36B
0 ETH
192638102024-02-19 19:19:23310 days ago1708370363
0x626B8f39...0f7Cbd36B
0 ETH
192637492024-02-19 19:06:59310 days ago1708369619
0x626B8f39...0f7Cbd36B
0 ETH
192637162024-02-19 19:00:23310 days ago1708369223
0x626B8f39...0f7Cbd36B
0 ETH
192636832024-02-19 18:53:47310 days ago1708368827
0x626B8f39...0f7Cbd36B
0 ETH
192636762024-02-19 18:52:23310 days ago1708368743
0x626B8f39...0f7Cbd36B
0 ETH
192635902024-02-19 18:35:11310 days ago1708367711
0x626B8f39...0f7Cbd36B
0 ETH
192635602024-02-19 18:29:11310 days ago1708367351
0x626B8f39...0f7Cbd36B
0 ETH
192635482024-02-19 18:26:47310 days ago1708367207
0x626B8f39...0f7Cbd36B
0 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Del404Mirror

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2024-02-19
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

/// @title Del404Mirror
/// @notice Del404Mirror provides an interface for interacting with the
/// NFT tokens in a Del404 implementation.
///

///
/// @dev Note:
/// - The ERC721 data is stored in the base Del404 contract.
contract Del404Mirror {
    /*«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-*/
    /*                           EVENTS                           */
    /*-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»*/

    /// @dev Emitted when token `id` is transferred from `from` to `to`.
    event Transfer(address indexed from, address indexed to, uint256 indexed id);

    /// @dev Emitted when `owner` enables `account` to manage the `id` token.
    event Approval(address indexed owner, address indexed account, uint256 indexed id);

    /// @dev Emitted when `owner` enables or disables `operator` to manage all of their tokens.
    event ApprovalForAll(address indexed owner, address indexed operator, bool isApproved);

    /// @dev `keccak256(bytes("Transfer(address,address,uint256)"))`.
    uint256 private constant _TRANSFER_EVENT_SIGNATURE =
        0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef;

    /// @dev `keccak256(bytes("Approval(address,address,uint256)"))`.
    uint256 private constant _APPROVAL_EVENT_SIGNATURE =
        0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925;

    /// @dev `keccak256(bytes("ApprovalForAll(address,address,bool)"))`.
    uint256 private constant _APPROVAL_FOR_ALL_EVENT_SIGNATURE =
        0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31;

    /*«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-*/
    /*                        CUSTOM ERRORS                       */
    /*-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»*/

    /// @dev Thrown when a call for an NFT function did not originate
    /// from the base Del404 contract.
    error SenderNotBase();

    /// @dev Thrown when a call for an NFT function did not originate from the deployer.
    error SenderNotDeployer();

    /// @dev Thrown when transferring an NFT to a contract address that
    /// does not implement ERC721Receiver.
    error TransferToNonERC721ReceiverImplementer();

    /// @dev Thrown when linking to the Del404 base contract and the
    /// Del404 supportsInterface check fails or the call reverts.
    error CannotLink();

    /// @dev Thrown when a linkMirrorContract call is received and the
    /// NFT mirror contract has already been linked to a Del404 base contract.
    error AlreadyLinked();

    /// @dev Thrown when retrieving the base Del404 address when a link has not
    /// been established.
    error NotLinked();

    /*«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-*/
    /*                          STORAGE                           */
    /*-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»*/

    /// @dev Struct contain the NFT mirror contract storage.
    struct Del404NFTStorage {
        address baseERC20;
        address deployer;
    }

    /// @dev Returns a storage pointer for Del404NFTStorage.
    function _getDel404NFTStorage() internal pure virtual returns (Del404NFTStorage storage $) {
        /// @solidity memory-safe-assembly
        assembly {
            // `uint72(bytes9(keccak256("Del404_MIRROR_STORAGE")))`.
            $.slot := 0x4f191694f9f22ccbcc // Truncate to 9 bytes to reduce bytecode size.
        }
    }

    /*«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-*/
    /*                        CONSTRUCTOR                         */
    /*-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»*/

    constructor(address deployer) {
        // For non-proxies, we will store the deployer so that only the deployer can
        // link the base contract.
        _getDel404NFTStorage().deployer = deployer;
    }

    /*«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-*/
    /*                     ERC721 OPERATIONS                      */
    /*-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»*/

    /// @dev Returns the token collection name from the base Del404 contract.
    function name() public view virtual returns (string memory result) {
        address base = baseERC20();
        /// @solidity memory-safe-assembly
        assembly {
            result := mload(0x40)
            mstore(0x00, 0x06fdde03) // `name()`.
            if iszero(staticcall(gas(), base, 0x1c, 0x04, 0x00, 0x00)) {
                returndatacopy(result, 0x00, returndatasize())
                revert(result, returndatasize())
            }
            returndatacopy(0x00, 0x00, 0x20)
            returndatacopy(result, mload(0x00), 0x20)
            returndatacopy(add(result, 0x20), add(mload(0x00), 0x20), mload(result))
            mstore(0x40, add(add(result, 0x20), mload(result)))
        }
    }

    /// @dev Returns the token collection symbol from the base Del404 contract.
    function symbol() public view virtual returns (string memory result) {
        address base = baseERC20();
        /// @solidity memory-safe-assembly
        assembly {
            result := mload(0x40)
            mstore(0x00, 0x95d89b41) // `symbol()`.
            if iszero(staticcall(gas(), base, 0x1c, 0x04, 0x00, 0x00)) {
                returndatacopy(result, 0x00, returndatasize())
                revert(result, returndatasize())
            }
            returndatacopy(0x00, 0x00, 0x20)
            returndatacopy(result, mload(0x00), 0x20)
            returndatacopy(add(result, 0x20), add(mload(0x00), 0x20), mload(result))
            mstore(0x40, add(add(result, 0x20), mload(result)))
        }
    }

    /// @dev Returns the Uniform Resource Identifier (URI) for token `id` from
    /// the base Del404 contract.
    function tokenURI(uint256 id) public view virtual returns (string memory result) {
        address base = baseERC20();
        /// @solidity memory-safe-assembly
        assembly {
            result := mload(0x40)
            mstore(0x20, id)
            mstore(0x00, 0xc87b56dd) // `tokenURI()`.
            if iszero(staticcall(gas(), base, 0x1c, 0x24, 0x00, 0x00)) {
                returndatacopy(result, 0x00, returndatasize())
                revert(result, returndatasize())
            }
            returndatacopy(0x00, 0x00, 0x20)
            returndatacopy(result, mload(0x00), 0x20)
            returndatacopy(add(result, 0x20), add(mload(0x00), 0x20), mload(result))
            mstore(0x40, add(add(result, 0x20), mload(result)))
        }
    }

    /// @dev Returns the total NFT supply from the base Del404 contract.
    function totalSupply() public view virtual returns (uint256 result) {
        address base = baseERC20();
        /// @solidity memory-safe-assembly
        assembly {
            mstore(0x00, 0xe2c79281) // `totalNFTSupply()`.
            if iszero(
                and(gt(returndatasize(), 0x1f), staticcall(gas(), base, 0x1c, 0x04, 0x00, 0x20))
            ) {
                returndatacopy(mload(0x40), 0x00, returndatasize())
                revert(mload(0x40), returndatasize())
            }
            result := mload(0x00)
        }
    }

    /// @dev Returns the number of NFT tokens owned by `owner` from the base Del404 contract.
    ///
    /// Requirements:
    /// - `owner` must not be the zero address.
    function balanceOf(address owner) public view virtual returns (uint256 result) {
        address base = baseERC20();
        /// @solidity memory-safe-assembly
        assembly {
            mstore(0x20, shr(96, shl(96, owner)))
            mstore(0x00, 0xf5b100ea) // `balanceOfNFT(address)`.
            if iszero(
                and(gt(returndatasize(), 0x1f), staticcall(gas(), base, 0x1c, 0x24, 0x00, 0x20))
            ) {
                returndatacopy(mload(0x40), 0x00, returndatasize())
                revert(mload(0x40), returndatasize())
            }
            result := mload(0x00)
        }
    }

    /// @dev Returns the owner of token `id` from the base Del404 contract.
    ///
    /// Requirements:
    /// - Token `id` must exist.
    function ownerOf(uint256 id) public view virtual returns (address result) {
        address base = baseERC20();
        /// @solidity memory-safe-assembly
        assembly {
            mstore(0x00, 0x6352211e) // `ownerOf(uint256)`.
            mstore(0x20, id)
            if iszero(
                and(gt(returndatasize(), 0x1f), staticcall(gas(), base, 0x1c, 0x24, 0x00, 0x20))
            ) {
                returndatacopy(mload(0x40), 0x00, returndatasize())
                revert(mload(0x40), returndatasize())
            }
            result := shr(96, mload(0x0c))
        }
    }

    /// @dev Sets `spender` as the approved account to manage token `id` in
    /// the base Del404 contract.
    ///
    /// Requirements:
    /// - Token `id` must exist.
    /// - The caller must be the owner of the token,
    ///   or an approved operator for the token owner.
    ///
    /// Emits an {Approval} event.
    function approve(address spender, uint256 id) public virtual {
        address base = baseERC20();
        /// @solidity memory-safe-assembly
        assembly {
            spender := shr(96, shl(96, spender))
            let m := mload(0x40)
            mstore(0x00, 0xd10b6e0c) // `approveNFT(address,uint256,address)`.
            mstore(0x20, spender)
            mstore(0x40, id)
            mstore(0x60, caller())
            if iszero(
                and(
                    gt(returndatasize(), 0x1f),
                    call(gas(), base, callvalue(), 0x1c, 0x64, 0x00, 0x20)
                )
            ) {
                returndatacopy(m, 0x00, returndatasize())
                revert(m, returndatasize())
            }
            mstore(0x40, m) // Restore the free memory pointer.
            mstore(0x60, 0) // Restore the zero pointer.
            // Emit the {Approval} event.
            log4(codesize(), 0x00, _APPROVAL_EVENT_SIGNATURE, shr(96, mload(0x0c)), spender, id)
        }
    }

    /// @dev Returns the account approved to manage token `id` from
    /// the base Del404 contract.
    ///
    /// Requirements:
    /// - Token `id` must exist.
    function getApproved(uint256 id) public view virtual returns (address result) {
        address base = baseERC20();
        /// @solidity memory-safe-assembly
        assembly {
            mstore(0x00, 0x081812fc) // `getApproved(uint256)`.
            mstore(0x20, id)
            if iszero(
                and(gt(returndatasize(), 0x1f), staticcall(gas(), base, 0x1c, 0x24, 0x00, 0x20))
            ) {
                returndatacopy(mload(0x40), 0x00, returndatasize())
                revert(mload(0x40), returndatasize())
            }
            result := shr(96, mload(0x0c))
        }
    }

    /// @dev Sets whether `operator` is approved to manage the tokens of the caller in
    /// the base Del404 contract.
    ///
    /// Emits an {ApprovalForAll} event.
    function setApprovalForAll(address operator, bool approved) public virtual {
        address base = baseERC20();
        /// @solidity memory-safe-assembly
        assembly {
            operator := shr(96, shl(96, operator))
            let m := mload(0x40)
            mstore(0x00, 0x813500fc) // `setApprovalForAll(address,bool,address)`.
            mstore(0x20, operator)
            mstore(0x40, iszero(iszero(approved)))
            mstore(0x60, caller())
            if iszero(
                and(eq(mload(0x00), 1), call(gas(), base, callvalue(), 0x1c, 0x64, 0x00, 0x20))
            ) {
                returndatacopy(m, 0x00, returndatasize())
                revert(m, returndatasize())
            }
            // Emit the {ApprovalForAll} event.
            log3(0x40, 0x20, _APPROVAL_FOR_ALL_EVENT_SIGNATURE, caller(), operator)
            mstore(0x40, m) // Restore the free memory pointer.
            mstore(0x60, 0) // Restore the zero pointer.
        }
    }

    /// @dev Returns whether `operator` is approved to manage the tokens of `owner` from
    /// the base Del404 contract.
    function isApprovedForAll(address owner, address operator)
        public
        view
        virtual
        returns (bool result)
    {
        address base = baseERC20();
        /// @solidity memory-safe-assembly
        assembly {
            let m := mload(0x40)
            mstore(0x40, operator)
            mstore(0x2c, shl(96, owner))
            mstore(0x0c, 0xe985e9c5000000000000000000000000) // `isApprovedForAll(address,address)`.
            if iszero(
                and(gt(returndatasize(), 0x1f), staticcall(gas(), base, 0x1c, 0x44, 0x00, 0x20))
            ) {
                returndatacopy(m, 0x00, returndatasize())
                revert(m, returndatasize())
            }
            mstore(0x40, m) // Restore the free memory pointer.
            result := iszero(iszero(mload(0x00)))
        }
    }

    /// @dev Transfers token `id` from `from` to `to`.
    ///
    /// Requirements:
    ///
    /// - Token `id` must exist.
    /// - `from` must be the owner of the token.
    /// - `to` cannot be the zero address.
    /// - The caller must be the owner of the token, or be approved to manage the token.
    ///
    /// Emits a {Transfer} event.
    function transferFrom(address from, address to, uint256 id) public virtual {
        address base = baseERC20();
        /// @solidity memory-safe-assembly
        assembly {
            from := shr(96, shl(96, from))
            to := shr(96, shl(96, to))
            let m := mload(0x40)
            mstore(m, 0xe5eb36c8) // `transferFromNFT(address,address,uint256,address)`.
            mstore(add(m, 0x20), from)
            mstore(add(m, 0x40), to)
            mstore(add(m, 0x60), id)
            mstore(add(m, 0x80), caller())
            if iszero(
                and(eq(mload(m), 1), call(gas(), base, callvalue(), add(m, 0x1c), 0x84, m, 0x20))
            ) {
                returndatacopy(m, 0x00, returndatasize())
                revert(m, returndatasize())
            }
            // Emit the {Transfer} event.
            log4(codesize(), 0x00, _TRANSFER_EVENT_SIGNATURE, from, to, id)
        }
    }

    /// @dev Equivalent to `safeTransferFrom(from, to, id, "")`.
    function safeTransferFrom(address from, address to, uint256 id) public payable virtual {
        transferFrom(from, to, id);

        if (_hasCode(to)) _checkOnERC721Received(from, to, id, "");
    }

    /// @dev Transfers token `id` from `from` to `to`.
    ///
    /// Requirements:
    ///
    /// - Token `id` must exist.
    /// - `from` must be the owner of the token.
    /// - `to` cannot be the zero address.
    /// - The caller must be the owner of the token, or be approved to manage the token.
    /// - If `to` refers to a smart contract, it must implement
    ///   {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
    ///
    /// Emits a {Transfer} event.
    function safeTransferFrom(address from, address to, uint256 id, bytes calldata data)
        public
        virtual
    {
        transferFrom(from, to, id);

        if (_hasCode(to)) _checkOnERC721Received(from, to, id, data);
    }

    /// @dev Returns true if this contract implements the interface defined by `interfaceId`.
    /// See: https://eips.ethereum.org/EIPS/eip-165
    /// This function call must use less than 30000 gas.
    function supportsInterface(bytes4 interfaceId) public view virtual returns (bool result) {
        /// @solidity memory-safe-assembly
        assembly {
            let s := shr(224, interfaceId)
            // ERC165: 0x01ffc9a7, ERC721: 0x80ac58cd, ERC721Metadata: 0x5b5e139f.
            result := or(or(eq(s, 0x01ffc9a7), eq(s, 0x80ac58cd)), eq(s, 0x5b5e139f))
        }
    }

    /*«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-*/
    /*                     MIRROR OPERATIONS                      */
    /*-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»*/

    /// @dev Returns the address of the base Del404 contract.
    function baseERC20() public view virtual returns (address base) {
        base = _getDel404NFTStorage().baseERC20;
        if (base == address(0)) revert NotLinked();
    }

    /// @dev Fallback modifier to execute calls from the base Del404 contract.
    modifier del404NFTFallback() virtual {
        Del404NFTStorage storage $ = _getDel404NFTStorage();

        uint256 fnSelector = _calldataload(0x00) >> 224;

        // `logTransfer(uint256[])`.
        if (fnSelector == 0x263c69d6) {
            if (msg.sender != $.baseERC20) revert SenderNotBase();
            /// @solidity memory-safe-assembly
            assembly {
                // When returndatacopy copies 1 or more out-of-bounds bytes, it reverts.
                returndatacopy(0x00, returndatasize(), lt(calldatasize(), 0x20))
                let o := add(0x24, calldataload(0x04)) // Packed logs offset.
                returndatacopy(0x00, returndatasize(), lt(calldatasize(), o))
                let end := add(o, shl(5, calldataload(sub(o, 0x20))))
                returndatacopy(0x00, returndatasize(), lt(calldatasize(), end))

                for {} iszero(eq(o, end)) { o := add(0x20, o) } {
                    let d := calldataload(o) // Entry in the packed logs.
                    let a := shr(96, d) // The address.
                    let b := and(1, d) // Whether it is a burn.
                    log4(
                        codesize(),
                        0x00,
                        _TRANSFER_EVENT_SIGNATURE,
                        mul(a, b),
                        mul(a, iszero(b)),
                        shr(168, shl(160, d))
                    )
                }
                mstore(0x00, 0x01)
                return(0x00, 0x20)
            }
        }
        // `linkMirrorContract(address)`.
        if (fnSelector == 0x0f4599e5) {
            if ($.deployer != address(0)) {
                if (address(uint160(_calldataload(0x04))) != $.deployer) {
                    revert SenderNotDeployer();
                }
            }
            if ($.baseERC20 != address(0)) revert AlreadyLinked();
            $.baseERC20 = msg.sender;
            /// @solidity memory-safe-assembly
            assembly {
                mstore(0x00, 0x01)
                return(0x00, 0x20)
            }
        }
        _;
    }

    /// @dev Fallback function for calls from base Del404 contract.
    fallback() external payable virtual del404NFTFallback {}

    receive() external payable virtual {}

    /*«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-*/
    /*                      PRIVATE HELPERS                       */
    /*-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»*/

    /// @dev Returns the calldata value at `offset`.
    function _calldataload(uint256 offset) private pure returns (uint256 value) {
        /// @solidity memory-safe-assembly
        assembly {
            value := calldataload(offset)
        }
    }

    /// @dev Returns if `a` has bytecode of non-zero length.
    function _hasCode(address a) private view returns (bool result) {
        /// @solidity memory-safe-assembly
        assembly {
            result := extcodesize(a) // Can handle dirty upper bits.
        }
    }

    /// @dev Perform a call to invoke {IERC721Receiver-onERC721Received} on `to`.
    /// Reverts if the target does not support the function correctly.
    function _checkOnERC721Received(address from, address to, uint256 id, bytes memory data)
        private
    {
        /// @solidity memory-safe-assembly
        assembly {
            // Prepare the calldata.
            let m := mload(0x40)
            let onERC721ReceivedSelector := 0x150b7a02
            mstore(m, onERC721ReceivedSelector)
            mstore(add(m, 0x20), caller()) // The `operator`, which is always `msg.sender`.
            mstore(add(m, 0x40), shr(96, shl(96, from)))
            mstore(add(m, 0x60), id)
            mstore(add(m, 0x80), 0x80)
            let n := mload(data)
            mstore(add(m, 0xa0), n)
            if n { pop(staticcall(gas(), 4, add(data, 0x20), n, add(m, 0xc0), n)) }
            // Revert if the call reverts.
            if iszero(call(gas(), to, 0, add(m, 0x1c), add(n, 0xa4), m, 0x20)) {
                if returndatasize() {
                    // Bubble up the revert if the call reverts.
                    returndatacopy(m, 0x00, returndatasize())
                    revert(m, returndatasize())
                }
            }
            // Load the returndata and compare it.
            if iszero(eq(mload(m), shl(224, onERC721ReceivedSelector))) {
                mstore(0x00, 0xd1a57ed6) // `TransferToNonERC721ReceiverImplementer()`.
                revert(0x1c, 0x04)
            }
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"deployer","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyLinked","type":"error"},{"inputs":[],"name":"CannotLink","type":"error"},{"inputs":[],"name":"NotLinked","type":"error"},{"inputs":[],"name":"SenderNotBase","type":"error"},{"inputs":[],"name":"SenderNotDeployer","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"isApproved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"Transfer","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"result","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseERC20","outputs":[{"internalType":"address","name":"base","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"result","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"result","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"result","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"result","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"result","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"result","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"result","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"result","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405234801561001057600080fd5b50604051610ca6380380610ca683398101604081905261002f9161005c565b684f191694f9f22ccbcd80546001600160a01b0319166001600160a01b039290921691909117905561008c565b60006020828403121561006e57600080fd5b81516001600160a01b038116811461008557600080fd5b9392505050565b610c0b8061009b6000396000f3fe6080604052600436106100ec5760003560e01c80636352211e1161008a578063a22cb46511610059578063a22cb465146103e8578063b88d4fde14610408578063c87b56dd14610428578063e985e9c514610448576100f3565b80636352211e1461037e57806370a082311461039e57806395d89b41146103be57806397e5311c146103d3576100f3565b8063095ea7b3116100c6578063095ea7b31461030857806318160ddd1461032857806323b872dd1461034b57806342842e0e1461036b576100f3565b806301ffc9a71461025c57806306fdde03146102ae578063081812fc146102d0576100f3565b366100f357005b684f191694f9f22ccbcc60003560e01c63263c69d68190036101bf5781546001600160a01b0316331461013957604051631b1e598960e11b815260040160405180910390fd5b602036103d60003e6004356024018036103d60003e602081033560051b81018036103d60003e5b8082146101b25781358060601c816001168260a01b60a81c811583028284027fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600038a4505050816020019150610160565b5050600160005260206000f35b80630f4599e50361025a5760018201546001600160a01b0316156102155760018201546001600160a01b03166004356001600160a01b031614610215576040516362cf623d60e11b815260040160405180910390fd5b81546001600160a01b03161561023e57604051635fb2b52360e11b815260040160405180910390fd5b81546001600160a01b0319163317825560016000908152602090f35b005b34801561026857600080fd5b50610299610277366004610996565b6301ffc9a760e09190911c9081146380ac58cd821417635b5e139f9091141790565b60405190151581526020015b60405180910390f35b3480156102ba57600080fd5b506102c3610468565b6040516102a591906109c7565b3480156102dc57600080fd5b506102f06102eb366004610a15565b6104c2565b6040516001600160a01b0390911681526020016102a5565b34801561031457600080fd5b5061025a610323366004610a4a565b610509565b34801561033457600080fd5b5061033d61058f565b6040519081526020016102a5565b34801561035757600080fd5b5061025a610366366004610a74565b6105cd565b61025a610379366004610a74565b61065c565b34801561038a57600080fd5b506102f0610399366004610a15565b61068e565b3480156103aa57600080fd5b5061033d6103b9366004610ab0565b6106c8565b3480156103ca57600080fd5b506102c3610712565b3480156103df57600080fd5b506102f0610744565b3480156103f457600080fd5b5061025a610403366004610acb565b610779565b34801561041457600080fd5b5061025a610423366004610b07565b6107fc565b34801561043457600080fd5b506102c3610443366004610a15565b610857565b34801561045457600080fd5b50610299610463366004610ba2565b6108b7565b60606000610474610744565b905060405191506306fdde036000526000806004601c845afa61049a573d6000833e3d82fd5b60206000803e6020600051833e8151602060005101602084013e815160208301016040525090565b6000806104cd610744565b905063081812fc60005282602052602060006024601c845afa601f3d11166104fc573d60006040513e3d604051fd5b5050600c5160601c919050565b6000610513610744565b90508260601b60601c925060405163d10b6e0c600052836020528260405233606052602060006064601c34865af1601f3d1116610553573d6000823e3d81fd5b806040525060006060528183600c5160601c7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600038a4505050565b60008061059a610744565b905063e2c79281600052602060006004601c845afa601f3d11166105c5573d60006040513e3d604051fd5b505060005190565b60006105d7610744565b90508360601b60601c93508260601b60601c925060405163e5eb36c881528460208201528360408201528260608201523360808201526020816084601c840134865af160018251141661062d573d6000823e3d81fd5b508183857fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600038a450505050565b6106678383836105cd565b813b15610689576106898383836040518060200160405280600081525061090a565b505050565b600080610699610744565b9050636352211e60005282602052602060006024601c845afa601f3d11166104fc573d60006040513e3d604051fd5b6000806106d3610744565b90508260601b60601c60205263f5b100ea600052602060006024601c845afa601f3d1116610708573d60006040513e3d604051fd5b5050600051919050565b6060600061071e610744565b905060405191506395d89b416000526000806004601c845afa61049a573d6000833e3d82fd5b684f191694f9f22ccbcc546001600160a01b03168061077657604051632d9523d760e11b815260040160405180910390fd5b90565b6000610783610744565b90508260601b60601c925060405163813500fc6000528360205282151560405233606052602060006064601c34865af1600160005114166107c7573d6000823e3d81fd5b83337f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160206040a36040525050600060605250565b6108078585856105cd565b833b156108505761085085858585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061090a92505050565b5050505050565b60606000610863610744565b905060405191508260205263c87b56dd6000526000806024601c845afa61088d573d6000833e3d82fd5b60206000803e6020600051833e8151602060005101602084013e8151602083010160405250919050565b6000806108c2610744565b9050604051836040528460601b602c5263e985e9c560601b600c52602060006044601c855afa601f3d11166108fa573d6000823e3d81fd5b6040525050600051151592915050565b60405163150b7a028082523360208301528560601b60601c604083015283606083015260808083015282518060a08401528015610951578060c08401826020870160045afa505b60208360a48301601c860160008a5af1610974573d15610974573d6000843e3d83fd5b508060e01b82511461098e5763d1a57ed66000526004601cfd5b505050505050565b6000602082840312156109a857600080fd5b81356001600160e01b0319811681146109c057600080fd5b9392505050565b600060208083528351808285015260005b818110156109f4578581018301518582016040015282016109d8565b506000604082860101526040601f19601f8301168501019250505092915050565b600060208284031215610a2757600080fd5b5035919050565b80356001600160a01b0381168114610a4557600080fd5b919050565b60008060408385031215610a5d57600080fd5b610a6683610a2e565b946020939093013593505050565b600080600060608486031215610a8957600080fd5b610a9284610a2e565b9250610aa060208501610a2e565b9150604084013590509250925092565b600060208284031215610ac257600080fd5b6109c082610a2e565b60008060408385031215610ade57600080fd5b610ae783610a2e565b915060208301358015158114610afc57600080fd5b809150509250929050565b600080600080600060808688031215610b1f57600080fd5b610b2886610a2e565b9450610b3660208701610a2e565b935060408601359250606086013567ffffffffffffffff80821115610b5a57600080fd5b818801915088601f830112610b6e57600080fd5b813581811115610b7d57600080fd5b896020828501011115610b8f57600080fd5b9699959850939650602001949392505050565b60008060408385031215610bb557600080fd5b610bbe83610a2e565b9150610bcc60208401610a2e565b9050925092905056fea26469706673582212209e402a1f7aab3fa645156f683e35e2e83250f2a26242c2e4d37bcebb5eafeb7064736f6c6343000813003300000000000000000000000036bcc86f3ff09ae379c1db8a33ad88fb117232f5

Deployed Bytecode

0x6080604052600436106100ec5760003560e01c80636352211e1161008a578063a22cb46511610059578063a22cb465146103e8578063b88d4fde14610408578063c87b56dd14610428578063e985e9c514610448576100f3565b80636352211e1461037e57806370a082311461039e57806395d89b41146103be57806397e5311c146103d3576100f3565b8063095ea7b3116100c6578063095ea7b31461030857806318160ddd1461032857806323b872dd1461034b57806342842e0e1461036b576100f3565b806301ffc9a71461025c57806306fdde03146102ae578063081812fc146102d0576100f3565b366100f357005b684f191694f9f22ccbcc60003560e01c63263c69d68190036101bf5781546001600160a01b0316331461013957604051631b1e598960e11b815260040160405180910390fd5b602036103d60003e6004356024018036103d60003e602081033560051b81018036103d60003e5b8082146101b25781358060601c816001168260a01b60a81c811583028284027fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600038a4505050816020019150610160565b5050600160005260206000f35b80630f4599e50361025a5760018201546001600160a01b0316156102155760018201546001600160a01b03166004356001600160a01b031614610215576040516362cf623d60e11b815260040160405180910390fd5b81546001600160a01b03161561023e57604051635fb2b52360e11b815260040160405180910390fd5b81546001600160a01b0319163317825560016000908152602090f35b005b34801561026857600080fd5b50610299610277366004610996565b6301ffc9a760e09190911c9081146380ac58cd821417635b5e139f9091141790565b60405190151581526020015b60405180910390f35b3480156102ba57600080fd5b506102c3610468565b6040516102a591906109c7565b3480156102dc57600080fd5b506102f06102eb366004610a15565b6104c2565b6040516001600160a01b0390911681526020016102a5565b34801561031457600080fd5b5061025a610323366004610a4a565b610509565b34801561033457600080fd5b5061033d61058f565b6040519081526020016102a5565b34801561035757600080fd5b5061025a610366366004610a74565b6105cd565b61025a610379366004610a74565b61065c565b34801561038a57600080fd5b506102f0610399366004610a15565b61068e565b3480156103aa57600080fd5b5061033d6103b9366004610ab0565b6106c8565b3480156103ca57600080fd5b506102c3610712565b3480156103df57600080fd5b506102f0610744565b3480156103f457600080fd5b5061025a610403366004610acb565b610779565b34801561041457600080fd5b5061025a610423366004610b07565b6107fc565b34801561043457600080fd5b506102c3610443366004610a15565b610857565b34801561045457600080fd5b50610299610463366004610ba2565b6108b7565b60606000610474610744565b905060405191506306fdde036000526000806004601c845afa61049a573d6000833e3d82fd5b60206000803e6020600051833e8151602060005101602084013e815160208301016040525090565b6000806104cd610744565b905063081812fc60005282602052602060006024601c845afa601f3d11166104fc573d60006040513e3d604051fd5b5050600c5160601c919050565b6000610513610744565b90508260601b60601c925060405163d10b6e0c600052836020528260405233606052602060006064601c34865af1601f3d1116610553573d6000823e3d81fd5b806040525060006060528183600c5160601c7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600038a4505050565b60008061059a610744565b905063e2c79281600052602060006004601c845afa601f3d11166105c5573d60006040513e3d604051fd5b505060005190565b60006105d7610744565b90508360601b60601c93508260601b60601c925060405163e5eb36c881528460208201528360408201528260608201523360808201526020816084601c840134865af160018251141661062d573d6000823e3d81fd5b508183857fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600038a450505050565b6106678383836105cd565b813b15610689576106898383836040518060200160405280600081525061090a565b505050565b600080610699610744565b9050636352211e60005282602052602060006024601c845afa601f3d11166104fc573d60006040513e3d604051fd5b6000806106d3610744565b90508260601b60601c60205263f5b100ea600052602060006024601c845afa601f3d1116610708573d60006040513e3d604051fd5b5050600051919050565b6060600061071e610744565b905060405191506395d89b416000526000806004601c845afa61049a573d6000833e3d82fd5b684f191694f9f22ccbcc546001600160a01b03168061077657604051632d9523d760e11b815260040160405180910390fd5b90565b6000610783610744565b90508260601b60601c925060405163813500fc6000528360205282151560405233606052602060006064601c34865af1600160005114166107c7573d6000823e3d81fd5b83337f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160206040a36040525050600060605250565b6108078585856105cd565b833b156108505761085085858585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061090a92505050565b5050505050565b60606000610863610744565b905060405191508260205263c87b56dd6000526000806024601c845afa61088d573d6000833e3d82fd5b60206000803e6020600051833e8151602060005101602084013e8151602083010160405250919050565b6000806108c2610744565b9050604051836040528460601b602c5263e985e9c560601b600c52602060006044601c855afa601f3d11166108fa573d6000823e3d81fd5b6040525050600051151592915050565b60405163150b7a028082523360208301528560601b60601c604083015283606083015260808083015282518060a08401528015610951578060c08401826020870160045afa505b60208360a48301601c860160008a5af1610974573d15610974573d6000843e3d83fd5b508060e01b82511461098e5763d1a57ed66000526004601cfd5b505050505050565b6000602082840312156109a857600080fd5b81356001600160e01b0319811681146109c057600080fd5b9392505050565b600060208083528351808285015260005b818110156109f4578581018301518582016040015282016109d8565b506000604082860101526040601f19601f8301168501019250505092915050565b600060208284031215610a2757600080fd5b5035919050565b80356001600160a01b0381168114610a4557600080fd5b919050565b60008060408385031215610a5d57600080fd5b610a6683610a2e565b946020939093013593505050565b600080600060608486031215610a8957600080fd5b610a9284610a2e565b9250610aa060208501610a2e565b9150604084013590509250925092565b600060208284031215610ac257600080fd5b6109c082610a2e565b60008060408385031215610ade57600080fd5b610ae783610a2e565b915060208301358015158114610afc57600080fd5b809150509250929050565b600080600080600060808688031215610b1f57600080fd5b610b2886610a2e565b9450610b3660208701610a2e565b935060408601359250606086013567ffffffffffffffff80821115610b5a57600080fd5b818801915088601f830112610b6e57600080fd5b813581811115610b7d57600080fd5b896020828501011115610b8f57600080fd5b9699959850939650602001949392505050565b60008060408385031215610bb557600080fd5b610bbe83610a2e565b9150610bcc60208401610a2e565b9050925092905056fea26469706673582212209e402a1f7aab3fa645156f683e35e2e83250f2a26242c2e4d37bcebb5eafeb7064736f6c63430008130033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000036bcc86f3ff09ae379c1db8a33ad88fb117232f5

-----Decoded View---------------
Arg [0] : deployer (address): 0x36Bcc86f3FF09AE379C1dB8a33aD88fB117232f5

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000036bcc86f3ff09ae379c1db8a33ad88fb117232f5


Deployed Bytecode Sourcemap

292:21571:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3679:20;17217:26;19972:20;17325:3;17302:26;17397:10;17383:24;;;17379:1333;;17442:11;;-1:-1:-1;;;;;17442:11:0;17428:10;:25;17424:53;;17462:15;;-1:-1:-1;;;17462:15:0;;;;;;;;;;;17424:53;17716:4;17700:14;17697:24;17679:16;17673:4;17658:64;17772:4;17759:18;17753:4;17749:29;17877:1;17861:14;17858:21;17840:16;17834:4;17819:61;17943:4;17940:1;17936:12;17923:26;17920:1;17916:34;17913:1;17909:42;18027:3;18011:14;18008:23;17990:16;17984:4;17969:63;18052:562;18072:3;18069:1;18066:10;18052:562;;18145:1;18132:15;18215:1;18211:2;18207:10;18271:1;18268;18264:9;18569:1;18564:3;18560:11;18555:3;18551:21;18521:1;18514:9;18511:1;18507:17;18478:1;18475;18471:9;18419:25;18388:4;18351:10;18320:275;;;;18095:1;18089:4;18085:12;18080:17;;18052:562;;;18056:2;;18645:4;18639;18632:18;18681:4;18675;18668:18;17379:1333;18769:10;18783;18769:24;18765:512;;18814:10;;;;-1:-1:-1;;;;;18814:10:0;:24;18810:190;;18904:10;;;;-1:-1:-1;;;;;18904:10:0;18893:4;19972:20;-1:-1:-1;;;;;18863:51:0;;18859:126;;18946:19;;-1:-1:-1;;;18946:19:0;;;;;;;;;;;18859:126;19018:11;;-1:-1:-1;;;;;19018:11:0;:25;19014:53;;19052:15;;-1:-1:-1;;;19052:15:0;;;;;;;;;;;19014:53;19082:24;;-1:-1:-1;;;;;;19082:24:0;19096:10;19082:24;;;;:11;19197:18;;;19246:4;;19233:18;18765:512;17206:2090;16176:387;;;;;;;;;;-1:-1:-1;16176:387:0;;;;;:::i;:::-;16494:10;16357:3;16353:21;;;;16488:17;;;16513:10;16507:17;;16485:40;16533:10;16527:17;;;16482:63;;16176:387;;;;470:14:1;;463:22;445:41;;433:2;418:18;16176:387:0;;;;;;;;4617:728;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;10835:615::-;;;;;;;;;;-1:-1:-1;10835:615:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1399:32:1;;;1381:51;;1369:2;1354:18;10835:615:0;1235:203:1;9621:1036:0;;;;;;;;;;-1:-1:-1;9621:1036:0;;;;;:::i;:::-;;:::i;7147:562::-;;;;;;;;;;;;;:::i;:::-;;;2026:25:1;;;2014:2;1999:18;7147:562:0;1880:177:1;13985:942:0;;;;;;;;;;-1:-1:-1;13985:942:0;;;;;:::i;:::-;;:::i;15001:203::-;;;;;;:::i;:::-;;:::i;8673:607::-;;;;;;;;;;-1:-1:-1;8673:607:0;;;;;:::i;:::-;;:::i;7893:629::-;;;;;;;;;;-1:-1:-1;7893:629:0;;;;;:::i;:::-;;:::i;5434:732::-;;;;;;;;;;;;;:::i;16906:175::-;;;;;;;;;;;;;:::i;11632:1003::-;;;;;;;;;;-1:-1:-1;11632:1003:0;;;;;:::i;:::-;;:::i;15721:241::-;;;;;;;;;;-1:-1:-1;15721:241:0;;;;;:::i;:::-;;:::i;6289:776::-;;;;;;;;;;-1:-1:-1;6289:776:0;;;;;:::i;:::-;;:::i;12768:850::-;;;;;;;;;;-1:-1:-1;12768:850:0;;;;;:::i;:::-;;:::i;4617:728::-;4662:20;4695:12;4710:11;:9;:11::i;:::-;4695:26;;4816:4;4810:11;4800:21;;4848:10;4842:4;4835:24;4938:4;4932;4926;4920;4914;4907:5;4896:47;4886:189;;4993:16;4987:4;4979:6;4964:46;5043:16;5035:6;5028:32;4886:189;5116:4;5110;5104;5089:32;5171:4;5164;5158:11;5150:6;5135:41;5254:6;5248:13;5241:4;5234;5228:11;5224:22;5217:4;5209:6;5205:17;5190:72;5318:6;5312:13;5305:4;5297:6;5293:17;5289:37;5283:4;5276:51;4785:553;4617:728;:::o;10835:615::-;10897:14;10924:12;10939:11;:9;:11::i;:::-;10924:26;;11042:10;11036:4;11029:24;11107:2;11101:4;11094:16;11226:4;11220;11214;11208;11202;11195:5;11184:47;11177:4;11159:16;11156:26;11152:80;11124:264;;11301:16;11295:4;11288;11282:11;11267:51;11356:16;11349:4;11343:11;11336:37;11124:264;-1:-1:-1;;11426:4:0;11420:11;11416:2;11412:20;;10835:615;-1:-1:-1;10835:615:0:o;9621:1036::-;9693:12;9708:11;:9;:11::i;:::-;9693:26;;9825:7;9821:2;9817:16;9813:2;9809:25;9798:36;;9863:4;9857:11;9895:10;9889:4;9882:24;9975:7;9969:4;9962:21;10010:2;10004:4;9997:16;10040:8;10034:4;10027:22;10215:4;10209;10203;10197;10184:11;10178:4;10171:5;10166:54;10138:4;10120:16;10117:26;10091:148;10063:312;;10298:16;10292:4;10289:1;10274:41;10343:16;10340:1;10333:27;10063:312;10402:1;10396:4;10389:15;;10467:1;10461:4;10454:15;10636:2;10627:7;10619:4;10613:11;10609:2;10605:20;10578:25;10572:4;10560:10;10555:84;9783:867;9621:1036;;:::o;7147:562::-;7199:14;7226:12;7241:11;:9;:11::i;:::-;7226:26;;7344:10;7338:4;7331:24;7494:4;7488;7482;7476;7470;7463:5;7452:47;7445:4;7427:16;7424:26;7420:80;7392:264;;7569:16;7563:4;7556;7550:11;7535:51;7624:16;7617:4;7611:11;7604:37;7392:264;-1:-1:-1;;7686:4:0;7680:11;;7147:562::o;13985:942::-;14071:12;14086:11;:9;:11::i;:::-;14071:26;;14200:4;14196:2;14192:13;14188:2;14184:22;14176:30;;14242:2;14238;14234:11;14230:2;14226:20;14220:26;;14275:4;14269:11;14304:10;14301:1;14294:21;14405:4;14398;14395:1;14391:12;14384:26;14445:2;14438:4;14435:1;14431:12;14424:24;14483:2;14476:4;14473:1;14469:12;14462:24;14521:8;14514:4;14511:1;14507:12;14500:30;14647:4;14644:1;14638:4;14631;14628:1;14624:12;14611:11;14605:4;14598:5;14593:59;14589:1;14585;14579:8;14576:15;14572:81;14544:245;;14712:16;14706:4;14703:1;14688:41;14757:16;14754:1;14747:27;14544:245;;14906:2;14902;14896:4;14869:25;14863:4;14851:10;14846:63;14161:759;13985:942;;;:::o;15001:203::-;15099:26;15112:4;15118:2;15122;15099:12;:26::i;:::-;20233:14;;15138:58;;;15156:40;15179:4;15185:2;15189;15156:40;;;;;;;;;;;;:22;:40::i;:::-;15001:203;;;:::o;8673:607::-;8731:14;8758:12;8773:11;:9;:11::i;:::-;8758:26;;8876:10;8870:4;8863:24;8937:2;8931:4;8924:16;9056:4;9050;9044;9038;9032;9025:5;9014:47;9007:4;8989:16;8986:26;8982:80;8954:264;;9131:16;9125:4;9118;9112:11;9097:51;9186:16;9179:4;9173:11;9166:37;7893:629;7956:14;7983:12;7998:11;:9;:11::i;:::-;7983:26;;8117:5;8113:2;8109:14;8105:2;8101:23;8095:4;8088:37;8152:10;8146:4;8139:24;8307:4;8301;8295;8289;8283;8276:5;8265:47;8258:4;8240:16;8237:26;8233:80;8205:264;;8382:16;8376:4;8369;8363:11;8348:51;8437:16;8430:4;8424:11;8417:37;8205:264;-1:-1:-1;;8499:4:0;8493:11;;7893:629;-1:-1:-1;7893:629:0:o;5434:732::-;5481:20;5514:12;5529:11;:9;:11::i;:::-;5514:26;;5635:4;5629:11;5619:21;;5667:10;5661:4;5654:24;5759:4;5753;5747;5741;5735;5728:5;5717:47;5707:189;;5814:16;5808:4;5800:6;5785:46;5864:16;5856:6;5849:32;16906:175;3679:20;16988:32;-1:-1:-1;;;;;16988:32:0;;17031:42;;17062:11;;-1:-1:-1;;;17062:11:0;;;;;;;;;;;17031:42;16906:175;:::o;11632:1003::-;11718:12;11733:11;:9;:11::i;:::-;11718:26;;11851:8;11847:2;11843:17;11839:2;11835:26;11823:38;;11890:4;11884:11;11922:10;11916:4;11909:24;12006:8;12000:4;11993:22;12056:8;12049:16;12042:24;12036:4;12029:38;12094:8;12088:4;12081:22;12218:4;12212;12206;12200;12187:11;12181:4;12174:5;12169:54;12165:1;12158:4;12152:11;12149:18;12145:79;12117:243;;12283:16;12277:4;12274:1;12259:41;12328:16;12325:1;12318:27;12117:243;12485:8;12475;12440:33;12434:4;12428;12423:71;12515:4;12508:15;-1:-1:-1;;12586:1:0;12580:4;12573:15;-1:-1:-1;11632:1003:0:o;15721:241::-;15855:26;15868:4;15874:2;15878;15855:12;:26::i;:::-;20233:14;;15894:60;;;15912:42;15935:4;15941:2;15945;15949:4;;15912:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15912:22:0;;-1:-1:-1;;;15912:42:0:i;:::-;15721:241;;;;;:::o;6289:776::-;6348:20;6381:12;6396:11;:9;:11::i;:::-;6381:26;;6502:4;6496:11;6486:21;;6534:2;6528:4;6521:16;6564:10;6558:4;6551:24;6658:4;6652;6646;6640;6634;6627:5;6616:47;6606:189;;6713:16;6707:4;6699:6;6684:46;6763:16;6755:6;6748:32;6606:189;6836:4;6830;6824;6809:32;6891:4;6884;6878:11;6870:6;6855:41;6974:6;6968:13;6961:4;6954;6948:11;6944:22;6937:4;6929:6;6925:17;6910:72;7038:6;7032:13;7025:4;7017:6;7013:17;7009:37;7003:4;6996:51;6471:587;6289:776;;;:::o;12768:850::-;12892:11;12921:12;12936:11;:9;:11::i;:::-;12921:26;;13041:4;13035:11;13073:8;13067:4;13060:22;13117:5;13113:2;13109:14;13103:4;13096:28;-1:-1:-1;;;13145:4:0;13138:48;13342:4;13336;13330;13324;13318;13311:5;13300:47;13293:4;13275:16;13272:26;13268:80;13240:244;;13407:16;13401:4;13398:1;13383:41;13452:16;13449:1;13442:27;13240:244;13505:4;13498:15;-1:-1:-1;;13593:4:0;13587:11;13580:19;13573:27;;12768:850;-1:-1:-1;;12768:850:0:o;20460:1400::-;20703:4;20697:11;20754:10;20788:24;20785:1;20778:35;20848:8;20841:4;20838:1;20834:12;20827:30;20957:4;20953:2;20949:13;20945:2;20941:22;20934:4;20931:1;20927:12;20920:44;20999:2;20992:4;20989:1;20985:12;20978:24;21037:4;21030;21027:1;21023:12;21016:26;21071:4;21065:11;21111:1;21104:4;21101:1;21097:12;21090:23;21130:1;21127:71;;;21193:1;21186:4;21183:1;21179:12;21176:1;21169:4;21163;21159:15;21156:1;21149:5;21138:57;21134:62;21127:71;21316:4;21313:1;21306:4;21303:1;21299:12;21292:4;21289:1;21285:12;21282:1;21278:2;21271:5;21266:55;21256:319;;21345:16;21342:218;;;21475:16;21469:4;21466:1;21451:41;21524:16;21521:1;21514:27;21342:218;21256:319;21673:24;21668:3;21664:34;21660:1;21654:8;21651:48;21641:201;;21733:10;21727:4;21720:24;21822:4;21816;21809:18;21641:201;;;20460:1400;;;;:::o;14:286:1:-;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;167:23;;-1:-1:-1;;;;;;219:32:1;;209:43;;199:71;;266:1;263;256:12;199:71;289:5;14:286;-1:-1:-1;;;14:286:1:o;497:548::-;609:4;638:2;667;656:9;649:21;699:6;693:13;742:6;737:2;726:9;722:18;715:34;767:1;777:140;791:6;788:1;785:13;777:140;;;886:14;;;882:23;;876:30;852:17;;;871:2;848:26;841:66;806:10;;777:140;;;781:3;966:1;961:2;952:6;941:9;937:22;933:31;926:42;1036:2;1029;1025:7;1020:2;1012:6;1008:15;1004:29;993:9;989:45;985:54;977:62;;;;497:548;;;;:::o;1050:180::-;1109:6;1162:2;1150:9;1141:7;1137:23;1133:32;1130:52;;;1178:1;1175;1168:12;1130:52;-1:-1:-1;1201:23:1;;1050:180;-1:-1:-1;1050:180:1:o;1443:173::-;1511:20;;-1:-1:-1;;;;;1560:31:1;;1550:42;;1540:70;;1606:1;1603;1596:12;1540:70;1443:173;;;:::o;1621:254::-;1689:6;1697;1750:2;1738:9;1729:7;1725:23;1721:32;1718:52;;;1766:1;1763;1756:12;1718:52;1789:29;1808:9;1789:29;:::i;:::-;1779:39;1865:2;1850:18;;;;1837:32;;-1:-1:-1;;;1621:254:1:o;2062:328::-;2139:6;2147;2155;2208:2;2196:9;2187:7;2183:23;2179:32;2176:52;;;2224:1;2221;2214:12;2176:52;2247:29;2266:9;2247:29;:::i;:::-;2237:39;;2295:38;2329:2;2318:9;2314:18;2295:38;:::i;:::-;2285:48;;2380:2;2369:9;2365:18;2352:32;2342:42;;2062:328;;;;;:::o;2395:186::-;2454:6;2507:2;2495:9;2486:7;2482:23;2478:32;2475:52;;;2523:1;2520;2513:12;2475:52;2546:29;2565:9;2546:29;:::i;2586:347::-;2651:6;2659;2712:2;2700:9;2691:7;2687:23;2683:32;2680:52;;;2728:1;2725;2718:12;2680:52;2751:29;2770:9;2751:29;:::i;:::-;2741:39;;2830:2;2819:9;2815:18;2802:32;2877:5;2870:13;2863:21;2856:5;2853:32;2843:60;;2899:1;2896;2889:12;2843:60;2922:5;2912:15;;;2586:347;;;;;:::o;2938:808::-;3035:6;3043;3051;3059;3067;3120:3;3108:9;3099:7;3095:23;3091:33;3088:53;;;3137:1;3134;3127:12;3088:53;3160:29;3179:9;3160:29;:::i;:::-;3150:39;;3208:38;3242:2;3231:9;3227:18;3208:38;:::i;:::-;3198:48;;3293:2;3282:9;3278:18;3265:32;3255:42;;3348:2;3337:9;3333:18;3320:32;3371:18;3412:2;3404:6;3401:14;3398:34;;;3428:1;3425;3418:12;3398:34;3466:6;3455:9;3451:22;3441:32;;3511:7;3504:4;3500:2;3496:13;3492:27;3482:55;;3533:1;3530;3523:12;3482:55;3573:2;3560:16;3599:2;3591:6;3588:14;3585:34;;;3615:1;3612;3605:12;3585:34;3660:7;3655:2;3646:6;3642:2;3638:15;3634:24;3631:37;3628:57;;;3681:1;3678;3671:12;3628:57;2938:808;;;;-1:-1:-1;2938:808:1;;-1:-1:-1;3712:2:1;3704:11;;3734:6;2938:808;-1:-1:-1;;;2938:808:1:o;3751:260::-;3819:6;3827;3880:2;3868:9;3859:7;3855:23;3851:32;3848:52;;;3896:1;3893;3886:12;3848:52;3919:29;3938:9;3919:29;:::i;:::-;3909:39;;3967:38;4001:2;3990:9;3986:18;3967:38;:::i;:::-;3957:48;;3751:260;;;;;:::o

Swarm Source

ipfs://9e402a1f7aab3fa645156f683e35e2e83250f2a26242c2e4d37bcebb5eafeb70

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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