ETH Price: $1,574.42 (-0.95%)

Contract

0xFc03c0bad134A0c0151db9358AD697c5dAF611Ee

Overview

ETH Balance

0 ETH

ETH Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Cancel111765352024-03-30 9:34:06387 days ago1711791246IN
0xFc03c0ba...5dAF611Ee
0 ETH0.000337782.49
Cancel110076572024-03-24 12:58:43393 days ago1711285123IN
0xFc03c0ba...5dAF611Ee
0 ETH0.000365432.64
Cancel109898082024-03-23 20:53:53393 days ago1711227233IN
0xFc03c0ba...5dAF611Ee
0 ETH0.000358342.49
Cancel108879762024-03-19 13:45:06398 days ago1710855906IN
0xFc03c0ba...5dAF611Ee
0 ETH0.0007775.51
Cancel108191752024-03-17 4:35:21400 days ago1710650121IN
0xFc03c0ba...5dAF611Ee
0 ETH0.000487223.53
Cancel102447162024-02-26 3:45:53420 days ago1708919153IN
0xFc03c0ba...5dAF611Ee
0 ETH0.000500323.62
Cancel102318102024-02-25 17:01:10421 days ago1708880470IN
0xFc03c0ba...5dAF611Ee
0 ETH0.00086985.6
Cancel102222212024-02-25 9:03:12421 days ago1708851792IN
0xFc03c0ba...5dAF611Ee
0 ETH0.00048963.71
Cancel101937962024-02-24 9:26:36422 days ago1708766796IN
0xFc03c0ba...5dAF611Ee
0 ETH0.000520573.84
Cancel101928172024-02-24 8:37:52422 days ago1708763872IN
0xFc03c0ba...5dAF611Ee
0 ETH0.000689564.28
Cancel101871532024-02-24 3:55:28422 days ago1708746928IN
0xFc03c0ba...5dAF611Ee
0 ETH0.000394592.99
Cancel101336472024-02-22 7:25:18424 days ago1708586718IN
0xFc03c0ba...5dAF611Ee
0 ETH0.000689734.99
Cancel101097112024-02-21 11:30:07425 days ago1708515007IN
0xFc03c0ba...5dAF611Ee
0 ETH0.00053.62
Cancel100906892024-02-20 19:40:55426 days ago1708458055IN
0xFc03c0ba...5dAF611Ee
0 ETH0.000710375.24
Cancel100618762024-02-19 19:41:42427 days ago1708371702IN
0xFc03c0ba...5dAF611Ee
0 ETH0.000832245.28
Cancel100336442024-02-18 18:45:09428 days ago1708281909IN
0xFc03c0ba...5dAF611Ee
0 ETH0.00051593.73
Cancel100306172024-02-18 16:14:06428 days ago1708272846IN
0xFc03c0ba...5dAF611Ee
0 ETH0.000721185.21
Cancel100234262024-02-18 10:15:54428 days ago1708251354IN
0xFc03c0ba...5dAF611Ee
0 ETH0.00045433.3
Cancel100217672024-02-18 8:53:38428 days ago1708246418IN
0xFc03c0ba...5dAF611Ee
0 ETH0.000400182.95
Cancel100024742024-02-17 16:43:21429 days ago1708188201IN
0xFc03c0ba...5dAF611Ee
0 ETH0.000543714.12
Cancel99975662024-02-17 12:34:20429 days ago1708173260IN
0xFc03c0ba...5dAF611Ee
0 ETH0.000345152.4
Cancel99937082024-02-17 9:21:39429 days ago1708161699IN
0xFc03c0ba...5dAF611Ee
0 ETH0.000332422.4
Cancel99931172024-02-17 8:52:19429 days ago1708159939IN
0xFc03c0ba...5dAF611Ee
0 ETH0.000329632.3
Cancel99577072024-02-16 3:22:12430 days ago1708053732IN
0xFc03c0ba...5dAF611Ee
0 ETH0.000618433.63
Cancel99299052024-02-15 4:15:42431 days ago1707970542IN
0xFc03c0ba...5dAF611Ee
0 ETH0.000356772.63
View all transactions

Parent Transaction Hash Block From To
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
OrderCanceler

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 1000 runs

Other Settings:
default evmVersion
File 1 of 8 : OrderCanceler.sol
// SPDX-License-Identifier: -
// License: https://license.clober.io/LICENSE.pdf

pragma solidity ^0.8.0;

import "./interfaces/CloberOrderBook.sol";
import "./interfaces/CloberOrderNFT.sol";
import "./interfaces/CloberOrderCanceler.sol";

contract OrderCanceler is CloberOrderCanceler {
    function cancel(CancelParams[] calldata paramsList) external {
        _cancelTo(paramsList, msg.sender);
    }

    function cancelTo(CancelParams[] calldata paramsList, address to) external {
        _cancelTo(paramsList, to);
    }

    function _cancelTo(CancelParams[] calldata paramsList, address to) internal {
        for (uint256 i = 0; i < paramsList.length; ++i) {
            uint256[] calldata tokenIds = paramsList[i].tokenIds;
            CloberOrderBook market = CloberOrderBook(paramsList[i].market);
            CloberOrderNFT(market.orderToken()).cancel(msg.sender, tokenIds, to);
        }
    }
}

File 2 of 8 : CloberOrderBook.sol
// SPDX-License-Identifier: GPL-2.0-or-later

pragma solidity ^0.8.0;

import "./CloberOrderKey.sol";

interface CloberOrderBook {
    /**
     * @notice Emitted when an order is created.
     * @param sender The address who sent the tokens to make the order.
     * @param user The address with the rights to claim the proceeds of the order.
     * @param rawAmount The ordered raw amount.
     * @param orderIndex The order index.
     * @param priceIndex The price book index.
     * @param options LSB: 0 - Ask, 1 - Bid.
     */
    event MakeOrder(
        address indexed sender,
        address indexed user,
        uint64 rawAmount,
        uint32 claimBounty,
        uint256 orderIndex,
        uint16 priceIndex,
        uint8 options
    );

    /**
     * @notice Emitted when an order takes from the order book.
     * @param sender The address who sent the tokens to take the order.
     * @param user The recipient address of the traded token.
     * @param priceIndex The price book index.
     * @param rawAmount The ordered raw amount.
     * @param options MSB: 0 - Limit, 1 - Market / LSB: 0 - Ask, 1 - Bid.
     */
    event TakeOrder(address indexed sender, address indexed user, uint16 priceIndex, uint64 rawAmount, uint8 options);

    /**
     * @notice Emitted when an order is canceled.
     * @param user The owner of the order.
     * @param rawAmount The raw amount remaining that was canceled.
     * @param orderIndex The order index.
     * @param priceIndex The price book index.
     * @param isBid The flag indicating whether it's a bid order or an ask order.
     */
    event CancelOrder(address indexed user, uint64 rawAmount, uint256 orderIndex, uint16 priceIndex, bool isBid);

    /**
     * @notice Emitted when the proceeds of an order is claimed.
     * @param claimer The address that initiated the claim.
     * @param user The owner of the order.
     * @param rawAmount The ordered raw amount.
     * @param bountyAmount The size of the claim bounty.
     * @param orderIndex The order index.
     * @param priceIndex The price book index.
     * @param isBase The flag indicating whether the user receives the base token or the quote token.
     */
    event ClaimOrder(
        address indexed claimer,
        address indexed user,
        uint64 rawAmount,
        uint256 bountyAmount,
        uint256 orderIndex,
        uint16 priceIndex,
        bool isBase
    );

    /**
     * @notice Emitted when a flash-loan is taken.
     * @param caller The caller address of the flash-loan.
     * @param borrower The address of the flash loan token receiver.
     * @param quoteAmount The amount of quote tokens the user has borrowed.
     * @param baseAmount The amount of base tokens the user has borrowed.
     * @param earnedQuote The amount of quote tokens the protocol earned in quote tokens.
     * @param earnedBase The amount of base tokens the protocol earned in base tokens.
     */
    event Flash(
        address indexed caller,
        address indexed borrower,
        uint256 quoteAmount,
        uint256 baseAmount,
        uint256 earnedQuote,
        uint256 earnedBase
    );

    /**
     * @notice A struct that represents an order.
     * @param amount The raw amount not filled yet. In case of a stale order, the amount not claimed yet.
     * @param claimBounty The bounty amount in gwei that can be collected by the party that fully claims the order.
     * @param owner The address of the order owner.
     */
    struct Order {
        uint64 amount;
        uint32 claimBounty;
        address owner;
    }

    /**
     * @notice A struct that represents a block trade log.
     * @param blockTime The timestamp of the block.
     * @param askVolume The volume taken on the ask side.
     * @param bidVolume The volume taken on the bid side.
     * @param open The price book index on the open.
     * @param high The highest price book index in the block.
     * @param low The lowest price book index in the block.
     * @param close The price book index on the close.
     */
    struct BlockTradeLog {
        uint64 blockTime;
        uint64 askVolume;
        uint64 bidVolume;
        uint16 open;
        uint16 high;
        uint16 low;
        uint16 close;
    }

    /**
     * @notice Take orders better or equal to the given priceIndex and make an order with the remaining tokens.
     * @dev `msg.value` will be used as the claimBounty.
     * @param user The taker/maker address.
     * @param priceIndex The price book index.
     * @param rawAmount The raw quote amount to trade, utilized by bids.
     * @param baseAmount The base token amount to trade, utilized by asks.
     * @param options LSB: 0 - Ask, 1 - Bid. Second bit: 1 - Post only.
     * @param data Custom callback data
     * @return The order index. If an order is not made `type(uint256).max` is returned instead.
     */
    function limitOrder(
        address user,
        uint16 priceIndex,
        uint64 rawAmount,
        uint256 baseAmount,
        uint8 options,
        bytes calldata data
    ) external payable returns (uint256);

    /**
     * @notice Returns the expected input amount and output amount.
     * @param limitPriceIndex The price index to take until.
     * @param rawAmount The raw amount to trade.
     * Bid & expendInput => Used as input amount.
     * Bid & !expendInput => Not used.
     * Ask & expendInput => Not used.
     * Ask & !expendInput => Used as output amount.
     * @param baseAmount The base token amount to trade.
     * Bid & expendInput => Not used.
     * Bid & !expendInput => Used as output amount.
     * Ask & expendInput => Used as input amount.
     * Ask & !expendInput => Not used.
     * @param options LSB: 0 - Ask, 1 - Bid. Second bit: 1 - expend input.
     */
    function getExpectedAmount(
        uint16 limitPriceIndex,
        uint64 rawAmount,
        uint256 baseAmount,
        uint8 options
    ) external view returns (uint256, uint256);

    /**
     * @notice Take opens orders until certain conditions are met.
     * @param user The taker address.
     * @param limitPriceIndex The price index to take until.
     * @param rawAmount The raw amount to trade.
     * This value is used as the maximum input amount by bids and minimum output amount by asks.
     * @param baseAmount The base token amount to trade.
     * This value is used as the maximum input amount by asks and minimum output amount by bids.
     * @param options LSB: 0 - Ask, 1 - Bid. Second bit: 1 - expend input.
     * @param data Custom callback data.
     */
    function marketOrder(
        address user,
        uint16 limitPriceIndex,
        uint64 rawAmount,
        uint256 baseAmount,
        uint8 options,
        bytes calldata data
    ) external;

    /**
     * @notice Cancel orders.
     * @dev The length of orderKeys must be controlled by the caller to avoid block gas limit exceeds.
     * @param receiver The address to receive canceled tokens.
     * @param orderKeys The order keys of the orders to cancel.
     */
    function cancel(address receiver, OrderKey[] calldata orderKeys) external;

    /**
     * @notice Claim the proceeds of orders.
     * @dev The length of orderKeys must be controlled by the caller to avoid block gas limit exceeds.
     * @param claimer The address to receive the claim bounties.
     * @param orderKeys The order keys of the orders to claim.
     */
    function claim(address claimer, OrderKey[] calldata orderKeys) external;

    /**
     * @notice Get the claimable proceeds of an order.
     * @param orderKey The order key of the order.
     * @return claimableRawAmount The claimable raw amount.
     * @return claimableAmount The claimable amount after fees.
     * @return feeAmount The maker fee to be paid on claim.
     * @return rebateAmount The rebate to be received on claim.
     */
    function getClaimable(OrderKey calldata orderKey)
        external
        view
        returns (
            uint64 claimableRawAmount,
            uint256 claimableAmount,
            uint256 feeAmount,
            uint256 rebateAmount
        );

    /**
     * @notice Flash loan the tokens in the OrderBook.
     * @param borrower The address to receive the loan.
     * @param quoteAmount The quote token amount to borrow.
     * @param baseAmount The base token amount to borrow.
     * @param data The user's custom callback data.
     */
    function flash(
        address borrower,
        uint256 quoteAmount,
        uint256 baseAmount,
        bytes calldata data
    ) external;

    /**
     * @notice Returns the quote unit amount.
     * @return The amount that one raw amount represent in quote tokens.
     */
    function quoteUnit() external view returns (uint256);

    /**
     * @notice Returns the maker fee.
     * Paid to the maker when negative, paid by the maker when positive.
     * Every 10000 represents a 1% fee on trade volume.
     * @return The maker fee. 100 = 1bp.
     */
    function makerFee() external view returns (int24);

    /**
     * @notice Returns the take fee
     * Paid by the taker.
     * Every 10000 represents a 1% fee on trade volume.
     * @return The taker fee. 100 = 1bps.
     */
    function takerFee() external view returns (uint24);

    /**
     * @notice Returns the address of the order NFT contract.
     * @return The address of the order NFT contract.
     */
    function orderToken() external view returns (address);

    /**
     * @notice Returns the address of the quote token.
     * @return The address of the quote token.
     */
    function quoteToken() external view returns (address);

    /**
     * @notice Returns the address of the base token.
     * @return The address of the base token.
     */
    function baseToken() external view returns (address);

    /**
     * @notice Returns the current total open amount at the given price.
     * @param isBid The flag to choose which side to check the depth for.
     * @param priceIndex The price book index.
     * @return The total open amount.
     */
    function getDepth(bool isBid, uint16 priceIndex) external view returns (uint64);

    /**
     * @notice Returns the fee balance that has not been collected yet.
     * @return quote The current fee balance for the quote token.
     * @return base The current fee balance for the base token.
     */
    function getFeeBalance() external view returns (uint128 quote, uint128 base);

    /**
     * @notice Returns the amount of tokens that can be collected by the host.
     * @param token The address of the token to be collected.
     * @return The amount of tokens that can be collected by the host.
     */
    function uncollectedHostFees(address token) external view returns (uint256);

    /**
     * @notice Returns the amount of tokens that can be collected by the dao treasury.
     * @param token The address of the token to be collected.
     * @return The amount of tokens that can be collected by the dao treasury.
     */
    function uncollectedProtocolFees(address token) external view returns (uint256);

    /**
     * @notice Returns whether the order book is empty or not.
     * @param isBid The flag to choose which side to check the emptiness of.
     * @return Whether the order book is empty or not on that side.
     */
    function isEmpty(bool isBid) external view returns (bool);

    /**
     * @notice Returns the order information.
     * @param orderKey The order key of the order.
     * @return The order struct of the given order key.
     */
    function getOrder(OrderKey calldata orderKey) external view returns (Order memory);

    /**
     * @notice Returns the lowest ask price index or the highest bid price index.
     * @param isBid Returns the lowest ask price if false, highest bid price if true.
     * @return The current price index. If the order book is empty, it will revert.
     */
    function bestPriceIndex(bool isBid) external view returns (uint16);

    /**
     * @notice Returns the current block trade log index.
     * @return The current block trade log index.
     */
    function blockTradeLogIndex() external view returns (uint16);

    /**
     * @notice Returns the block trade log for a certain index.
     * @param index The block trade log index used to query the block trade log.
     * @return The queried block trade log.
     */
    function blockTradeLogs(uint16 index) external view returns (BlockTradeLog memory);

    /**
     * @notice Converts a raw amount to its corresponding base amount using a given price index.
     * @param rawAmount The raw amount to be converted.
     * @param priceIndex The index of the price to be used for the conversion.
     * @param roundingUp Specifies whether the result should be rounded up or down.
     * @return The converted base amount.
     */
    function rawToBase(
        uint64 rawAmount,
        uint16 priceIndex,
        bool roundingUp
    ) external view returns (uint256);

    /**
     * @notice Converts a raw amount to its corresponding quote amount.
     * @param rawAmount The raw amount to be converted.
     * @return The converted quote amount.
     */
    function rawToQuote(uint64 rawAmount) external view returns (uint256);

    /**
     * @notice Converts a base amount to its corresponding raw amount using a given price index.
     * @param baseAmount The base amount to be converted.
     * @param priceIndex The index of the price to be used for the conversion.
     * @param roundingUp Specifies whether the result should be rounded up or down.
     * @return The converted raw amount.
     */
    function baseToRaw(
        uint256 baseAmount,
        uint16 priceIndex,
        bool roundingUp
    ) external view returns (uint64);

    /**
     * @notice Converts a quote amount to its corresponding raw amount.
     * @param quoteAmount The quote amount to be converted.
     * @param roundingUp Specifies whether the result should be rounded up or down.
     * @return The converted raw amount.
     */
    function quoteToRaw(uint256 quoteAmount, bool roundingUp) external view returns (uint64);

    /**
     * @notice Collects fees for either the protocol or host.
     * @param token The token address to collect. It should be the quote token or the base token.
     * @param destination The destination address to transfer fees.
     * It should be the dao treasury address or the host address.
     */
    function collectFees(address token, address destination) external;

    /**
     * @notice Change the owner of the order.
     * @dev Only the OrderToken contract can call this function.
     * @param orderKey The order key of the order.
     * @param newOwner The new owner address.
     */
    function changeOrderOwner(OrderKey calldata orderKey, address newOwner) external;

    /**
     * @notice Converts the price index into the actual price.
     * @param priceIndex The price book index.
     * @return price The actual price.
     */
    function indexToPrice(uint16 priceIndex) external view returns (uint256);

    /**
     * @notice Returns the price book index closest to the provided price.
     * @param price Provided price.
     * @param roundingUp Determines whether to round up or down.
     * @return index The price book index.
     * @return correctedPrice The actual price for the price book index.
     */
    function priceToIndex(uint256 price, bool roundingUp) external view returns (uint16 index, uint256 correctedPrice);
}

File 3 of 8 : CloberOrderNFT.sol
// SPDX-License-Identifier: GPL-2.0-or-later

pragma solidity ^0.8.0;

import "@openzeppelin/contracts/token/ERC721/IERC721.sol";
import "@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol";

import "./CloberOrderKey.sol";

interface CloberOrderNFT is IERC721, IERC721Metadata {
    /**
     * @notice Returns the base URI for the metadata of this NFT collection.
     * @return The base URI for the metadata of this NFT collection.
     */
    function baseURI() external view returns (string memory);

    /**
     * @notice Returns the contract URI for the metadata of this NFT collection.
     * @return The contract URI for the metadata of this NFT collection.
     */
    function contractURI() external view returns (string memory);

    /**
     * @notice Returns the address of the market contract that manages this token.
     * @return The address of the market contract that manages this token.
     */
    function market() external view returns (address);

    /**
     * @notice Returns the address of contract owner.
     * @return The address of the contract owner.
     */
    function owner() external view returns (address);

    /**
     * @notice Called when a new token is minted.
     * @param to The receiver address of the minted token.
     * @param tokenId The id of the token minted.
     */
    function onMint(address to, uint256 tokenId) external;

    /**
     * @notice Called when a token is burned.
     * @param tokenId The id of the token burned.
     */
    function onBurn(uint256 tokenId) external;

    /**
     * @notice Changes the base URI for the metadata of this NFT collection.
     * @param newBaseURI The new base URI for the metadata of this NFT collection.
     */
    function changeBaseURI(string memory newBaseURI) external;

    /**
     * @notice Changes the contract URI for the metadata of this NFT collection.
     * @param newContractURI The new contract URI for the metadata of this NFT collection.
     */
    function changeContractURI(string memory newContractURI) external;

    /**
     * @notice Decodes a token id into an order key.
     * @param id The id to decode.
     * @return The order key corresponding to the given id.
     */
    function decodeId(uint256 id) external pure returns (OrderKey memory);

    /**
     * @notice Encodes an order key to a token id.
     * @param orderKey The order key to encode.
     * @return The id corresponding to the given order key.
     */
    function encodeId(OrderKey memory orderKey) external pure returns (uint256);

    /**
     * @notice Cancels orders with token ids.
     * @dev Only the OrderCanceler can call this function.
     * @param from The address of the owner of the tokens.
     * @param tokenIds The ids of the tokens to cancel.
     * @param receiver The address to send the underlying assets to.
     */
    function cancel(
        address from,
        uint256[] calldata tokenIds,
        address receiver
    ) external;
}

File 4 of 8 : CloberOrderCanceler.sol
// SPDX-License-Identifier: GPL-2.0-or-later

pragma solidity ^0.8.0;

interface CloberOrderCanceler {
    /**
     * @notice Struct for passing parameters to the function that cancels orders.
     * @param market The address of the market on which the orders are to be canceled.
     * @param tokenIds An array of ids of orders to cancel.
     */
    struct CancelParams {
        address market;
        uint256[] tokenIds;
    }

    /**
     * @notice Cancel orders across markets.
     * @param paramsList The list of CancelParams.
     */
    function cancel(CancelParams[] calldata paramsList) external;

    /**
     * @notice Cancel orders across markets.
     * @param paramsList The list of CancelParams.
     * @param to The address to receive the canceled assets.
     */
    function cancelTo(CancelParams[] calldata paramsList, address to) external;
}

File 5 of 8 : CloberOrderKey.sol
// SPDX-License-Identifier: GPL-2.0-or-later

pragma solidity ^0.8.0;

/**
 * @notice A struct that represents a unique key for an order.
 * @param isBid The flag indicating whether it's a bid order or an ask order.
 * @param priceIndex The price book index.
 * @param orderIndex The order index.
 */
struct OrderKey {
    bool isBid;
    uint16 priceIndex;
    uint256 orderIndex;
}

File 6 of 8 : IERC721.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (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`.
     *
     * 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;

    /**
     * @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 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 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 the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @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);
}

File 7 of 8 : IERC721Metadata.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)

pragma solidity ^0.8.0;

import "../IERC721.sol";

/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the token collection symbol.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

File 8 of 8 : 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
{
  "evmVersion": "london",
  "optimizer": {
    "enabled": true,
    "runs": 1000
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "metadata": {
    "useLiteralContent": true
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"components":[{"internalType":"address","name":"market","type":"address"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"internalType":"struct CloberOrderCanceler.CancelParams[]","name":"paramsList","type":"tuple[]"}],"name":"cancel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"market","type":"address"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"internalType":"struct CloberOrderCanceler.CancelParams[]","name":"paramsList","type":"tuple[]"},{"internalType":"address","name":"to","type":"address"}],"name":"cancelTo","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b50610491806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80636774ce801461003b57806394006ab814610050575b600080fd5b61004e610049366004610241565b610063565b005b61004e61005e3660046102a8565b610072565b61006e828233610082565b5050565b61007d838383610082565b505050565b60005b828110156101ef573660008585848181106100a2576100a26102ff565b90506020028101906100b49190610315565b6100c2906020810190610335565b9150915060008686858181106100da576100da6102ff565b90506020028101906100ec9190610315565b6100fa90602081019061037f565b90508073ffffffffffffffffffffffffffffffffffffffff166385d189176040518163ffffffff1660e01b8152600401602060405180830381865afa158015610147573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061016b91906103a3565b73ffffffffffffffffffffffffffffffffffffffff16634af2c2af338585896040518563ffffffff1660e01b81526004016101a994939291906103c0565b600060405180830381600087803b1580156101c357600080fd5b505af11580156101d7573d6000803e3d6000fd5b50505050505050806101e890610434565b9050610085565b50505050565b60008083601f84011261020757600080fd5b50813567ffffffffffffffff81111561021f57600080fd5b6020830191508360208260051b850101111561023a57600080fd5b9250929050565b6000806020838503121561025457600080fd5b823567ffffffffffffffff81111561026b57600080fd5b610277858286016101f5565b90969095509350505050565b73ffffffffffffffffffffffffffffffffffffffff811681146102a557600080fd5b50565b6000806000604084860312156102bd57600080fd5b833567ffffffffffffffff8111156102d457600080fd5b6102e0868287016101f5565b90945092505060208401356102f481610283565b809150509250925092565b634e487b7160e01b600052603260045260246000fd5b60008235603e1983360301811261032b57600080fd5b9190910192915050565b6000808335601e1984360301811261034c57600080fd5b83018035915067ffffffffffffffff82111561036757600080fd5b6020019150600581901b360382131561023a57600080fd5b60006020828403121561039157600080fd5b813561039c81610283565b9392505050565b6000602082840312156103b557600080fd5b815161039c81610283565b600073ffffffffffffffffffffffffffffffffffffffff8087168352606060208401528460608401527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85111561041657600080fd5b8460051b808760808601379316604083015250016080019392505050565b60006001820161045457634e487b7160e01b600052601160045260246000fd5b506001019056fea2646970667358221220cec3ad9c9fd8caab2c239988ba85ab4a87459023d106ff7b70c11e757cc4dd1064736f6c63430008110033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100365760003560e01c80636774ce801461003b57806394006ab814610050575b600080fd5b61004e610049366004610241565b610063565b005b61004e61005e3660046102a8565b610072565b61006e828233610082565b5050565b61007d838383610082565b505050565b60005b828110156101ef573660008585848181106100a2576100a26102ff565b90506020028101906100b49190610315565b6100c2906020810190610335565b9150915060008686858181106100da576100da6102ff565b90506020028101906100ec9190610315565b6100fa90602081019061037f565b90508073ffffffffffffffffffffffffffffffffffffffff166385d189176040518163ffffffff1660e01b8152600401602060405180830381865afa158015610147573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061016b91906103a3565b73ffffffffffffffffffffffffffffffffffffffff16634af2c2af338585896040518563ffffffff1660e01b81526004016101a994939291906103c0565b600060405180830381600087803b1580156101c357600080fd5b505af11580156101d7573d6000803e3d6000fd5b50505050505050806101e890610434565b9050610085565b50505050565b60008083601f84011261020757600080fd5b50813567ffffffffffffffff81111561021f57600080fd5b6020830191508360208260051b850101111561023a57600080fd5b9250929050565b6000806020838503121561025457600080fd5b823567ffffffffffffffff81111561026b57600080fd5b610277858286016101f5565b90969095509350505050565b73ffffffffffffffffffffffffffffffffffffffff811681146102a557600080fd5b50565b6000806000604084860312156102bd57600080fd5b833567ffffffffffffffff8111156102d457600080fd5b6102e0868287016101f5565b90945092505060208401356102f481610283565b809150509250925092565b634e487b7160e01b600052603260045260246000fd5b60008235603e1983360301811261032b57600080fd5b9190910192915050565b6000808335601e1984360301811261034c57600080fd5b83018035915067ffffffffffffffff82111561036757600080fd5b6020019150600581901b360382131561023a57600080fd5b60006020828403121561039157600080fd5b813561039c81610283565b9392505050565b6000602082840312156103b557600080fd5b815161039c81610283565b600073ffffffffffffffffffffffffffffffffffffffff8087168352606060208401528460608401527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85111561041657600080fd5b8460051b808760808601379316604083015250016080019392505050565b60006001820161045457634e487b7160e01b600052601160045260246000fd5b506001019056fea2646970667358221220cec3ad9c9fd8caab2c239988ba85ab4a87459023d106ff7b70c11e757cc4dd1064736f6c63430008110033

Block Transaction Gas Used Reward
view all blocks sequenced

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
[ 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.