ETH Price: $3,317.62 (+1.44%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Cancel Order165933032023-02-09 19:32:35721 days ago1675971155IN
0xd29e1FcB...1C6acEdc9
0 ETH0.0057810798.01249365
Cancel Order162932182022-12-29 21:51:59763 days ago1672350719IN
0xd29e1FcB...1C6acEdc9
0 ETH0.00094916.07958423
Cancel Order162932172022-12-29 21:51:47763 days ago1672350707IN
0xd29e1FcB...1C6acEdc9
0 ETH0.0009322115.79189782
Cancel Order162931922022-12-29 21:46:47763 days ago1672350407IN
0xd29e1FcB...1C6acEdc9
0 ETH0.0006147715.81170079
Cancel Order162931902022-12-29 21:46:23763 days ago1672350383IN
0xd29e1FcB...1C6acEdc9
0 ETH0.0010500417.78443303
Cancel Order162931892022-12-29 21:46:11763 days ago1672350371IN
0xd29e1FcB...1C6acEdc9
0 ETH0.0010662218.06213322
Cancel Order162931852022-12-29 21:45:23763 days ago1672350323IN
0xd29e1FcB...1C6acEdc9
0 ETH0.0011806820.00520086
Cancel Order162395312022-12-22 10:05:11771 days ago1671703511IN
0xd29e1FcB...1C6acEdc9
0 ETH0.0007125612.07834272
Increment Nonce155256322022-09-13 7:14:46871 days ago1663053286IN
0xd29e1FcB...1C6acEdc9
0 ETH0.000169386.08446745
Fill Ask154670752022-09-03 18:58:30880 days ago1662231510IN
0xd29e1FcB...1C6acEdc9
0.01 ETH0.000919217.01386108
Cancel Order154626532022-09-03 1:55:02881 days ago1662170102IN
0xd29e1FcB...1C6acEdc9
0 ETH0.000401966.81084659
Fill Bid154414462022-08-30 16:38:41885 days ago1661877521IN
0xd29e1FcB...1C6acEdc9
0 ETH0.004252632.12204695
Fill Bid154414462022-08-30 16:38:41885 days ago1661877521IN
0xd29e1FcB...1C6acEdc9
0 ETH0.0045609732.12204695
Fill Bid154414452022-08-30 16:37:50885 days ago1661877470IN
0xd29e1FcB...1C6acEdc9
0 ETH0.0040782728.72005796
Fill Bid154414352022-08-30 16:35:35885 days ago1661877335IN
0xd29e1FcB...1C6acEdc9
0 ETH0.0053682833.74137757
Cancel Order154371182022-08-29 23:51:46885 days ago1661817106IN
0xd29e1FcB...1C6acEdc9
0 ETH0.0006722311.436708
Increment Nonce154364112022-08-29 21:18:38885 days ago1661807918IN
0xd29e1FcB...1C6acEdc9
0 ETH0.0005493519.73318391
Cancel Order154244682022-08-27 23:31:33887 days ago1661643093IN
0xd29e1FcB...1C6acEdc9
0 ETH0.000253334.29328951
Cancel Order154244562022-08-27 23:29:26887 days ago1661642966IN
0xd29e1FcB...1C6acEdc9
0 ETH0.000281254.7655529
Increment Nonce154220202022-08-27 14:12:10888 days ago1661609530IN
0xd29e1FcB...1C6acEdc9
0 ETH0.0010419523.18593571
Cancel Order154219982022-08-27 14:07:19888 days ago1661609239IN
0xd29e1FcB...1C6acEdc9
0 ETH0.0013655123.23615235
Cancel Order154219742022-08-27 14:04:01888 days ago1661609041IN
0xd29e1FcB...1C6acEdc9
0 ETH0.002372840.37644578
Fill Ask154216192022-08-27 12:39:56888 days ago1661603996IN
0xd29e1FcB...1C6acEdc9
0.03 ETH0.000909857.42347697
Fill Ask154156822022-08-26 13:39:54889 days ago1661521194IN
0xd29e1FcB...1C6acEdc9
14 ETH0.0020316412
Cancel Order154110352022-08-25 19:59:50889 days ago1661457590IN
0xd29e1FcB...1C6acEdc9
0 ETH0.0009172715.54827327
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
154670752022-09-03 18:58:30880 days ago1662231510
0xd29e1FcB...1C6acEdc9
0.00995 ETH
154670752022-09-03 18:58:30880 days ago1662231510
0xd29e1FcB...1C6acEdc9
0.00005 ETH
154414462022-08-30 16:38:41885 days ago1661877521
0xd29e1FcB...1C6acEdc9
0.398 ETH
154414462022-08-30 16:38:41885 days ago1661877521
0xd29e1FcB...1C6acEdc9
0.002 ETH
154414462022-08-30 16:38:41885 days ago1661877521
0xd29e1FcB...1C6acEdc9
0.4 ETH
154414462022-08-30 16:38:41885 days ago1661877521
0xd29e1FcB...1C6acEdc9
0.398 ETH
154414462022-08-30 16:38:41885 days ago1661877521
0xd29e1FcB...1C6acEdc9
0.002 ETH
154414462022-08-30 16:38:41885 days ago1661877521
0xd29e1FcB...1C6acEdc9
0.4 ETH
154414452022-08-30 16:37:50885 days ago1661877470
0xd29e1FcB...1C6acEdc9
0.398 ETH
154414452022-08-30 16:37:50885 days ago1661877470
0xd29e1FcB...1C6acEdc9
0.002 ETH
154414452022-08-30 16:37:50885 days ago1661877470
0xd29e1FcB...1C6acEdc9
0.4 ETH
154414352022-08-30 16:35:35885 days ago1661877335
0xd29e1FcB...1C6acEdc9
0.398 ETH
154414352022-08-30 16:35:35885 days ago1661877335
0xd29e1FcB...1C6acEdc9
0.002 ETH
154414352022-08-30 16:35:35885 days ago1661877335
0xd29e1FcB...1C6acEdc9
0.4 ETH
154216192022-08-27 12:39:56888 days ago1661603996
0xd29e1FcB...1C6acEdc9
0.02985 ETH
154216192022-08-27 12:39:56888 days ago1661603996
0xd29e1FcB...1C6acEdc9
0.00015 ETH
154156822022-08-26 13:39:54889 days ago1661521194
0xd29e1FcB...1C6acEdc9
13.93 ETH
154156822022-08-26 13:39:54889 days ago1661521194
0xd29e1FcB...1C6acEdc9
0.07 ETH
153858232022-08-21 19:28:31893 days ago1661110111
0xd29e1FcB...1C6acEdc9
3.6815 ETH
153858232022-08-21 19:28:31893 days ago1661110111
0xd29e1FcB...1C6acEdc9
0.0185 ETH
153702822022-08-19 8:35:37896 days ago1660898137
0xd29e1FcB...1C6acEdc9
10.945 ETH
153702822022-08-19 8:35:37896 days ago1660898137
0xd29e1FcB...1C6acEdc9
0.055 ETH
153317182022-08-13 6:02:19902 days ago1660370539
0xd29e1FcB...1C6acEdc9
2.2885 ETH
153317182022-08-13 6:02:19902 days ago1660370539
0xd29e1FcB...1C6acEdc9
0.0115 ETH
152521722022-07-31 19:34:47914 days ago1659296087
0xd29e1FcB...1C6acEdc9
49.75 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
GolomTrader

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 3 : GolomTrader.sol
// SPDX-License-Identifier: MIT

pragma solidity 0.8.11;

import '@openzeppelin/contracts/access/Ownable.sol';

interface ERC721 {
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;
}

interface ERC1155 {
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) external;
}

interface ERC20 {
    function transferFrom(
        address src,
        address dst,
        uint256 wad
    ) external returns (bool);

    function withdraw(uint256 wad) external;
}

interface Distributor {
    function addFee(address[2] calldata addr, uint256 fee) external;
}

contract GolomTrader is Ownable {
    bytes32 public immutable EIP712_DOMAIN_TYPEHASH;
    mapping(address => uint256) public nonces; // all nonces other then this nonce
    mapping(bytes32 => uint256) public filled;

    ERC20 WETH = ERC20(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2);

    struct Order {
        address collection; // NFT contract address
        uint256 tokenId; // order for which tokenId of the collection
        address signer; // maker of order address
        uint256 orderType; // 0 if selling nft for eth , 1 if offering weth for nft,2 if offering weth for collection with special criteria root
        uint256 totalAmt; // price value of the trade // total amt maker is willing to give up per unit of amount
        Payment exchange; // payment agreed by maker of the order to pay on succesful filling of trade this amt is subtracted from totalamt
        Payment prePayment; // another payment , can be used for royalty, facilating trades
        bool isERC721; // standard of the collection , if 721 then true , if 1155 then false
        uint256 tokenAmt; // token amt useful if standard is 1155 if >1 means whole order can be filled tokenAmt times
        uint256 refererrAmt; // amt to pay to the address that helps in filling your order
        bytes32 root; // A merkle root derived from each valid tokenId — set to 0 to indicate a collection-level or tokenId-specific order.
        address reservedAddress; // if not address(0) , only this address can fill the order
        uint256 nonce; // nonce of order usefull for cancelling in bulk
        uint256 deadline; // timestamp till order is valid epoch timestamp in secs
        uint8 v;
        bytes32 r;
        bytes32 s;
    }

    struct Payment {
        uint256 paymentAmt;
        address paymentAddress;
    }

    address public governance;

    Distributor public distributor;
    address public pendingDistributor;
    uint256 public distributorEnableDate;

    // events
    event NonceIncremented(address indexed maker, uint256 newNonce);

    event OrderFilled(
        address indexed maker,
        address indexed taker,
        uint256 indexed orderType,
        bytes32 orderHash,
        uint256 price
    );

    event OrderCancelled(bytes32 indexed orderHash);

    /// @param _governance Address of the governance, responsible for setting distributor
    constructor(address _governance) {
        // sets governance as owner
        _transferOwnership(_governance);

        EIP712_DOMAIN_TYPEHASH = keccak256(
            abi.encode(
                keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)'),
                keccak256(bytes('GOLOM.IO')),
                keccak256(bytes('1')),
                1,
                address(this)
            )
        );
    }

    function hashPayment(Payment calldata p) private pure returns (bytes32) {
        return
            keccak256(
                abi.encode(
                    keccak256('payment(uint256 paymentAmt,address paymentAddress)'),
                    p.paymentAmt,
                    p.paymentAddress
                )
            );
    }

    function _hashOrder(Order calldata o) private pure returns (bytes32) {
        return _hashOrderinternal(o, [o.nonce, o.deadline]);
    }

    function _hashOrderinternal(Order calldata o, uint256[2] memory extra) private pure returns (bytes32) {
        return
            keccak256(
                abi.encode(
                    keccak256(
                        'order(address collection,uint256 tokenId,address signer,uint256 orderType,uint256 totalAmt,payment exchange,payment prePayment,bool isERC721,uint256 tokenAmt,uint256 refererrAmt,bytes32 root,address reservedAddress,uint256 nonce,uint256 deadline)payment(uint256 paymentAmt,address paymentAddress)'
                    ),
                    o.collection,
                    o.tokenId,
                    o.signer,
                    o.orderType,
                    o.totalAmt,
                    hashPayment(o.exchange),
                    hashPayment(o.prePayment),
                    o.isERC721,
                    o.tokenAmt,
                    o.refererrAmt,
                    o.root,
                    o.reservedAddress,
                    extra
                )
            );
    }

    function payEther(uint256 payAmt, address payAddress) internal {
        if (payAmt > 0) {
            // if royalty has to be paid
            payable(payAddress).transfer(payAmt); // royalty transfer to royaltyaddress
        }
    }

    /// @dev Validates Order and returns OrderStatus, hashedorder, amountRemaining to be filled
    ///      OrderStatus = 0 , if signature is invalid
    ///      OrderStatus = 1 , if deadline has been
    ///      OrderStatus = 2 , order is filled or cancelled
    ///      OrderStatus = 3 , valid order
    /// @param o the Order struct to be validated
    function validateOrder(Order calldata o)
        public
        view
        returns (
            uint256,
            bytes32,
            uint256
        )
    {
        // match signature
        bytes32 hashStruct = _hashOrder(o);
        bytes32 hash = keccak256(abi.encodePacked('\x19\x01', EIP712_DOMAIN_TYPEHASH, hashStruct));
        address signaturesigner = ecrecover(hash, o.v, o.r, o.s);
        require(signaturesigner == o.signer, 'invalid signature');
        if (signaturesigner != o.signer) {
            return (0, hashStruct, 0);
        }
        //deadline
        if (block.timestamp > o.deadline) {
            return (1, hashStruct, 0);
        }
        // not cancelled by nonce or by hash
        if (o.nonce != nonces[o.signer]) {
            return (2, hashStruct, 0);
        }
        if (filled[hashStruct] >= o.tokenAmt) {
            // handles erc1155
            return (2, hashStruct, 0);
        }
        return (3, hashStruct, o.tokenAmt - filled[hashStruct]);
    }

    /// @dev function to fill a signed order of ordertype 0, also has a payment param in case the taker wants
    ///      to send ether to that address on filling the order
    /// @param o the Order struct to be filled must be orderType 0
    /// @param amount the amount of times the order is to be filled(useful for ERC1155)
    /// @param referrer referrer of the order
    /// @param p any extra payment that the taker of this order wanna send on succesful execution of order
    function fillAsk(
        Order calldata o,
        uint256 amount,
        address referrer,
        Payment calldata p
    ) public payable {
        // check if the signed total amount has all the amounts as well as 50 basis points fee
        require(
            o.totalAmt >= o.exchange.paymentAmt + o.prePayment.paymentAmt + o.refererrAmt + (o.totalAmt * 50) / 10000,
            'amt not matching'
        );

        // attached ETH value should be greater than total value of one NFT * total number of NFTs + any extra payment to be given
        require(msg.value >= o.totalAmt * amount + p.paymentAmt, 'mgmtm');

        if (o.reservedAddress != address(0)) {
            require(msg.sender == o.reservedAddress);
        }
        require(o.orderType == 0, 'invalid orderType');

        (uint256 status, bytes32 hashStruct, uint256 amountRemaining) = validateOrder(o);

        require(status == 3, 'order not valid');
        require(amountRemaining >= amount, 'order already filled');

        filled[hashStruct] = filled[hashStruct] + amount;

        if (o.isERC721) {
            require(amount == 1, 'only 1 erc721 at 1 time');
            ERC721(o.collection).transferFrom(o.signer, msg.sender, o.tokenId);
        } else {
            ERC1155(o.collection).safeTransferFrom(o.signer, msg.sender, o.tokenId, amount, '');
        }

        // pay fees of 50 basis points to the distributor
        payEther(((o.totalAmt * 50) / 10000) * amount, address(distributor));

        // pay the exchange share
        payEther(o.exchange.paymentAmt * amount, o.exchange.paymentAddress);

        // pay the pre payment
        payEther(o.prePayment.paymentAmt * amount, o.prePayment.paymentAddress);

        if (o.refererrAmt > 0 && referrer != address(0)) {
            payEther(o.refererrAmt * amount, referrer);
            payEther(
                (o.totalAmt -
                    (o.totalAmt * 50) /
                    10000 -
                    o.exchange.paymentAmt -
                    o.prePayment.paymentAmt -
                    o.refererrAmt) * amount,
                o.signer
            );
        } else {
            payEther(
                (o.totalAmt - (o.totalAmt * 50) / 10000 - o.exchange.paymentAmt - o.prePayment.paymentAmt) * amount,
                o.signer
            );
        }
        payEther(p.paymentAmt, p.paymentAddress);

        distributor.addFee([o.signer, o.exchange.paymentAddress], ((o.totalAmt * 50) / 10000) * amount);
        emit OrderFilled(o.signer, msg.sender, 0, hashStruct, o.totalAmt * amount);
    }

    /// @dev function to fill a signed order of ordertype 1 also has a payment param in case the taker wants
    ///      to send ether to that address on filling the order
    /// @param o the Order struct to be filled must be orderType 1
    /// @param amount the amount of times the order is to be filled(useful for ERC1155)
    /// @param referrer referrer of the order
    /// @param p any extra payment that the taker of this order wanna send on succesful execution of order
    function fillBid(
        Order calldata o,
        uint256 amount,
        address referrer,
        Payment calldata p
    ) public {
        require(
            o.totalAmt * amount >
                (o.exchange.paymentAmt + o.prePayment.paymentAmt + o.refererrAmt) * amount + p.paymentAmt
        ); // cause bidder eth is paying for seller payment p , dont take anything extra from seller
        // require eth amt is sufficient
        if (o.reservedAddress != address(0)) {
            require(msg.sender == o.reservedAddress);
        }
        require(o.orderType == 1);
        (uint256 status, bytes32 hashStruct, uint256 amountRemaining) = validateOrder(o);
        require(status == 3);
        require(amountRemaining >= amount);
        filled[hashStruct] = filled[hashStruct] + amount;
        if (o.isERC721) {
            require(amount == 1, 'only 1 erc721 at 1 time');
            ERC721 nftcontract = ERC721(o.collection);
            nftcontract.transferFrom(msg.sender, o.signer, o.tokenId);
        } else {
            ERC1155 nftcontract = ERC1155(o.collection);
            nftcontract.safeTransferFrom(msg.sender, o.signer, o.tokenId, amount, '');
        }
        emit OrderFilled(msg.sender, o.signer, 1, hashStruct, o.totalAmt * amount);
        _settleBalances(o, amount, referrer, p);
    }

    // cancel by nonce and by individual order

    function cancelOrder(Order calldata o) public {
        require(o.signer == msg.sender);
        (, bytes32 hashStruct, ) = validateOrder(o);
        filled[hashStruct] = o.tokenAmt + 1;
        emit OrderCancelled(hashStruct);
    }

    /**
     * Increment a particular maker's nonce, thereby invalidating all orders that were not signed
     * with the original nonce.
     */
    function incrementNonce() external {
        uint256 newNonce = ++nonces[msg.sender];
        emit NonceIncremented(msg.sender, newNonce);
    }

    /// @dev function to fill a signed order of ordertype 2 also has a payment param in case the taker wants
    ///      to send ether to that address on filling the order, Match an criteria order, ensuring that the supplied proof demonstrates inclusion of the tokenId in the associated merkle root, if root is 0 then any token can be used to fill the order
    /// @param o the Order struct to be filled must be orderType 2
    /// @param amount the amount of times the order is to be filled(useful for ERC1155)
    /// @param referrer referrer of the order
    /// @param p any extra payment that the taker of this order wanna send on succesful execution of order
    function fillCriteriaBid(
        Order calldata o,
        uint256 amount,
        uint256 tokenId,
        bytes32[] calldata proof,
        address referrer,
        Payment calldata p
    ) public {
        require(o.totalAmt >= o.exchange.paymentAmt + o.prePayment.paymentAmt + o.refererrAmt);
        // require eth amt is sufficient
        if (o.reservedAddress != address(0)) {
            require(msg.sender == o.reservedAddress);
        }
        require(o.orderType == 2);
        (uint256 status, bytes32 hashStruct, uint256 amountRemaining) = validateOrder(o);
        require(status == 3);
        require(amountRemaining >= amount);

        filled[hashStruct] = filled[hashStruct] + amount;
        // Proof verification is performed when there's a non-zero root.
        if (o.root != bytes32(0)) {
            _verifyProof(tokenId, o.root, proof);
        }

        if (o.isERC721) {
            require(amount == 1, 'only 1 erc721 at 1 time');
            ERC721 nftcontract = ERC721(o.collection);
            nftcontract.transferFrom(msg.sender, o.signer, tokenId);
        } else {
            ERC1155 nftcontract = ERC1155(o.collection);
            nftcontract.safeTransferFrom(msg.sender, o.signer, tokenId, amount, '');
        }
        emit OrderFilled(msg.sender, o.signer, 2, hashStruct, o.totalAmt * amount);
        _settleBalances(o, amount, referrer, p);
    }

    /// @dev function to settle balances when a bid is filled succesfully
    /// @param o the Order struct to be filled must be orderType 1
    /// @param amount the amount of times the order is to be filled(useful for ERC1155)
    /// @param referrer referrer of the order
    /// @param p any extra payment that the taker of this order wanna send on succesful execution of order
    function _settleBalances(
        Order calldata o,
        uint256 amount,
        address referrer,
        Payment calldata p
    ) internal {
        uint256 protocolfee = ((o.totalAmt * 50) / 10000) * amount;
        WETH.transferFrom(o.signer, address(this), o.totalAmt * amount);
        WETH.withdraw(o.totalAmt * amount);
        payEther(protocolfee, address(distributor));
        payEther(o.exchange.paymentAmt * amount, o.exchange.paymentAddress);
        payEther(o.prePayment.paymentAmt * amount, o.prePayment.paymentAddress);
        if (o.refererrAmt > 0 && referrer != address(0)) {
            payEther(o.refererrAmt * amount, referrer);
            payEther(
                (o.totalAmt - protocolfee - o.exchange.paymentAmt - o.prePayment.paymentAmt - o.refererrAmt) *
                    amount -
                    p.paymentAmt,
                msg.sender
            );
        } else {
            payEther(
                (o.totalAmt - protocolfee - o.exchange.paymentAmt - o.prePayment.paymentAmt) * amount - p.paymentAmt,
                msg.sender
            );
        }
        payEther(p.paymentAmt, p.paymentAddress);
        distributor.addFee([msg.sender, o.exchange.paymentAddress], protocolfee);
    }

    /// @dev Ensure that a given tokenId is contained within a supplied merkle root using a supplied proof.
    /// @param leaf The tokenId.
    /// @param root A merkle root derived from each valid tokenId.
    /// @param proof A proof that the supplied tokenId is contained within the associated merkle root.
    function _verifyProof(
        uint256 leaf,
        bytes32 root,
        bytes32[] memory proof
    ) public view {
        bytes32 computedHash = keccak256(abi.encode(leaf));
        for (uint256 i = 0; i < proof.length; i++) {
            bytes32 proofElement = proof[i];
            if (computedHash <= proofElement) {
                // Hash(current computed hash + current element of the proof)
                computedHash = _efficientHash(computedHash, proofElement);
            } else {
                // Hash(current element of the proof + current computed hash)
                computedHash = _efficientHash(proofElement, computedHash);
            }
        }
        if (computedHash != root) {
            revert('invalid proof');
        }
    }

    /// @dev Efficiently hash two bytes32 elements using memory scratch space.
    /// @param a The first element included in the hash.
    /// @param b The second element included in the hash.
    /// @return value The resultant hash of the two bytes32 elements.
    function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {
        assembly {
            mstore(0x00, a)
            mstore(0x20, b)
            value := keccak256(0x00, 0x40)
        }
    }

    /// @notice Sets the distributor contract
    /// @param _distributor Address of the distributor
    function setDistributor(address _distributor) external onlyOwner {
        if (address(distributor) == address(0)) {
            distributor = Distributor(_distributor);
        } else {
            pendingDistributor = _distributor;
            distributorEnableDate = block.timestamp + 1 days;
        }
    }

    /// @notice Executes the set distributor function after the timelock
    function executeSetDistributor() external onlyOwner {
        require(distributorEnableDate >= block.timestamp, 'not allowed');
        distributor = Distributor(pendingDistributor);
    }

    fallback() external payable {}

    receive() external payable {}
}

File 2 of 3 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

import "../utils/Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 3 of 3 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_governance","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"maker","type":"address"},{"indexed":false,"internalType":"uint256","name":"newNonce","type":"uint256"}],"name":"NonceIncremented","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"OrderCancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"maker","type":"address"},{"indexed":true,"internalType":"address","name":"taker","type":"address"},{"indexed":true,"internalType":"uint256","name":"orderType","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"orderHash","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"}],"name":"OrderFilled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"EIP712_DOMAIN_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"leaf","type":"uint256"},{"internalType":"bytes32","name":"root","type":"bytes32"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"_verifyProof","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"collection","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"signer","type":"address"},{"internalType":"uint256","name":"orderType","type":"uint256"},{"internalType":"uint256","name":"totalAmt","type":"uint256"},{"components":[{"internalType":"uint256","name":"paymentAmt","type":"uint256"},{"internalType":"address","name":"paymentAddress","type":"address"}],"internalType":"struct GolomTrader.Payment","name":"exchange","type":"tuple"},{"components":[{"internalType":"uint256","name":"paymentAmt","type":"uint256"},{"internalType":"address","name":"paymentAddress","type":"address"}],"internalType":"struct GolomTrader.Payment","name":"prePayment","type":"tuple"},{"internalType":"bool","name":"isERC721","type":"bool"},{"internalType":"uint256","name":"tokenAmt","type":"uint256"},{"internalType":"uint256","name":"refererrAmt","type":"uint256"},{"internalType":"bytes32","name":"root","type":"bytes32"},{"internalType":"address","name":"reservedAddress","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"internalType":"struct GolomTrader.Order","name":"o","type":"tuple"}],"name":"cancelOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"distributor","outputs":[{"internalType":"contract Distributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distributorEnableDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"executeSetDistributor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"collection","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"signer","type":"address"},{"internalType":"uint256","name":"orderType","type":"uint256"},{"internalType":"uint256","name":"totalAmt","type":"uint256"},{"components":[{"internalType":"uint256","name":"paymentAmt","type":"uint256"},{"internalType":"address","name":"paymentAddress","type":"address"}],"internalType":"struct GolomTrader.Payment","name":"exchange","type":"tuple"},{"components":[{"internalType":"uint256","name":"paymentAmt","type":"uint256"},{"internalType":"address","name":"paymentAddress","type":"address"}],"internalType":"struct GolomTrader.Payment","name":"prePayment","type":"tuple"},{"internalType":"bool","name":"isERC721","type":"bool"},{"internalType":"uint256","name":"tokenAmt","type":"uint256"},{"internalType":"uint256","name":"refererrAmt","type":"uint256"},{"internalType":"bytes32","name":"root","type":"bytes32"},{"internalType":"address","name":"reservedAddress","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"internalType":"struct GolomTrader.Order","name":"o","type":"tuple"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"referrer","type":"address"},{"components":[{"internalType":"uint256","name":"paymentAmt","type":"uint256"},{"internalType":"address","name":"paymentAddress","type":"address"}],"internalType":"struct GolomTrader.Payment","name":"p","type":"tuple"}],"name":"fillAsk","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"collection","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"signer","type":"address"},{"internalType":"uint256","name":"orderType","type":"uint256"},{"internalType":"uint256","name":"totalAmt","type":"uint256"},{"components":[{"internalType":"uint256","name":"paymentAmt","type":"uint256"},{"internalType":"address","name":"paymentAddress","type":"address"}],"internalType":"struct GolomTrader.Payment","name":"exchange","type":"tuple"},{"components":[{"internalType":"uint256","name":"paymentAmt","type":"uint256"},{"internalType":"address","name":"paymentAddress","type":"address"}],"internalType":"struct GolomTrader.Payment","name":"prePayment","type":"tuple"},{"internalType":"bool","name":"isERC721","type":"bool"},{"internalType":"uint256","name":"tokenAmt","type":"uint256"},{"internalType":"uint256","name":"refererrAmt","type":"uint256"},{"internalType":"bytes32","name":"root","type":"bytes32"},{"internalType":"address","name":"reservedAddress","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"internalType":"struct GolomTrader.Order","name":"o","type":"tuple"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"referrer","type":"address"},{"components":[{"internalType":"uint256","name":"paymentAmt","type":"uint256"},{"internalType":"address","name":"paymentAddress","type":"address"}],"internalType":"struct GolomTrader.Payment","name":"p","type":"tuple"}],"name":"fillBid","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"collection","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"signer","type":"address"},{"internalType":"uint256","name":"orderType","type":"uint256"},{"internalType":"uint256","name":"totalAmt","type":"uint256"},{"components":[{"internalType":"uint256","name":"paymentAmt","type":"uint256"},{"internalType":"address","name":"paymentAddress","type":"address"}],"internalType":"struct GolomTrader.Payment","name":"exchange","type":"tuple"},{"components":[{"internalType":"uint256","name":"paymentAmt","type":"uint256"},{"internalType":"address","name":"paymentAddress","type":"address"}],"internalType":"struct GolomTrader.Payment","name":"prePayment","type":"tuple"},{"internalType":"bool","name":"isERC721","type":"bool"},{"internalType":"uint256","name":"tokenAmt","type":"uint256"},{"internalType":"uint256","name":"refererrAmt","type":"uint256"},{"internalType":"bytes32","name":"root","type":"bytes32"},{"internalType":"address","name":"reservedAddress","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"internalType":"struct GolomTrader.Order","name":"o","type":"tuple"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"},{"internalType":"address","name":"referrer","type":"address"},{"components":[{"internalType":"uint256","name":"paymentAmt","type":"uint256"},{"internalType":"address","name":"paymentAddress","type":"address"}],"internalType":"struct GolomTrader.Payment","name":"p","type":"tuple"}],"name":"fillCriteriaBid","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"filled","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"governance","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"incrementNonce","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingDistributor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_distributor","type":"address"}],"name":"setDistributor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"collection","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"signer","type":"address"},{"internalType":"uint256","name":"orderType","type":"uint256"},{"internalType":"uint256","name":"totalAmt","type":"uint256"},{"components":[{"internalType":"uint256","name":"paymentAmt","type":"uint256"},{"internalType":"address","name":"paymentAddress","type":"address"}],"internalType":"struct GolomTrader.Payment","name":"exchange","type":"tuple"},{"components":[{"internalType":"uint256","name":"paymentAmt","type":"uint256"},{"internalType":"address","name":"paymentAddress","type":"address"}],"internalType":"struct GolomTrader.Payment","name":"prePayment","type":"tuple"},{"internalType":"bool","name":"isERC721","type":"bool"},{"internalType":"uint256","name":"tokenAmt","type":"uint256"},{"internalType":"uint256","name":"refererrAmt","type":"uint256"},{"internalType":"bytes32","name":"root","type":"bytes32"},{"internalType":"address","name":"reservedAddress","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"internalType":"struct GolomTrader.Order","name":"o","type":"tuple"}],"name":"validateOrder","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a0604052600380546001600160a01b03191673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc21790553480156200003757600080fd5b506040516200227c3803806200227c8339810160408190526200005a91620001a2565b620000653362000152565b620000708162000152565b6040805180820182526008815267474f4c4f4d2e494f60c01b602091820152815180830183526001808252603160f81b9183019190915282517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f928101929092527fe57859c27f57af58eb92116da721df7b2f5c90f2e1323a6e0cca8a7d4758320b928201929092527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101919091523060a082015260c00160408051601f19818403018152919052805160209091012060805250620001d4565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215620001b557600080fd5b81516001600160a01b0381168114620001cd57600080fd5b9392505050565b608051612085620001f7600039600081816102ff0152610cba01526120856000f3fe60806040526004361061010c5760003560e01c80637ecebe001161009a578063c7977be711610061578063c7977be7146102ed578063cdcca52614610321578063d929309e1461035c578063e18cdf361461037c578063f2fde38b1461038f57005b80637ecebe00146102425780638da5cb5b1461026f57806391e198ea1461028d578063bd78839d146102ad578063bfe10928146102cd57005b8063627cdcb9116100de578063627cdcb9146101c25780636540b5eb146101d7578063715018a6146101ed57806375619ab5146102025780637aebe0d41461022257005b8063288cdc911461011557806335ae205714610155578063461f67f41461016a5780635aa6e6751461018a57005b3661011357005b005b34801561012157600080fd5b50610142610130366004611ad6565b60026020526000908152604090205481565b6040519081526020015b60405180910390f35b34801561016157600080fd5b506101136103af565b34801561017657600080fd5b50610113610185366004611b36565b610446565b34801561019657600080fd5b506004546101aa906001600160a01b031681565b6040516001600160a01b03909116815260200161014c565b3480156101ce57600080fd5b50610113610716565b3480156101e357600080fd5b5061014260075481565b3480156101f957600080fd5b50610113610772565b34801561020e57600080fd5b5061011361021d366004611b89565b6107a8565b34801561022e57600080fd5b5061011361023d366004611bc1565b610831565b34801561024e57600080fd5b5061014261025d366004611b89565b60016020526000908152604090205481565b34801561027b57600080fd5b506000546001600160a01b03166101aa565b34801561029957600080fd5b506101136102a8366004611c94565b61090e565b3480156102b957600080fd5b506101136102c8366004611d57565b610c19565b3480156102d957600080fd5b506005546101aa906001600160a01b031681565b3480156102f957600080fd5b506101427f000000000000000000000000000000000000000000000000000000000000000081565b34801561032d57600080fd5b5061034161033c366004611d57565b610c9b565b6040805193845260208401929092529082015260600161014c565b34801561036857600080fd5b506006546101aa906001600160a01b031681565b61011361038a366004611b36565b610ef7565b34801561039b57600080fd5b506101136103aa366004611b89565b611539565b6000546001600160a01b031633146103e25760405162461bcd60e51b81526004016103d990611d74565b60405180910390fd5b4260075410156104225760405162461bcd60e51b815260206004820152600b60248201526a1b9bdd08185b1b1bddd95960aa1b60448201526064016103d9565b600654600580546001600160a01b0319166001600160a01b03909216919091179055565b80358361016086013561046160e088013560a0890135611dbf565b61046b9190611dbf565b6104759190611dd7565b61047f9190611dbf565b61048d846080870135611dd7565b1161049757600080fd5b60006104ab6101c086016101a08701611b89565b6001600160a01b0316146104e8576104cb6101c085016101a08601611b89565b6001600160a01b0316336001600160a01b0316146104e857600080fd5b83606001356001146104f957600080fd5b600080600061050787610c9b565b9250925092508260031461051a57600080fd5b8581101561052757600080fd5b600082815260026020526040902054610541908790611dbf565b60008381526002602052604090205561056261014088016101208901611e04565b1561061357856001146105875760405162461bcd60e51b81526004016103d990611e21565b60006105966020890189611b89565b90506001600160a01b0381166323b872dd336105b860608c0160408d01611b89565b8b602001356040518463ffffffff1660e01b81526004016105db93929190611e58565b600060405180830381600087803b1580156105f557600080fd5b505af1158015610609573d6000803e3d6000fd5b505050505061069d565b60006106226020890189611b89565b90506001600160a01b03811663f242432a3361064460608c0160408d01611b89565b8b602001358b6040518563ffffffff1660e01b81526004016106699493929190611e7c565b600060405180830381600087803b15801561068357600080fd5b505af1158015610697573d6000803e3d6000fd5b50505050505b60016106af6060890160408a01611b89565b6001600160a01b0316337f5ff9e72404463058acdc1a7367b634d29a9c3c5aa4d41dddf6321b586afb5aed856106e98b60808e0135611dd7565b6040805192835260208301919091520160405180910390a461070d878787876115d1565b50505050505050565b3360009081526001602052604081208054829061073290611eb4565b918290555060405181815290915033907fa82a649bbd060c9099cd7b7326e2b0dc9e9af0836480e0f849dc9eaa79710b3b9060200160405180910390a250565b6000546001600160a01b0316331461079c5760405162461bcd60e51b81526004016103d990611d74565b6107a660006118c4565b565b6000546001600160a01b031633146107d25760405162461bcd60e51b81526004016103d990611d74565b6005546001600160a01b031661080257600580546001600160a01b0383166001600160a01b031990911617905550565b600680546001600160a01b0319166001600160a01b03831617905561082a4262015180611dbf565b6007555b50565b60008360405160200161084691815260200190565b60405160208183030381529060405280519060200120905060005b82518110156108c857600083828151811061087e5761087e611ecf565b602002602001015190508083116108a457600083815260208290526040902092506108b5565b600081815260208490526040902092505b50806108c081611eb4565b915050610861565b508281146109085760405162461bcd60e51b815260206004820152600d60248201526c34b73b30b634b210383937b7b360991b60448201526064016103d9565b50505050565b61016087013561092660e089013560a08a0135611dbf565b6109309190611dbf565b8760800135101561094057600080fd5b60006109546101c089016101a08a01611b89565b6001600160a01b031614610991576109746101c088016101a08901611b89565b6001600160a01b0316336001600160a01b03161461099157600080fd5b86606001356002146109a257600080fd5b60008060006109b08a610c9b565b925092509250826003146109c357600080fd5b888110156109d057600080fd5b6000828152600260205260409020546109ea908a90611dbf565b6000838152600260205260409020556101808a013515610a4757610a47888b610180013589898080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061083192505050565b610a596101408b016101208c01611e04565b15610b095788600114610a7e5760405162461bcd60e51b81526004016103d990611e21565b6000610a8d60208c018c611b89565b9050806001600160a01b03166323b872dd338d6040016020810190610ab29190611b89565b8c6040518463ffffffff1660e01b8152600401610ad193929190611e58565b600060405180830381600087803b158015610aeb57600080fd5b505af1158015610aff573d6000803e3d6000fd5b5050505050610b92565b6000610b1860208c018c611b89565b9050806001600160a01b031663f242432a338d6040016020810190610b3d9190611b89565b8c8e6040518563ffffffff1660e01b8152600401610b5e9493929190611e7c565b600060405180830381600087803b158015610b7857600080fd5b505af1158015610b8c573d6000803e3d6000fd5b50505050505b6002610ba460608c0160408d01611b89565b6001600160a01b0316336001600160a01b03167f5ff9e72404463058acdc1a7367b634d29a9c3c5aa4d41dddf6321b586afb5aed858d8f60800135610be99190611dd7565b6040805192835260208301919091520160405180910390a4610c0d8a8a87876115d1565b50505050505050505050565b33610c2a6060830160408401611b89565b6001600160a01b031614610c3d57600080fd5b6000610c4882610c9b565b509150610c5d90506101408301356001611dbf565b60008281526002602052604080822092909255905182917f5152abf959f6564662358c2e52b702259b78bac5ee7842a0f01937e670efcc7d91a25050565b600080600080610caa85611914565b60405161190160f01b60208201527f000000000000000000000000000000000000000000000000000000000000000060228201526042810182905290915060009060620160408051601f19818403018152919052805160209091012090506000600182610d1f6102208a016102008b01611ee5565b6040805160008152602081018083529390935260ff909116908201526102208901356060820152610240890135608082015260a0016020604051602081039080840390855afa158015610d76573d6000803e3d6000fd5b505060408051601f1901519250610d94915060608901908901611b89565b6001600160a01b0316816001600160a01b031614610de85760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964207369676e617475726560781b60448201526064016103d9565b610df86060880160408901611b89565b6001600160a01b0316816001600160a01b031614610e23576000836000955095509550505050610ef0565b866101e00135421115610e43576001836000955095509550505050610ef0565b60016000610e5760608a0160408b01611b89565b6001600160a01b03166001600160a01b0316815260200190815260200160002054876101c0013514610e96576002836000955095509550505050610ef0565b60008381526002602052604090205461014088013511610ec3576002836000955095509550505050610ef0565b6000838152600260205260409020546003908490610ee6906101408b0135611f08565b9550955095505050505b9193909250565b612710610f0960808601356032611dd7565b610f139190611f1f565b610160850135610f2b60e087013560a0880135611dbf565b610f359190611dbf565b610f3f9190611dbf565b84608001351015610f855760405162461bcd60e51b815260206004820152601060248201526f616d74206e6f74206d61746368696e6760801b60448201526064016103d9565b8035610f95846080870135611dd7565b610f9f9190611dbf565b341015610fd65760405162461bcd60e51b81526020600482015260056024820152646d676d746d60d81b60448201526064016103d9565b6000610fea6101c086016101a08701611b89565b6001600160a01b0316146110275761100a6101c085016101a08601611b89565b6001600160a01b0316336001600160a01b03161461102757600080fd5b60608401351561106d5760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964206f726465725479706560781b60448201526064016103d9565b600080600061107b87610c9b565b925092509250826003146110c35760405162461bcd60e51b815260206004820152600f60248201526e1bdc99195c881b9bdd081d985b1a59608a1b60448201526064016103d9565b8581101561110a5760405162461bcd60e51b81526020600482015260146024820152731bdc99195c88185b1c9958591e48199a5b1b195960621b60448201526064016103d9565b600082815260026020526040902054611124908790611dbf565b60008381526002602052604090205561114561014088016101208901611e04565b156111f0578560011461116a5760405162461bcd60e51b81526004016103d990611e21565b6111776020880188611b89565b6001600160a01b03166323b872dd61119560608a0160408b01611b89565b338a602001356040518463ffffffff1660e01b81526004016111b993929190611e58565b600060405180830381600087803b1580156111d357600080fd5b505af11580156111e7573d6000803e3d6000fd5b50505050611274565b6111fd6020880188611b89565b6001600160a01b031663f242432a61121b60608a0160408b01611b89565b338a602001358a6040518563ffffffff1660e01b81526004016112419493929190611e7c565b600060405180830381600087803b15801561125b57600080fd5b505af115801561126f573d6000803e3d6000fd5b505050505b6112af8661271061128a60808b01356032611dd7565b6112949190611f1f565b61129e9190611dd7565b6005546001600160a01b0316611944565b6112d56112c08760a08a0135611dd7565b6112d060e08a0160c08b01611b89565b611944565b6112f86112e68760e08a0135611dd7565b6112d06101208a016101008b01611b89565b600087610160013511801561131557506001600160a01b03851615155b156113ad5761133261132c876101608a0135611dd7565b86611944565b6113a88661016089013560e08a013560a08b013561271061135860808e01356032611dd7565b6113629190611f1f565b6113709060808e0135611f08565b61137a9190611f08565b6113849190611f08565b61138e9190611f08565b6113989190611dd7565b6112d060608a0160408b01611b89565b6113e5565b6113e58660e089013560a08a01356127106113cd60808d01356032611dd7565b6113d79190611f1f565b61137a9060808d0135611f08565b6113fa84356112d06040870160208801611b89565b6005546040805180820182526001600160a01b0390921691634e2a875c91819061142a9060608d01908d01611b89565b6001600160a01b0316815260200161144860e08c0160c08d01611b89565b6001600160a01b031690528861271061146660808d01356032611dd7565b6114709190611f1f565b61147a9190611dd7565b6040518363ffffffff1660e01b8152600401611497929190611f41565b600060405180830381600087803b1580156114b157600080fd5b505af11580156114c5573d6000803e3d6000fd5b50600092503391506114df905060608a0160408b01611b89565b6001600160a01b03167f5ff9e72404463058acdc1a7367b634d29a9c3c5aa4d41dddf6321b586afb5aed856115188b60808e0135611dd7565b6040805192835260208301919091520160405180910390a450505050505050565b6000546001600160a01b031633146115635760405162461bcd60e51b81526004016103d990611d74565b6001600160a01b0381166115c85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103d9565b61082e816118c4565b6000836127106115e660808801356032611dd7565b6115f09190611f1f565b6115fa9190611dd7565b6003549091506001600160a01b03166323b872dd61161e6060880160408901611b89565b3061162d8860808b0135611dd7565b6040518463ffffffff1660e01b815260040161164b93929190611e58565b6020604051808303816000875af115801561166a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061168e9190611f82565b506003546001600160a01b0316632e1a7d4d6116ae866080890135611dd7565b6040518263ffffffff1660e01b81526004016116cc91815260200190565b600060405180830381600087803b1580156116e657600080fd5b505af11580156116fa573d6000803e3d6000fd5b505060055461171592508391506001600160a01b0316611944565b6117366117268560a0880135611dd7565b6112d060e0880160c08901611b89565b6117596117478560e0880135611dd7565b6112d061012088016101008901611b89565b600085610160013511801561177657506001600160a01b03831615155b156117f45761179361178d85610160880135611dd7565b84611944565b6117ef82358561016088013560e089013560a08a01356117b78760808d0135611f08565b6117c19190611f08565b6117cb9190611f08565b6117d59190611f08565b6117df9190611dd7565b6117e99190611f08565b33611944565b611812565b61181282358560e088013560a08901356117c18660808c0135611f08565b61182782356112d06040850160208601611b89565b600554604080518082019091523381526001600160a01b0390911690634e2a875c906020810161185d60e08a0160c08b01611b89565b6001600160a01b031690526040516001600160e01b031960e084901b16815261188b91908590600401611f41565b600060405180830381600087803b1580156118a557600080fd5b505af11580156118b9573d6000803e3d6000fd5b505050505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600061193e826040518060400160405280856101c001358152602001856101e00135815250611986565b92915050565b8115611982576040516001600160a01b0382169083156108fc029084906000818181858888f19350505050158015611980573d6000803e3d6000fd5b505b5050565b60007f927713a6a2bbbbf81b9d3bfa3af9ab935fb4b6053d9d9055f0ea69a28d8324676119b66020850185611b89565b60208501356119cb6060870160408801611b89565b866060013587608001356119e18960a001611a61565b6119ed8a60e001611a61565b6119ff6101408c016101208d01611e04565b8b61014001358c61016001358d61018001358e6101a0016020810190611a259190611b89565b8e604051602001611a439e9d9c9b9a99989796959493929190611fc2565b60405160208183030381529060405280519060200120905092915050565b60007f930082631ee6130d8146e71be66ee2af78081e142d431f763e505c2d73fa4be18235611a966040850160208601611b89565b6040805160208101949094528301919091526001600160a01b03166060820152608001604051602081830303815290604052805190602001209050919050565b600060208284031215611ae857600080fd5b5035919050565b60006102608284031215611b0257600080fd5b50919050565b80356001600160a01b0381168114611b1f57600080fd5b919050565b600060408284031215611b0257600080fd5b6000806000806102e08587031215611b4d57600080fd5b611b578686611aef565b93506102608501359250611b6e6102808601611b08565b9150611b7e866102a08701611b24565b905092959194509250565b600060208284031215611b9b57600080fd5b611ba482611b08565b9392505050565b634e487b7160e01b600052604160045260246000fd5b600080600060608486031215611bd657600080fd5b833592506020808501359250604085013567ffffffffffffffff80821115611bfd57600080fd5b818701915087601f830112611c1157600080fd5b813581811115611c2357611c23611bab565b8060051b604051601f19603f83011681018181108582111715611c4857611c48611bab565b60405291825284820192508381018501918a831115611c6657600080fd5b938501935b82851015611c8457843584529385019392850192611c6b565b8096505050505050509250925092565b6000806000806000806000610320888a031215611cb057600080fd5b611cba8989611aef565b9650610260880135955061028088013594506102a088013567ffffffffffffffff80821115611ce857600080fd5b818a0191508a601f830112611cfc57600080fd5b813581811115611d0b57600080fd5b8b60208260051b8501011115611d2057600080fd5b602083019650809550505050611d396102c08901611b08565b9150611d49896102e08a01611b24565b905092959891949750929550565b60006102608284031215611d6a57600080fd5b611ba48383611aef565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008219821115611dd257611dd2611da9565b500190565b6000816000190483118215151615611df157611df1611da9565b500290565b801515811461082e57600080fd5b600060208284031215611e1657600080fd5b8135611ba481611df6565b60208082526017908201527f6f6e6c7920312065726337323120617420312074696d65000000000000000000604082015260600190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260a06080820181905260009082015260c00190565b6000600019821415611ec857611ec8611da9565b5060010190565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611ef757600080fd5b813560ff81168114611ba457600080fd5b600082821015611f1a57611f1a611da9565b500390565b600082611f3c57634e487b7160e01b600052601260045260246000fd5b500490565b60608101818460005b6002811015611f725781516001600160a01b0316835260209283019290910190600101611f4a565b5050508260408301529392505050565b600060208284031215611f9457600080fd5b8151611ba481611df6565b8060005b6002811015610908578151845260209384019390910190600101611fa3565b8e81526001600160a01b038e81166020830152604082018e90528c81166060830152608082018c905260a082018b905260c082018a905260e0820189905287151561010083015261012082018790526101408201869052610160820185905283166101808201526101e0810161203c6101a0830184611f9f565b9f9e50505050505050505050505050505056fea2646970667358221220e14178adbeb150feadbd211da8ee1044e6fbfabd57d982d82d1f0cc30dd330d664736f6c634300080b0033000000000000000000000000552d2e380987c8b3c096d9069ea1bb8df432b5fc

Deployed Bytecode

0x60806040526004361061010c5760003560e01c80637ecebe001161009a578063c7977be711610061578063c7977be7146102ed578063cdcca52614610321578063d929309e1461035c578063e18cdf361461037c578063f2fde38b1461038f57005b80637ecebe00146102425780638da5cb5b1461026f57806391e198ea1461028d578063bd78839d146102ad578063bfe10928146102cd57005b8063627cdcb9116100de578063627cdcb9146101c25780636540b5eb146101d7578063715018a6146101ed57806375619ab5146102025780637aebe0d41461022257005b8063288cdc911461011557806335ae205714610155578063461f67f41461016a5780635aa6e6751461018a57005b3661011357005b005b34801561012157600080fd5b50610142610130366004611ad6565b60026020526000908152604090205481565b6040519081526020015b60405180910390f35b34801561016157600080fd5b506101136103af565b34801561017657600080fd5b50610113610185366004611b36565b610446565b34801561019657600080fd5b506004546101aa906001600160a01b031681565b6040516001600160a01b03909116815260200161014c565b3480156101ce57600080fd5b50610113610716565b3480156101e357600080fd5b5061014260075481565b3480156101f957600080fd5b50610113610772565b34801561020e57600080fd5b5061011361021d366004611b89565b6107a8565b34801561022e57600080fd5b5061011361023d366004611bc1565b610831565b34801561024e57600080fd5b5061014261025d366004611b89565b60016020526000908152604090205481565b34801561027b57600080fd5b506000546001600160a01b03166101aa565b34801561029957600080fd5b506101136102a8366004611c94565b61090e565b3480156102b957600080fd5b506101136102c8366004611d57565b610c19565b3480156102d957600080fd5b506005546101aa906001600160a01b031681565b3480156102f957600080fd5b506101427f8e467fafd86120a38a2d604e9d7fcc638b0d9d93cb749c065826e6e0ff3ac44681565b34801561032d57600080fd5b5061034161033c366004611d57565b610c9b565b6040805193845260208401929092529082015260600161014c565b34801561036857600080fd5b506006546101aa906001600160a01b031681565b61011361038a366004611b36565b610ef7565b34801561039b57600080fd5b506101136103aa366004611b89565b611539565b6000546001600160a01b031633146103e25760405162461bcd60e51b81526004016103d990611d74565b60405180910390fd5b4260075410156104225760405162461bcd60e51b815260206004820152600b60248201526a1b9bdd08185b1b1bddd95960aa1b60448201526064016103d9565b600654600580546001600160a01b0319166001600160a01b03909216919091179055565b80358361016086013561046160e088013560a0890135611dbf565b61046b9190611dbf565b6104759190611dd7565b61047f9190611dbf565b61048d846080870135611dd7565b1161049757600080fd5b60006104ab6101c086016101a08701611b89565b6001600160a01b0316146104e8576104cb6101c085016101a08601611b89565b6001600160a01b0316336001600160a01b0316146104e857600080fd5b83606001356001146104f957600080fd5b600080600061050787610c9b565b9250925092508260031461051a57600080fd5b8581101561052757600080fd5b600082815260026020526040902054610541908790611dbf565b60008381526002602052604090205561056261014088016101208901611e04565b1561061357856001146105875760405162461bcd60e51b81526004016103d990611e21565b60006105966020890189611b89565b90506001600160a01b0381166323b872dd336105b860608c0160408d01611b89565b8b602001356040518463ffffffff1660e01b81526004016105db93929190611e58565b600060405180830381600087803b1580156105f557600080fd5b505af1158015610609573d6000803e3d6000fd5b505050505061069d565b60006106226020890189611b89565b90506001600160a01b03811663f242432a3361064460608c0160408d01611b89565b8b602001358b6040518563ffffffff1660e01b81526004016106699493929190611e7c565b600060405180830381600087803b15801561068357600080fd5b505af1158015610697573d6000803e3d6000fd5b50505050505b60016106af6060890160408a01611b89565b6001600160a01b0316337f5ff9e72404463058acdc1a7367b634d29a9c3c5aa4d41dddf6321b586afb5aed856106e98b60808e0135611dd7565b6040805192835260208301919091520160405180910390a461070d878787876115d1565b50505050505050565b3360009081526001602052604081208054829061073290611eb4565b918290555060405181815290915033907fa82a649bbd060c9099cd7b7326e2b0dc9e9af0836480e0f849dc9eaa79710b3b9060200160405180910390a250565b6000546001600160a01b0316331461079c5760405162461bcd60e51b81526004016103d990611d74565b6107a660006118c4565b565b6000546001600160a01b031633146107d25760405162461bcd60e51b81526004016103d990611d74565b6005546001600160a01b031661080257600580546001600160a01b0383166001600160a01b031990911617905550565b600680546001600160a01b0319166001600160a01b03831617905561082a4262015180611dbf565b6007555b50565b60008360405160200161084691815260200190565b60405160208183030381529060405280519060200120905060005b82518110156108c857600083828151811061087e5761087e611ecf565b602002602001015190508083116108a457600083815260208290526040902092506108b5565b600081815260208490526040902092505b50806108c081611eb4565b915050610861565b508281146109085760405162461bcd60e51b815260206004820152600d60248201526c34b73b30b634b210383937b7b360991b60448201526064016103d9565b50505050565b61016087013561092660e089013560a08a0135611dbf565b6109309190611dbf565b8760800135101561094057600080fd5b60006109546101c089016101a08a01611b89565b6001600160a01b031614610991576109746101c088016101a08901611b89565b6001600160a01b0316336001600160a01b03161461099157600080fd5b86606001356002146109a257600080fd5b60008060006109b08a610c9b565b925092509250826003146109c357600080fd5b888110156109d057600080fd5b6000828152600260205260409020546109ea908a90611dbf565b6000838152600260205260409020556101808a013515610a4757610a47888b610180013589898080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061083192505050565b610a596101408b016101208c01611e04565b15610b095788600114610a7e5760405162461bcd60e51b81526004016103d990611e21565b6000610a8d60208c018c611b89565b9050806001600160a01b03166323b872dd338d6040016020810190610ab29190611b89565b8c6040518463ffffffff1660e01b8152600401610ad193929190611e58565b600060405180830381600087803b158015610aeb57600080fd5b505af1158015610aff573d6000803e3d6000fd5b5050505050610b92565b6000610b1860208c018c611b89565b9050806001600160a01b031663f242432a338d6040016020810190610b3d9190611b89565b8c8e6040518563ffffffff1660e01b8152600401610b5e9493929190611e7c565b600060405180830381600087803b158015610b7857600080fd5b505af1158015610b8c573d6000803e3d6000fd5b50505050505b6002610ba460608c0160408d01611b89565b6001600160a01b0316336001600160a01b03167f5ff9e72404463058acdc1a7367b634d29a9c3c5aa4d41dddf6321b586afb5aed858d8f60800135610be99190611dd7565b6040805192835260208301919091520160405180910390a4610c0d8a8a87876115d1565b50505050505050505050565b33610c2a6060830160408401611b89565b6001600160a01b031614610c3d57600080fd5b6000610c4882610c9b565b509150610c5d90506101408301356001611dbf565b60008281526002602052604080822092909255905182917f5152abf959f6564662358c2e52b702259b78bac5ee7842a0f01937e670efcc7d91a25050565b600080600080610caa85611914565b60405161190160f01b60208201527f8e467fafd86120a38a2d604e9d7fcc638b0d9d93cb749c065826e6e0ff3ac44660228201526042810182905290915060009060620160408051601f19818403018152919052805160209091012090506000600182610d1f6102208a016102008b01611ee5565b6040805160008152602081018083529390935260ff909116908201526102208901356060820152610240890135608082015260a0016020604051602081039080840390855afa158015610d76573d6000803e3d6000fd5b505060408051601f1901519250610d94915060608901908901611b89565b6001600160a01b0316816001600160a01b031614610de85760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964207369676e617475726560781b60448201526064016103d9565b610df86060880160408901611b89565b6001600160a01b0316816001600160a01b031614610e23576000836000955095509550505050610ef0565b866101e00135421115610e43576001836000955095509550505050610ef0565b60016000610e5760608a0160408b01611b89565b6001600160a01b03166001600160a01b0316815260200190815260200160002054876101c0013514610e96576002836000955095509550505050610ef0565b60008381526002602052604090205461014088013511610ec3576002836000955095509550505050610ef0565b6000838152600260205260409020546003908490610ee6906101408b0135611f08565b9550955095505050505b9193909250565b612710610f0960808601356032611dd7565b610f139190611f1f565b610160850135610f2b60e087013560a0880135611dbf565b610f359190611dbf565b610f3f9190611dbf565b84608001351015610f855760405162461bcd60e51b815260206004820152601060248201526f616d74206e6f74206d61746368696e6760801b60448201526064016103d9565b8035610f95846080870135611dd7565b610f9f9190611dbf565b341015610fd65760405162461bcd60e51b81526020600482015260056024820152646d676d746d60d81b60448201526064016103d9565b6000610fea6101c086016101a08701611b89565b6001600160a01b0316146110275761100a6101c085016101a08601611b89565b6001600160a01b0316336001600160a01b03161461102757600080fd5b60608401351561106d5760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964206f726465725479706560781b60448201526064016103d9565b600080600061107b87610c9b565b925092509250826003146110c35760405162461bcd60e51b815260206004820152600f60248201526e1bdc99195c881b9bdd081d985b1a59608a1b60448201526064016103d9565b8581101561110a5760405162461bcd60e51b81526020600482015260146024820152731bdc99195c88185b1c9958591e48199a5b1b195960621b60448201526064016103d9565b600082815260026020526040902054611124908790611dbf565b60008381526002602052604090205561114561014088016101208901611e04565b156111f0578560011461116a5760405162461bcd60e51b81526004016103d990611e21565b6111776020880188611b89565b6001600160a01b03166323b872dd61119560608a0160408b01611b89565b338a602001356040518463ffffffff1660e01b81526004016111b993929190611e58565b600060405180830381600087803b1580156111d357600080fd5b505af11580156111e7573d6000803e3d6000fd5b50505050611274565b6111fd6020880188611b89565b6001600160a01b031663f242432a61121b60608a0160408b01611b89565b338a602001358a6040518563ffffffff1660e01b81526004016112419493929190611e7c565b600060405180830381600087803b15801561125b57600080fd5b505af115801561126f573d6000803e3d6000fd5b505050505b6112af8661271061128a60808b01356032611dd7565b6112949190611f1f565b61129e9190611dd7565b6005546001600160a01b0316611944565b6112d56112c08760a08a0135611dd7565b6112d060e08a0160c08b01611b89565b611944565b6112f86112e68760e08a0135611dd7565b6112d06101208a016101008b01611b89565b600087610160013511801561131557506001600160a01b03851615155b156113ad5761133261132c876101608a0135611dd7565b86611944565b6113a88661016089013560e08a013560a08b013561271061135860808e01356032611dd7565b6113629190611f1f565b6113709060808e0135611f08565b61137a9190611f08565b6113849190611f08565b61138e9190611f08565b6113989190611dd7565b6112d060608a0160408b01611b89565b6113e5565b6113e58660e089013560a08a01356127106113cd60808d01356032611dd7565b6113d79190611f1f565b61137a9060808d0135611f08565b6113fa84356112d06040870160208801611b89565b6005546040805180820182526001600160a01b0390921691634e2a875c91819061142a9060608d01908d01611b89565b6001600160a01b0316815260200161144860e08c0160c08d01611b89565b6001600160a01b031690528861271061146660808d01356032611dd7565b6114709190611f1f565b61147a9190611dd7565b6040518363ffffffff1660e01b8152600401611497929190611f41565b600060405180830381600087803b1580156114b157600080fd5b505af11580156114c5573d6000803e3d6000fd5b50600092503391506114df905060608a0160408b01611b89565b6001600160a01b03167f5ff9e72404463058acdc1a7367b634d29a9c3c5aa4d41dddf6321b586afb5aed856115188b60808e0135611dd7565b6040805192835260208301919091520160405180910390a450505050505050565b6000546001600160a01b031633146115635760405162461bcd60e51b81526004016103d990611d74565b6001600160a01b0381166115c85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103d9565b61082e816118c4565b6000836127106115e660808801356032611dd7565b6115f09190611f1f565b6115fa9190611dd7565b6003549091506001600160a01b03166323b872dd61161e6060880160408901611b89565b3061162d8860808b0135611dd7565b6040518463ffffffff1660e01b815260040161164b93929190611e58565b6020604051808303816000875af115801561166a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061168e9190611f82565b506003546001600160a01b0316632e1a7d4d6116ae866080890135611dd7565b6040518263ffffffff1660e01b81526004016116cc91815260200190565b600060405180830381600087803b1580156116e657600080fd5b505af11580156116fa573d6000803e3d6000fd5b505060055461171592508391506001600160a01b0316611944565b6117366117268560a0880135611dd7565b6112d060e0880160c08901611b89565b6117596117478560e0880135611dd7565b6112d061012088016101008901611b89565b600085610160013511801561177657506001600160a01b03831615155b156117f45761179361178d85610160880135611dd7565b84611944565b6117ef82358561016088013560e089013560a08a01356117b78760808d0135611f08565b6117c19190611f08565b6117cb9190611f08565b6117d59190611f08565b6117df9190611dd7565b6117e99190611f08565b33611944565b611812565b61181282358560e088013560a08901356117c18660808c0135611f08565b61182782356112d06040850160208601611b89565b600554604080518082019091523381526001600160a01b0390911690634e2a875c906020810161185d60e08a0160c08b01611b89565b6001600160a01b031690526040516001600160e01b031960e084901b16815261188b91908590600401611f41565b600060405180830381600087803b1580156118a557600080fd5b505af11580156118b9573d6000803e3d6000fd5b505050505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600061193e826040518060400160405280856101c001358152602001856101e00135815250611986565b92915050565b8115611982576040516001600160a01b0382169083156108fc029084906000818181858888f19350505050158015611980573d6000803e3d6000fd5b505b5050565b60007f927713a6a2bbbbf81b9d3bfa3af9ab935fb4b6053d9d9055f0ea69a28d8324676119b66020850185611b89565b60208501356119cb6060870160408801611b89565b866060013587608001356119e18960a001611a61565b6119ed8a60e001611a61565b6119ff6101408c016101208d01611e04565b8b61014001358c61016001358d61018001358e6101a0016020810190611a259190611b89565b8e604051602001611a439e9d9c9b9a99989796959493929190611fc2565b60405160208183030381529060405280519060200120905092915050565b60007f930082631ee6130d8146e71be66ee2af78081e142d431f763e505c2d73fa4be18235611a966040850160208601611b89565b6040805160208101949094528301919091526001600160a01b03166060820152608001604051602081830303815290604052805190602001209050919050565b600060208284031215611ae857600080fd5b5035919050565b60006102608284031215611b0257600080fd5b50919050565b80356001600160a01b0381168114611b1f57600080fd5b919050565b600060408284031215611b0257600080fd5b6000806000806102e08587031215611b4d57600080fd5b611b578686611aef565b93506102608501359250611b6e6102808601611b08565b9150611b7e866102a08701611b24565b905092959194509250565b600060208284031215611b9b57600080fd5b611ba482611b08565b9392505050565b634e487b7160e01b600052604160045260246000fd5b600080600060608486031215611bd657600080fd5b833592506020808501359250604085013567ffffffffffffffff80821115611bfd57600080fd5b818701915087601f830112611c1157600080fd5b813581811115611c2357611c23611bab565b8060051b604051601f19603f83011681018181108582111715611c4857611c48611bab565b60405291825284820192508381018501918a831115611c6657600080fd5b938501935b82851015611c8457843584529385019392850192611c6b565b8096505050505050509250925092565b6000806000806000806000610320888a031215611cb057600080fd5b611cba8989611aef565b9650610260880135955061028088013594506102a088013567ffffffffffffffff80821115611ce857600080fd5b818a0191508a601f830112611cfc57600080fd5b813581811115611d0b57600080fd5b8b60208260051b8501011115611d2057600080fd5b602083019650809550505050611d396102c08901611b08565b9150611d49896102e08a01611b24565b905092959891949750929550565b60006102608284031215611d6a57600080fd5b611ba48383611aef565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008219821115611dd257611dd2611da9565b500190565b6000816000190483118215151615611df157611df1611da9565b500290565b801515811461082e57600080fd5b600060208284031215611e1657600080fd5b8135611ba481611df6565b60208082526017908201527f6f6e6c7920312065726337323120617420312074696d65000000000000000000604082015260600190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260a06080820181905260009082015260c00190565b6000600019821415611ec857611ec8611da9565b5060010190565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611ef757600080fd5b813560ff81168114611ba457600080fd5b600082821015611f1a57611f1a611da9565b500390565b600082611f3c57634e487b7160e01b600052601260045260246000fd5b500490565b60608101818460005b6002811015611f725781516001600160a01b0316835260209283019290910190600101611f4a565b5050508260408301529392505050565b600060208284031215611f9457600080fd5b8151611ba481611df6565b8060005b6002811015610908578151845260209384019390910190600101611fa3565b8e81526001600160a01b038e81166020830152604082018e90528c81166060830152608082018c905260a082018b905260c082018a905260e0820189905287151561010083015261012082018790526101408201869052610160820185905283166101808201526101e0810161203c6101a0830184611f9f565b9f9e50505050505050505050505050505056fea2646970667358221220e14178adbeb150feadbd211da8ee1044e6fbfabd57d982d82d1f0cc30dd330d664736f6c634300080b0033

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

000000000000000000000000552d2e380987c8b3c096d9069ea1bb8df432b5fc

-----Decoded View---------------
Arg [0] : _governance (address): 0x552d2E380987C8B3C096d9069EA1bb8df432b5Fc

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000552d2e380987c8b3c096d9069ea1bb8df432b5fc


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ 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.