Contract 0x125bFBf08EF96458Bc85606cFF857F2FA4E48801

Txn Hash Method
Block
From
To
Value [Txn Fee]
0xdca53b839dbdd89cdd6bf711361c13616e801a705b765926b99ed1c1d599e4d70x60806040228101892022-11-25 4:36:133 days 10 hrs ago0x98634f1cfba567ce9aa1be9d3f894e147c881c24 IN  Create: AssetCheckerFeature0 AVAX0.040645557 27
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
AssetCheckerFeature

Compiler Version
v0.8.16+commit.07a7930e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 6 : AssetCheckerFeature.sol
/// SPDX-License-Identifier: MIT

pragma solidity ^0.8.15;

import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/token/ERC721/IERC721.sol";
import "@openzeppelin/contracts/token/ERC1155/IERC1155.sol";
import "./IAssetCheckerFeature.sol";


contract AssetCheckerFeature is IAssetCheckerFeature {

    bytes4 public constant INTERFACE_ID_ERC20 = 0x36372b07;
    bytes4 public constant INTERFACE_ID_ERC721 = 0x80ac58cd;
    bytes4 public constant INTERFACE_ID_ERC1155 = 0xd9b67a26;
    address internal constant NATIVE_TOKEN_ADDRESS = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;

    function checkAssetsEx(
        address account,
        address operator,
        uint8[] calldata itemTypes,
        address[] calldata tokens,
        uint256[] calldata tokenIds
    )
        external
        override
        view
        returns (AssetCheckResultInfo[] memory infos)
    {
        require(itemTypes.length == tokens.length, "require(itemTypes.length == tokens.length)");
        require(itemTypes.length == tokenIds.length, "require(itemTypes.length == tokenIds.length)");

        infos = new AssetCheckResultInfo[](tokens.length);
        for (uint256 i = 0; i < tokens.length; i++) {
            address token = tokens[i];
            uint256 tokenId = tokenIds[i];

            infos[i].itemType = itemTypes[i];
            if (itemTypes[i] == 0) {
                infos[i].allowance = isApprovedForAll(token, account, operator) ? 1 : 0;
                infos[i].erc721Owner = ownerOf(token, tokenId);
                infos[i].erc721ApprovedAccount = getApproved(token, tokenId);
                infos[i].balance = (infos[i].erc721Owner == account) ? 1 : 0;
                continue;
            }

            if (itemTypes[i] == 1) {
                infos[i].allowance = isApprovedForAll(token, account, operator) ? 1 : 0;
                infos[i].balance = balanceOf(token, account, tokenId);
                continue;
            }

            if (itemTypes[i] == 2) {
                if (token == address(0) || token == NATIVE_TOKEN_ADDRESS) {
                    infos[i].balance = account.balance;
                    infos[i].allowance = type(uint256).max;
                } else {
                    infos[i].balance = balanceOf(token, account);
                    infos[i].allowance = allowanceOf(token, account, operator);
                }
            }
        }
        return infos;
    }

    function checkAssets(address account, address operator, address[] calldata tokens, uint256[] calldata tokenIds)
        external
        override
        view
        returns (AssetCheckResultInfo[] memory infos)
    {
        require(tokens.length == tokenIds.length, "require(tokens.length == tokenIds.length)");

        infos = new AssetCheckResultInfo[](tokens.length);
        for (uint256 i = 0; i < tokens.length; i++) {
            address token = tokens[i];
            uint256 tokenId = tokenIds[i];

            if (supportsInterface(token, INTERFACE_ID_ERC721)) {
                infos[i].itemType = 0;
                infos[i].allowance = isApprovedForAll(token, account, operator) ? 1 : 0;
                infos[i].erc721Owner = ownerOf(token, tokenId);
                infos[i].erc721ApprovedAccount = getApproved(token, tokenId);
                infos[i].balance = (infos[i].erc721Owner == account) ? 1 : 0;
                continue;
            }

            if (supportsInterface(token, INTERFACE_ID_ERC1155)) {
                infos[i].itemType = 1;
                infos[i].allowance = isApprovedForAll(token, account, operator) ? 1 : 0;
                infos[i].balance = balanceOf(token, account, tokenId);
                continue;
            }

            if (supportsInterface(token, INTERFACE_ID_ERC20)) {
                infos[i].itemType = 2;
                if (token == address(0) || token == NATIVE_TOKEN_ADDRESS) {
                    infos[i].balance = account.balance;
                    infos[i].allowance = type(uint256).max;
                } else {
                    infos[i].balance = balanceOf(token, account);
                    infos[i].allowance = allowanceOf(token, account, operator);
                }
            } else {
                infos[i].itemType = 255;
            }
        }
        return infos;
    }

    function supportsInterface(address nft, bytes4 interfaceId) internal view returns (bool) {
        try IERC165(nft).supportsInterface(interfaceId) returns (bool support) {
            return support;
        } catch {
        }
        return false;
    }

    function ownerOf(address nft, uint256 tokenId) internal view returns (address owner) {
        try IERC721(nft).ownerOf(tokenId) returns (address _owner) {
            owner = _owner;
        } catch {
        }
        return owner;
    }

    function getApproved(address nft, uint256 tokenId) internal view returns (address operator) {
        try IERC721(nft).getApproved(tokenId) returns (address approvedAccount) {
            operator = approvedAccount;
        } catch {
        }
        return operator;
    }

    function isApprovedForAll(address nft, address owner, address operator) internal view returns (bool isApproved) {
        if (operator != address(0)) {
            try IERC721(nft).isApprovedForAll(owner, operator) returns (bool _isApprovedForAll) {
                isApproved = _isApprovedForAll;
            } catch {
            }
        }
        return isApproved;
    }

    function balanceOf(address erc20, address account) internal view returns (uint256 balance) {
        try IERC20(erc20).balanceOf(account) returns (uint256 _balance) {
            balance = _balance;
        } catch {
        }
        return balance;
    }

    function allowanceOf(address erc20, address owner, address spender) internal view returns (uint256 allowance) {
        try IERC20(erc20).allowance(owner, spender) returns (uint256 _allowance) {
            allowance = _allowance;
        } catch {
        }
        return allowance;
    }

    function balanceOf(address nft, address account, uint256 id) internal view returns (uint256 balance) {
        try IERC1155(nft).balanceOf(account, id) returns (uint256 _balance) {
            balance = _balance;
        } catch {
        }
        return balance;
    }
}

File 2 of 6 : IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

File 3 of 6 : IERC721.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;

import "../../utils/introspection/IERC165.sol";

/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

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

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - 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 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - 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 tokenId,
        bytes calldata data
    ) external;
}

File 4 of 6 : IERC1155.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol)

pragma solidity ^0.8.0;

import "../../utils/introspection/IERC165.sol";

/**
 * @dev Required interface of an ERC1155 compliant contract, as defined in the
 * https://eips.ethereum.org/EIPS/eip-1155[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155 is IERC165 {
    /**
     * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.
     */
    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);

    /**
     * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
     * transfers.
     */
    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] values
    );

    /**
     * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to
     * `approved`.
     */
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);

    /**
     * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.
     *
     * If an {URI} event was emitted for `id`, the standard
     * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value
     * returned by {IERC1155MetadataURI-uri}.
     */
    event URI(string value, uint256 indexed id);

    /**
     * @dev Returns the amount of tokens of token type `id` owned by `account`.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) external view returns (uint256);

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids)
        external
        view
        returns (uint256[] memory);

    /**
     * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,
     *
     * Emits an {ApprovalForAll} event.
     *
     * Requirements:
     *
     * - `operator` cannot be the caller.
     */
    function setApprovalForAll(address operator, bool approved) external;

    /**
     * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.
     *
     * See {setApprovalForAll}.
     */
    function isApprovedForAll(address account, address operator) external view returns (bool);

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) external;

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) external;
}

File 5 of 6 : IAssetCheckerFeature.sol
/// SPDX-License-Identifier: MIT

pragma solidity ^0.8.15;


interface IAssetCheckerFeature {

    struct AssetCheckResultInfo {
        uint8 itemType; // 0: ERC721, 1: ERC1155, 2: ERC20, 255: other
        uint256 allowance;
        uint256 balance;
        address erc721Owner;
        address erc721ApprovedAccount;
    }

    function checkAssetsEx(
        address account,
        address operator,
        uint8[] calldata itemTypes,
        address[] calldata tokens,
        uint256[] calldata tokenIds
    )
        external
        view
        returns (AssetCheckResultInfo[] memory infos);

    function checkAssets(
        address account,
        address operator,
        address[] calldata tokens,
        uint256[] calldata tokenIds
    )
        external
        view
        returns (AssetCheckResultInfo[] memory infos);
}

File 6 of 6 : IERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

Settings
{
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract ABI

[{"inputs":[],"name":"INTERFACE_ID_ERC1155","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INTERFACE_ID_ERC20","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INTERFACE_ID_ERC721","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"},{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"checkAssets","outputs":[{"components":[{"internalType":"uint8","name":"itemType","type":"uint8"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"address","name":"erc721Owner","type":"address"},{"internalType":"address","name":"erc721ApprovedAccount","type":"address"}],"internalType":"struct IAssetCheckerFeature.AssetCheckResultInfo[]","name":"infos","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"},{"internalType":"uint8[]","name":"itemTypes","type":"uint8[]"},{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"checkAssetsEx","outputs":[{"components":[{"internalType":"uint8","name":"itemType","type":"uint8"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"address","name":"erc721Owner","type":"address"},{"internalType":"address","name":"erc721ApprovedAccount","type":"address"}],"internalType":"struct IAssetCheckerFeature.AssetCheckResultInfo[]","name":"infos","type":"tuple[]"}],"stateMutability":"view","type":"function"}]

608060405234801561001057600080fd5b50611a52806100206000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c806333bf61561461005c57806360ba89671461007a57806371a4beb314610098578063832db740146100c8578063bc6bc0cd146100f8575b600080fd5b610064610116565b60405161007191906110c0565b60405180910390f35b610082610121565b60405161008f91906110c0565b60405180910390f35b6100b260048036038101906100ad91906111fe565b61012c565b6040516100bf9190611400565b60405180910390f35b6100e260048036038101906100dd9190611478565b610694565b6040516100ef9190611400565b60405180910390f35b610100610c34565b60405161010d91906110c0565b60405180910390f35b63d9b67a2660e01b81565b6336372b0760e01b81565b6060828290508585905014610176576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161016d906115d7565b60405180910390fd5b8484905067ffffffffffffffff811115610193576101926115f7565b5b6040519080825280602002602001820160405280156101cc57816020015b6101b9611027565b8152602001906001900390816101b15790505b50905060005b858590508110156106895760008686838181106101f2576101f1611626565b5b90506020020160208101906102079190611655565b9050600085858481811061021e5761021d611626565b5b905060200201359050610238826380ac58cd60e01b610c3f565b156103e757600084848151811061025257610251611626565b5b60200260200101516000019060ff16908160ff1681525050610275828b8b610ccd565b610280576000610283565b60015b60ff1684848151811061029957610298611626565b5b602002602001015160200181815250506102b38282610d89565b8484815181106102c6576102c5611626565b5b60200260200101516060019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061030e8282610e0e565b84848151811061032157610320611626565b5b60200260200101516080019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508973ffffffffffffffffffffffffffffffffffffffff1684848151811061038957610388611626565b5b60200260200101516060015173ffffffffffffffffffffffffffffffffffffffff16146103b75760006103ba565b60015b60ff168484815181106103d0576103cf611626565b5b602002602001015160400181815250505050610676565b6103f88263d9b67a2660e01b610c3f565b1561049e57600184848151811061041257610411611626565b5b60200260200101516000019060ff16908160ff1681525050610435828b8b610ccd565b610440576000610443565b60015b60ff1684848151811061045957610458611626565b5b60200260200101516020018181525050610474828b83610e93565b84848151811061048757610486611626565b5b602002602001015160400181815250505050610676565b6104af826336372b0760e01b610c3f565b156106455760028484815181106104c9576104c8611626565b5b60200260200101516000019060ff16908160ff1681525050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148061055b575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b156105e4578973ffffffffffffffffffffffffffffffffffffffff163184848151811061058b5761058a611626565b5b602002602001015160400181815250507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484815181106105cf576105ce611626565b5b60200260200101516020018181525050610640565b6105ee828b610f1a565b84848151811061060157610600611626565b5b6020026020010151604001818152505061061c828b8b610f9f565b84848151811061062f5761062e611626565b5b602002602001015160200181815250505b610673565b60ff84848151811061065a57610659611626565b5b60200260200101516000019060ff16908160ff16815250505b50505b8080610681906116b1565b9150506101d2565b509695505050505050565b60608484905087879050146106de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d59061176b565b60405180910390fd5b828290508787905014610726576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071d906117fd565b60405180910390fd5b8484905067ffffffffffffffff811115610743576107426115f7565b5b60405190808252806020026020018201604052801561077c57816020015b610769611027565b8152602001906001900390816107615790505b50905060005b85859050811015610c275760008686838181106107a2576107a1611626565b5b90506020020160208101906107b79190611655565b905060008585848181106107ce576107cd611626565b5b9050602002013590508989848181106107ea576107e9611626565b5b90506020020160208101906107ff9190611849565b84848151811061081257610811611626565b5b60200260200101516000019060ff16908160ff168152505060008a8a8581811061083f5761083e611626565b5b90506020020160208101906108549190611849565b60ff16036109d957610867828d8d610ccd565b610872576000610875565b60015b60ff1684848151811061088b5761088a611626565b5b602002602001015160200181815250506108a58282610d89565b8484815181106108b8576108b7611626565b5b60200260200101516060019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506109008282610e0e565b84848151811061091357610912611626565b5b60200260200101516080019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508b73ffffffffffffffffffffffffffffffffffffffff1684848151811061097b5761097a611626565b5b60200260200101516060015173ffffffffffffffffffffffffffffffffffffffff16146109a95760006109ac565b60015b60ff168484815181106109c2576109c1611626565b5b602002602001015160400181815250505050610c14565b60018a8a858181106109ee576109ed611626565b5b9050602002016020810190610a039190611849565b60ff1603610a7f57610a16828d8d610ccd565b610a21576000610a24565b60015b60ff16848481518110610a3a57610a39611626565b5b60200260200101516020018181525050610a55828d83610e93565b848481518110610a6857610a67611626565b5b602002602001015160400181815250505050610c14565b60028a8a85818110610a9457610a93611626565b5b9050602002016020810190610aa99190611849565b60ff1603610c1157600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161480610b2b575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15610bb4578b73ffffffffffffffffffffffffffffffffffffffff1631848481518110610b5b57610b5a611626565b5b602002602001015160400181815250507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848481518110610b9f57610b9e611626565b5b60200260200101516020018181525050610c10565b610bbe828d610f1a565b848481518110610bd157610bd0611626565b5b60200260200101516040018181525050610bec828d8d610f9f565b848481518110610bff57610bfe611626565b5b602002602001015160200181815250505b5b50505b8080610c1f906116b1565b915050610782565b5098975050505050505050565b6380ac58cd60e01b81565b60008273ffffffffffffffffffffffffffffffffffffffff166301ffc9a7836040518263ffffffff1660e01b8152600401610c7a91906110c0565b602060405180830381865afa925050508015610cb457506040513d601f19601f82011682018060405250810190610cb191906118ae565b60015b15610cc25780915050610cc7565b600090505b92915050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614610d82578373ffffffffffffffffffffffffffffffffffffffff1663e985e9c584846040518363ffffffff1660e01b8152600401610d3d9291906118ea565b602060405180830381865afa925050508015610d7757506040513d601f19601f82011682018060405250810190610d7491906118ae565b60015b15610d8157809150505b5b9392505050565b60008273ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401610dc49190611922565b602060405180830381865afa925050508015610dfe57506040513d601f19601f82011682018060405250810190610dfb9190611952565b60015b15610e0857809150505b92915050565b60008273ffffffffffffffffffffffffffffffffffffffff1663081812fc836040518263ffffffff1660e01b8152600401610e499190611922565b602060405180830381865afa925050508015610e8357506040513d601f19601f82011682018060405250810190610e809190611952565b60015b15610e8d57809150505b92915050565b60008373ffffffffffffffffffffffffffffffffffffffff1662fdd58e84846040518363ffffffff1660e01b8152600401610ecf92919061197f565b602060405180830381865afa925050508015610f0957506040513d601f19601f82011682018060405250810190610f0691906119d4565b60015b15610f1357809150505b9392505050565b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401610f559190611a01565b602060405180830381865afa925050508015610f8f57506040513d601f19601f82011682018060405250810190610f8c91906119d4565b60015b15610f9957809150505b92915050565b60008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e84846040518363ffffffff1660e01b8152600401610fdc9291906118ea565b602060405180830381865afa92505050801561101657506040513d601f19601f8201168201806040525081019061101391906119d4565b60015b1561102057809150505b9392505050565b6040518060a00160405280600060ff1681526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6110ba81611085565b82525050565b60006020820190506110d560008301846110b1565b92915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611110826110e5565b9050919050565b61112081611105565b811461112b57600080fd5b50565b60008135905061113d81611117565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261116857611167611143565b5b8235905067ffffffffffffffff81111561118557611184611148565b5b6020830191508360208202830111156111a1576111a061114d565b5b9250929050565b60008083601f8401126111be576111bd611143565b5b8235905067ffffffffffffffff8111156111db576111da611148565b5b6020830191508360208202830111156111f7576111f661114d565b5b9250929050565b6000806000806000806080878903121561121b5761121a6110db565b5b600061122989828a0161112e565b965050602061123a89828a0161112e565b955050604087013567ffffffffffffffff81111561125b5761125a6110e0565b5b61126789828a01611152565b9450945050606087013567ffffffffffffffff81111561128a576112896110e0565b5b61129689828a016111a8565b92509250509295509295509295565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600060ff82169050919050565b6112e7816112d1565b82525050565b6000819050919050565b611300816112ed565b82525050565b61130f81611105565b82525050565b60a08201600082015161132b60008501826112de565b50602082015161133e60208501826112f7565b50604082015161135160408501826112f7565b5060608201516113646060850182611306565b5060808201516113776080850182611306565b50505050565b60006113898383611315565b60a08301905092915050565b6000602082019050919050565b60006113ad826112a5565b6113b781856112b0565b93506113c2836112c1565b8060005b838110156113f35781516113da888261137d565b97506113e583611395565b9250506001810190506113c6565b5085935050505092915050565b6000602082019050818103600083015261141a81846113a2565b905092915050565b60008083601f84011261143857611437611143565b5b8235905067ffffffffffffffff81111561145557611454611148565b5b6020830191508360208202830111156114715761147061114d565b5b9250929050565b60008060008060008060008060a0898b031215611498576114976110db565b5b60006114a68b828c0161112e565b98505060206114b78b828c0161112e565b975050604089013567ffffffffffffffff8111156114d8576114d76110e0565b5b6114e48b828c01611422565b9650965050606089013567ffffffffffffffff811115611507576115066110e0565b5b6115138b828c01611152565b9450945050608089013567ffffffffffffffff811115611536576115356110e0565b5b6115428b828c016111a8565b92509250509295985092959890939650565b600082825260208201905092915050565b7f7265717569726528746f6b656e732e6c656e677468203d3d20746f6b656e496460008201527f732e6c656e677468290000000000000000000000000000000000000000000000602082015250565b60006115c1602983611554565b91506115cc82611565565b604082019050919050565b600060208201905081810360008301526115f0816115b4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561166b5761166a6110db565b5b60006116798482850161112e565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006116bc826112ed565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036116ee576116ed611682565b5b600182019050919050565b7f72657175697265286974656d54797065732e6c656e677468203d3d20746f6b6560008201527f6e732e6c656e6774682900000000000000000000000000000000000000000000602082015250565b6000611755602a83611554565b9150611760826116f9565b604082019050919050565b6000602082019050818103600083015261178481611748565b9050919050565b7f72657175697265286974656d54797065732e6c656e677468203d3d20746f6b6560008201527f6e4964732e6c656e677468290000000000000000000000000000000000000000602082015250565b60006117e7602c83611554565b91506117f28261178b565b604082019050919050565b60006020820190508181036000830152611816816117da565b9050919050565b611826816112d1565b811461183157600080fd5b50565b6000813590506118438161181d565b92915050565b60006020828403121561185f5761185e6110db565b5b600061186d84828501611834565b91505092915050565b60008115159050919050565b61188b81611876565b811461189657600080fd5b50565b6000815190506118a881611882565b92915050565b6000602082840312156118c4576118c36110db565b5b60006118d284828501611899565b91505092915050565b6118e481611105565b82525050565b60006040820190506118ff60008301856118db565b61190c60208301846118db565b9392505050565b61191c816112ed565b82525050565b60006020820190506119376000830184611913565b92915050565b60008151905061194c81611117565b92915050565b600060208284031215611968576119676110db565b5b60006119768482850161193d565b91505092915050565b600060408201905061199460008301856118db565b6119a16020830184611913565b9392505050565b6119b1816112ed565b81146119bc57600080fd5b50565b6000815190506119ce816119a8565b92915050565b6000602082840312156119ea576119e96110db565b5b60006119f8848285016119bf565b91505092915050565b6000602082019050611a1660008301846118db565b9291505056fea264697066735822122083f20209ac407ee1a0f184c4a3f9a6c43fdd85ffe24a8d3743ba577502cc8a0f64736f6c63430008100033

Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.