ETH Price: $2,958.29 (-7.94%)
Gas: 13 Gwei

Contract

0x000000000074f2e99d7602fCA3cf0ffdCa906495
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value

There are no matching entries

Please try again later

Latest 1 internal transaction

Advanced mode:
Parent Txn Hash Block From To Value
168252392023-03-14 9:17:23396 days ago1678785443  Contract Creation0 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
LooksRareV2Proxy

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 888888 runs

Other Settings:
default evmVersion
File 1 of 7 : LooksRareV2Proxy.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.17;

// Interfaces
import {ILooksRareProtocolV2} from "../interfaces/ILooksRareProtocolV2.sol";
import {IProxy} from "../interfaces/IProxy.sol";

// Libraries
import {Maker, Taker, MerkleTree, QuoteType} from "../libraries/looksrare-v2/OrderStructs.sol";
import {BasicOrder} from "../libraries/OrderStructs.sol";

// Shared errors
import {InvalidOrderLength} from "../libraries/SharedErrors.sol";

/**
 * @title LooksRareV2Proxy
 * @notice This contract allows NFT sweepers to batch buy NFTs from LooksRare protocol v2
 *         by passing high-level structs + low-level bytes as calldata.
 * @author LooksRare protocol team (👀,💎)
 */
contract LooksRareV2Proxy is IProxy {
    /**
     * @dev A struct to merge the 5 calldata variables to prevent stack too deep error.
     * @param takerBids Taker bids to be used as function argument when calling LooksRare V2
     * @param makerAsks Maker asks to be used as function argument when calling LooksRare V2
     * @param makerSignatures Maker signatures to be used as function argument when calling LooksRare V2
     * @param merkleTrees Merkle trees to be used as function argument when calling LooksRare V2
     * @param ethValue The ETH value to be passed as msg.value when calling LooksRare V2
     */
    struct CalldataParams {
        Taker[] takerBids;
        Maker[] makerAsks;
        bytes[] makerSignatures;
        MerkleTree[] merkleTrees;
        uint256 ethValue;
    }

    /**
     * @notice This struct contains the fields specific to the overall execution of all orders.
     * @param affiliate Address of the affiliate
     */
    struct ExtraData {
        address affiliate;
    }

    /**
     * @notice This struct contains the fields specific to the execution of each single order.
     * @param merkleTree Merkle tree struct
     * @param globalNonce Global ask nonce of the maker ask order
     * @param subsetNonce Subset nonce of the maker ask order
     * @param orderNonce Order nonce of the maker ask order
     * @param strategyId Strategy id
     * @param price Minimum maker ask price
     * @param takerBidAdditionalParameters Additional parameters for taker bid order
     * @param makerAskAdditionalParameters Additional parameters for maker ask order
     */
    struct OrderExtraData {
        MerkleTree merkleTree;
        uint256 globalNonce;
        uint256 subsetNonce;
        uint256 orderNonce;
        uint256 strategyId;
        uint256 price;
        bytes takerBidAdditionalParameters;
        bytes makerAskAdditionalParameters;
    }

    /**
     * @notice Marketplace (LooksRare v2 protocol).
     */
    ILooksRareProtocolV2 public immutable marketplace;

    /**
     * @notice Aggregator address.
     */
    address public immutable aggregator;

    /**
     * @param _marketplace LooksRareProtocol's address
     * @param _aggregator LooksRareAggregator's address
     */
    constructor(address _marketplace, address _aggregator) {
        marketplace = ILooksRareProtocolV2(_marketplace);
        aggregator = _aggregator;
    }

    /**
     * @notice This function executes LooksRare NFT sweeps in a single transaction.
     * @param orders Orders to be executed by LooksRare
     * @param ordersExtraData Extra data specific to each order
     * @param extraData Extra data for the overall execution that is shared for all orders (i.e. affiliate)
     * @param recipient The address to receive the purchased NFTs
     * @param isAtomic Flag to enable atomic trades (all or nothing) or partial filling
     */
    function execute(
        BasicOrder[] calldata orders,
        bytes[] calldata ordersExtraData,
        bytes calldata extraData,
        address recipient,
        bool isAtomic
    ) external payable override {
        if (address(this) != aggregator) {
            revert InvalidCaller();
        }

        uint256 ordersLength = orders.length;

        if (ordersLength == 0 || ordersLength != ordersExtraData.length) {
            revert InvalidOrderLength();
        }

        for (uint256 i; i < ordersLength; ) {
            uint256 numberOfConsecutiveOrders = 1;

            address currency = orders[i].currency;

            // Count how many orders to execute
            while (i != ordersLength - 1 && currency == orders[i + 1].currency) {
                unchecked {
                    ++numberOfConsecutiveOrders;
                    ++i;
                }
            }

            // Initialize structs
            CalldataParams memory calldataParams;
            calldataParams.takerBids = new Taker[](numberOfConsecutiveOrders);
            calldataParams.makerAsks = new Maker[](numberOfConsecutiveOrders);
            calldataParams.makerSignatures = new bytes[](numberOfConsecutiveOrders);
            calldataParams.merkleTrees = new MerkleTree[](numberOfConsecutiveOrders);

            /**
             * @dev This loop rewinds from the current pointer back to the start of the subset of orders sharing the same currency.
             *      Then, it loops through the subset with a new iterator (k).
             */
            for (uint256 k; k < numberOfConsecutiveOrders; ) {
                /**
                 * @dev i = iterator in the main loop of all orders to be processed with the proxy
                 *      k = iterator in the current loop of all orders sharing the same currency
                 *      numberOfConsecutiveOrders = next count of maker orders that should be executed in a batch with v2
                 *      (i + 1 - numberOfConsecutiveOrders) = first maker ask order position in the array that was not executed
                 *      For instance, if there are 4 orders with the first one denominated in USDC and the next 3 being in ETH.
                 *      1 - USDC
                 *      i = 0, numberOfConsecutiveOrders = 1, k = 0
                 *      --> i + (k + 1) - numberOfConsecutiveOrders = 0;
                 *      2 - ETH
                 *      i = 3, numberOfConsecutiveOrders = 3, k = 0/1/2
                 *      i + (k + 1) - numberOfConsecutiveOrders = 1/2/3
                 *
                 *      k starts with 0 instead of 1 to prevent us having to do k - 1
                 *      every line. If we push k - 1 as a variable onto the stack,
                 *      we get stack too deep error.
                 */

                uint256 slicer = i + (k + 1) - numberOfConsecutiveOrders;

                OrderExtraData memory orderExtraData = abi.decode(ordersExtraData[slicer], (OrderExtraData));

                // Fill taker bid parameters
                calldataParams.takerBids[k].recipient = recipient;
                calldataParams.takerBids[k].additionalParameters = orderExtraData.takerBidAdditionalParameters;

                // Fill maker ask parameters
                calldataParams.makerAsks[k].quoteType = QuoteType.Ask;
                calldataParams.makerAsks[k].globalNonce = orderExtraData.globalNonce;
                calldataParams.makerAsks[k].orderNonce = orderExtraData.orderNonce;
                calldataParams.makerAsks[k].subsetNonce = orderExtraData.subsetNonce;
                calldataParams.makerAsks[k].strategyId = orderExtraData.strategyId;
                calldataParams.makerAsks[k].price = orderExtraData.price;
                calldataParams.makerAsks[k].additionalParameters = orderExtraData.makerAskAdditionalParameters;
                calldataParams.makerAsks[k].collectionType = orders[slicer].collectionType;
                calldataParams.makerAsks[k].collection = orders[slicer].collection;
                calldataParams.makerAsks[k].currency = currency;
                calldataParams.makerAsks[k].signer = orders[slicer].signer;
                calldataParams.makerAsks[k].startTime = orders[slicer].startTime;
                calldataParams.makerAsks[k].endTime = orders[slicer].endTime;
                calldataParams.makerAsks[k].itemIds = orders[slicer].tokenIds;
                calldataParams.makerAsks[k].amounts = orders[slicer].amounts;

                // Maker signature
                calldataParams.makerSignatures[k] = orders[slicer].signature;

                // Merkle tree
                calldataParams.merkleTrees[k] = orderExtraData.merkleTree;

                if (currency == address(0)) {
                    // IR gas savings
                    calldataParams.ethValue = calldataParams.ethValue + orders[slicer].price;
                }

                unchecked {
                    ++k;
                }
            }

            address affiliate = abi.decode(extraData, (address));

            // Execute taker bid orders
            if (numberOfConsecutiveOrders == 1) {
                if (isAtomic) {
                    marketplace.executeTakerBid{value: calldataParams.ethValue}(
                        calldataParams.takerBids[0],
                        calldataParams.makerAsks[0],
                        calldataParams.makerSignatures[0],
                        calldataParams.merkleTrees[0],
                        affiliate
                    );
                } else {
                    try
                        marketplace.executeTakerBid{value: calldataParams.ethValue}(
                            calldataParams.takerBids[0],
                            calldataParams.makerAsks[0],
                            calldataParams.makerSignatures[0],
                            calldataParams.merkleTrees[0],
                            affiliate
                        )
                    {} catch {}
                }
            } else {
                marketplace.executeMultipleTakerBids{value: calldataParams.ethValue}(
                    calldataParams.takerBids,
                    calldataParams.makerAsks,
                    calldataParams.makerSignatures,
                    calldataParams.merkleTrees,
                    affiliate,
                    isAtomic
                );
            }

            unchecked {
                ++i;
            }
        }
    }
}

File 3 of 7 : ILooksRareProtocolV2.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.17;

// Libraries
import {Maker, Taker, MerkleTree} from "../libraries/looksrare-v2/OrderStructs.sol";

/**
 * @title ILooksRareProtocolV2
 * @author LooksRare protocol team (👀,💎)
 */
interface ILooksRareProtocolV2 {
    /**
     * @notice This function allows a user to execute a taker bid (against a maker ask).
     * @param takerBid Taker bid struct
     * @param makerAsk Maker ask struct
     * @param makerSignature Maker signature
     * @param merkleTree Merkle tree struct (if the signature contains multiple maker orders)
     * @param affiliate Affiliate address
     */
    function executeTakerBid(
        Taker calldata takerBid,
        Maker calldata makerAsk,
        bytes calldata makerSignature,
        MerkleTree calldata merkleTree,
        address affiliate
    ) external payable;

    /**
     * @notice This function allows a user to batch buy with an array of taker bids (against an array of maker asks).
     * @param takerBids Array of taker bid structs
     * @param makerAsks Array of maker ask structs
     * @param makerSignatures Array of maker signatures
     * @param merkleTrees Array of merkle tree structs if the signature contains multiple maker orders
     * @param affiliate Affiliate address
     * @param isAtomic Whether the execution should be atomic
     *        i.e. whether it should revert if 1 or more transactions fail
     */
    function executeMultipleTakerBids(
        Taker[] calldata takerBids,
        Maker[] calldata makerAsks,
        bytes[] calldata makerSignatures,
        MerkleTree[] calldata merkleTrees,
        address affiliate,
        bool isAtomic
    ) external payable;
}

File 4 of 7 : IProxy.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.17;

import {BasicOrder} from "../libraries/OrderStructs.sol";

interface IProxy {
    error InvalidCaller();

    /**
     * @notice Execute NFT sweeps in a single transaction
     * @param orders Orders to be executed
     * @param ordersExtraData Extra data for each order
     * @param extraData Extra data for the whole transaction
     * @param recipient The address to receive the purchased NFTs
     * @param isAtomic Flag to enable atomic trades (all or nothing)
     *                 or partial trades
     */
    function execute(
        BasicOrder[] calldata orders,
        bytes[] calldata ordersExtraData,
        bytes calldata extraData,
        address recipient,
        bool isAtomic
    ) external payable;
}

File 5 of 7 : OrderStructs.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.17;

import {CollectionType} from "../OrderEnums.sol";

/**
 * @notice QuoteType is used in OrderStructs.Maker's quoteType to determine whether the maker order is a bid or an ask.
 */
enum QuoteType {
    Bid,
    Ask
}

/**
 * @notice Maker is the struct for a maker order.
 * @param quoteType Quote type (i.e. 0 = BID, 1 = ASK)
 * @param globalNonce Global user order nonce for maker orders
 * @param subsetNonce Subset nonce (shared across bid/ask maker orders)
 * @param orderNonce Order nonce (it can be shared across bid/ask maker orders)
 * @param strategyId Strategy id
 * @param collectionType Collection type (i.e. 0 = ERC721, 1 = ERC1155)
 * @param collection Collection address
 * @param currency Currency address (@dev address(0) = ETH)
 * @param signer Signer address
 * @param startTime Start timestamp
 * @param endTime End timestamp
 * @param price Minimum price for maker ask, maximum price for maker bid
 * @param itemIds Array of itemIds
 * @param amounts Array of amounts
 * @param additionalParameters Extra data specific for the order
 */
struct Maker {
    QuoteType quoteType;
    uint256 globalNonce;
    uint256 subsetNonce;
    uint256 orderNonce;
    uint256 strategyId;
    CollectionType collectionType;
    address collection;
    address currency;
    address signer;
    uint256 startTime;
    uint256 endTime;
    uint256 price;
    uint256[] itemIds;
    uint256[] amounts;
    bytes additionalParameters;
}

/**
 * @notice Taker is the struct for a taker ask/bid order. It contains the parameters required for a direct purchase.
 * @dev Taker struct is matched against MakerAsk/MakerBid structs at the protocol level.
 * @param recipient Recipient address (to receive NFTs or non-fungible tokens)
 * @param additionalParameters Extra data specific for the order
 */
struct Taker {
    address recipient;
    bytes additionalParameters;
}

enum MerkleTreeNodePosition {
    Left,
    Right
}

/**
 * @notice MerkleTreeNode is a MerkleTreeNode's node.
 * @param value It can be an order hash or a proof
 * @param position The node's position in its branch.
 *                 It can be left or right or none
 *                 (before the tree is sorted).
 */
struct MerkleTreeNode {
    bytes32 value;
    MerkleTreeNodePosition position;
}

/**
 * @notice MerkleTree is the struct for a merkle tree of order hashes.
 * @dev A Merkle tree can be computed with order hashes.
 *      It can contain order hashes from both maker bid and maker ask structs.
 * @param root Merkle root
 * @param proof Array containing the merkle proof
 */
struct MerkleTree {
    bytes32 root;
    MerkleTreeNode[] proof;
}

File 6 of 7 : OrderStructs.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.17;

import {CollectionType} from "./OrderEnums.sol";

/**
 * @param signer The order's maker
 * @param collection The address of the ERC721/ERC1155 token to be purchased
 * @param collectionType 0 for ERC721, 1 for ERC1155
 * @param tokenIds The IDs of the tokens to be purchased
 * @param amounts Always 1 when ERC721, can be > 1 if ERC1155
 * @param price The *taker bid* price to pay for the order
 * @param currency The order's currency, address(0) for ETH
 * @param startTime The timestamp when the order starts becoming valid
 * @param endTime The timestamp when the order stops becoming valid
 * @param signature split to v,r,s for LooksRare
 */
struct BasicOrder {
    address signer;
    address collection;
    CollectionType collectionType;
    uint256[] tokenIds;
    uint256[] amounts;
    uint256 price;
    address currency;
    uint256 startTime;
    uint256 endTime;
    bytes signature;
}

/**
 * @param amount ERC20 transfer amount
 * @param currency ERC20 transfer currency
 */
struct TokenTransfer {
    uint256 amount;
    address currency;
}

File 7 of 7 : SharedErrors.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.17;

error InvalidOrderLength();
error TradeExecutionFailed();
error ZeroAddress();

File 8 of 7 : OrderEnums.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.17;

enum CollectionType {
    ERC721,
    ERC1155
}

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_marketplace","type":"address"},{"internalType":"address","name":"_aggregator","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"InvalidCaller","type":"error"},{"inputs":[],"name":"InvalidOrderLength","type":"error"},{"inputs":[],"name":"aggregator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"signer","type":"address"},{"internalType":"address","name":"collection","type":"address"},{"internalType":"enum CollectionType","name":"collectionType","type":"uint8"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"address","name":"currency","type":"address"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"struct BasicOrder[]","name":"orders","type":"tuple[]"},{"internalType":"bytes[]","name":"ordersExtraData","type":"bytes[]"},{"internalType":"bytes","name":"extraData","type":"bytes"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"bool","name":"isAtomic","type":"bool"}],"name":"execute","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"marketplace","outputs":[{"internalType":"contract ILooksRareProtocolV2","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

60c0346100a657601f61186738819003918201601f19168301916001600160401b038311848410176100ab5780849260409485528339810103126100a657610052602061004b836100c1565b92016100c1565b6001600160a01b0390911660805260a05260405161179190816100d68239608051818181608b0152818161046901528181610578015281816106890152610846015260a0518181816101aa01526111a50152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b03821682036100a65756fe608080604052600436101561001357600080fd5b60003560e01c908163245a7bfc1461115c57508063a809ce35146100b45763abc8c7af1461004057600080fd5b346100af5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100af57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b600080fd5b60a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100af5760043567ffffffffffffffff81116100af576100fe9036906004016111c9565b9060243567ffffffffffffffff81116100af5761011f9036906004016111c9565b67ffffffffffffffff604493929335116100af573660236044350112156100af57604435600401359067ffffffffffffffff82116100af57366024836044350101116100af5773ffffffffffffffffffffffffffffffffffffffff60643516606435036100af576084351515608435036100af5773ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001630036111325784158015611128575b6110fe5792916000925b8584106101ec57005b60019161020560c06101ff878a856111fa565b0161123a565b925b877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810111610f65577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8801861415806110ad575b1561026d5760019586019501610207565b60405192969195919367ffffffffffffffff60a0850190811190851117610f075760a08401604052606084526060602085015260606040850152606080850152600060808501526102bd826112d9565b6102ca6040519182611298565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06102f7846112d9565b0160005b818110611084575050845261030f826112d9565b61031c6040519182611298565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610349846112d9565b0160005b818110610fd05750506020850152610364826112d9565b6103716040519182611298565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061039e846112d9565b0160005b818110610fbd57505060408501526103b9826112d9565b6103c66040519182611298565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06103f3846112d9565b0160005b818110610f94575050606085015260005b8281106109c0575050602060443586810103126100af576044356024013573ffffffffffffffffffffffffffffffffffffffff811690036100af5760010361065957608435156105615773ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691608081015161049982516113df565b51936104a860208401516113df565b51926104c560606104bc60408401516113df565b519201516113df565b5192823b156100af57600094610528604051988996879586947f8585ae0300000000000000000000000000000000000000000000000000000000865273ffffffffffffffffffffffffffffffffffffffff602460443501351693600487016116f2565b03925af191821561055557600192610546575b505b019290936101e3565b61054f90611284565b8761053b565b6040513d6000823e3d90fd5b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016916080810151926105a982516113df565b51916105b860208201516113df565b51916105d560606105cc60408501516113df565b519301516113df565b5191813b156100af5760019660009461063b604051978896879586947f8585ae0300000000000000000000000000000000000000000000000000000000865273ffffffffffffffffffffffffffffffffffffffff602460443501351693600487016116f2565b03925af161064a575b5061053d565b61065390611284565b87610644565b6080820151825192602081015190606060408201519101519173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b156100af579491906040519586937ff4288a2100000000000000000000000000000000000000000000000000000000855260c4850160c06004870152815180915260e46020818801918360051b89010193019160005b81811061096f57505050507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc858203016024860152815180825260208201906020808260051b85010194019260005b82811061091c5750505050507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc848203016044850152815180825260208201906020808260051b85010194019260005b8281106108cb5750505050507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc838203016064840152815180825260208201906020808260051b85010194019260005b82811061087c57505050505091818060009473ffffffffffffffffffffffffffffffffffffffff60246044350135166084830152608435151560a4830152039173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af19182156105555760019261064a575061053d565b9193955091936020806108b9837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08760019603018952895161168e565b970195019101918895949391926107ef565b91939596509193602080610909837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0876001960301895289516114db565b970195019101918996959493919261079f565b919395969750919360208061095b837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0876001960301895289516115a0565b970195019101918a9796959493919261074f565b919360206109ad827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1c60019597999a9b9c8495030188528851611539565b960194019101918a979695949392610700565b6001819a929693989499959a018111610f65576109e0600182018a61125b565b908189810311610f6557838983031015610f3657610a0589830360051b87018761130b565b602082828196940103126100af5783359367ffffffffffffffff85116100af5761010085820183830103126100af57604051948561010081011067ffffffffffffffff61010088011117610f075761010086016040528082013567ffffffffffffffff81116100af578183010160408185850103126100af57610a8b6101008801611268565b8035610100880152602081013567ffffffffffffffff81116100af57848401601f8284010112156100af5780820135610ac3816112d9565b92610ad16040519485611298565b818452602084019087870160208460061b8684010101116100af57602084820101915b60208460061b86840101018310610ec6575050505050610120870152610100860186528181016020818101359088015260408082013590880152606080820135908801526080808201359088015260a0808201359088015260c0013567ffffffffffffffff81116100af57610b709084840190838501016113c1565b60c087015260e081830101359067ffffffffffffffff82116100af578f610ba6848894602094600198610bec98019201016113c1565b60e089015273ffffffffffffffffffffffffffffffffffffffff60643516610bcf8483516113ec565b515260c088015182610be28584516113ec565b51015201516113ec565b51528b6020610c028482808801519401516113ec565b5101528b6060610c1a846020838801519401516113ec565b5101528b6040610c32846020838801519401516113ec565b5101528b6080610c4a846020838801519401516113ec565b5101528b610160610c6484602060a08801519401516113ec565b5101528b6101c0610c7e84602060e08801519401516113ec565b5101526040610c908b830386896111fa565b01359060028210156100af57610e69836001958f94828f610e388f8e8d846020610e238e6101a08f8b610dfb610e19610e579f9d84610e479f610e0f610e2d9f8f8f898f95610df18f959484610e059f610180978973ffffffffffffffffffffffffffffffffffffffff8f610d468f80610d3e81610e059f8f94610dfb9f9160c0988f929d6101ff948c9f610d2b8f60a0928d9101516113ec565b5101610d3682611400565b5203916111fa565b9501516113ec565b5101911690521660e0610d5c878d8c01516113ec565b510152610d74610d6f8d8d0383856111fa565b61123a565b73ffffffffffffffffffffffffffffffffffffffff610100610d99888e8d01516113ec565b51019116905260e0610dae8d8d0383856111fa565b0135610120610dc0878d8c01516113ec565b510152610100610dd38d8d0383856111fa565b0135610140610de5878d8c01516113ec565b5101528b8b03916111fa565b6060810190611439565b96909401516113ec565b510192369161148d565b9052038a8c6111fa565b6080810190611439565b90528b03916111fa565b61012081019061130b565b919060408a015192369161135c565b610e5183836113ec565b526113ec565b5051606085015190610e5183836113ec565b508a73ffffffffffffffffffffffffffffffffffffffff8a1615610e9a575b50505001939792969194909893610408565b610eb160a0916080610eb99501519303878a6111fa565b01359061125b565b60808c01528a8c8a610e88565b6040838a8a0103126100af5760405190610edf82611268565b8335825260208401359060028210156100af5782602092836040950152815201920191610af4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b602090610fa89c9498959a969b979c6112f1565b828286010152019a959994989396929a6103f7565b60606020828501810191909152016103a2565b60409b93979499959a969b5190816101e081011067ffffffffffffffff6101e084011117610f0757816101e06020930160405260008152600083820152600060408201526000606082015260006080820152600060a0820152600060c0820152600060e08201526000610100820152600061012082015260006101408201526000610160820152606061018082015260606101a082015260606101c0820152828286010152019a959994989396929a61034d565b6020906110989c9498959a969b979c6112f1565b828286010152019a959994989396929a6102fb565b50600186018611610f655773ffffffffffffffffffffffffffffffffffffffff6110e060c06101ff60018a018c876111fa565b1673ffffffffffffffffffffffffffffffffffffffff85161461025c565b60046040517fc588f910000000000000000000000000000000000000000000000000000000008152fd5b50808514156101d9565b60046040517f48f5c3ed000000000000000000000000000000000000000000000000000000008152fd5b346100af5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100af5760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b9181601f840112156100af5782359167ffffffffffffffff83116100af576020808501948460051b0101116100af57565b9190811015610f365760051b810135907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec1813603018212156100af570190565b3573ffffffffffffffffffffffffffffffffffffffff811681036100af5790565b91908201809211610f6557565b6040810190811067ffffffffffffffff821117610f0757604052565b67ffffffffffffffff8111610f0757604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610f0757604052565b67ffffffffffffffff8111610f075760051b60200190565b604051906112fe82611268565b6060602083600081520152565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156100af570180359067ffffffffffffffff82116100af576020019181360383136100af57565b92919267ffffffffffffffff8211610f0757604051916113a460207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160184611298565b8294818452818301116100af578281602093846000960137010152565b9080601f830112156100af578160206113dc9335910161135c565b90565b805115610f365760200190565b8051821015610f365760209160051b010190565b6002111561140a57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156100af570180359067ffffffffffffffff82116100af57602001918160051b360383136100af57565b9291611498826112d9565b916114a66040519384611298565b829481845260208094019160051b81019283116100af57905b8282106114cc5750505050565b813581529083019083016114bf565b919082519283825260005b8481106115255750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b6020818301810151848301820152016114e6565b90604060206113dc9373ffffffffffffffffffffffffffffffffffffffff815116845201519181602082015201906114db565b90815180825260208080930193019160005b82811061158c575050505090565b83518552938101939281019260010161157e565b906113dc9180516115b081611400565b82526020810151602083015260408101516040830152606081015160608301526080810151608083015260a08101516115e881611400565b60a083015273ffffffffffffffffffffffffffffffffffffffff8060c08301511660c08401528060e08301511660e08401526101009081830151169083015261012080820151908301526101408082015190830152610160808201519083015261167a61166661018080840151906101e0809187015285019061156c565b6101a080840151908583039086015261156c565b916101c080920151918184039101526114db565b6040906060828401918051855260209182809201519585838201528651809552019401926000905b8382106116c557505050505090565b909192939483826001928289518051835201516116e181611400565b8184015201960194939201906116b6565b9361174660809461173873ffffffffffffffffffffffffffffffffffffffff9561172a611754969b9a9b60a08b5260a08b0190611539565b9089820360208b01526115a0565b9087820360408901526114db565b90858203606087015261168e565b941691015256fea26469706673582212207e11753567cf58e41d0d158c3183e3fb938a502577fde5859a6a8b79d727d8d864736f6c634300081100330000000000000000000000000000000000e655fae4d56241588680f86e3b237700000000000000000000000000000000005228b791a99a61f36a130d50600106

Deployed Bytecode

0x608080604052600436101561001357600080fd5b60003560e01c908163245a7bfc1461115c57508063a809ce35146100b45763abc8c7af1461004057600080fd5b346100af5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100af57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000e655fae4d56241588680f86e3b2377168152f35b600080fd5b60a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100af5760043567ffffffffffffffff81116100af576100fe9036906004016111c9565b9060243567ffffffffffffffff81116100af5761011f9036906004016111c9565b67ffffffffffffffff604493929335116100af573660236044350112156100af57604435600401359067ffffffffffffffff82116100af57366024836044350101116100af5773ffffffffffffffffffffffffffffffffffffffff60643516606435036100af576084351515608435036100af5773ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000005228b791a99a61f36a130d506001061630036111325784158015611128575b6110fe5792916000925b8584106101ec57005b60019161020560c06101ff878a856111fa565b0161123a565b925b877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810111610f65577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8801861415806110ad575b1561026d5760019586019501610207565b60405192969195919367ffffffffffffffff60a0850190811190851117610f075760a08401604052606084526060602085015260606040850152606080850152600060808501526102bd826112d9565b6102ca6040519182611298565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06102f7846112d9565b0160005b818110611084575050845261030f826112d9565b61031c6040519182611298565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610349846112d9565b0160005b818110610fd05750506020850152610364826112d9565b6103716040519182611298565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061039e846112d9565b0160005b818110610fbd57505060408501526103b9826112d9565b6103c66040519182611298565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06103f3846112d9565b0160005b818110610f94575050606085015260005b8281106109c0575050602060443586810103126100af576044356024013573ffffffffffffffffffffffffffffffffffffffff811690036100af5760010361065957608435156105615773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000e655fae4d56241588680f86e3b23771691608081015161049982516113df565b51936104a860208401516113df565b51926104c560606104bc60408401516113df565b519201516113df565b5192823b156100af57600094610528604051988996879586947f8585ae0300000000000000000000000000000000000000000000000000000000865273ffffffffffffffffffffffffffffffffffffffff602460443501351693600487016116f2565b03925af191821561055557600192610546575b505b019290936101e3565b61054f90611284565b8761053b565b6040513d6000823e3d90fd5b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000e655fae4d56241588680f86e3b237716916080810151926105a982516113df565b51916105b860208201516113df565b51916105d560606105cc60408501516113df565b519301516113df565b5191813b156100af5760019660009461063b604051978896879586947f8585ae0300000000000000000000000000000000000000000000000000000000865273ffffffffffffffffffffffffffffffffffffffff602460443501351693600487016116f2565b03925af161064a575b5061053d565b61065390611284565b87610644565b6080820151825192602081015190606060408201519101519173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000e655fae4d56241588680f86e3b2377163b156100af579491906040519586937ff4288a2100000000000000000000000000000000000000000000000000000000855260c4850160c06004870152815180915260e46020818801918360051b89010193019160005b81811061096f57505050507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc858203016024860152815180825260208201906020808260051b85010194019260005b82811061091c5750505050507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc848203016044850152815180825260208201906020808260051b85010194019260005b8281106108cb5750505050507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc838203016064840152815180825260208201906020808260051b85010194019260005b82811061087c57505050505091818060009473ffffffffffffffffffffffffffffffffffffffff60246044350135166084830152608435151560a4830152039173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000e655fae4d56241588680f86e3b2377165af19182156105555760019261064a575061053d565b9193955091936020806108b9837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08760019603018952895161168e565b970195019101918895949391926107ef565b91939596509193602080610909837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0876001960301895289516114db565b970195019101918996959493919261079f565b919395969750919360208061095b837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0876001960301895289516115a0565b970195019101918a9796959493919261074f565b919360206109ad827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1c60019597999a9b9c8495030188528851611539565b960194019101918a979695949392610700565b6001819a929693989499959a018111610f65576109e0600182018a61125b565b908189810311610f6557838983031015610f3657610a0589830360051b87018761130b565b602082828196940103126100af5783359367ffffffffffffffff85116100af5761010085820183830103126100af57604051948561010081011067ffffffffffffffff61010088011117610f075761010086016040528082013567ffffffffffffffff81116100af578183010160408185850103126100af57610a8b6101008801611268565b8035610100880152602081013567ffffffffffffffff81116100af57848401601f8284010112156100af5780820135610ac3816112d9565b92610ad16040519485611298565b818452602084019087870160208460061b8684010101116100af57602084820101915b60208460061b86840101018310610ec6575050505050610120870152610100860186528181016020818101359088015260408082013590880152606080820135908801526080808201359088015260a0808201359088015260c0013567ffffffffffffffff81116100af57610b709084840190838501016113c1565b60c087015260e081830101359067ffffffffffffffff82116100af578f610ba6848894602094600198610bec98019201016113c1565b60e089015273ffffffffffffffffffffffffffffffffffffffff60643516610bcf8483516113ec565b515260c088015182610be28584516113ec565b51015201516113ec565b51528b6020610c028482808801519401516113ec565b5101528b6060610c1a846020838801519401516113ec565b5101528b6040610c32846020838801519401516113ec565b5101528b6080610c4a846020838801519401516113ec565b5101528b610160610c6484602060a08801519401516113ec565b5101528b6101c0610c7e84602060e08801519401516113ec565b5101526040610c908b830386896111fa565b01359060028210156100af57610e69836001958f94828f610e388f8e8d846020610e238e6101a08f8b610dfb610e19610e579f9d84610e479f610e0f610e2d9f8f8f898f95610df18f959484610e059f610180978973ffffffffffffffffffffffffffffffffffffffff8f610d468f80610d3e81610e059f8f94610dfb9f9160c0988f929d6101ff948c9f610d2b8f60a0928d9101516113ec565b5101610d3682611400565b5203916111fa565b9501516113ec565b5101911690521660e0610d5c878d8c01516113ec565b510152610d74610d6f8d8d0383856111fa565b61123a565b73ffffffffffffffffffffffffffffffffffffffff610100610d99888e8d01516113ec565b51019116905260e0610dae8d8d0383856111fa565b0135610120610dc0878d8c01516113ec565b510152610100610dd38d8d0383856111fa565b0135610140610de5878d8c01516113ec565b5101528b8b03916111fa565b6060810190611439565b96909401516113ec565b510192369161148d565b9052038a8c6111fa565b6080810190611439565b90528b03916111fa565b61012081019061130b565b919060408a015192369161135c565b610e5183836113ec565b526113ec565b5051606085015190610e5183836113ec565b508a73ffffffffffffffffffffffffffffffffffffffff8a1615610e9a575b50505001939792969194909893610408565b610eb160a0916080610eb99501519303878a6111fa565b01359061125b565b60808c01528a8c8a610e88565b6040838a8a0103126100af5760405190610edf82611268565b8335825260208401359060028210156100af5782602092836040950152815201920191610af4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b602090610fa89c9498959a969b979c6112f1565b828286010152019a959994989396929a6103f7565b60606020828501810191909152016103a2565b60409b93979499959a969b5190816101e081011067ffffffffffffffff6101e084011117610f0757816101e06020930160405260008152600083820152600060408201526000606082015260006080820152600060a0820152600060c0820152600060e08201526000610100820152600061012082015260006101408201526000610160820152606061018082015260606101a082015260606101c0820152828286010152019a959994989396929a61034d565b6020906110989c9498959a969b979c6112f1565b828286010152019a959994989396929a6102fb565b50600186018611610f655773ffffffffffffffffffffffffffffffffffffffff6110e060c06101ff60018a018c876111fa565b1673ffffffffffffffffffffffffffffffffffffffff85161461025c565b60046040517fc588f910000000000000000000000000000000000000000000000000000000008152fd5b50808514156101d9565b60046040517f48f5c3ed000000000000000000000000000000000000000000000000000000008152fd5b346100af5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100af5760209073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000005228b791a99a61f36a130d50600106168152f35b9181601f840112156100af5782359167ffffffffffffffff83116100af576020808501948460051b0101116100af57565b9190811015610f365760051b810135907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec1813603018212156100af570190565b3573ffffffffffffffffffffffffffffffffffffffff811681036100af5790565b91908201809211610f6557565b6040810190811067ffffffffffffffff821117610f0757604052565b67ffffffffffffffff8111610f0757604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610f0757604052565b67ffffffffffffffff8111610f075760051b60200190565b604051906112fe82611268565b6060602083600081520152565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156100af570180359067ffffffffffffffff82116100af576020019181360383136100af57565b92919267ffffffffffffffff8211610f0757604051916113a460207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160184611298565b8294818452818301116100af578281602093846000960137010152565b9080601f830112156100af578160206113dc9335910161135c565b90565b805115610f365760200190565b8051821015610f365760209160051b010190565b6002111561140a57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156100af570180359067ffffffffffffffff82116100af57602001918160051b360383136100af57565b9291611498826112d9565b916114a66040519384611298565b829481845260208094019160051b81019283116100af57905b8282106114cc5750505050565b813581529083019083016114bf565b919082519283825260005b8481106115255750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b6020818301810151848301820152016114e6565b90604060206113dc9373ffffffffffffffffffffffffffffffffffffffff815116845201519181602082015201906114db565b90815180825260208080930193019160005b82811061158c575050505090565b83518552938101939281019260010161157e565b906113dc9180516115b081611400565b82526020810151602083015260408101516040830152606081015160608301526080810151608083015260a08101516115e881611400565b60a083015273ffffffffffffffffffffffffffffffffffffffff8060c08301511660c08401528060e08301511660e08401526101009081830151169083015261012080820151908301526101408082015190830152610160808201519083015261167a61166661018080840151906101e0809187015285019061156c565b6101a080840151908583039086015261156c565b916101c080920151918184039101526114db565b6040906060828401918051855260209182809201519585838201528651809552019401926000905b8382106116c557505050505090565b909192939483826001928289518051835201516116e181611400565b8184015201960194939201906116b6565b9361174660809461173873ffffffffffffffffffffffffffffffffffffffff9561172a611754969b9a9b60a08b5260a08b0190611539565b9089820360208b01526115a0565b9087820360408901526114db565b90858203606087015261168e565b941691015256fea26469706673582212207e11753567cf58e41d0d158c3183e3fb938a502577fde5859a6a8b79d727d8d864736f6c63430008110033

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

0000000000000000000000000000000000e655fae4d56241588680f86e3b237700000000000000000000000000000000005228b791a99a61f36a130d50600106

-----Decoded View---------------
Arg [0] : _marketplace (address): 0x0000000000E655fAe4d56241588680F86E3b2377
Arg [1] : _aggregator (address): 0x00000000005228B791a99a61f36A130d50600106

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000e655fae4d56241588680f86e3b2377
Arg [1] : 00000000000000000000000000000000005228b791a99a61f36a130d50600106


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

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