Contract 0xD01c92937400DD1ecE24992B1dc44Aeaa47Ae72a 1

 
Auctionity has migrated to a new address.
 
Txn Hash
Method
Block
From
To
Value
0x2753e7c701a44e5bcfe85ca66e31488a1a2be833b0e21067a7fad72bb8db5adaWithdrawal Vouch...119332112021-02-26 13:49:03648 days 19 hrs ago0xe0fd63a531112710f0554bc9bac19a4858589b23 IN  Auctionity: Old Address0 Ether0.01486452110
0x475035653236b43ebc536594126bf2168054b1d81b4ff07b5345959d709e69f8Withdrawal Vouch...119332112021-02-26 13:49:03648 days 19 hrs ago0xe0fd63a531112710f0554bc9bac19a4858589b23 IN  Auctionity: Old Address0 Ether0.01486452110
0xa116b43944630062ad8c3bdcfcf8431563f300ff920ec695f9272ef9825d8e50Withdrawal Vouch...119332112021-02-26 13:49:03648 days 19 hrs ago0xe0fd63a531112710f0554bc9bac19a4858589b23 IN  Auctionity: Old Address0 Ether0.01486452110
0xc7950303bac324e1724781d1fa61ce2847b21a7e296d18ad37b936ef5c8c9371Withdrawal Vouch...119332112021-02-26 13:49:03648 days 19 hrs ago0xe0fd63a531112710f0554bc9bac19a4858589b23 IN  Auctionity: Old Address0 Ether0.01472938109
0x3d5f56f9c674aceb7496b56508aa9a226499071026daed64e3fe54b39de446ecWithdrawal Vouch...119332052021-02-26 13:47:14648 days 19 hrs ago0xe0fd63a531112710f0554bc9bac19a4858589b23 IN  Auctionity: Old Address0 Ether0.01486452110
0x47eb850fba40772da6c8d9c65899d3118355893c3c3196b0e854158fd6f1d305Withdrawal Vouch...119331992021-02-26 13:46:15648 days 19 hrs ago0xe0fd63a531112710f0554bc9bac19a4858589b23 IN  Auctionity: Old Address0 Ether0.01486452110
0xb69125015c3dbf67af8d26c2fb395c267f57a7b5b55fcfc81edbfd6af33906dfWithdrawal Vouch...119331992021-02-26 13:46:15648 days 19 hrs ago0xe0fd63a531112710f0554bc9bac19a4858589b23 IN  Auctionity: Old Address0 Ether0.01486452110
0x8852a6668071add0c0c80372f91271fbddd705c143a34aa055c98515e6f105efWithdrawal Vouch...119311432021-02-26 6:13:43649 days 3 hrs ago0xe0fd63a531112710f0554bc9bac19a4858589b23 IN  Auctionity: Old Address0 Ether0.01486452110
0x31b23f93b7e519f5a417dd1d17a279a9508706d311be5c742218ff52a58edb07Withdrawal Vouch...119311032021-02-26 6:06:17649 days 3 hrs ago0xe0fd63a531112710f0554bc9bac19a4858589b23 IN  Auctionity: Old Address0 Ether0.01486452110
0x7989da043b2987d41c40ebe856d072469f50ed4ebeb0261e59004720baa1f029Withdrawal Vouch...119311032021-02-26 6:06:17649 days 3 hrs ago0xe0fd63a531112710f0554bc9bac19a4858589b23 IN  Auctionity: Old Address0 Ether0.01486452110
0xafe0a7b966e50fa94c7d8ebfcdb4517dd467b212640e35e8ba5d10661a8eb0bdWithdrawal Vouch...119311032021-02-26 6:06:17649 days 3 hrs ago0xe0fd63a531112710f0554bc9bac19a4858589b23 IN  Auctionity: Old Address0 Ether0.01486056110
0x09bda5b2844e15c0d59c4e3f8ccf97bbc25ee793001a625807972977acc6ef60Withdrawal Vouch...119311032021-02-26 6:06:17649 days 3 hrs ago0xe0fd63a531112710f0554bc9bac19a4858589b23 IN  Auctionity: Old Address0 Ether0.0148632110
0x45137f00ef031081cd25d24ce2e93293276a3710ae2a7af8cb5da51fdfe5bd3dWithdrawal Vouch...119311032021-02-26 6:06:17649 days 3 hrs ago0xe0fd63a531112710f0554bc9bac19a4858589b23 IN  Auctionity: Old Address0 Ether0.0148632110
0x18a870d87d5358669c6c3c246413ea6c7f1da84fa97d7f8077526c2448e48743Withdrawal Vouch...119311032021-02-26 6:06:17649 days 3 hrs ago0xe0fd63a531112710f0554bc9bac19a4858589b23 IN  Auctionity: Old Address0 Ether0.01486188110
0x4302883cc20d099a6bdeeb564638f7e3b6fc838486a3f25b6fe136833453a469Withdrawal Vouch...119311032021-02-26 6:06:17649 days 3 hrs ago0xe0fd63a531112710f0554bc9bac19a4858589b23 IN  Auctionity: Old Address0 Ether0.0148632110
0x02f74603cc76b43079cd56083ae449d74a7d1a9aa5d16734634751b0637dc0b5Withdrawal Vouch...119311032021-02-26 6:06:17649 days 3 hrs ago0xe0fd63a531112710f0554bc9bac19a4858589b23 IN  Auctionity: Old Address0 Ether0.01486452110
0x8ee5526ac34f869341400dcf344dabe942d2012b9e26b491f1365680c37647eaWithdrawal Vouch...119268612021-02-25 14:22:31649 days 19 hrs ago0xe0fd63a531112710f0554bc9bac19a4858589b23 IN  Auctionity: Old Address0 Ether0.0148632110
0xd533048215b1812f4717b3015e1558d1fee164c150c8ffad7c0d1a41a68270edWithdrawal Vouch...119268612021-02-25 14:22:31649 days 19 hrs ago0xe0fd63a531112710f0554bc9bac19a4858589b23 IN  Auctionity: Old Address0 Ether0.01486452110
0x0c1424b5b1441c5fc62cc7a52f009441c5e585b9c61f634d6bc550d53c944505Withdrawal Vouch...119268612021-02-25 14:22:31649 days 19 hrs ago0xe0fd63a531112710f0554bc9bac19a4858589b23 IN  Auctionity: Old Address0 Ether0.01486452110
0x457c9bf9896d1203b088c83bb0c6f2fcc7b98e536f1daa8c3f100cb0c02a04f6Withdrawal Vouch...119268612021-02-25 14:22:31649 days 19 hrs ago0xe0fd63a531112710f0554bc9bac19a4858589b23 IN  Auctionity: Old Address0 Ether0.01486188110
0xf4c5c25171c5241279ec2e2738db12798aa45302a98a0bef89d839b6f48ccc94Withdrawal Vouch...119268612021-02-25 14:22:31649 days 19 hrs ago0xe0fd63a531112710f0554bc9bac19a4858589b23 IN  Auctionity: Old Address0 Ether0.01486452110
0x47cc3737ae5ea63b17c0cd0d52314c835acda3feaa7572014e8473c4a4b66a5eWithdrawal Vouch...119268612021-02-25 14:22:31649 days 19 hrs ago0xe0fd63a531112710f0554bc9bac19a4858589b23 IN  Auctionity: Old Address0 Ether0.01486188110
0xfb56371e0a70199b5cdab9860663b34938903c60d24c231f8babf8f1a36fecc3Withdrawal Vouch...119268612021-02-25 14:22:31649 days 19 hrs ago0xe0fd63a531112710f0554bc9bac19a4858589b23 IN  Auctionity: Old Address0 Ether0.01486188110
0x67cdb144eb4610e0db91130667d886a671bf160188735e66c77db6d9d266c04eWithdrawal Vouch...119264792021-02-25 12:53:34649 days 20 hrs ago0xe0fd63a531112710f0554bc9bac19a4858589b23 IN  Auctionity: Old Address0 Ether0.01486452110
0x8fb9b180dd545ff999858f3d016dfdf517ac891376eae6206417108687ce9720Withdrawal Vouch...119264792021-02-25 12:53:34649 days 20 hrs ago0xe0fd63a531112710f0554bc9bac19a4858589b23 IN  Auctionity: Old Address0 Ether0.0148632110
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x2753e7c701a44e5bcfe85ca66e31488a1a2be833b0e21067a7fad72bb8db5ada119332112021-02-26 13:49:03648 days 19 hrs ago Auctionity: Old Address0xfa60efdd0c8e25f033be82bc224b2d8a9d28a10f0.013467 Ether
0x475035653236b43ebc536594126bf2168054b1d81b4ff07b5345959d709e69f8119332112021-02-26 13:49:03648 days 19 hrs ago Auctionity: Old Address0xe7fd40e539e0f7308ee3c62de115c55d505187c00.027222 Ether
0xa116b43944630062ad8c3bdcfcf8431563f300ff920ec695f9272ef9825d8e50119332112021-02-26 13:49:03648 days 19 hrs ago Auctionity: Old Address0x04210269214da5c1a1d64f2cdc46e849a2a35f210.037831 Ether
0xc7950303bac324e1724781d1fa61ce2847b21a7e296d18ad37b936ef5c8c9371119332112021-02-26 13:49:03648 days 19 hrs ago Auctionity: Old Address0xa15a7581c66571d2270aba94656caf883223d7fc0.027217 Ether
0x3d5f56f9c674aceb7496b56508aa9a226499071026daed64e3fe54b39de446ec119332052021-02-26 13:47:14648 days 19 hrs ago Auctionity: Old Address0xdb5140af03eac0f56bf4bf8f095df3e296f023830.024274 Ether
0x47eb850fba40772da6c8d9c65899d3118355893c3c3196b0e854158fd6f1d305119331992021-02-26 13:46:15648 days 19 hrs ago Auctionity: Old Address0x5631e180017fdf20235bdf883f0d28f39ebf95110.014497 Ether
0xb69125015c3dbf67af8d26c2fb395c267f57a7b5b55fcfc81edbfd6af33906df119331992021-02-26 13:46:15648 days 19 hrs ago Auctionity: Old Address0x46a5e51232e9a99b09a3082cb04758839045b40c0.016661 Ether
0x8852a6668071add0c0c80372f91271fbddd705c143a34aa055c98515e6f105ef119311432021-02-26 6:13:43649 days 3 hrs ago Auctionity: Old Address0x1cefdf6a85d7c58d1baf09db0a91e5bc5302bcc40.029025 Ether
0x31b23f93b7e519f5a417dd1d17a279a9508706d311be5c742218ff52a58edb07119311032021-02-26 6:06:17649 days 3 hrs ago Auctionity: Old Address0x75ebf61dbbac2e12e7528de6335f9ec37290b6640.025214 Ether
0x7989da043b2987d41c40ebe856d072469f50ed4ebeb0261e59004720baa1f029119311032021-02-26 6:06:17649 days 3 hrs ago Auctionity: Old Address0x1c383aa8e9161dad98c876fd71a9eda02528b5580.027765 Ether
0xafe0a7b966e50fa94c7d8ebfcdb4517dd467b212640e35e8ba5d10661a8eb0bd119311032021-02-26 6:06:17649 days 3 hrs ago Auctionity: Old Address0xdcdaae7adf9a0d5e12850d67e0584ff531c037af0.031151 Ether
0x09bda5b2844e15c0d59c4e3f8ccf97bbc25ee793001a625807972977acc6ef60119311032021-02-26 6:06:17649 days 3 hrs ago Auctionity: Old Address0x23f8411ef96e2a08fe2b36ca95c22e46225a7a7d0.027448 Ether
0x45137f00ef031081cd25d24ce2e93293276a3710ae2a7af8cb5da51fdfe5bd3d119311032021-02-26 6:06:17649 days 3 hrs ago Auctionity: Old Address0x5826e9fd16eac6ed9a93fe27b5a6414e28eef38c0.01894 Ether
0x18a870d87d5358669c6c3c246413ea6c7f1da84fa97d7f8077526c2448e48743119311032021-02-26 6:06:17649 days 3 hrs ago Auctionity: Old Address0x9d052119741e39d4a1f72bc5fe82c012eb03ccb80.02432 Ether
0x4302883cc20d099a6bdeeb564638f7e3b6fc838486a3f25b6fe136833453a469119311032021-02-26 6:06:17649 days 3 hrs ago Auctionity: Old Address0x102445b329b34fa800e00197ad6c01459a5bb4b60.015739 Ether
0x02f74603cc76b43079cd56083ae449d74a7d1a9aa5d16734634751b0637dc0b5119311032021-02-26 6:06:17649 days 3 hrs ago Auctionity: Old Address0xbd3b56fa3c16490eff97a1a00923f0c6ba5f95080.051199 Ether
0x8ee5526ac34f869341400dcf344dabe942d2012b9e26b491f1365680c37647ea119268612021-02-25 14:22:31649 days 19 hrs ago Auctionity: Old Address0x6e5c7dff7f6a7352016889d4da95e1c7fe46c8ba0.032282 Ether
0xd533048215b1812f4717b3015e1558d1fee164c150c8ffad7c0d1a41a68270ed119268612021-02-25 14:22:31649 days 19 hrs ago Auctionity: Old Address0xe59d59f70c967306a5190e49a30cee2aae35309f0.029295 Ether
0x0c1424b5b1441c5fc62cc7a52f009441c5e585b9c61f634d6bc550d53c944505119268612021-02-25 14:22:31649 days 19 hrs ago Auctionity: Old Address0x22c4a71ff435390b7db6e4dd4b87f4fadcf4f2450.028445 Ether
0x457c9bf9896d1203b088c83bb0c6f2fcc7b98e536f1daa8c3f100cb0c02a04f6119268612021-02-25 14:22:31649 days 19 hrs ago Auctionity: Old Address0x2331dfbb0586f345ec17e370a217efcddc5f97200.030911 Ether
0xf4c5c25171c5241279ec2e2738db12798aa45302a98a0bef89d839b6f48ccc94119268612021-02-25 14:22:31649 days 19 hrs ago Auctionity: Old Address0x690882ba867ab2a9d7299f027a21ffe0d7edc69d0.033241 Ether
0x47cc3737ae5ea63b17c0cd0d52314c835acda3feaa7572014e8473c4a4b66a5e119268612021-02-25 14:22:31649 days 19 hrs ago Auctionity: Old Address0x68741039070bd674b020e2a398df003fa2ba9b9c0.04739 Ether
0xfb56371e0a70199b5cdab9860663b34938903c60d24c231f8babf8f1a36fecc3119268612021-02-25 14:22:31649 days 19 hrs ago Auctionity: Old Address0x65e2de7ff432e8de0a0b2f642d5af3d67c3200f70.03874 Ether
0x67cdb144eb4610e0db91130667d886a671bf160188735e66c77db6d9d266c04e119264792021-02-25 12:53:34649 days 20 hrs ago Auctionity: Old Address0x979f0f074e7e5edb528921b740d4a83af96c6c860.032894 Ether
0x8fb9b180dd545ff999858f3d016dfdf517ac891376eae6206417108687ce9720119264792021-02-25 12:53:34649 days 20 hrs ago Auctionity: Old Address0xe9cc6478c0703a3ca6abdc60a9fcf759dc0668140.018365 Ether
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
AuctionityDepositEth

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-09-26
*/

pragma solidity ^0.4.24;


/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */

library SafeMath {

  /**
  * @dev Multiplies two numbers, throws on overflow.
  */
  function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
    // Gas optimization: this is cheaper than asserting 'a' not being zero, but the
    // benefit is lost if 'b' is also tested.
    // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
    if (a == 0) {
      return 0;
    }

    c = a * b;
    assert(c / a == b);
    return c;
  }

  /**
  * @dev Integer division of two numbers, truncating the quotient.
  */
  function div(uint256 a, uint256 b) internal pure returns (uint256) {
    // assert(b > 0); // Solidity automatically throws when dividing by 0
    // uint256 c = a / b;
    // assert(a == b * c + a % b); // There is no case in which this doesn't hold
    return a / b;
  }

  /**
  * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
  */
  function sub(uint256 a, uint256 b) internal pure returns (uint256) {
    assert(b <= a);
    return a - b;
  }

  /**
  * @dev Adds two numbers, throws on overflow.
  */
  function add(uint256 a, uint256 b) internal pure returns (uint256 c) {
    c = a + b;
    assert(c >= a);
    return c;
  }
}

library RLPReader {
    uint8 constant STRING_SHORT_START = 0x80;
    uint8 constant STRING_LONG_START  = 0xb8;
    uint8 constant LIST_SHORT_START   = 0xc0;
    uint8 constant LIST_LONG_START    = 0xf8;

    uint8 constant WORD_SIZE = 32;

    struct RLPItem {
        uint len;
        uint memPtr;
    }

    /*
    * @param item RLP encoded bytes
    */
    function toRlpItem(bytes memory item) internal pure returns (RLPItem memory) {
        if (item.length == 0)
            return RLPItem(0, 0);

        uint memPtr;
        assembly {
            memPtr := add(item, 0x20)
        }

        return RLPItem(item.length, memPtr);
    }

    /*
    * @param item RLP encoded list in bytes
    */
    function toList(RLPItem memory item) internal pure returns (RLPItem[] memory result) {
        require(isList(item));

        uint items = numItems(item);
        result = new RLPItem[](items);

        uint memPtr = item.memPtr + _payloadOffset(item.memPtr);
        uint dataLen;
        for (uint i = 0; i < items; i++) {
            dataLen = _itemLength(memPtr);
            result[i] = RLPItem(dataLen, memPtr);
            memPtr = memPtr + dataLen;
        }
    }

    /*
    * Helpers
    */

    // @return indicator whether encoded payload is a list. negate this function call for isData.
    function isList(RLPItem memory item) internal pure returns (bool) {
        uint8 byte0;
        uint memPtr = item.memPtr;
        assembly {
            byte0 := byte(0, mload(memPtr))
        }

        if (byte0 < LIST_SHORT_START)
            return false;
        return true;
    }

    // @return number of payload items inside an encoded list.
    function numItems(RLPItem memory item) internal pure returns (uint) {
        uint count = 0;
        uint currPtr = item.memPtr + _payloadOffset(item.memPtr);
        uint endPtr = item.memPtr + item.len;
        while (currPtr < endPtr) {
            currPtr = currPtr + _itemLength(currPtr); // skip over an item
            count++;
        }

        return count;
    }

    // @return entire rlp item byte length
    function _itemLength(uint memPtr) internal pure returns (uint len) {
        uint byte0;
        assembly {
            byte0 := byte(0, mload(memPtr))
        }

        if (byte0 < STRING_SHORT_START)
            return 1;

        else if (byte0 < STRING_LONG_START)
            return byte0 - STRING_SHORT_START + 1;

        else if (byte0 < LIST_SHORT_START) {
            assembly {
                let byteLen := sub(byte0, 0xb7) // # of bytes the actual length is
                memPtr := add(memPtr, 1) // skip over the first byte

            /* 32 byte word size */
                let dataLen := div(mload(memPtr), exp(256, sub(32, byteLen))) // right shifting to get the len
                len := add(dataLen, add(byteLen, 1))
            }
        }

        else if (byte0 < LIST_LONG_START) {
            return byte0 - LIST_SHORT_START + 1;
        }

        else {
            assembly {
                let byteLen := sub(byte0, 0xf7)
                memPtr := add(memPtr, 1)

                let dataLen := div(mload(memPtr), exp(256, sub(32, byteLen))) // right shifting to the correct length
                len := add(dataLen, add(byteLen, 1))
            }
        }
    }

    // @return number of bytes until the data
    function _payloadOffset(uint memPtr) internal pure returns (uint) {
        uint byte0;
        assembly {
            byte0 := byte(0, mload(memPtr))
        }

        if (byte0 < STRING_SHORT_START)
            return 0;
        else if (byte0 < STRING_LONG_START || (byte0 >= LIST_SHORT_START && byte0 < LIST_LONG_START))
            return 1;
        else if (byte0 < LIST_SHORT_START)  // being explicit
            return byte0 - (STRING_LONG_START - 1) + 1;
        else
            return byte0 - (LIST_LONG_START - 1) + 1;
    }

    /** RLPItem conversions into data types **/

    function toBoolean(RLPItem memory item) internal pure returns (bool) {
        require(item.len == 1, "Invalid RLPItem. Booleans are encoded in 1 byte");
        uint result;
        uint memPtr = item.memPtr;
        assembly {
            result := byte(0, mload(memPtr))
        }

        return result == 0 ? false : true;
    }

    function toAddress(RLPItem memory item) internal pure returns (address) {
        // 1 byte for the length prefix according to RLP spec
        require(item.len == 21, "Invalid RLPItem. Addresses are encoded in 20 bytes");

        uint memPtr = item.memPtr + 1; // skip the length prefix
        uint addr;
        assembly {
            addr := div(mload(memPtr), exp(256, 12)) // right shift 12 bytes. we want the most significant 20 bytes
        }

        return address(addr);
    }

    function toUint(RLPItem memory item) internal pure returns (uint) {
        uint offset = _payloadOffset(item.memPtr);
        uint len = item.len - offset;
        uint memPtr = item.memPtr + offset;

        uint result;
        assembly {
            result := div(mload(memPtr), exp(256, sub(32, len))) // shift to the correct location
        }

        return result;
    }

    function toBytes(RLPItem memory item) internal pure returns (bytes) {
        uint offset = _payloadOffset(item.memPtr);
        uint len = item.len - offset; // data length
        bytes memory result = new bytes(len);

        uint destPtr;
        assembly {
            destPtr := add(0x20, result)
        }

        copy(item.memPtr + offset, destPtr, len);
        return result;
    }


    /*
    * @param src Pointer to source
    * @param dest Pointer to destination
    * @param len Amount of memory to copy from the source
    */
    function copy(uint src, uint dest, uint len) internal pure {
        // copy as many word sizes as possible
        for (; len >= WORD_SIZE; len -= WORD_SIZE) {
            assembly {
                mstore(dest, mload(src))
            }

            src += WORD_SIZE;
            dest += WORD_SIZE;
        }

        // left over bytes
        uint mask = 256 ** (WORD_SIZE - len) - 1;
        assembly {
            let srcpart := and(mload(src), not(mask)) // zero out src
            let destpart := and(mload(dest), mask) // retrieve the bytes
            mstore(dest, or(destpart, srcpart))
        }
    }
}

library RLPWriter {
    function toRlp(bytes memory _value) internal pure returns (bytes memory _bytes) {
        uint _valuePtr;
        uint _rplPtr;
        uint _valueLength = _value.length;

        assembly {
            _valuePtr := add(_value, 0x20)
            _bytes := mload(0x40)                   // Free memory ptr
            _rplPtr := add(_bytes, 0x20)            // RLP first byte ptr
        }

        // [0x00, 0x7f]
        if (_valueLength == 1 && _value[0] <= 0x7f) {
            assembly {
                mstore(_bytes, 1)                   // Bytes size is 1
                mstore(_rplPtr, mload(_valuePtr))  // Set value as-is
                mstore(0x40, add(_rplPtr, 1))       // Update free ptr
            }
            return;
        }

        // [0x80, 0xb7]
        if (_valueLength <= 55) {
            assembly {
                mstore(_bytes, add(1, _valueLength))            // Bytes size
                mstore8(_rplPtr, add(0x80, _valueLength))       // RLP small string size
                mstore(0x40, add(add(_rplPtr, 1), _valueLength)) // Update free ptr
            }

            copy(_valuePtr, _rplPtr + 1, _valueLength);
            return;
        }

        // [0xb8, 0xbf]
        uint _lengthSize = uintMinimalSize(_valueLength);

        assembly {
            mstore(_bytes, add(add(1, _lengthSize), _valueLength))  // Bytes size
            mstore8(_rplPtr, add(0xb7, _lengthSize))                // RLP long string "size size"
            mstore(add(_rplPtr, 1), mul(_valueLength, exp(256, sub(32, _lengthSize)))) // Bitshift to store the length only _lengthSize bytes
            mstore(0x40, add(add(add(_rplPtr, 1), _lengthSize), _valueLength))  // Update free ptr
        }

        copy(_valuePtr, _rplPtr + 1 + _lengthSize, _valueLength);
        return;
    }

    function toRlp(uint _value) internal pure returns (bytes memory _bytes) {
        uint _size = uintMinimalSize(_value);

        bytes memory _valueBytes = new bytes(_size);

        assembly {
            mstore(add(_valueBytes, 0x20), mul(_value, exp(256, sub(32, _size))))
        }

        return toRlp(_valueBytes);
    }

    function toRlp(bytes[] memory _values) internal pure returns (bytes memory _bytes) {
        uint _ptr;
        uint _size;
        uint i;

        // compute data size
        for(; i < _values.length; ++i)
            _size += _values[i].length;

        // create rlp header
        assembly {
            _bytes := mload(0x40)
            _ptr := add(_bytes, 0x20)
        }

        if (_size <= 55) {
            assembly {
                mstore8(_ptr, add(0xc0, _size))
                _ptr := add(_ptr, 1)
            }
        } else {
            uint _size2 = uintMinimalSize(_size);

            assembly {
                mstore8(_ptr, add(0xf7, _size2))
                _ptr := add(_ptr, 1)
                mstore(_ptr, mul(_size, exp(256, sub(32, _size2))))
                _ptr := add(_ptr, _size2)
            }
        }

        // copy data
        for(i = 0; i < _values.length; ++i) {
            bytes memory _val = _values[i];
            uint _valPtr;

            assembly {
                _valPtr := add(_val, 0x20)
            }

            copy(_valPtr, _ptr, _val.length);

            _ptr += _val.length;
        }

        assembly {
            mstore(0x40, _ptr)
            mstore(_bytes, sub(sub(_ptr, _bytes), 0x20))
        }
    }

    function uintMinimalSize(uint _value) internal pure returns (uint _size) {
        for (; _value != 0; _size++)
            _value /= 256;
    }

    /*
    * @param src Pointer to source
    * @param dest Pointer to destination
    * @param len Amount of memory to copy from the source
    */
    function copy(uint src, uint dest, uint len) internal pure {
        // copy as many word sizes as possible
        for (; len >= 32; len -= 32) {
            assembly {
                mstore(dest, mload(src))
            }

            src += 32;
            dest += 32;
        }

        // left over bytes
        uint mask = 256 ** (32 - len) - 1;
        assembly {
            let srcpart := and(mload(src), not(mask)) // zero out src
            let destpart := and(mload(dest), mask) // retrieve the bytes
            mstore(dest, or(destpart, srcpart))
        }
    }
}


library AuctionityLibraryDecodeRawTx {

    using RLPReader for RLPReader.RLPItem;
    using RLPReader for bytes;

    function decodeRawTxGetBiddingInfo(bytes memory _signedRawTxBidding, uint8 _chainId) internal pure returns (bytes32 _hashRawTxTokenTransfer, address _auctionContractAddress, uint256 _bidAmount, address _signerBid) {

        bytes memory _auctionBidlData;
        RLPReader.RLPItem[] memory _signedRawTxBiddingRLPItem = _signedRawTxBidding.toRlpItem().toList();

        _auctionContractAddress = _signedRawTxBiddingRLPItem[3].toAddress();
        _auctionBidlData = _signedRawTxBiddingRLPItem[5].toBytes();

        bytes4 _selector;
        assembly { _selector := mload(add(_auctionBidlData,0x20))}

        _signerBid = getSignerFromSignedRawTxRLPItemp(_signedRawTxBiddingRLPItem,_chainId);

        // 0x1d03ae68 : bytes4(keccak256('bid(uint256,address,bytes32)'))
        if(_selector == 0x1d03ae68 ) {

            assembly {
                _bidAmount := mload(add(_auctionBidlData,add(4,0x20)))
                _hashRawTxTokenTransfer := mload(add(_auctionBidlData,add(68,0x20)))
            }

        }

    }



    function decodeRawTxGetCreateAuctionInfo(bytes memory _signedRawTxCreateAuction, uint8 _chainId) internal pure returns (
        bytes32 _tokenHash,
        address _auctionFactoryContractAddress,
        address _signerCreate,
        address _tokenContractAddress,
        uint256 _tokenId,
        uint8 _rewardPercent
    ) {

        bytes memory _createAuctionlData;
        RLPReader.RLPItem[] memory _signedRawTxCreateAuctionRLPItem = _signedRawTxCreateAuction.toRlpItem().toList();


        _auctionFactoryContractAddress = _signedRawTxCreateAuctionRLPItem[3].toAddress();
        _createAuctionlData = _signedRawTxCreateAuctionRLPItem[5].toBytes();


        _signerCreate = getSignerFromSignedRawTxRLPItemp(_signedRawTxCreateAuctionRLPItem,_chainId);

        bytes memory _signedRawTxTokenTransfer;

        (_signedRawTxTokenTransfer, _tokenContractAddress,_tokenId,_rewardPercent) = decodeRawTxGetCreateAuctionInfoData( _createAuctionlData);



        _tokenHash = keccak256(_signedRawTxTokenTransfer);

    }

    function decodeRawTxGetCreateAuctionInfoData(bytes memory _createAuctionlData) internal pure returns(
        bytes memory _signedRawTxTokenTransfer,
        address _tokenContractAddress,
        uint256 _tokenId,
        uint8 _rewardPercent
    ) {
        bytes4 _selector;
        assembly { _selector := mload(add(_createAuctionlData,0x20))}

        uint _positionOfSignedRawTxTokenTransfer;
        uint _sizeOfSignedRawTxTokenTransfer;

        // 0xffd6d828 : bytes4(keccak256('create(bytes,address,uint256,bytes,address,uint8)'))
        if(_selector == 0xffd6d828) {

            assembly {
                _positionOfSignedRawTxTokenTransfer := mload(add(_createAuctionlData,add(4,0x20)))
                _sizeOfSignedRawTxTokenTransfer := mload(add(_createAuctionlData,add(add(_positionOfSignedRawTxTokenTransfer,4),0x20)))

            // tokenContractAddress : get 2th param
                _tokenContractAddress := mload(add(_createAuctionlData,add(add(mul(1,32),4),0x20)))
            // tockenId : get 3th param
                _tokenId := mload(add(_createAuctionlData,add(add(mul(2,32),4),0x20)))
            // rewardPercent : get 6th param
                _rewardPercent := mload(add(_createAuctionlData,add(add(mul(5,32),4),0x20)))

            }

            _signedRawTxTokenTransfer = new bytes(_sizeOfSignedRawTxTokenTransfer);

            for (uint i = 0; i < _sizeOfSignedRawTxTokenTransfer; i++) {
                _signedRawTxTokenTransfer[i] = _createAuctionlData[i + _positionOfSignedRawTxTokenTransfer + 4 + 32 ];
            }

        }

    }

    function ecrecoverSigner(
        bytes32 _hashTx,
        bytes _rsvTx,
        uint offset
    ) internal pure returns (address ecrecoverAddress){

        bytes32 r;
        bytes32 s;
        bytes1 v;

        assembly {
            r := mload(add(_rsvTx,add(offset,0x20)))
            s := mload(add(_rsvTx,add(offset,0x40)))
            v := mload(add(_rsvTx,add(offset,0x60)))
        }

        ecrecoverAddress = ecrecover(
            _hashTx,
            uint8(v),
            r,
            s
        );
    }



    function decodeRawTxGetWithdrawalInfo(bytes memory _signedRawTxWithdrawal, uint8 _chainId) internal pure returns (address withdrawalSigner, uint256 withdrawalAmount) {

        bytes4 _selector;
        bytes memory _withdrawalData;
        RLPReader.RLPItem[] memory _signedRawTxWithdrawalRLPItem = _signedRawTxWithdrawal.toRlpItem().toList();

        _withdrawalData = _signedRawTxWithdrawalRLPItem[5].toBytes();

        assembly { _selector := mload(add(_withdrawalData,0x20))}

        withdrawalSigner = getSignerFromSignedRawTxRLPItemp(_signedRawTxWithdrawalRLPItem,_chainId);

        // 0x835fc6ca : bytes4(keccak256('withdrawal(uint256)'))
        if(_selector == 0x835fc6ca ) {

            assembly {
                withdrawalAmount := mload(add(_withdrawalData,add(4,0x20)))
            }

        }

    }



    function getSignerFromSignedRawTxRLPItemp(RLPReader.RLPItem[] memory _signedTxRLPItem, uint8 _chainId) internal pure returns (address ecrecoverAddress) {
        bytes memory _rawTx;
        bytes memory _rsvTx;

        (_rawTx, _rsvTx ) = explodeSignedRawTxRLPItem(_signedTxRLPItem, _chainId);
        return ecrecoverSigner(keccak256(_rawTx), _rsvTx,0);
    }

    function explodeSignedRawTxRLPItem(RLPReader.RLPItem[] memory _signedTxRLPItem, uint8 _chainId) internal pure returns (bytes memory _rawTx,bytes memory _rsvTx){

        bytes[] memory _signedTxRLPItemRaw = new bytes[](9);

        _signedTxRLPItemRaw[0] = RLPWriter.toRlp(_signedTxRLPItem[0].toBytes());
        _signedTxRLPItemRaw[1] = RLPWriter.toRlp(_signedTxRLPItem[1].toBytes());
        _signedTxRLPItemRaw[2] = RLPWriter.toRlp(_signedTxRLPItem[2].toBytes());
        _signedTxRLPItemRaw[3] = RLPWriter.toRlp(_signedTxRLPItem[3].toBytes());
        _signedTxRLPItemRaw[4] = RLPWriter.toRlp(_signedTxRLPItem[4].toBytes());
        _signedTxRLPItemRaw[5] = RLPWriter.toRlp(_signedTxRLPItem[5].toBytes());

        _signedTxRLPItemRaw[6] = RLPWriter.toRlp(_chainId);
        _signedTxRLPItemRaw[7] = RLPWriter.toRlp(0);
        _signedTxRLPItemRaw[8] = RLPWriter.toRlp(0);

        _rawTx = RLPWriter.toRlp(_signedTxRLPItemRaw);

        uint8 i;
        _rsvTx = new bytes(65);

        bytes32 tmp = bytes32(_signedTxRLPItem[7].toUint());
        for (i = 0; i < 32; i++) {
            _rsvTx[i] = tmp[i];
        }

        tmp = bytes32(_signedTxRLPItem[8].toUint());

        for (i = 0; i < 32; i++) {
            _rsvTx[i + 32] = tmp[i];
        }

        _rsvTx[64] = bytes1(_signedTxRLPItem[6].toUint() - uint(_chainId * 2) - 8);

    }

}
library AuctionityLibraryDeposit{

    function sendTransfer(address _tokenContractAddress, bytes memory _transfer, uint _offset) internal returns (bool){

        if(!isContract(_tokenContractAddress)){
            return false;
        }

        uint8 _numberOfTransfer = uint8(_transfer[_offset]);

        _offset += 1;

        bool _success;
        for (uint8 i = 0; i < _numberOfTransfer; i++){
            (_offset,_success) = decodeTransferCall(_tokenContractAddress, _transfer,_offset);
            
            if(!_success) {
                return false;
            }
        }

        return true;

    }

    function decodeTransferCall(address _tokenContractAddress, bytes memory _transfer, uint _offset) internal returns (uint, bool) {


        bytes memory _sizeOfCallBytes;
        bytes memory _callData;

        uint _sizeOfCallUint;

        if(_transfer[_offset] == 0xb8) {
            _sizeOfCallBytes = new bytes(1);
            _sizeOfCallBytes[0] = bytes1(_transfer[_offset + 1]);

            _offset+=2;
        }
        if(_transfer[_offset] == 0xb9) {

            _sizeOfCallBytes = new bytes(2);
            _sizeOfCallBytes[0] = bytes1(_transfer[_offset + 1]);
            _sizeOfCallBytes[1] = bytes1(_transfer[_offset + 2]);
            _offset+=3;
        }

        _sizeOfCallUint = bytesToUint(_sizeOfCallBytes);

        _callData = new bytes(_sizeOfCallUint);
        for (uint j = 0; j < _sizeOfCallUint; j++) {
            _callData[j] = _transfer[(j + _offset)];
        }

        _offset+=_sizeOfCallUint;

        return (_offset, sendCallData(_tokenContractAddress, _sizeOfCallUint, _callData));


    }

    function sendCallData(address _tokenContractAddress, uint _sizeOfCallUint, bytes memory _callData) internal returns (bool) {

        bool _success;
        bytes4 sig;

        assembly {

            let _ptr := mload(0x40)
            sig := mload(add(_callData,0x20))

            mstore(_ptr,sig) //Place signature at begining of empty storage
            for { let i := 0x04 } lt(i, _sizeOfCallUint) { i := add(i, 0x20) } {
                mstore(add(_ptr,i),mload(add(_callData,add(0x20,i)))) //Add each param
            }


            _success := call(      //This is the critical change (Pop the top stack value)
            sub (gas, 10000), // gas
            _tokenContractAddress, //To addr
            0,    //No value
            _ptr,    //Inputs are stored at location _ptr
            _sizeOfCallUint, //Inputs _size
            _ptr,    //Store output over input (saves space)
            0x20) //Outputs are 32 bytes long

        }

        return _success;
    }

    
    function isContract(address _contractAddress) internal view returns (bool) {
        uint _size;
        assembly { _size := extcodesize(_contractAddress) }
        return _size > 0;
    }

    function bytesToUint(bytes b) internal pure returns (uint256){
        uint256 _number;
        for(uint i=0;i<b.length;i++){
            _number = _number + uint(b[i])*(2**(8*(b.length-(i+1))));
        }
        return _number;
    }

}

contract AuctionityDepositEth {
    using SafeMath for uint256;

    string public version = "deposit-eth-v1";

    address public owner;
    address public oracle;
    uint8 public ethereumChainId;
    uint8 public auctionityChainId;
    bool public migrationLock;
    bool public maintenanceLock;

    mapping (address => uint256) public depotEth;  // Depot for users (concatenate struct into uint256)

    bytes32[] public withdrawalVoucherList;                     // List of withdrawal voucher
    mapping (bytes32 => bool) public withdrawalVoucherSubmitted; // is withdrawal voucher is already submitted

    bytes32[] public auctionEndVoucherList;                     // List of auction end voucher
    mapping (bytes32 => bool) public auctionEndVoucherSubmitted; // is auction end voucher is already submitted

    struct InfoFromCreateAuction {
        bytes32 tokenHash;
        address tokenContractAddress;
        address auctionSeller;
        uint8 rewardPercent;
        uint256 tokenId;
    }

    struct InfoFromBidding {
        address auctionContractAddress;
        address signer;
        uint256 amount;
    }

    // events
    event LogDeposed(address user, uint256 amount);
    event LogWithdrawalVoucherSubmitted(address user, uint256 amount, bytes32 withdrawalVoucherHash);

    event LogAuctionEndVoucherSubmitted(
        bytes32 tokenHash,
        address tokenContractAddress,
        uint256 tokenId,
        address indexed seller,
        address indexed winner,
        uint256 amount,
        bytes32 auctionEndVoucherHash
    );
    event LogSentEthToWinner(address auction, address user, uint256 amount);
    event LogSentEthToAuctioneer(address auction, address user, uint256 amount);
    event LogSentDepotEth(address user, uint256 amount);
    event LogSentRewardsDepotEth(address[] user, uint256[] amount);

    event LogError(string version,string error);
    event LogErrorWithData(string version, string error, bytes32[] data);


    constructor(uint8 _ethereumChainId, uint8 _auctionityChainId) public {
        ethereumChainId = _ethereumChainId;
        auctionityChainId = _auctionityChainId;
        owner = msg.sender;
    }

    // Modifier
    modifier isOwner() {
        require(msg.sender == owner, "Sender must be owner");
        _;
    }

    modifier isOracle() {
        require(msg.sender == oracle, "Sender must be oracle");
        _;
    }

    function setOracle(address _oracle) public isOwner {
        oracle = _oracle;
    }

    modifier migrationLockable() {
        require(!migrationLock || msg.sender == owner, "MIGRATION_LOCKED");
        _;
    }

    function setMigrationLock(bool _lock) public isOwner {
        migrationLock = _lock;
    }

    modifier maintenanceLockable() {
        require(!maintenanceLock || msg.sender == owner, "MAINTENANCE_LOCKED");
        _;
    } 

    function setMaintenanceLock(bool _lock) public isOwner {
        maintenanceLock = _lock;
    }

    // add depot from user
    function addDepotEth(address _user, uint256 _amount) private returns (bool) {
        depotEth[_user] = depotEth[_user].add(_amount);
        return true;
    }

    // sub depot from user
    function subDepotEth(address _user, uint256 _amount) private returns (bool) {
        if(depotEth[_user] < _amount){
            return false;
        }

        depotEth[_user] = depotEth[_user].sub(_amount);
        return true;
    }

    // get amount of user's deposit
    function getDepotEth(address _user) public view returns(uint256 _amount) {
        return depotEth[_user];
    }

    // fallback payable function , with revert if is deactivated
    function() public payable {
        return depositEth();
    }

    // payable deposit eth
    function depositEth() public payable migrationLockable maintenanceLockable {
        bytes32[] memory _errorData;
        uint256 _amount = uint256(msg.value);
        require(_amount > 0, "Amount must be greater than 0");

        if(!addDepotEth(msg.sender, _amount)) {
            _errorData = new bytes32[](1);
            _errorData[0] = bytes32(_amount);
            emit LogErrorWithData(version, "DEPOSED_ADD_DATA_FAILED", _errorData);
            return;
        }

        emit LogDeposed(msg.sender, _amount);
    }

    /**
     * withdraw
     * @dev Param
     *      bytes32 r ECDSA signature
     *      bytes32 s ECDSA signature
     *      uint8 v ECDSA signature
     *      address user
     *      uint256 amount
     *      bytes32 key : anti replay
     * @dev Log
     *      LogWithdrawalVoucherSubmitted : successful
     */
    function withdrawalVoucher(
        bytes memory _data,
        bytes memory _signedRawTxWithdrawal
    ) public maintenanceLockable {
        bytes32 _withdrawalVoucherHash = keccak256(_signedRawTxWithdrawal);

        // if withdrawal voucher is already submitted
        if(withdrawalVoucherSubmitted[_withdrawalVoucherHash] == true) {
            emit LogError(version, "WITHDRAWAL_VOUCHER_ALREADY_SUBMITED");
            return;
        }

        address _withdrawalSigner;
        uint _withdrawalAmount;

        (_withdrawalSigner, _withdrawalAmount) = AuctionityLibraryDecodeRawTx.decodeRawTxGetWithdrawalInfo(_signedRawTxWithdrawal, auctionityChainId);
        
        if(_withdrawalAmount == uint256(0)) {
            emit LogError(version,'WITHDRAWAL_VOUCHER_AMOUNT_INVALID');
            return;
        }

        if(_withdrawalSigner == address(0)) {
            emit LogError(version,'WITHDRAWAL_VOUCHER_SIGNER_INVALID');
            return;
        }

        // if depot is smaller than amount
        if(depotEth[_withdrawalSigner] < _withdrawalAmount) {
            emit LogError(version,'WITHDRAWAL_VOUCHER_DEPOT_AMOUNT_TOO_LOW');
            return;
        }

        if(!withdrawalVoucherOracleSignatureVerification(_data, _withdrawalSigner, _withdrawalAmount, _withdrawalVoucherHash)) {
            emit LogError(version,'WITHDRAWAL_VOUCHER_ORACLE_INVALID_SIGNATURE');
            return;
        }

        // send amount
        if(!_withdrawalSigner.send(_withdrawalAmount)) {
            emit LogError(version, "WITHDRAWAL_VOUCHER_ETH_TRANSFER_FAILED");
            return;
        }

        subDepotEth(_withdrawalSigner,_withdrawalAmount);

        withdrawalVoucherList.push(_withdrawalVoucherHash);
        withdrawalVoucherSubmitted[_withdrawalVoucherHash] = true;

        emit LogWithdrawalVoucherSubmitted(_withdrawalSigner,_withdrawalAmount, _withdrawalVoucherHash);
    }

    function withdrawalVoucherOracleSignatureVerification(
        bytes memory _data,
        address _withdrawalSigner,
        uint256 _withdrawalAmount,
        bytes32 _withdrawalVoucherHash
    ) internal view returns (bool)
    {

        // if oracle is the signer of this auction end voucher
        return oracle == AuctionityLibraryDecodeRawTx.ecrecoverSigner(
            keccak256(
                abi.encodePacked(
                    "\x19Ethereum Signed Message:\n32",
                    keccak256(
                        abi.encodePacked(
                            address(this),
                            _withdrawalSigner,
                            _withdrawalAmount,
                            _withdrawalVoucherHash
                        )
                    )
                )
            ),
            _data,
            0
        );
    }

    /**
     * auctionEndVoucher
     * @dev Param
     *      bytes _data is a  concatenate of :
     *            bytes64 biddingHashProof
     *            bytes130 rsv ECDSA signature of oracle validation AEV
     *            bytes transfer token
     *      bytes _signedRawTxCreateAuction raw transaction with rsv of bidding transaction on auction smart contract
     *      bytes _signedRawTxBidding raw transaction with rsv of bidding transaction on auction smart contract
     *      bytes _send list of sending eth
     * @dev Log
     *      LogAuctionEndVoucherSubmitted : successful
     */

    function auctionEndVoucher(
        bytes memory _data,
        bytes memory _signedRawTxCreateAuction,
        bytes memory _signedRawTxBidding,
        bytes memory _send
    ) public maintenanceLockable {
        bytes32 _auctionEndVoucherHash = keccak256(_signedRawTxCreateAuction);
        // if auction end voucher is already submitted
        if(auctionEndVoucherSubmitted[_auctionEndVoucherHash] == true) {
            emit LogError(version, "AUCTION_END_VOUCHER_ALREADY_SUBMITED");
            return;
        }

        InfoFromCreateAuction memory _infoFromCreateAuction = getInfoFromCreateAuction(_signedRawTxCreateAuction);

        address _auctionContractAddress;
        address _winnerSigner;
        uint256 _winnerAmount;

        InfoFromBidding memory _infoFromBidding;

        if(_signedRawTxBidding.length > 1) {
            _infoFromBidding = getInfoFromBidding(_signedRawTxBidding, _infoFromCreateAuction.tokenHash);

            if(!verifyWinnerDepot(_infoFromBidding)) {
                return;
            }
        }

        if(!auctionEndVoucherOracleSignatureVerification(
            _data,
            keccak256(_send),
            _infoFromCreateAuction,
            _infoFromBidding
        )) {
            emit LogError(version, "AUCTION_END_VOUCHER_ORACLE_INVALID_SIGNATURE");
            return;
        }

        if(!AuctionityLibraryDeposit.sendTransfer(_infoFromCreateAuction.tokenContractAddress, _data, 97)){
            if(_data[97] > 0x01) {// if more than 1 transfer function to call
                revert("More than one transfer function to call");
            } else {
                emit LogError(version, "AUCTION_END_VOUCHER_TRANSFER_FAILED");
                return;
            }
        }

        if(_signedRawTxBidding.length > 1) {
            if(!sendExchange(_send, _infoFromCreateAuction, _infoFromBidding)) {
                return;
            }
        }


        auctionEndVoucherList.push(_auctionEndVoucherHash);
        auctionEndVoucherSubmitted[_auctionEndVoucherHash] = true;
        emit LogAuctionEndVoucherSubmitted(
            _infoFromCreateAuction.tokenHash,
            _infoFromCreateAuction.tokenContractAddress,
            _infoFromCreateAuction.tokenId,
            _infoFromCreateAuction.auctionSeller,
            _infoFromBidding.signer,
            _infoFromBidding.amount,
            _auctionEndVoucherHash
        );
    }

    function getInfoFromCreateAuction(bytes _signedRawTxCreateAuction) internal view returns
        (InfoFromCreateAuction memory _infoFromCreateAuction)
    {
        (
            _infoFromCreateAuction.tokenHash,
            ,
            _infoFromCreateAuction.auctionSeller,
            _infoFromCreateAuction.tokenContractAddress,
            _infoFromCreateAuction.tokenId,
            _infoFromCreateAuction.rewardPercent
        ) = AuctionityLibraryDecodeRawTx.decodeRawTxGetCreateAuctionInfo(_signedRawTxCreateAuction,auctionityChainId);
    }

    function getInfoFromBidding(bytes _signedRawTxBidding, bytes32 _hashSignedRawTxTokenTransfer) internal returns (InfoFromBidding memory _infoFromBidding) {
        bytes32 _hashRawTxTokenTransferFromBid;

        (
            _hashRawTxTokenTransferFromBid,
            _infoFromBidding.auctionContractAddress,
            _infoFromBidding.amount,
            _infoFromBidding.signer
        ) = AuctionityLibraryDecodeRawTx.decodeRawTxGetBiddingInfo(_signedRawTxBidding,auctionityChainId);

        if(_hashRawTxTokenTransferFromBid != _hashSignedRawTxTokenTransfer) {
            emit LogError(version, "AUCTION_END_VOUCHER_hashRawTxTokenTransfer_INVALID");
            return;
        }

        if(_infoFromBidding.amount == uint256(0)){
            emit LogError(version, "AUCTION_END_VOUCHER_BIDDING_AMOUNT_INVALID");
            return;
        }

    }    

    function verifyWinnerDepot(InfoFromBidding memory _infoFromBidding) internal returns(bool) {
        // if depot is smaller than amount
        if(depotEth[_infoFromBidding.signer] < _infoFromBidding.amount) {
            emit LogError(version, "AUCTION_END_VOUCHER_DEPOT_AMOUNT_TOO_LOW");
            return false;
        }

        return true;
    }

    function sendExchange(
        bytes memory _send,
        InfoFromCreateAuction memory _infoFromCreateAuction,
        InfoFromBidding memory _infoFromBidding
    ) internal returns(bool) {
        if(!subDepotEth(_infoFromBidding.signer, _infoFromBidding.amount)){
            emit LogError(version, "AUCTION_END_VOUCHER_DEPOT_AMOUNT_TOO_LOW");
            return false;
        }

        uint offset;
        address _sendAddress;
        uint256 _sendAmount;
        bytes12 _sendAmountGwei;
        uint256 _sentAmount;

        assembly {
            _sendAddress := mload(add(_send,add(offset,0x14)))
            _sendAmount := mload(add(_send,add(add(offset,20),0x20)))
        }

        if(_sendAddress != _infoFromCreateAuction.auctionSeller){
            emit LogError(version, "AUCTION_END_VOUCHER_SEND_TO_SELLER_INVALID");
            return false;
        }

        _sentAmount += _sendAmount;
        offset += 52;

        if(!_sendAddress.send(_sendAmount)) {
            revert("Failed to send funds");
        }

        emit LogSentEthToWinner(_infoFromBidding.auctionContractAddress, _sendAddress, _sendAmount);

        if(_infoFromCreateAuction.rewardPercent > 0) {
            assembly {
                _sendAddress := mload(add(_send,add(offset,0x14)))
                _sendAmount := mload(add(_send,add(add(offset,20),0x20)))
            }

            _sentAmount += _sendAmount;
            offset += 52;

            if(!_sendAddress.send(_sendAmount)) {
                revert("Failed to send funds");
            }

            emit LogSentEthToAuctioneer(_infoFromBidding.auctionContractAddress, _sendAddress, _sendAmount);

            bytes2 _numberOfSendDepositBytes2;
            assembly {
                _numberOfSendDepositBytes2 := mload(add(_send,add(offset,0x20)))
            }

            offset += 2;

            address[] memory _rewardsAddress = new address[](uint16(_numberOfSendDepositBytes2));
            uint256[] memory _rewardsAmount = new uint256[](uint16(_numberOfSendDepositBytes2));

            for (uint16 i = 0; i < uint16(_numberOfSendDepositBytes2); i++){

                assembly {
                    _sendAddress := mload(add(_send,add(offset,0x14)))
                    _sendAmountGwei := mload(add(_send,add(add(offset,20),0x20)))
                }

                _sendAmount = uint96(_sendAmountGwei) * 1000000000;
                _sentAmount += _sendAmount;
                offset += 32;

                if(!addDepotEth(_sendAddress, _sendAmount)) {
                    revert("Can't add deposit");
                }

                _rewardsAddress[i] = _sendAddress;
                _rewardsAmount[i] = uint256(_sendAmount);
            }

            emit LogSentRewardsDepotEth(_rewardsAddress, _rewardsAmount);
        }

        if(uint256(_infoFromBidding.amount) != _sentAmount) {
            revert("Bidding amount is not equal to sent amount");
        }

        return true;
    }

    function getTransferDataHash(bytes memory _data) internal returns (bytes32 _transferDataHash){
        bytes memory _transferData = new bytes(_data.length - 97);

        for (uint i = 0; i < (_data.length - 97); i++) {
            _transferData[i] = _data[i + 97];
        }
        return keccak256(_transferData);

    }

    function auctionEndVoucherOracleSignatureVerification(
        bytes memory _data,
        bytes32 _sendDataHash,
        InfoFromCreateAuction memory _infoFromCreateAuction,
        InfoFromBidding memory _infoFromBidding
    ) internal returns (bool) {
        bytes32 _biddingHashProof;
        assembly { _biddingHashProof := mload(add(_data,add(0,0x20))) }

        bytes32 _transferDataHash = getTransferDataHash(_data);

        // if oracle is the signer of this auction end voucher
        return oracle == AuctionityLibraryDecodeRawTx.ecrecoverSigner(
            keccak256(
                abi.encodePacked(
                    "\x19Ethereum Signed Message:\n32",
                    keccak256(
                        abi.encodePacked(
                            address(this),
                            _infoFromCreateAuction.tokenContractAddress,
                            _infoFromCreateAuction.tokenId,
                            _infoFromCreateAuction.auctionSeller,
                            _infoFromBidding.signer,
                            _infoFromBidding.amount,
                            _biddingHashProof,
                            _infoFromCreateAuction.rewardPercent,
                            _transferDataHash,
                            _sendDataHash
                        )
                    )
                )
            ),
            _data,
            32
        );

    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"ethereumChainId","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"auctionEndVoucherSubmitted","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_user","type":"address"}],"name":"getDepotEth","outputs":[{"name":"_amount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"migrationLock","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"depositEth","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"version","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_data","type":"bytes"},{"name":"_signedRawTxWithdrawal","type":"bytes"}],"name":"withdrawalVoucher","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"depotEth","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maintenanceLock","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"auctionEndVoucherList","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_oracle","type":"address"}],"name":"setOracle","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"oracle","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_data","type":"bytes"},{"name":"_signedRawTxCreateAuction","type":"bytes"},{"name":"_signedRawTxBidding","type":"bytes"},{"name":"_send","type":"bytes"}],"name":"auctionEndVoucher","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"withdrawalVoucherSubmitted","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"auctionityChainId","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"withdrawalVoucherList","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_lock","type":"bool"}],"name":"setMaintenanceLock","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_lock","type":"bool"}],"name":"setMigrationLock","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_ethereumChainId","type":"uint8"},{"name":"_auctionityChainId","type":"uint8"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"user","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"LogDeposed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"user","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"withdrawalVoucherHash","type":"bytes32"}],"name":"LogWithdrawalVoucherSubmitted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"tokenHash","type":"bytes32"},{"indexed":false,"name":"tokenContractAddress","type":"address"},{"indexed":false,"name":"tokenId","type":"uint256"},{"indexed":true,"name":"seller","type":"address"},{"indexed":true,"name":"winner","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"auctionEndVoucherHash","type":"bytes32"}],"name":"LogAuctionEndVoucherSubmitted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"auction","type":"address"},{"indexed":false,"name":"user","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"LogSentEthToWinner","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"auction","type":"address"},{"indexed":false,"name":"user","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"LogSentEthToAuctioneer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"user","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"LogSentDepotEth","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"user","type":"address[]"},{"indexed":false,"name":"amount","type":"uint256[]"}],"name":"LogSentRewardsDepotEth","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"version","type":"string"},{"indexed":false,"name":"error","type":"string"}],"name":"LogError","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"version","type":"string"},{"indexed":false,"name":"error","type":"string"},{"indexed":false,"name":"data","type":"bytes32[]"}],"name":"LogErrorWithData","type":"event"}]

60c0604052600e60808190527f6465706f7369742d6574682d763100000000000000000000000000000000000060a0908152620000409160009190620000d9565b503480156200004e57600080fd5b5060405160408062003e878339810160405280516020909101516002805460a060020a60ff0219167401000000000000000000000000000000000000000060ff948516021760a860020a60ff021916750100000000000000000000000000000000000000000093909216929092021790556001805433600160a060020a03199091161790556200017e565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200011c57805160ff19168380011785556200014c565b828001600101855582156200014c579182015b828111156200014c5782518255916020019190600101906200012f565b506200015a9291506200015e565b5090565b6200017b91905b808211156200015a576000815560010162000165565b90565b613cf9806200018e6000396000f3006080604052600436106101065763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166301890df681146101105780630b77a7151461013b5780630dc16a561461016757806313484ff21461019a578063439370b11461010657806354fd4d50146101af5780635bf96478146102395780635cc27614146102d05780637421859f146102f1578063745ffb41146103065780637adbf9731461031e5780637dc0d1d01461033f5780638da5cb5b146103705780639009d9b714610385578063966d714814610498578063a0709812146104b0578063abdecf52146104c5578063c75bc4fb146104dd578063c8149cbc146104f7575b61010e610511565b005b34801561011c57600080fd5b50610125610837565b6040805160ff9092168252519081900360200190f35b34801561014757600080fd5b50610153600435610858565b604080519115158252519081900360200190f35b34801561017357600080fd5b50610188600160a060020a036004351661086d565b60408051918252519081900360200190f35b3480156101a657600080fd5b5061015361088c565b3480156101bb57600080fd5b506101c46108af565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101fe5781810151838201526020016101e6565b50505050905090810190601f16801561022b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561024557600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261010e94369492936024939284019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a99988101979196509182019450925082915084018382808284375094975061093d9650505050505050565b3480156102dc57600080fd5b50610188600160a060020a0360043516611178565b3480156102fd57600080fd5b5061015361118a565b34801561031257600080fd5b5061018860043561119a565b34801561032a57600080fd5b5061010e600160a060020a03600435166111b9565b34801561034b57600080fd5b5061035461124a565b60408051600160a060020a039092168252519081900360200190f35b34801561037c57600080fd5b50610354611259565b34801561039157600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261010e94369492936024939284019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a99988101979196509182019450925082915084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a99988101979196509182019450925082915084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a9998810197919650918201945092508291508401838280828437509497506112689650505050505050565b3480156104a457600080fd5b506101536004356118c9565b3480156104bc57600080fd5b506101256118de565b3480156104d157600080fd5b50610188600435611900565b3480156104e957600080fd5b5061010e600435151561190e565b34801561050357600080fd5b5061010e60043515156119a2565b600254606090600090760100000000000000000000000000000000000000000000900460ff16158061054d5750600154600160a060020a031633145b15156105a3576040805160e560020a62461bcd02815260206004820152601060248201527f4d4947524154494f4e5f4c4f434b454400000000000000000000000000000000604482015290519081900360640190fd5b60025460b860020a900460ff1615806105c65750600154600160a060020a031633145b151561061c576040805160e560020a62461bcd02815260206004820152601260248201527f4d41494e54454e414e43455f4c4f434b45440000000000000000000000000000604482015290519081900360640190fd5b503460008111610676576040805160e560020a62461bcd02815260206004820152601d60248201527f416d6f756e74206d7573742062652067726561746572207468616e2030000000604482015290519081900360640190fd5b6106803382611a48565b15156107f757604080516001808252818301909252906020808301908038833950508151919350829184915060009081106106b757fe5b602090810290910181019190915260408051606080825260008054600261010060018316150260001901909116049183018290527f2402453bc4a11926f5926f6269f13ed19cb34b0500b502792d8049d765f57272949093879392839283019183019060808401908790801561076e5780601f106107435761010080835404028352916020019161076e565b820191906000526020600020905b81548152906001019060200180831161075157829003601f168201915b5050848103835260178152602001807f4445504f5345445f4144445f444154415f4641494c4544000000000000000000815250602001848103825285818151815260200191508051906020019060200280838360005b838110156107dc5781810151838201526020016107c4565b505050509050019550505050505060405180910390a1610833565b604080513381526020810183905281517f69d8ef4af6b253bc5befb88d3f648efada0f0e5d4550764eaa18b633342b1cba929181900390910190a15b5050565b60025474010000000000000000000000000000000000000000900460ff1681565b60076020526000908152604090205460ff1681565b600160a060020a0381166000908152600360205260409020545b919050565b600254760100000000000000000000000000000000000000000000900460ff1681565b6000805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156109355780601f1061090a57610100808354040283529160200191610935565b820191906000526020600020905b81548152906001019060200180831161091857829003601f168201915b505050505081565b6000806000600260179054906101000a900460ff1615806109685750600154600160a060020a031633145b15156109be576040805160e560020a62461bcd02815260206004820152601260248201527f4d41494e54454e414e43455f4c4f434b45440000000000000000000000000000604482015290519081900360640190fd5b836040518082805190602001908083835b602083106109ee5780518252601f1990920191602091820191016109cf565b51815160001960209485036101000a019081169019919091161790526040805194909201849003909320600081815260059094529220549196505060ff161515600114159150610b38905057604080518181526000805460026000196101006001841615020190911604928201839052600080516020613cae8339815191529290919081906020820190606083019085908015610acc5780601f10610aa157610100808354040283529160200191610acc565b820191906000526020600020905b815481529060010190602001808311610aaf57829003601f168201915b5050928303905250602381527f5749544844524157414c5f564f55434845525f414c52454144595f5355424d4960208201527f544544000000000000000000000000000000000000000000000000000000000060408083019190915251908190036060019150a1611171565b600254610b629085907501000000000000000000000000000000000000000000900460ff16611a94565b9092509050801515610c6c57604080518181526000805460026000196101006001841615020190911604928201839052600080516020613cae8339815191529290919081906020820190606083019085908015610c005780601f10610bd557610100808354040283529160200191610c00565b820191906000526020600020905b815481529060010190602001808311610be357829003601f168201915b5050928303905250602181527f5749544844524157414c5f564f55434845525f414d4f554e545f494e56414c4960208201527f440000000000000000000000000000000000000000000000000000000000000060408083019190915251908190036060019150a1611171565b600160a060020a0382161515610d7a57604080518181526000805460026000196101006001841615020190911604928201839052600080516020613cae8339815191529290919081906020820190606083019085908015610d0e5780601f10610ce357610100808354040283529160200191610d0e565b820191906000526020600020905b815481529060010190602001808311610cf157829003601f168201915b5050928303905250602181527f5749544844524157414c5f564f55434845525f5349474e45525f494e56414c4960208201527f440000000000000000000000000000000000000000000000000000000000000060408083019190915251908190036060019150a1611171565b600160a060020a038216600090815260036020526040902054811115610e9857604080518181526000805460026000196101006001841615020190911604928201839052600080516020613cae8339815191529290919081906020820190606083019085908015610e2c5780601f10610e0157610100808354040283529160200191610e2c565b820191906000526020600020905b815481529060010190602001808311610e0f57829003601f168201915b5050928303905250602781527f5749544844524157414c5f564f55434845525f4445504f545f414d4f554e545f60208201527f544f4f5f4c4f570000000000000000000000000000000000000000000000000060408083019190915251908190036060019150a1611171565b610ea485838386611b3e565b1515610fa857604080518181526000805460026000196101006001841615020190911604928201839052600080516020613cae8339815191529290919081906020820190606083019085908015610f3c5780601f10610f1157610100808354040283529160200191610f3c565b820191906000526020600020905b815481529060010190602001808311610f1f57829003601f168201915b5050928303905250602b81527f5749544844524157414c5f564f55434845525f4f5241434c455f494e56414c4960208201527f445f5349474e415455524500000000000000000000000000000000000000000060408083019190915251908190036060019150a1611171565b604051600160a060020a0383169082156108fc029083906000818181858888f1935050505015156110d157604080518181526000805460026000196101006001841615020190911604928201839052600080516020613cae83398151915292909190819060208201906060830190859080156110655780601f1061103a57610100808354040283529160200191611065565b820191906000526020600020905b81548152906001019060200180831161104857829003601f168201915b5050928303905250602681527f5749544844524157414c5f564f55434845525f4554485f5452414e534645525f60208201527f4641494c4544000000000000000000000000000000000000000000000000000060408083019190915251908190036060019150a1611171565b6110db8282611cac565b506004805460018181019092557f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b01849055600084815260056020908152604091829020805460ff19169093179092558051600160a060020a0385168152918201839052818101859052517f526d1df19f1af5c7650ac415ee16f9f80a969540293cbbf325276bd1c71cbe729181900360600190a15b5050505050565b60036020526000908152604090205481565b60025460b860020a900460ff1681565b60068054829081106111a857fe5b600091825260209091200154905081565b600154600160a060020a0316331461121b576040805160e560020a62461bcd02815260206004820152601460248201527f53656e646572206d757374206265206f776e6572000000000000000000000000604482015290519081900360640190fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600254600160a060020a031681565b600154600160a060020a031681565b6000611272613c48565b600080600061127f613c76565b60025460b860020a900460ff1615806112a25750600154600160a060020a031633145b15156112f8576040805160e560020a62461bcd02815260206004820152601260248201527f4d41494e54454e414e43455f4c4f434b45440000000000000000000000000000604482015290519081900360640190fd5b886040518082805190602001908083835b602083106113285780518252601f199092019160209182019101611309565b51815160001960209485036101000a019081169019919091161790526040805194909201849003909320600081815260079094529220549199505060ff161515600114159150611472905057604080518181526000805460026000196101006001841615020190911604928201839052600080516020613cae83398151915292909190819060208201906060830190859080156114065780601f106113db57610100808354040283529160200191611406565b820191906000526020600020905b8154815290600101906020018083116113e957829003601f168201915b5050928303905250602481527f41554354494f4e5f454e445f564f55434845525f414c52454144595f5355424d60208201527f495445440000000000000000000000000000000000000000000000000000000060408083019190915251908190036060019150a16118bd565b61147b89611cfd565b94506001885111156114ab57611495888660000151611d5a565b90506114a081611fab565b15156114ab576118bd565b6115138a886040518082805190602001908083835b602083106114df5780518252601f1990920191602091820191016114c0565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902087846120dd565b151561161757604080518181526000805460026000196101006001841615020190911604928201839052600080516020613cae83398151915292909190819060208201906060830190859080156115ab5780601f10611580576101008083540402835291602001916115ab565b820191906000526020600020905b81548152906001019060200180831161158e57829003601f168201915b5050928303905250602c81527f41554354494f4e5f454e445f564f55434845525f4f5241434c455f494e56414c60208201527f49445f5349474e4154555245000000000000000000000000000000000000000060408083019190915251908190036060019150a16118bd565b61162785602001518b60616122b5565b15156117d957895160f860020a908b90606190811061164257fe5b90602001015160f860020a900460f860020a02600160f860020a03191611156116db576040805160e560020a62461bcd02815260206004820152602760248201527f4d6f7265207468616e206f6e65207472616e736665722066756e6374696f6e2060448201527f746f2063616c6c00000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b604080518181526000805460026000196101006001841615020190911604928201839052600080516020613cae833981519152929091908190602082019060608301908590801561176d5780601f106117425761010080835404028352916020019161176d565b820191906000526020600020905b81548152906001019060200180831161175057829003601f168201915b5050928303905250602381527f41554354494f4e5f454e445f564f55434845525f5452414e534645525f46414960208201527f4c4544000000000000000000000000000000000000000000000000000000000060408083019190915251908190036060019150a16118bd565b6001885111156117f9576117ee87868361234d565b15156117f9576118bd565b6006805460018181019092557ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f01879055600087815260076020908152604091829020805460ff191690931790925582820151878201518851898501516080808c0151888701518751948552600160a060020a03938416988501989098528387015260608301969096529481018b905292519184169316917f4a019ca24b28fbd88f049010e51779834bb31fc994106e98f10c315789f0e768919081900360a00190a35b50505050505050505050565b60056020526000908152604090205460ff1681565b6002547501000000000000000000000000000000000000000000900460ff1681565b60048054829081106111a857fe5b600154600160a060020a03163314611970576040805160e560020a62461bcd02815260206004820152601460248201527f53656e646572206d757374206265206f776e6572000000000000000000000000604482015290519081900360640190fd5b6002805491151560b860020a0277ff000000000000000000000000000000000000000000000019909216919091179055565b600154600160a060020a03163314611a04576040805160e560020a62461bcd02815260206004820152601460248201527f53656e646572206d757374206265206f776e6572000000000000000000000000604482015290519081900360640190fd5b600280549115157601000000000000000000000000000000000000000000000276ff0000000000000000000000000000000000000000000019909216919091179055565b600160a060020a038216600090815260036020526040812054611a71908363ffffffff612a5016565b600160a060020a0384166000908152600360205260409020555060015b92915050565b6000806000606080611aad611aa888612a5d565b612aae565b9050611ad0816005815181101515611ac157fe5b90602001906020020151612b81565b915060208201519250611ae38187612bf3565b94507f835fc6ca000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1984161415611b3457602482015193505b5050509250929050565b604080516c01000000000000000000000000308102602080840191909152600160a060020a0387169091026034830152604882018590526068808301859052835180840390910181526088909201928390528151600093611c929392909182918401908083835b60208310611bc45780518252601f199092019160209182019101611ba5565b51815160209384036101000a6000190180199092169116179052604080519290940182900382207f19457468657265756d205369676e6564204d6573736167653a0a33320000000083830152603c8084019190915284518084039091018152605c9092019384905281519195509293508392850191508083835b60208310611c5d5780518252601f199092019160209182019101611c3e565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020866000612c7b565b600254600160a060020a0391821691161495945050505050565b600160a060020a038216600090815260036020526040812054821115611cd457506000611a8e565b600160a060020a038316600090815260036020526040902054611a71908363ffffffff612d0716565b611d05613c48565b600254611d2f9083907501000000000000000000000000000000000000000000900460ff16612d19565b60ff1660608701526080860152600160a060020a039081166020860152166040840152508152919050565b611d62613c76565b6000611d7d84600260159054906101000a900460ff16612dfa565b600160a060020a03908116602087015260408601919091521683529050828114611e9f57604080518181526000805460026000196101006001841615020190911604928201839052600080516020613cae8339815191529290919081906020820190606083019085908015611e335780601f10611e0857610100808354040283529160200191611e33565b820191906000526020600020905b815481529060010190602001808311611e1657829003601f168201915b5050928303905250603281527f41554354494f4e5f454e445f564f55434845525f686173685261775478546f6b60208201527f656e5472616e736665725f494e56414c4944000000000000000000000000000060408083019190915251908190036060019150a1611fa4565b60408201511515611fa457604080518181526000805460026000196101006001841615020190911604928201839052600080516020613cae8339815191529290919081906020820190606083019085908015611f3c5780601f10611f1157610100808354040283529160200191611f3c565b820191906000526020600020905b815481529060010190602001808311611f1f57829003601f168201915b5050928303905250602a81527f41554354494f4e5f454e445f564f55434845525f42494444494e475f414d4f5560208201527f4e545f494e56414c49440000000000000000000000000000000000000000000060408083019190915251908190036060019150a15b5092915050565b604080820151602080840151600160a060020a0316600090815260039091529182205410156120d557604080518181526000805460026000196101006001841615020190911604928201839052600080516020613cae83398151915292909190819060208201906060830190859080156120665780601f1061203b57610100808354040283529160200191612066565b820191906000526020600020905b81548152906001019060200180831161204957829003601f168201915b5050928303905250602881527f41554354494f4e5f454e445f564f55434845525f4445504f545f414d4f554e5460208201527f5f544f4f5f4c4f5700000000000000000000000000000000000000000000000060408083019190915251908190036060019150a1506000610887565b506001919050565b6020840151600090816120ef87612eb0565b60208681015160808801516040808a0151898501518a83015160608d01518451306c01000000000000000000000000908102828b0152600160a060020a039889168102603483015260488201979097529387168602606885015295909116909302607c820152609081019290925260b0820187905260ff90921660f860020a0260d082015260d1810184905260f18082018b9052825180830390910181526101119091019182905280519394506122999390928291908401908083835b602083106121cb5780518252601f1990920191602091820191016121ac565b51815160209384036101000a6000190180199092169116179052604080519290940182900382207f19457468657265756d205369676e6564204d6573736167653a0a33320000000083830152603c8084019190915284518084039091018152605c9092019384905281519195509293508392850191508083835b602083106122645780518252601f199092019160209182019101612245565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020886020612c7b565b600254600160a060020a03918216911614979650505050505050565b6000806000806122c487612fb5565b15156122d35760009350612343565b85858151811015156122e157fe5b90602001015160f860020a900460f860020a0260f860020a90049250600185019450600090505b8260ff168160ff16101561233e57612321878787612fbd565b90955091508115156123365760009350612343565b600101612308565b600193505b5050509392505050565b6000806000806000806000606080600061236f8b602001518c60400151611cac565b151561247757604080518181526000805460026000196101006001841615020190911604928201839052600080516020613cae83398151915292909190819060208201906060830190859080156124075780601f106123dc57610100808354040283529160200191612407565b820191906000526020600020905b8154815290600101906020018083116123ea57829003601f168201915b5050928303905250602881527f41554354494f4e5f454e445f564f55434845525f4445504f545f414d4f554e5460208201527f5f544f4f5f4c4f5700000000000000000000000000000000000000000000000060408083019190915251908190036060019150a160009950612a40565b8c8901601481015160349091015160408e01519199509750600160a060020a03808a169116146125a357604080518181526000805460026000196101006001841615020190911604928201839052600080516020613cae83398151915292909190819060208201906060830190859080156125335780601f1061250857610100808354040283529160200191612533565b820191906000526020600020905b81548152906001019060200180831161251657829003601f168201915b5050928303905250602a81527f41554354494f4e5f454e445f564f55434845525f53454e445f544f5f53454c4c60208201527f45525f494e56414c49440000000000000000000000000000000000000000000060408083019190915251908190036060019150a160009950612a40565b6040516034999099019894870194600160a060020a0389169088156108fc029089906000818181858888f193505050501515612629576040805160e560020a62461bcd02815260206004820152601460248201527f4661696c656420746f2073656e642066756e6473000000000000000000000000604482015290519081900360640190fd5b8a5160408051600160a060020a039283168152918a166020830152818101899052517f4d2d8d41fb501add0a2a27393c3b7c3e4cb75ec17b8b7c573ab8d45ad4691ace9181900360600190a160008c6060015160ff1611156129ba578c8901601481015160349182015160405192909b019a909950975094870194600160a060020a0389169088156108fc029089906000818181858888f19350505050151561271c576040805160e560020a62461bcd02815260206004820152601460248201527f4661696c656420746f2073656e642066756e6473000000000000000000000000604482015290519081900360640190fd5b8a5160408051600160a060020a039283168152918a166020830152818101899052517f389aca95cfffc505215454000ac1a21c007291c50b94fffb45059a7cbb86d8d59181900360600190a1602089018d015193506002890198508360f060020a900461ffff166040519080825280602002602001820160405280156127ac578160200160208202803883390190505b5092508360f060020a900461ffff166040519080825280602002602001820160405280156127e4578160200160208202803883390190505b509150600090505b8360f060020a900461ffff168161ffff1610156128fe578c890160148101516034909101516020909a01999098506bffffffffffffffffffffffff633b9aca00740100000000000000000000000000000000000000008304021697509550938601936128588888611a48565b15156128ae576040805160e560020a62461bcd02815260206004820152601160248201527f43616e277420616464206465706f736974000000000000000000000000000000604482015290519081900360640190fd5b87838261ffff168151811015156128c157fe5b600160a060020a0390921660209283029091019091015281518790839061ffff84169081106128ec57fe5b602090810290910101526001016127ec565b7f7de9940f74e0c14fb9a311c4ed7443a04627b31f270a83a8b46bfe9e3d99d6308383604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561296557818101518382015260200161294d565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156129a457818101518382015260200161298c565b5050505090500194505050505060405180910390a15b60408b01518514612a3b576040805160e560020a62461bcd02815260206004820152602a60248201527f42696464696e6720616d6f756e74206973206e6f7420657175616c20746f207360448201527f656e7420616d6f756e7400000000000000000000000000000000000000000000606482015290519081900360840190fd5b600199505b5050505050505050509392505050565b81810182811015611a8e57fe5b612a65613c96565b6000825160001415612a8c5760408051808201909152600080825260208201529150612aa8565b5050604080518082019091528151815260208281019082018190525b50919050565b6060600080600080612abf86613220565b1515612aca57600080fd5b612ad38661324d565b935083604051908082528060200260200182016040528015612b0f57816020015b612afc613c96565b815260200190600190039081612af45790505b509450612b1f866020015161329d565b8660200151019250600090505b83811015612b7857612b3d83613300565b91506040805190810160405280838152602001848152508582815181101515612b6257fe5b6020908102909101015291810191600101612b2c565b50505050919050565b606060008060606000612b97866020015161329d565b9350838660000151039250826040519080825280601f01601f191660200182016040528015612bd0578160200160208202803883390190505b509150816020019050612bea848760200151018285613391565b50949350505050565b6000606080612c0285856133d8565b8092508193505050612c72826040518082805190602001908083835b60208310612c3d5780518252601f199092019160209182019101612c1e565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020826000612c7b565b95945050505050565b818101602081810151604080840151606094850151825160008082528187018086528b905260ff60f860020a8404168286015296810185905260808101839052925193949193909260019260a0808301939192601f19830192908190039091019089865af1158015612cf1573d6000803e3d6000fd5b5050604051601f19015198975050505050505050565b600082821115612d1357fe5b50900390565b6000806000806000806060806060612d33611aa88c612a5d565b9150612d56826003815181101515612d4757fe5b90602001906020020151613715565b9750612d6a826005815181101515611ac157fe5b9250612d76828b612bf3565b9650612d81836137b9565b6040518451939a509198509650919250829190819060208401908083835b60208310612dbe5780518252601f199092019160209182019101612d9f565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902098505050509295509295509295565b6000806000806060806000612e11611aa88a612a5d565b9150612e25826003815181101515612d4757fe5b9550612e39826005815181101515611ac157fe5b925060208301519050612e4c8289612bf3565b93507f1d03ae68000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1982161415612ea45760248301516064840151975094505b50505092959194509250565b60006060600060618451036040519080825280601f01601f191660200182016040528015612ee8578160200160208202803883390190505b509150600090505b6061845103811015612f4e578381606101815181101515612f0d57fe5b90602001015160f860020a900460f860020a028282815181101515612f2e57fe5b906020010190600160f860020a031916908160001a905350600101612ef0565b816040518082805190602001908083835b60208310612f7e5780518252601f199092019160209182019101612f5f565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902092505b5050919050565b6000903b1190565b6000806060806000808787815181101515612fd457fe5b90602001015160f860020a900460f860020a02600160f860020a03191660b860f860020a021415613071576040805160018082528183019092529060208083019080388339019050509350878760010181518110151561303057fe5b90602001015160f860020a900460f860020a0284600081518110151561305257fe5b906020010190600160f860020a031916908160001a9053506002870196505b878781518110151561307f57fe5b90602001015160f860020a900460f860020a02600160f860020a03191660b960f860020a021415613166576040805160028082528183018352909160208301908038833901905050935087876001018151811015156130da57fe5b90602001015160f860020a900460f860020a028460008151811015156130fc57fe5b906020010190600160f860020a031916908160001a905350878760020181518110151561312557fe5b90602001015160f860020a900460f860020a0284600181518110151561314757fe5b906020010190600160f860020a031916908160001a9053506003870196505b61316f846138d8565b9150816040519080825280601f01601f19166020018201604052801561319f578160200160208202803883390190505b509250600090505b8181101561320057878782018151811015156131bf57fe5b90602001015160f860020a900460f860020a0283828151811015156131e057fe5b906020010190600160f860020a031916908160001a9053506001016131a7565b95810195866132108a8486613920565b9550955050505050935093915050565b6020810151805160009190821a9060c060ff831610156132435760009250612fae565b5060019392505050565b60008060008060009250613264856020015161329d565b6020860151865191810193500190505b808210156132945761328582613300565b60019093019290910190613274565b50909392505050565b8051600090811a60808110156132b65760009150612aa8565b60b88110806132d1575060c081108015906132d1575060f881105b156132df5760019150612aa8565b60c08110156132f45760b51981019150612aa8565b60f51981019150612aa8565b8051600090811a60808110156133195760019150612aa8565b60b881101561332e57607e1981019150612aa8565b60c081101561335b5760b78103600184019350806020036101000a84510460018201810193505050612aa8565b60f88110156133705760be1981019150612aa8565b60019290920151602083900360f7016101000a900490910160f51901919050565b60005b602082106133b6578351835260209384019390920191601f1990910190613394565b50915181516020939093036101000a6000190180199091169216919091179052565b6040805160098082526101408201909252606091829182916000918291816020015b60608152602001906001900390816133fa57905050925061342b613426886000815181101515611ac157fe5b613969565b83600081518110151561343a57fe5b9060200190602002018190525061345c613426886001815181101515611ac157fe5b83600181518110151561346b57fe5b9060200190602002018190525061348d613426886002815181101515611ac157fe5b83600281518110151561349c57fe5b906020019060200201819052506134be613426886003815181101515611ac157fe5b8360038151811015156134cd57fe5b906020019060200201819052506134ef613426886004815181101515611ac157fe5b8360048151811015156134fe57fe5b90602001906020020181905250613520613426886005815181101515611ac157fe5b83600581518110151561352f57fe5b6020908102909101015261354560ff8716613a63565b83600681518110151561355457fe5b602090810290910101526135686000613a63565b83600781518110151561357757fe5b6020908102909101015261358b6000613a63565b83600881518110151561359a57fe5b602090810290910101526135ad83613ac5565b6040805160418082526080820190925291965060208201610820803883390190505093506135f28760078151811015156135e357fe5b90602001906020020151613bb2565b6000925090505b60208260ff16101561364f578060ff83166020811061361457fe5b1a60f860020a02848360ff1681518110151561362c57fe5b906020010190600160f860020a031916908160001a9053506001909101906135f9565b6136618760088151811015156135e357fe5b6000925090505b60208260ff1610156136c1578060ff83166020811061368357fe5b1a60f860020a02848360200160ff1681518110151561369e57fe5b906020010190600160f860020a031916908160001a905350600190910190613668565b60088660020260ff166136dc8960068151811015156135e357fe5b030360f860020a028460408151811015156136f357fe5b906020010190600160f860020a031916908160001a9053505050509250929050565b80516000908190819060151461379b576040805160e560020a62461bcd02815260206004820152603260248201527f496e76616c696420524c504974656d2e2041646472657373657320617265206560448201527f6e636f64656420696e2032302062797465730000000000000000000000000000606482015290519081900360840190fd5b50505060200151600101516c01000000000000000000000000900490565b6020810151606090600090819081908180807fffd6d828000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19851614156138cd57602489810151808b019091015160448b015160648c015160c48d015160408051858152601f19601f8701168101602001909152929b5090995097509194509250828015613869578160200160208202803883390190505b509750600090505b818110156138cd578851899060248386010190811061388c57fe5b90602001015160f860020a900460f860020a0288828151811015156138ad57fe5b906020010190600160f860020a031916908160001a905350600101613871565b505050509193509193565b600080805b8351811015611fa4578060010184510360080260020a848281518110151561390157fe5b016020015160f860020a908190048102040291909101906001016138dd565b60008060006040516020850151915081815260045b8681101561394f5760208187018101518383015201613935565b50602081878360008b6127105a03f1979650505050505050565b8051604051906020808401919083019060006001821480156139d7575085517f7f0000000000000000000000000000000000000000000000000000000000000090879060009081106139b757fe5b90602001015160f860020a900460f860020a02600160f860020a03191611155b156139f057600185528351835260018301604052612b78565b60378211613a2057816001018552816080018353816001840101604052613a1b848460010184613be8565b612b78565b613a2982613c30565b905081816001010185528060b7018353806020036101000a820260018401528181600185010101604052612b788482856001010184613be8565b606060006060613a7284613c30565b9150816040519080825280601f01601f191660200182016040528015613aa2578160200160208202803883390190505b509050816020036101000a84026020820152613abd81613969565b949350505050565b6060600080600080606060005b8751841015613b03578784815181101515613ae957fe5b906020019060200201515185019450836001019350613ad2565b604051965060208701955060378511613b27578460c0018653600186019550613b50565b613b3085613c30565b92508260f7018653600186019550826020036101000a8502865282860195505b600093505b8751841015613b9b578784815181101515613b6c57fe5b906020019060200201519150602082019050613b8a81878451613be8565b815186019550836001019350613b55565b856040526020878703038752505050505050919050565b6000806000806000613bc7866020015161329d565b86516020978801518201519190039096036101000a90950495945050505050565b60005b60208210613c0d578351835260209384019390920191601f1990910190613beb565b6001826020036101000a0390508019845116818451168181178552505050505050565b60005b81156108875761010082049150600101613c33565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915290565b604080516060810182526000808252602082018190529181019190915290565b6040805180820190915260008082526020820152905600b070cb3e4fef70e12d8e599444f6395a8ff59f4db70ac633f9d5c5db734a4d37a165627a7a723058209591a40582295deaaf533c3ef9e1460865ad0bfc2048312238b73b1a207f812c00290000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000003f

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

0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000003f

-----Decoded View---------------
Arg [0] : _ethereumChainId (uint8): 1
Arg [1] : _auctionityChainId (uint8): 63

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [1] : 000000000000000000000000000000000000000000000000000000000000003f


Swarm Source

bzzr://9591a40582295deaaf533c3ef9e1460865ad0bfc2048312238b73b1a207f812c
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.

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.