More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 6,437 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Buy | 11037365 | 1577 days ago | IN | 0.0015984 ETH | 0.0023275 | ||||
Buy | 10827869 | 1610 days ago | IN | 0.07 ETH | 0.02967413 | ||||
Buy | 10827868 | 1610 days ago | IN | 0.06 ETH | 0.02970342 | ||||
Buy | 10787539 | 1616 days ago | IN | 0.025 ETH | 0.05969692 | ||||
Buy | 10787525 | 1616 days ago | IN | 1 ETH | 0.05331018 | ||||
Cancel | 10787251 | 1616 days ago | IN | 0 ETH | 0.01436621 | ||||
Buy | 10787245 | 1616 days ago | IN | 0.45 ETH | 0.08209514 | ||||
Cancel | 10786853 | 1616 days ago | IN | 0 ETH | 0.01485251 | ||||
Buy | 10786776 | 1616 days ago | IN | 0.78 ETH | 0.08187 | ||||
Buy | 10786269 | 1616 days ago | IN | 0.24 ETH | 0.061335 | ||||
Buy | 10785957 | 1616 days ago | IN | 0.15 ETH | 0.06949039 | ||||
Buy | 10785816 | 1616 days ago | IN | 0.2 ETH | 0.05493477 | ||||
Buy | 10785767 | 1616 days ago | IN | 0.15 ETH | 0.06858886 | ||||
Cancel | 10785681 | 1616 days ago | IN | 0 ETH | 0.0122463 | ||||
Buy | 10785240 | 1616 days ago | IN | 0.2 ETH | 0.05955389 | ||||
Buy | 10784997 | 1616 days ago | IN | 0.5 ETH | 0.04525475 | ||||
Buy | 10784784 | 1616 days ago | IN | 0.15 ETH | 0.04635142 | ||||
Buy | 10784025 | 1616 days ago | IN | 0.08 ETH | 0.05719806 | ||||
Buy | 10781232 | 1617 days ago | IN | 0.9 ETH | 0.05418088 | ||||
Buy | 10781069 | 1617 days ago | IN | 1.35 ETH | 0.10413875 | ||||
Buy | 10780896 | 1617 days ago | IN | 1.92 ETH | 0.10336095 | ||||
Buy | 10780819 | 1617 days ago | IN | 1.2 ETH | 0.1020708 | ||||
Cancel | 10779017 | 1617 days ago | IN | 0 ETH | 0.02501856 | ||||
Buy | 10777564 | 1617 days ago | IN | 3 ETH | 0.1073856 | ||||
Cancel | 10777144 | 1617 days ago | IN | 0 ETH | 0.02496643 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
10827869 | 1610 days ago | 0.063 ETH | ||||
10827869 | 1610 days ago | 0.007 ETH | ||||
10827868 | 1610 days ago | 0.054 ETH | ||||
10827868 | 1610 days ago | 0.006 ETH | ||||
10787539 | 1616 days ago | 0.0225 ETH | ||||
10787539 | 1616 days ago | 0.0025 ETH | ||||
10787525 | 1616 days ago | 0.8 ETH | ||||
10787525 | 1616 days ago | 0.2 ETH | ||||
10787245 | 1616 days ago | 0.405 ETH | ||||
10787245 | 1616 days ago | 0.045 ETH | ||||
10786776 | 1616 days ago | 0.702 ETH | ||||
10786776 | 1616 days ago | 0.078 ETH | ||||
10786269 | 1616 days ago | 0.192 ETH | ||||
10786269 | 1616 days ago | 0.048 ETH | ||||
10785957 | 1616 days ago | 0.135 ETH | ||||
10785957 | 1616 days ago | 0.015 ETH | ||||
10785816 | 1616 days ago | 0.1 ETH | ||||
10785816 | 1616 days ago | 0.1 ETH | ||||
10785767 | 1616 days ago | 0.135 ETH | ||||
10785767 | 1616 days ago | 0.015 ETH | ||||
10785240 | 1616 days ago | 0.1 ETH | ||||
10785240 | 1616 days ago | 0.1 ETH | ||||
10784997 | 1616 days ago | 0.46 ETH | ||||
10784997 | 1616 days ago | 0.04 ETH | ||||
10784784 | 1616 days ago | 0.135 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
ERC1155Sale
Compiler Version
v0.5.17+commit.d19bba13
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-05-27 */ pragma solidity ^0.5.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } /** @title ERC-1155 Multi Token Standard @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1155.md Note: The ERC-165 identifier for this interface is 0xd9b67a26. */ contract IERC1155 is IERC165 { /** @dev Either `TransferSingle` or `TransferBatch` MUST emit when tokens are transferred, including zero value transfers as well as minting or burning (see "Safe Transfer Rules" section of the standard). The `_operator` argument MUST be msg.sender. The `_from` argument MUST be the address of the holder whose balance is decreased. The `_to` argument MUST be the address of the recipient whose balance is increased. The `_id` argument MUST be the token type being transferred. The `_value` argument MUST be the number of tokens the holder balance is decreased by and match what the recipient balance is increased by. When minting/creating tokens, the `_from` argument MUST be set to `0x0` (i.e. zero address). When burning/destroying tokens, the `_to` argument MUST be set to `0x0` (i.e. zero address). */ event TransferSingle(address indexed _operator, address indexed _from, address indexed _to, uint256 _id, uint256 _value); /** @dev Either `TransferSingle` or `TransferBatch` MUST emit when tokens are transferred, including zero value transfers as well as minting or burning (see "Safe Transfer Rules" section of the standard). The `_operator` argument MUST be msg.sender. The `_from` argument MUST be the address of the holder whose balance is decreased. The `_to` argument MUST be the address of the recipient whose balance is increased. The `_ids` argument MUST be the list of tokens being transferred. The `_values` argument MUST be the list of number of tokens (matching the list and order of tokens specified in _ids) the holder balance is decreased by and match what the recipient balance is increased by. When minting/creating tokens, the `_from` argument MUST be set to `0x0` (i.e. zero address). When burning/destroying tokens, the `_to` argument MUST be set to `0x0` (i.e. zero address). */ event TransferBatch(address indexed _operator, address indexed _from, address indexed _to, uint256[] _ids, uint256[] _values); /** @dev MUST emit when approval for a second party/operator address to manage all tokens for an owner address is enabled or disabled (absense of an event assumes disabled). */ event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved); /** @dev MUST emit when the URI is updated for a token ID. URIs are defined in RFC 3986. The URI MUST point a JSON file that conforms to the "ERC-1155 Metadata URI JSON Schema". */ event URI(string _value, uint256 indexed _id); /** @notice Transfers `_value` amount of an `_id` from the `_from` address to the `_to` address specified (with safety call). @dev Caller must be approved to manage the tokens being transferred out of the `_from` account (see "Approval" section of the standard). MUST revert if `_to` is the zero address. MUST revert if balance of holder for token `_id` is lower than the `_value` sent. MUST revert on any other error. MUST emit the `TransferSingle` event to reflect the balance change (see "Safe Transfer Rules" section of the standard). After the above conditions are met, this function MUST check if `_to` is a smart contract (e.g. code size > 0). If so, it MUST call `onERC1155Received` on `_to` and act appropriately (see "Safe Transfer Rules" section of the standard). @param _from Source address @param _to Target address @param _id ID of the token type @param _value Transfer amount @param _data Additional data with no specified format, MUST be sent unaltered in call to `onERC1155Received` on `_to` */ function safeTransferFrom(address _from, address _to, uint256 _id, uint256 _value, bytes calldata _data) external; /** @notice Transfers `_values` amount(s) of `_ids` from the `_from` address to the `_to` address specified (with safety call). @dev Caller must be approved to manage the tokens being transferred out of the `_from` account (see "Approval" section of the standard). MUST revert if `_to` is the zero address. MUST revert if length of `_ids` is not the same as length of `_values`. MUST revert if any of the balance(s) of the holder(s) for token(s) in `_ids` is lower than the respective amount(s) in `_values` sent to the recipient. MUST revert on any other error. MUST emit `TransferSingle` or `TransferBatch` event(s) such that all the balance changes are reflected (see "Safe Transfer Rules" section of the standard). Balance changes and events MUST follow the ordering of the arrays (_ids[0]/_values[0] before _ids[1]/_values[1], etc). After the above conditions for the transfer(s) in the batch are met, this function MUST check if `_to` is a smart contract (e.g. code size > 0). If so, it MUST call the relevant `ERC1155TokenReceiver` hook(s) on `_to` and act appropriately (see "Safe Transfer Rules" section of the standard). @param _from Source address @param _to Target address @param _ids IDs of each token type (order and length must match _values array) @param _values Transfer amounts per token type (order and length must match _ids array) @param _data Additional data with no specified format, MUST be sent unaltered in call to the `ERC1155TokenReceiver` hook(s) on `_to` */ function safeBatchTransferFrom(address _from, address _to, uint256[] calldata _ids, uint256[] calldata _values, bytes calldata _data) external; /** @notice Get the balance of an account's Tokens. @param _owner The address of the token holder @param _id ID of the Token @return The _owner's balance of the Token type requested */ function balanceOf(address _owner, uint256 _id) external view returns (uint256); /** @notice Get the balance of multiple account/token pairs @param _owners The addresses of the token holders @param _ids ID of the Tokens @return The _owner's balance of the Token types requested (i.e. balance for each (owner, id) pair) */ function balanceOfBatch(address[] calldata _owners, uint256[] calldata _ids) external view returns (uint256[] memory); /** @notice Enable or disable approval for a third party ("operator") to manage all of the caller's tokens. @dev MUST emit the ApprovalForAll event on success. @param _operator Address to add to the set of authorized operators @param _approved True if the operator is approved, false to revoke approval */ function setApprovalForAll(address _operator, bool _approved) external; /** @notice Queries the approval status of an operator for a given owner. @param _owner The owner of the Tokens @param _operator Address of authorized operator @return True if the operator is approved, false if not */ function isApprovedForAll(address _owner, address _operator) external view returns (bool); } /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. * * _Available since v2.4.0._ */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. * * _Available since v2.4.0._ */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. * * _Available since v2.4.0._ */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } library UintLibrary { function toString(uint256 _i) internal pure returns (string memory) { if (_i == 0) { return "0"; } uint j = _i; uint len; while (j != 0) { len++; j /= 10; } bytes memory bstr = new bytes(len); uint k = len - 1; while (_i != 0) { bstr[k--] = byte(uint8(48 + _i % 10)); _i /= 10; } return string(bstr); } } library StringLibrary { using UintLibrary for uint256; function append(string memory _a, string memory _b) internal pure returns (string memory) { bytes memory _ba = bytes(_a); bytes memory _bb = bytes(_b); bytes memory bab = new bytes(_ba.length + _bb.length); uint k = 0; for (uint i = 0; i < _ba.length; i++) bab[k++] = _ba[i]; for (uint i = 0; i < _bb.length; i++) bab[k++] = _bb[i]; return string(bab); } function append(string memory _a, string memory _b, string memory _c) internal pure returns (string memory) { bytes memory _ba = bytes(_a); bytes memory _bb = bytes(_b); bytes memory _bc = bytes(_c); bytes memory bbb = new bytes(_ba.length + _bb.length + _bc.length); uint k = 0; for (uint i = 0; i < _ba.length; i++) bbb[k++] = _ba[i]; for (uint i = 0; i < _bb.length; i++) bbb[k++] = _bb[i]; for (uint i = 0; i < _bc.length; i++) bbb[k++] = _bc[i]; return string(bbb); } function recover(string memory message, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) { bytes memory msgBytes = bytes(message); bytes memory fullMessage = concat( bytes("\x19Ethereum Signed Message:\n"), bytes(msgBytes.length.toString()), msgBytes, new bytes(0), new bytes(0), new bytes(0), new bytes(0) ); return ecrecover(keccak256(fullMessage), v, r, s); } function concat(bytes memory _ba, bytes memory _bb, bytes memory _bc, bytes memory _bd, bytes memory _be, bytes memory _bf, bytes memory _bg) internal pure returns (bytes memory) { bytes memory resultBytes = new bytes(_ba.length + _bb.length + _bc.length + _bd.length + _be.length + _bf.length + _bg.length); uint k = 0; for (uint i = 0; i < _ba.length; i++) resultBytes[k++] = _ba[i]; for (uint i = 0; i < _bb.length; i++) resultBytes[k++] = _bb[i]; for (uint i = 0; i < _bc.length; i++) resultBytes[k++] = _bc[i]; for (uint i = 0; i < _bd.length; i++) resultBytes[k++] = _bd[i]; for (uint i = 0; i < _be.length; i++) resultBytes[k++] = _be[i]; for (uint i = 0; i < _bf.length; i++) resultBytes[k++] = _bf[i]; for (uint i = 0; i < _bg.length; i++) resultBytes[k++] = _bg[i]; return resultBytes; } } library AddressLibrary { function toString(address _addr) internal pure returns (string memory) { bytes32 value = bytes32(uint256(_addr)); bytes memory alphabet = "0123456789abcdef"; bytes memory str = new bytes(42); str[0] = '0'; str[1] = 'x'; for (uint256 i = 0; i < 20; i++) { str[2+i*2] = alphabet[uint8(value[i + 12] >> 4)]; str[3+i*2] = alphabet[uint8(value[i + 12] & 0x0f)]; } return string(str); } } contract AbstractSale { using UintLibrary for uint256; using AddressLibrary for address; function prepareMessage(address token, uint256 tokenId, uint256 price, uint256 nonce) internal pure returns (string memory) { return string(strConcat( bytes(token.toString()), bytes(". tokenId: "), bytes(tokenId.toString()), bytes(". price: "), bytes(price.toString()), bytes(". nonce: "), bytes(nonce.toString()) )); } function strConcat(bytes memory _ba, bytes memory _bb, bytes memory _bc, bytes memory _bd, bytes memory _be, bytes memory _bf, bytes memory _bg) internal pure returns (bytes memory) { bytes memory resultBytes = new bytes(_ba.length + _bb.length + _bc.length + _bd.length + _be.length + _bf.length + _bg.length); uint k = 0; for (uint i = 0; i < _ba.length; i++) resultBytes[k++] = _ba[i]; for (uint i = 0; i < _bb.length; i++) resultBytes[k++] = _bb[i]; for (uint i = 0; i < _bc.length; i++) resultBytes[k++] = _bc[i]; for (uint i = 0; i < _bd.length; i++) resultBytes[k++] = _bd[i]; for (uint i = 0; i < _be.length; i++) resultBytes[k++] = _be[i]; for (uint i = 0; i < _bf.length; i++) resultBytes[k++] = _bf[i]; for (uint i = 0; i < _bg.length; i++) resultBytes[k++] = _bg[i]; return resultBytes; } } /** * @dev Required interface of an ERC721 compliant contract. */ contract IERC721 is IERC165 { event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of NFTs in `owner`'s account. */ function balanceOf(address owner) public view returns (uint256 balance); /** * @dev Returns the owner of the NFT specified by `tokenId`. */ function ownerOf(uint256 tokenId) public view returns (address owner); /** * @dev Transfers a specific NFT (`tokenId`) from one account (`from`) to * another (`to`). * * * * Requirements: * - `from`, `to` cannot be zero. * - `tokenId` must be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this * NFT by either {approve} or {setApprovalForAll}. */ function safeTransferFrom(address from, address to, uint256 tokenId) public; /** * @dev Transfers a specific NFT (`tokenId`) from one account (`from`) to * another (`to`). * * Requirements: * - If the caller is not `from`, it must be approved to move this NFT by * either {approve} or {setApprovalForAll}. */ function transferFrom(address from, address to, uint256 tokenId) public; function approve(address to, uint256 tokenId) public; function getApproved(uint256 tokenId) public view returns (address operator); function setApprovalForAll(address operator, bool _approved) public; function isApprovedForAll(address owner, address operator) public view returns (bool); function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public; } /* * @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 GSN 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. */ contract Context { // Empty internal constructor, to prevent people from mistakenly deploying // an instance of this contract, which should be used via inheritance. constructor () internal { } // solhint-disable-previous-line no-empty-blocks function _msgSender() internal view returns (address payable) { return msg.sender; } function _msgData() internal view returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @title Roles * @dev Library for managing addresses assigned to a Role. */ library Roles { struct Role { mapping (address => bool) bearer; } /** * @dev Give an account access to this role. */ function add(Role storage role, address account) internal { require(!has(role, account), "Roles: account already has role"); role.bearer[account] = true; } /** * @dev Remove an account's access to this role. */ function remove(Role storage role, address account) internal { require(has(role, account), "Roles: account does not have role"); role.bearer[account] = false; } /** * @dev Check if an account has this role. * @return bool */ function has(Role storage role, address account) internal view returns (bool) { require(account != address(0), "Roles: account is the zero address"); return role.bearer[account]; } } contract OperatorRole is Context { using Roles for Roles.Role; event OperatorAdded(address indexed account); event OperatorRemoved(address indexed account); Roles.Role private _operators; constructor () internal { } modifier onlyOperator() { require(isOperator(_msgSender()), "OperatorRole: caller does not have the Operator role"); _; } function isOperator(address account) public view returns (bool) { return _operators.has(account); } function _addOperator(address account) internal { _operators.add(account); emit OperatorAdded(account); } function _removeOperator(address account) internal { _operators.remove(account); emit OperatorRemoved(account); } } /** * @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. * * 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. */ 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 () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(isOwner(), "Ownable: caller is not the owner"); _; } /** * @dev Returns true if the caller is the current owner. */ function isOwner() public view returns (bool) { return _msgSender() == _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 onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = 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 onlyOwner { _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). */ function _transferOwnership(address newOwner) internal { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } contract OwnableOperatorRole is Ownable, OperatorRole { function addOperator(address account) public onlyOwner { _addOperator(account); } function removeOperator(address account) public onlyOwner { _removeOperator(account); } } contract TransferProxy is OwnableOperatorRole { function erc721safeTransferFrom(IERC721 token, address from, address to, uint256 tokenId) external onlyOperator { token.safeTransferFrom(from, to, tokenId); } function erc1155safeTransferFrom(IERC1155 token, address _from, address _to, uint256 _id, uint256 _value, bytes calldata _data) external onlyOperator { token.safeTransferFrom(_from, _to, _id, _value, _data); } } /** * @dev Implementation of the {IERC165} interface. * * Contracts may inherit from this and call {_registerInterface} to declare * their support of an interface. */ contract ERC165 is IERC165 { /* * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7 */ bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7; /** * @dev Mapping of interface ids to whether or not it's supported. */ mapping(bytes4 => bool) private _supportedInterfaces; constructor () internal { // Derived contracts need only register support for their own interfaces, // we register support for ERC165 itself here _registerInterface(_INTERFACE_ID_ERC165); } /** * @dev See {IERC165-supportsInterface}. * * Time complexity O(1), guaranteed to always use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool) { return _supportedInterfaces[interfaceId]; } /** * @dev Registers the contract as an implementer of the interface defined by * `interfaceId`. Support of the actual ERC165 interface is automatic and * registering its interface id is not required. * * See {IERC165-supportsInterface}. * * Requirements: * * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`). */ function _registerInterface(bytes4 interfaceId) internal { require(interfaceId != 0xffffffff, "ERC165: invalid interface id"); _supportedInterfaces[interfaceId] = true; } } contract HasSecondarySaleFees is ERC165 { event SecondarySaleFees(uint256 tokenId, address[] recipients, uint[] bps); /* * bytes4(keccak256('getFeeBps(uint256)')) == 0x0ebd4c7f * bytes4(keccak256('getFeeRecipients(uint256)')) == 0xb9c4d9fb * * => 0x0ebd4c7f ^ 0xb9c4d9fb == 0xb7799584 */ bytes4 private constant _INTERFACE_ID_FEES = 0xb7799584; constructor() public { _registerInterface(_INTERFACE_ID_FEES); } function getFeeRecipients(uint256 id) public view returns (address payable[] memory); function getFeeBps(uint256 id) public view returns (uint[] memory); } contract ERC1155SaleNonceHolder is OwnableOperatorRole { // keccak256(token, owner, tokenId) => nonce mapping(bytes32 => uint256) public nonces; // keccak256(token, owner, tokenId, nonce) => completed amount mapping(bytes32 => uint256) public completed; function getNonce(address token, uint256 tokenId, address owner) view public returns (uint256) { return nonces[getNonceKey(token, tokenId, owner)]; } function setNonce(address token, uint256 tokenId, address owner, uint256 nonce) public onlyOperator { nonces[getNonceKey(token, tokenId, owner)] = nonce; } function getNonceKey(address token, uint256 tokenId, address owner) pure public returns (bytes32) { return keccak256(abi.encodePacked(token, tokenId, owner)); } function getCompleted(address token, uint256 tokenId, address owner, uint256 nonce) view public returns (uint256) { return completed[getCompletedKey(token, tokenId, owner, nonce)]; } function setCompleted(address token, uint256 tokenId, address owner, uint256 nonce, uint256 _completed) public onlyOperator { completed[getCompletedKey(token, tokenId, owner, nonce)] = _completed; } function getCompletedKey(address token, uint256 tokenId, address owner, uint256 nonce) pure public returns (bytes32) { return keccak256(abi.encodePacked(token, tokenId, owner, nonce)); } } contract ERC1155Sale is AbstractSale { using SafeMath for uint256; using StringLibrary for string; event CloseOrder(address indexed token, uint256 indexed tokenId, address owner, uint256 nonce); event Buy(address indexed token, uint256 indexed tokenId, address owner, uint256 price, address buyer, uint256 value); bytes constant EMPTY = ""; bytes4 private constant _INTERFACE_ID_FEES = 0xb7799584; TransferProxy public transferProxy; ERC1155SaleNonceHolder public nonceHolder; constructor(TransferProxy _transferProxy, ERC1155SaleNonceHolder _nonceHolder) public { transferProxy = _transferProxy; nonceHolder = _nonceHolder; } function buy(IERC1155 token, uint256 tokenId, address payable owner, uint256 selling, uint256 buying, uint8 v, bytes32 r, bytes32 s) public payable { uint256 price = msg.value.div(buying); uint256 nonce = verifySignature(address(token), tokenId, owner, selling, price, v, r, s); verifyOpenAndModifyState(address(token), tokenId, owner, nonce, selling, buying); transferProxy.erc1155safeTransferFrom(token, owner, msg.sender, tokenId, buying, EMPTY); transferEther(token, tokenId, owner); emit Buy(address(token), tokenId, owner, price, msg.sender, buying); } function transferEther(IERC1155 token, uint256 tokenId, address payable owner) internal { uint256 value = msg.value; if (token.supportsInterface(_INTERFACE_ID_FEES)) { HasSecondarySaleFees withFees = HasSecondarySaleFees(address(token)); address payable[] memory recipients = withFees.getFeeRecipients(tokenId); uint[] memory fees = withFees.getFeeBps(tokenId); require(fees.length == recipients.length); for (uint256 i = 0; i < fees.length; i++) { uint current = msg.value.mul(fees[i]).div(10000); recipients[i].transfer(current); value = value.sub(current); } } owner.transfer(value); } function cancel(address token, uint256 tokenId) public payable { uint nonce = nonceHolder.getNonce(token, tokenId, msg.sender); nonceHolder.setNonce(token, tokenId, msg.sender, nonce + 1); emit CloseOrder(token, tokenId, msg.sender, nonce + 1); } function verifySignature(address token, uint256 tokenId, address payable owner, uint256 selling, uint256 price, uint8 v, bytes32 r, bytes32 s) view internal returns (uint256 nonce) { nonce = nonceHolder.getNonce(token, tokenId, owner); require(prepareMessage(token, tokenId, price, selling, nonce).recover(v, r, s) == owner, "incorrect signature"); } function verifyOpenAndModifyState(address token, uint256 tokenId, address payable owner, uint256 nonce, uint256 selling, uint256 buying) internal { uint comp = nonceHolder.getCompleted(token, tokenId, owner, nonce).add(buying); require(comp <= selling); nonceHolder.setCompleted(token, tokenId, owner, nonce, comp); if (comp == selling) { nonceHolder.setNonce(token, tokenId, owner, nonce + 1); emit CloseOrder(token, tokenId, owner, nonce + 1); } } function prepareMessage(address token, uint256 tokenId, uint256 price, uint256 value, uint256 nonce) internal pure returns (string memory) { return prepareMessage(token, tokenId, price, nonce) .append(". value: ", value.toString()); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract TransferProxy","name":"_transferProxy","type":"address"},{"internalType":"contract ERC1155SaleNonceHolder","name":"_nonceHolder","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"address","name":"buyer","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Buy","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"nonce","type":"uint256"}],"name":"CloseOrder","type":"event"},{"constant":false,"inputs":[{"internalType":"contract IERC1155","name":"token","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address payable","name":"owner","type":"address"},{"internalType":"uint256","name":"selling","type":"uint256"},{"internalType":"uint256","name":"buying","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"buy","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"cancel","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"nonceHolder","outputs":[{"internalType":"contract ERC1155SaleNonceHolder","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"transferProxy","outputs":[{"internalType":"contract TransferProxy","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b506040516118fb3803806118fb8339818101604052604081101561003357600080fd5b508051602090910151600080546001600160a01b039384166001600160a01b031991821617909155600180549390921692169190911790556118818061007a6000396000f3fe60806040526004361061003f5760003560e01c806316df6f921461004457806341a259a61461009c5780636e667db3146100cd57806398590ef9146100e2575b600080fd5b61009a600480360361010081101561005b57600080fd5b506001600160a01b0381358116916020810135916040820135169060608101359060808101359060ff60a0820135169060c08101359060e0013561010e565b005b3480156100a857600080fd5b506100b16102f2565b604080516001600160a01b039092168252519081900360200190f35b3480156100d957600080fd5b506100b1610301565b61009a600480360360408110156100f857600080fd5b506001600160a01b038135169060200135610310565b6000610120348663ffffffff61046716565b905060006101348a8a8a8a868a8a8a6104b2565b90506101448a8a8a848b8b6105c8565b6000809054906101000a90046001600160a01b03166001600160a01b0316639c1c2ee98b8a338d8b604051806020016040528060008152506040518763ffffffff1660e01b815260040180876001600160a01b03166001600160a01b03168152602001866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b0316815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561021c578181015183820152602001610204565b50505050905090810190601f1680156102495780820380516001836020036101000a031916815260200191505b50975050505050505050600060405180830381600087803b15801561026d57600080fd5b505af1158015610281573d6000803e3d6000fd5b505050506102908a8a8a6107db565b604080516001600160a01b038a811682526020820185905233828401526060820189905291518b928d16917f710791c544fdcb0c8c5b17f5bfa5b6721dfff68224047778e2d64e426ded61c6919081900360800190a350505050505050505050565b6001546001600160a01b031681565b6000546001600160a01b031681565b6001546040805163250adb3160e11b81526001600160a01b0385811660048301526024820185905233604483015291516000939290921691634a15b66291606480820192602092909190829003018186803b15801561036e57600080fd5b505afa158015610382573d6000803e3d6000fd5b505050506040513d602081101561039857600080fd5b505160018054604080516308345fbf60e01b81526001600160a01b03888116600483015260248201889052336044830152938501606482015290519394509116916308345fbf9160848082019260009290919082900301818387803b15801561040057600080fd5b505af1158015610414573d6000803e3d6000fd5b50506040805133815260018501602082015281518694506001600160a01b03881693507f1910cc041d39d8d4ddb31ea5990a0b170e2b585057bfac4853f3c2929b276ee2929181900390910190a3505050565b60006104a983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610b83565b90505b92915050565b6001546040805163250adb3160e11b81526001600160a01b038b81166004830152602482018b9052898116604483015291516000939290921691634a15b66291606480820192602092909190829003018186803b15801561051257600080fd5b505afa158015610526573d6000803e3d6000fd5b505050506040513d602081101561053c57600080fd5b505190506001600160a01b03871661056b85858561055d8e8e8c8e8a610c25565b92919063ffffffff610c7816565b6001600160a01b0316146105bc576040805162461bcd60e51b8152602060048201526013602482015272696e636f7272656374207369676e617475726560681b604482015290519081900360640190fd5b98975050505050505050565b60015460408051637ad2ec8560e01b81526001600160a01b03898116600483015260248201899052878116604483015260648201879052915160009361066b938693911691637ad2ec8591608480820192602092909190829003018186803b15801561063357600080fd5b505afa158015610647573d6000803e3d6000fd5b505050506040513d602081101561065d57600080fd5b50519063ffffffff610d6d16565b90508281111561067a57600080fd5b60015460408051634bd49ccb60e01b81526001600160a01b038a81166004830152602482018a90528881166044830152606482018890526084820185905291519190921691634bd49ccb9160a480830192600092919082900301818387803b1580156106e557600080fd5b505af11580156106f9573d6000803e3d6000fd5b50505050828114156107d25760018054604080516308345fbf60e01b81526001600160a01b038b81166004830152602482018b905289811660448301529388016064820152905192909116916308345fbf9160848082019260009290919082900301818387803b15801561076c57600080fd5b505af1158015610780573d6000803e3d6000fd5b5050604080516001600160a01b03898116825260018901602083015282518b9550908c1693507f1910cc041d39d8d4ddb31ea5990a0b170e2b585057bfac4853f3c2929b276ee2929181900390910190a35b50505050505050565b604080516301ffc9a760e01b8152632dde656160e21b6004820152905134916001600160a01b038616916301ffc9a791602480820192602092909190829003018186803b15801561082b57600080fd5b505afa15801561083f573d6000803e3d6000fd5b505050506040513d602081101561085557600080fd5b505115610b465760008490506060816001600160a01b031663b9c4d9fb866040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b1580156108a757600080fd5b505afa1580156108bb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156108e457600080fd5b810190808051604051939291908464010000000082111561090457600080fd5b90830190602082018581111561091957600080fd5b825186602082028301116401000000008211171561093657600080fd5b82525081516020918201928201910280838360005b8381101561096357818101518382015260200161094b565b5050505090500160405250505090506060826001600160a01b0316630ebd4c7f876040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b1580156109b857600080fd5b505afa1580156109cc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156109f557600080fd5b8101908080516040519392919084640100000000821115610a1557600080fd5b908301906020820185811115610a2a57600080fd5b8251866020820283011164010000000082111715610a4757600080fd5b82525081516020918201928201910280838360005b83811015610a74578181015183820152602001610a5c565b5050505090500160405250505090508151815114610a9157600080fd5b60005b8151811015610b41576000610ad7612710610acb858581518110610ab457fe5b602002602001015134610dc790919063ffffffff16565b9063ffffffff61046716565b9050838281518110610ae557fe5b60200260200101516001600160a01b03166108fc829081150290604051600060405180830381858888f19350505050158015610b25573d6000803e3d6000fd5b50610b36868263ffffffff610e2016565b955050600101610a94565b505050505b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610b7c573d6000803e3d6000fd5b5050505050565b60008183610c0f5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610bd4578181015183820152602001610bbc565b50505050905090810190601f168015610c015780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581610c1b57fe5b0495945050505050565b6060610c6e60405180604001604052806009815260200168017103b30b63ab29d160bd1b815250610c5585610e62565b610c6189898988610f25565b919063ffffffff610fcd16565b9695505050505050565b600060608590506060610cf16040518060400160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a000000000000815250610cc48451610e62565b60408051600080825260208201818152828401828152606084019283526080840190945288939091611121565b90506001818051906020012087878760405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015610d57573d6000803e3d6000fd5b5050604051601f19015198975050505050505050565b6000828201838110156104a9576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600082610dd6575060006104ac565b82820282848281610de357fe5b04146104a95760405162461bcd60e51b815260040180806020018281038252602181526020018061182c6021913960400191505060405180910390fd5b60006104a983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506113c7565b606081610e8757506040805180820190915260018152600360fc1b6020820152610f20565b8160005b8115610e9f57600101600a82049150610e8b565b6060816040519080825280601f01601f191660200182016040528015610ecc576020820181803883390190505b50905060001982015b8515610f1a57600a860660300160f81b82828060019003935081518110610ef857fe5b60200101906001600160f81b031916908160001a905350600a86049550610ed5565b50925050505b919050565b6060610fc4610f3c866001600160a01b0316611421565b6040518060400160405280600b81526020016a017103a37b5b2b724b21d160ad1b815250610f6987610e62565b6040518060400160405280600981526020016801710383934b1b29d160bd1b815250610f9488610e62565b60405180604001604052806009815260200168017103737b731b29d160bd1b815250610fbf89610e62565b611594565b95945050505050565b60608084905060608490506060849050606081518351855101016040519080825280601f01601f191660200182016040528015611011576020820181803883390190505b5090506000805b85518110156110695785818151811061102d57fe5b602001015160f81c60f81b83838060010194508151811061104a57fe5b60200101906001600160f81b031916908160001a905350600101611018565b5060005b84518110156110be5784818151811061108257fe5b602001015160f81c60f81b83838060010194508151811061109f57fe5b60200101906001600160f81b031916908160001a90535060010161106d565b5060005b8351811015611113578381815181106110d757fe5b602001015160f81c60f81b8383806001019450815181106110f457fe5b60200101906001600160f81b031916908160001a9053506001016110c2565b509098975050505050505050565b60608082518451865188518a518c518e510101010101016040519080825280601f01601f191660200182016040528015611162576020820181803883390190505b5090506000805b8a518110156111ba578a818151811061117e57fe5b602001015160f81c60f81b83838060010194508151811061119b57fe5b60200101906001600160f81b031916908160001a905350600101611169565b5060005b895181101561120f578981815181106111d357fe5b602001015160f81c60f81b8383806001019450815181106111f057fe5b60200101906001600160f81b031916908160001a9053506001016111be565b5060005b88518110156112645788818151811061122857fe5b602001015160f81c60f81b83838060010194508151811061124557fe5b60200101906001600160f81b031916908160001a905350600101611213565b5060005b87518110156112b95787818151811061127d57fe5b602001015160f81c60f81b83838060010194508151811061129a57fe5b60200101906001600160f81b031916908160001a905350600101611268565b5060005b865181101561130e578681815181106112d257fe5b602001015160f81c60f81b8383806001019450815181106112ef57fe5b60200101906001600160f81b031916908160001a9053506001016112bd565b5060005b85518110156113635785818151811061132757fe5b602001015160f81c60f81b83838060010194508151811061134457fe5b60200101906001600160f81b031916908160001a905350600101611312565b5060005b84518110156113b85784818151811061137c57fe5b602001015160f81c60f81b83838060010194508151811061139957fe5b60200101906001600160f81b031916908160001a905350600101611367565b50909998505050505050505050565b600081848411156114195760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610bd4578181015183820152602001610bbc565b505050900390565b604080518082018252601081526f181899199a1a9b1b9c1cb0b131b232b360811b60208201528151602a80825260608281019094526001600160a01b03851692918491602082018180388339019050509050600360fc1b8160008151811061148557fe5b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106114ae57fe5b60200101906001600160f81b031916908160001a90535060005b6014811015610f1a578260048583600c01602081106114e357fe5b1a60f81b6001600160f81b031916901c60f81c60ff168151811061150357fe5b602001015160f81c60f81b82826002026002018151811061152057fe5b60200101906001600160f81b031916908160001a905350828482600c016020811061154757fe5b825191901a600f1690811061155857fe5b602001015160f81c60f81b82826002026003018151811061157557fe5b60200101906001600160f81b031916908160001a9053506001016114c8565b60608082518451865188518a518c518e510101010101016040519080825280601f01601f1916602001820160405280156115d5576020820181803883390190505b5090506000805b8a5181101561162d578a81815181106115f157fe5b602001015160f81c60f81b83838060010194508151811061160e57fe5b60200101906001600160f81b031916908160001a9053506001016115dc565b5060005b89518110156116825789818151811061164657fe5b602001015160f81c60f81b83838060010194508151811061166357fe5b60200101906001600160f81b031916908160001a905350600101611631565b5060005b88518110156116d75788818151811061169b57fe5b602001015160f81c60f81b8383806001019450815181106116b857fe5b60200101906001600160f81b031916908160001a905350600101611686565b5060005b875181101561172c578781815181106116f057fe5b602001015160f81c60f81b83838060010194508151811061170d57fe5b60200101906001600160f81b031916908160001a9053506001016116db565b5060005b86518110156117815786818151811061174557fe5b602001015160f81c60f81b83838060010194508151811061176257fe5b60200101906001600160f81b031916908160001a905350600101611730565b5060005b85518110156117d65785818151811061179a57fe5b602001015160f81c60f81b8383806001019450815181106117b757fe5b60200101906001600160f81b031916908160001a905350600101611785565b5060005b84518110156113b8578481815181106117ef57fe5b602001015160f81c60f81b83838060010194508151811061180c57fe5b60200101906001600160f81b031916908160001a9053506001016117da56fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a265627a7a723158203a5f9b1ef0c09045180897421b56cd5d5970563df039587d6f2c03a0d9d8f3d564736f6c634300051100320000000000000000000000004fee7b061c97c9c496b01dbce9cdb10c02f0a0be000000000000000000000000295fe6bc5ad4bdb770d416c066626e4207e10339
Deployed Bytecode
0x60806040526004361061003f5760003560e01c806316df6f921461004457806341a259a61461009c5780636e667db3146100cd57806398590ef9146100e2575b600080fd5b61009a600480360361010081101561005b57600080fd5b506001600160a01b0381358116916020810135916040820135169060608101359060808101359060ff60a0820135169060c08101359060e0013561010e565b005b3480156100a857600080fd5b506100b16102f2565b604080516001600160a01b039092168252519081900360200190f35b3480156100d957600080fd5b506100b1610301565b61009a600480360360408110156100f857600080fd5b506001600160a01b038135169060200135610310565b6000610120348663ffffffff61046716565b905060006101348a8a8a8a868a8a8a6104b2565b90506101448a8a8a848b8b6105c8565b6000809054906101000a90046001600160a01b03166001600160a01b0316639c1c2ee98b8a338d8b604051806020016040528060008152506040518763ffffffff1660e01b815260040180876001600160a01b03166001600160a01b03168152602001866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b0316815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561021c578181015183820152602001610204565b50505050905090810190601f1680156102495780820380516001836020036101000a031916815260200191505b50975050505050505050600060405180830381600087803b15801561026d57600080fd5b505af1158015610281573d6000803e3d6000fd5b505050506102908a8a8a6107db565b604080516001600160a01b038a811682526020820185905233828401526060820189905291518b928d16917f710791c544fdcb0c8c5b17f5bfa5b6721dfff68224047778e2d64e426ded61c6919081900360800190a350505050505050505050565b6001546001600160a01b031681565b6000546001600160a01b031681565b6001546040805163250adb3160e11b81526001600160a01b0385811660048301526024820185905233604483015291516000939290921691634a15b66291606480820192602092909190829003018186803b15801561036e57600080fd5b505afa158015610382573d6000803e3d6000fd5b505050506040513d602081101561039857600080fd5b505160018054604080516308345fbf60e01b81526001600160a01b03888116600483015260248201889052336044830152938501606482015290519394509116916308345fbf9160848082019260009290919082900301818387803b15801561040057600080fd5b505af1158015610414573d6000803e3d6000fd5b50506040805133815260018501602082015281518694506001600160a01b03881693507f1910cc041d39d8d4ddb31ea5990a0b170e2b585057bfac4853f3c2929b276ee2929181900390910190a3505050565b60006104a983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610b83565b90505b92915050565b6001546040805163250adb3160e11b81526001600160a01b038b81166004830152602482018b9052898116604483015291516000939290921691634a15b66291606480820192602092909190829003018186803b15801561051257600080fd5b505afa158015610526573d6000803e3d6000fd5b505050506040513d602081101561053c57600080fd5b505190506001600160a01b03871661056b85858561055d8e8e8c8e8a610c25565b92919063ffffffff610c7816565b6001600160a01b0316146105bc576040805162461bcd60e51b8152602060048201526013602482015272696e636f7272656374207369676e617475726560681b604482015290519081900360640190fd5b98975050505050505050565b60015460408051637ad2ec8560e01b81526001600160a01b03898116600483015260248201899052878116604483015260648201879052915160009361066b938693911691637ad2ec8591608480820192602092909190829003018186803b15801561063357600080fd5b505afa158015610647573d6000803e3d6000fd5b505050506040513d602081101561065d57600080fd5b50519063ffffffff610d6d16565b90508281111561067a57600080fd5b60015460408051634bd49ccb60e01b81526001600160a01b038a81166004830152602482018a90528881166044830152606482018890526084820185905291519190921691634bd49ccb9160a480830192600092919082900301818387803b1580156106e557600080fd5b505af11580156106f9573d6000803e3d6000fd5b50505050828114156107d25760018054604080516308345fbf60e01b81526001600160a01b038b81166004830152602482018b905289811660448301529388016064820152905192909116916308345fbf9160848082019260009290919082900301818387803b15801561076c57600080fd5b505af1158015610780573d6000803e3d6000fd5b5050604080516001600160a01b03898116825260018901602083015282518b9550908c1693507f1910cc041d39d8d4ddb31ea5990a0b170e2b585057bfac4853f3c2929b276ee2929181900390910190a35b50505050505050565b604080516301ffc9a760e01b8152632dde656160e21b6004820152905134916001600160a01b038616916301ffc9a791602480820192602092909190829003018186803b15801561082b57600080fd5b505afa15801561083f573d6000803e3d6000fd5b505050506040513d602081101561085557600080fd5b505115610b465760008490506060816001600160a01b031663b9c4d9fb866040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b1580156108a757600080fd5b505afa1580156108bb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156108e457600080fd5b810190808051604051939291908464010000000082111561090457600080fd5b90830190602082018581111561091957600080fd5b825186602082028301116401000000008211171561093657600080fd5b82525081516020918201928201910280838360005b8381101561096357818101518382015260200161094b565b5050505090500160405250505090506060826001600160a01b0316630ebd4c7f876040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b1580156109b857600080fd5b505afa1580156109cc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156109f557600080fd5b8101908080516040519392919084640100000000821115610a1557600080fd5b908301906020820185811115610a2a57600080fd5b8251866020820283011164010000000082111715610a4757600080fd5b82525081516020918201928201910280838360005b83811015610a74578181015183820152602001610a5c565b5050505090500160405250505090508151815114610a9157600080fd5b60005b8151811015610b41576000610ad7612710610acb858581518110610ab457fe5b602002602001015134610dc790919063ffffffff16565b9063ffffffff61046716565b9050838281518110610ae557fe5b60200260200101516001600160a01b03166108fc829081150290604051600060405180830381858888f19350505050158015610b25573d6000803e3d6000fd5b50610b36868263ffffffff610e2016565b955050600101610a94565b505050505b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610b7c573d6000803e3d6000fd5b5050505050565b60008183610c0f5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610bd4578181015183820152602001610bbc565b50505050905090810190601f168015610c015780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581610c1b57fe5b0495945050505050565b6060610c6e60405180604001604052806009815260200168017103b30b63ab29d160bd1b815250610c5585610e62565b610c6189898988610f25565b919063ffffffff610fcd16565b9695505050505050565b600060608590506060610cf16040518060400160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a000000000000815250610cc48451610e62565b60408051600080825260208201818152828401828152606084019283526080840190945288939091611121565b90506001818051906020012087878760405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015610d57573d6000803e3d6000fd5b5050604051601f19015198975050505050505050565b6000828201838110156104a9576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600082610dd6575060006104ac565b82820282848281610de357fe5b04146104a95760405162461bcd60e51b815260040180806020018281038252602181526020018061182c6021913960400191505060405180910390fd5b60006104a983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506113c7565b606081610e8757506040805180820190915260018152600360fc1b6020820152610f20565b8160005b8115610e9f57600101600a82049150610e8b565b6060816040519080825280601f01601f191660200182016040528015610ecc576020820181803883390190505b50905060001982015b8515610f1a57600a860660300160f81b82828060019003935081518110610ef857fe5b60200101906001600160f81b031916908160001a905350600a86049550610ed5565b50925050505b919050565b6060610fc4610f3c866001600160a01b0316611421565b6040518060400160405280600b81526020016a017103a37b5b2b724b21d160ad1b815250610f6987610e62565b6040518060400160405280600981526020016801710383934b1b29d160bd1b815250610f9488610e62565b60405180604001604052806009815260200168017103737b731b29d160bd1b815250610fbf89610e62565b611594565b95945050505050565b60608084905060608490506060849050606081518351855101016040519080825280601f01601f191660200182016040528015611011576020820181803883390190505b5090506000805b85518110156110695785818151811061102d57fe5b602001015160f81c60f81b83838060010194508151811061104a57fe5b60200101906001600160f81b031916908160001a905350600101611018565b5060005b84518110156110be5784818151811061108257fe5b602001015160f81c60f81b83838060010194508151811061109f57fe5b60200101906001600160f81b031916908160001a90535060010161106d565b5060005b8351811015611113578381815181106110d757fe5b602001015160f81c60f81b8383806001019450815181106110f457fe5b60200101906001600160f81b031916908160001a9053506001016110c2565b509098975050505050505050565b60608082518451865188518a518c518e510101010101016040519080825280601f01601f191660200182016040528015611162576020820181803883390190505b5090506000805b8a518110156111ba578a818151811061117e57fe5b602001015160f81c60f81b83838060010194508151811061119b57fe5b60200101906001600160f81b031916908160001a905350600101611169565b5060005b895181101561120f578981815181106111d357fe5b602001015160f81c60f81b8383806001019450815181106111f057fe5b60200101906001600160f81b031916908160001a9053506001016111be565b5060005b88518110156112645788818151811061122857fe5b602001015160f81c60f81b83838060010194508151811061124557fe5b60200101906001600160f81b031916908160001a905350600101611213565b5060005b87518110156112b95787818151811061127d57fe5b602001015160f81c60f81b83838060010194508151811061129a57fe5b60200101906001600160f81b031916908160001a905350600101611268565b5060005b865181101561130e578681815181106112d257fe5b602001015160f81c60f81b8383806001019450815181106112ef57fe5b60200101906001600160f81b031916908160001a9053506001016112bd565b5060005b85518110156113635785818151811061132757fe5b602001015160f81c60f81b83838060010194508151811061134457fe5b60200101906001600160f81b031916908160001a905350600101611312565b5060005b84518110156113b85784818151811061137c57fe5b602001015160f81c60f81b83838060010194508151811061139957fe5b60200101906001600160f81b031916908160001a905350600101611367565b50909998505050505050505050565b600081848411156114195760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610bd4578181015183820152602001610bbc565b505050900390565b604080518082018252601081526f181899199a1a9b1b9c1cb0b131b232b360811b60208201528151602a80825260608281019094526001600160a01b03851692918491602082018180388339019050509050600360fc1b8160008151811061148557fe5b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106114ae57fe5b60200101906001600160f81b031916908160001a90535060005b6014811015610f1a578260048583600c01602081106114e357fe5b1a60f81b6001600160f81b031916901c60f81c60ff168151811061150357fe5b602001015160f81c60f81b82826002026002018151811061152057fe5b60200101906001600160f81b031916908160001a905350828482600c016020811061154757fe5b825191901a600f1690811061155857fe5b602001015160f81c60f81b82826002026003018151811061157557fe5b60200101906001600160f81b031916908160001a9053506001016114c8565b60608082518451865188518a518c518e510101010101016040519080825280601f01601f1916602001820160405280156115d5576020820181803883390190505b5090506000805b8a5181101561162d578a81815181106115f157fe5b602001015160f81c60f81b83838060010194508151811061160e57fe5b60200101906001600160f81b031916908160001a9053506001016115dc565b5060005b89518110156116825789818151811061164657fe5b602001015160f81c60f81b83838060010194508151811061166357fe5b60200101906001600160f81b031916908160001a905350600101611631565b5060005b88518110156116d75788818151811061169b57fe5b602001015160f81c60f81b8383806001019450815181106116b857fe5b60200101906001600160f81b031916908160001a905350600101611686565b5060005b875181101561172c578781815181106116f057fe5b602001015160f81c60f81b83838060010194508151811061170d57fe5b60200101906001600160f81b031916908160001a9053506001016116db565b5060005b86518110156117815786818151811061174557fe5b602001015160f81c60f81b83838060010194508151811061176257fe5b60200101906001600160f81b031916908160001a905350600101611730565b5060005b85518110156117d65785818151811061179a57fe5b602001015160f81c60f81b8383806001019450815181106117b757fe5b60200101906001600160f81b031916908160001a905350600101611785565b5060005b84518110156113b8578481815181106117ef57fe5b602001015160f81c60f81b83838060010194508151811061180c57fe5b60200101906001600160f81b031916908160001a9053506001016117da56fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a265627a7a723158203a5f9b1ef0c09045180897421b56cd5d5970563df039587d6f2c03a0d9d8f3d564736f6c63430005110032
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000004fee7b061c97c9c496b01dbce9cdb10c02f0a0be000000000000000000000000295fe6bc5ad4bdb770d416c066626e4207e10339
-----Decoded View---------------
Arg [0] : _transferProxy (address): 0x4feE7B061C97C9c496b01DbcE9CDb10c02f0a0Be
Arg [1] : _nonceHolder (address): 0x295fE6bC5AD4BDb770D416C066626E4207E10339
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000004fee7b061c97c9c496b01dbce9cdb10c02f0a0be
Arg [1] : 000000000000000000000000295fe6bc5ad4bdb770d416c066626e4207e10339
Deployed Bytecode Sourcemap
30420:3569:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31130:621;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;31130:621:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30900:41;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30900:41:0;;;:::i;:::-;;;;-1:-1:-1;;;;;30900:41:0;;;;;;;;;;;;;;30859:34;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30859:34:0;;;:::i;32525:280::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;32525:280:0;;;;;;;;:::i;31130:621::-;31289:13;31305:21;:9;31319:6;31305:21;:13;:21;:::i;:::-;31289:37;;31337:13;31353:72;31377:5;31385:7;31394:5;31401:7;31410:5;31417:1;31420;31423;31353:15;:72::i;:::-;31337:88;;31436:80;31469:5;31477:7;31486:5;31493;31500:7;31509:6;31436:24;:80::i;:::-;31529:13;;;;;;;;;-1:-1:-1;;;;;31529:13:0;-1:-1:-1;;;;;31529:37:0;;31567:5;31574;31581:10;31593:7;31602:6;31610:5;;;;;;;;;;;;31529:87;;;;;;;;;;;;;-1:-1:-1;;;;;31529:87:0;-1:-1:-1;;;;;31529:87:0;;;;;;-1:-1:-1;;;;;31529:87:0;-1:-1:-1;;;;;31529:87:0;;;;;;-1:-1:-1;;;;;31529:87:0;-1:-1:-1;;;;;31529:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;31529:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31529:87:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31529:87:0;;;;31629:36;31643:5;31650:7;31659:5;31629:13;:36::i;:::-;31681:62;;;-1:-1:-1;;;;;31681:62:0;;;;;;;;;;;31724:10;31681:62;;;;;;;;;;;;31701:7;;31681:62;;;;;;;;;;;;;31130:621;;;;;;;;;;:::o;30900:41::-;;;-1:-1:-1;;;;;30900:41:0;;:::o;30859:34::-;;;-1:-1:-1;;;;;30859:34:0;;:::o;32525:280::-;32612:11;;:48;;;-1:-1:-1;;;32612:48:0;;-1:-1:-1;;;;;32612:48:0;;;;;;;;;;;;;32649:10;32612:48;;;;;;32599:10;;32612:11;;;;;:20;;:48;;;;;;;;;;;;;;;:11;:48;;;5:2:-1;;;;30:1;27;20:12;5:2;32612:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32612:48:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32612:48:0;32671:11;;;:59;;;-1:-1:-1;;;32671:59:0;;-1:-1:-1;;;;;32671:59:0;;;;;;;;;;;;;32708:10;32671:59;;;;32720:9;;;32671:59;;;;;;32612:48;;-1:-1:-1;32671:11:0;;;:20;;:59;;;;;:11;;:59;;;;;;;;:11;;:59;;;5:2:-1;;;;30:1;27;20:12;5:2;32671:59:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;32748:49:0;;;32775:10;32748:49;;32795:1;32787:9;;32748:49;;;;;;32766:7;;-1:-1:-1;;;;;;32748:49:0;;;-1:-1:-1;32748:49:0;;;;;;;;;;;32525:280;;;:::o;11455:132::-;11513:7;11540:39;11544:1;11547;11540:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;11533:46;;11455:132;;;;;:::o;32813:373::-;33013:11;;:43;;;-1:-1:-1;;;33013:43:0;;-1:-1:-1;;;;;33013:43:0;;;;;;;;;;;;;;;;;;;;;;32979:13;;33013:11;;;;;:20;;:43;;;;;;;;;;;;;;;:11;:43;;;5:2:-1;;;;30:1;27;20:12;5:2;33013:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33013:43:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;33013:43:0;;-1:-1:-1;;;;;;33075:79:0;;:70;33137:1;33140;33143;33075:53;33090:5;33097:7;33106:5;33113:7;33013:43;33075:14;:53::i;:::-;:61;:70;;;:61;:70;:::i;:::-;-1:-1:-1;;;;;33075:79:0;;33067:111;;;;;-1:-1:-1;;;33067:111:0;;;;;;;;;;;;-1:-1:-1;;;33067:111:0;;;;;;;;;;;;;;;32813:373;;;;;;;;;;:::o;33194:527::-;33363:11;;:54;;;-1:-1:-1;;;33363:54:0;;-1:-1:-1;;;;;33363:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;33351:9;;33363:66;;33422:6;;33363:11;;;:24;;:54;;;;;;;;;;;;;;;:11;:54;;;5:2:-1;;;;30:1;27;20:12;5:2;33363:54:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33363:54:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;33363:54:0;;:66;:58;:66;:::i;:::-;33351:78;;33456:7;33448:4;:15;;33440:24;;;;;;33475:11;;:60;;;-1:-1:-1;;;33475:60:0;;-1:-1:-1;;;;;33475:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:11;;;;;:24;;:60;;;;;:11;;:60;;;;;;;:11;;:60;;;5:2:-1;;;;30:1;27;20:12;5:2;33475:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33475:60:0;;;;33560:7;33552:4;:15;33548:166;;;33584:11;;;:54;;;-1:-1:-1;;;33584:54:0;;-1:-1:-1;;;;;33584:54:0;;;;;;;;;;;;;;;;;;;;33628:9;;;33584:54;;;;;;:11;;;;;:20;;:54;;;;;:11;;:54;;;;;;;;:11;;:54;;;5:2:-1;;;;30:1;27;20:12;5:2;33584:54:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;33658:44:0;;;-1:-1:-1;;;;;33658:44:0;;;;;33700:1;33692:9;;33658:44;;;;;;33676:7;;-1:-1:-1;33658:44:0;;;;-1:-1:-1;33658:44:0;;;;;;;;;;;33548:166;33194:527;;;;;;;:::o;31759:758::-;31898:43;;;-1:-1:-1;;;31898:43:0;;-1:-1:-1;;;31898:43:0;;;;;;31874:9;;-1:-1:-1;;;;;31898:23:0;;;;;:43;;;;;;;;;;;;;;;:23;:43;;;5:2:-1;;;;30:1;27;20:12;5:2;31898:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31898:43:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31898:43:0;31894:584;;;31958:29;32019:5;31958:68;;32041:35;32079:8;-1:-1:-1;;;;;32079:25:0;;32105:7;32079:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32079:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32079:34:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;32079:34:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;13:2;5:11;;2:2;;;29:1;26;19:12;2:2;32079:34:0;;;;;;;;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;261:11;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;373:25;;-1:-1;32079:34:0;;421:4:-1;412:14;;;;32079:34:0;;;;;412:14:-1;32079:34:0;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;32079:34:0;;;;;;;;;;;32041:72;;32128:18;32149:8;-1:-1:-1;;;;;32149:18:0;;32168:7;32149:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32149:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32149:27:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;32149:27:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;13:2;5:11;;2:2;;;29:1;26;19:12;2:2;32149:27:0;;;;;;;;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;261:11;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;373:25;;-1:-1;32149:27:0;;421:4:-1;412:14;;;;32149:27:0;;;;;412:14:-1;32149:27:0;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;32149:27:0;;;;;;;;;;;32128:48;;32214:10;:17;32199:4;:11;:32;32191:41;;;;;;32252:9;32247:220;32271:4;:11;32267:1;:15;32247:220;;;32308:12;32323:33;32350:5;32323:22;32337:4;32342:1;32337:7;;;;;;;;;;;;;;32323:9;:13;;:22;;;;:::i;:::-;:26;:33;:26;:33;:::i;:::-;32308:48;;32375:10;32386:1;32375:13;;;;;;;;;;;;;;-1:-1:-1;;;;;32375:22:0;:31;32398:7;32375:31;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;32433:18:0;:5;32443:7;32433:18;:9;:18;:::i;:::-;32425:26;-1:-1:-1;;32284:3:0;;32247:220;;;;31894:584;;;;32488:21;;-1:-1:-1;;;;;32488:14:0;;;:21;;;;;32503:5;;32488:21;;;;32503:5;32488:14;:21;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32488:21:0;31759:758;;;;:::o;12117:345::-;12203:7;12305:12;12298:5;12290:28;;;;-1:-1:-1;;;12290:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;12290:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12329:9;12345:1;12341;:5;;;;;;;12117:345;-1:-1:-1;;;;;12117:345:0:o;33729:257::-;33853:13;33886:92;;;;;;;;;;;;;;-1:-1:-1;;;33886:92:0;;;33961:16;:5;:14;:16::i;:::-;33886:44;33901:5;33908:7;33917:5;33924;33886:14;:44::i;:::-;:61;:92;;:61;:92;:::i;:::-;33879:99;33729:257;-1:-1:-1;;;;;;33729:257:0:o;15309:469::-;15403:7;15423:21;15453:7;15423:38;;15472:24;15499:211;15520:39;;;;;;;;;;;;;;;;;15580:26;:8;:15;:24;:26::i;:::-;15645:12;;;15655:1;15645:12;;;;;;15659;;;;;;15673;;;;;;15687;;;;;;;;;15622:8;;15645:12;;15499:6;:211::i;:::-;15472:238;;15728:42;15748:11;15738:22;;;;;;15762:1;15765;15768;15728:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;15728:42:0;;-1:-1:-1;;15728:42:0;;;15309:469;-1:-1:-1;;;;;;;;15309:469:0:o;9144:181::-;9202:7;9234:5;;;9258:6;;;;9250:46;;;;;-1:-1:-1;;;9250:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;10516:471;10574:7;10819:6;10815:47;;-1:-1:-1;10849:1:0;10842:8;;10815:47;10886:5;;;10890:1;10886;:5;:1;10910:5;;;;;:10;10902:56;;;;-1:-1:-1;;;10902:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9600:136;9658:7;9685:43;9689:1;9692;9685:43;;;;;;;;;;;;;;;;;:3;:43::i;13768:471::-;13821:13;13851:7;13847:50;;-1:-1:-1;13875:10:0;;;;;;;;;;;;-1:-1:-1;;;13875:10:0;;;;;;13847:50;13916:2;13907:6;13948:69;13955:6;;13948:69;;13978:5;;14003:2;13998:7;;;;13948:69;;;14027:17;14057:3;14047:14;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;104:10;14047:14:0;87:34:-1;135:17;;-1:-1;14047:14:0;-1:-1:-1;14027:34:0;-1:-1:-1;;;14081:7:0;;14099:103;14106:7;;14099:103;;14163:2;14158;:7;14153:2;:12;14142:25;;14130:4;14135:3;;;;;;;14130:9;;;;;;;;;;;:37;-1:-1:-1;;;;;14130:37:0;;;;;;;;-1:-1:-1;14188:2:0;14182:8;;;;14099:103;;;-1:-1:-1;14226:4:0;-1:-1:-1;;;13768:471:0;;;;:::o;17311:433::-;17420:13;17460:275;17490:16;:5;-1:-1:-1;;;;;17490:14:0;;:16::i;:::-;17522:20;;;;;;;;;;;;;-1:-1:-1;;;17522:20:0;;;17563:18;:7;:16;:18::i;:::-;17597;;;;;;;;;;;;;-1:-1:-1;;;17597:18:0;;;17636:16;:5;:14;:16::i;:::-;17668:18;;;;;;;;;;;;;-1:-1:-1;;;17668:18:0;;;17707:16;:5;:14;:16::i;:::-;17460:9;:275::i;:::-;17446:290;17311:433;-1:-1:-1;;;;;17311:433:0:o;14743:558::-;14836:13;14862:16;14887:2;14862:28;;14901:16;14926:2;14901:28;;14940:16;14965:2;14940:28;;14979:16;15034:3;:10;15021:3;:10;15008:3;:10;:23;:36;14998:47;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;104:10;14998:47:0;87:34:-1;135:17;;-1:-1;14998:47:0;-1:-1:-1;14979:66:0;-1:-1:-1;15056:6:0;;15077:55;15098:3;:10;15094:1;:14;15077:55;;;15126:3;15130:1;15126:6;;;;;;;;;;;;;;;;15115:3;15119;;;;;;15115:8;;;;;;;;;;;:17;-1:-1:-1;;;;;15115:17:0;;;;;;;;-1:-1:-1;15110:3:0;;15077:55;;;-1:-1:-1;15148:6:0;15143:55;15164:3;:10;15160:1;:14;15143:55;;;15192:3;15196:1;15192:6;;;;;;;;;;;;;;;;15181:3;15185;;;;;;15181:8;;;;;;;;;;;:17;-1:-1:-1;;;;;15181:17:0;;;;;;;;-1:-1:-1;15176:3:0;;15143:55;;;-1:-1:-1;15214:6:0;15209:55;15230:3;:10;15226:1;:14;15209:55;;;15258:3;15262:1;15258:6;;;;;;;;;;;;;;;;15247:3;15251;;;;;;15247:8;;;;;;;;;;;:17;-1:-1:-1;;;;;15247:17:0;;;;;;;;-1:-1:-1;15242:3:0;;15209:55;;;-1:-1:-1;15289:3:0;;14743:558;-1:-1:-1;;;;;;;;14743:558:0:o;15786:892::-;15951:12;15976:24;16091:3;:10;16078:3;:10;16065:3;:10;16052:3;:10;16039:3;:10;16026:3;:10;16013:3;:10;:23;:36;:49;:62;:75;:88;16003:99;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;104:10;16003:99:0;87:34:-1;135:17;;-1:-1;16003:99:0;-1:-1:-1;15976:126:0;-1:-1:-1;16113:6:0;;16134:63;16155:3;:10;16151:1;:14;16134:63;;;16191:3;16195:1;16191:6;;;;;;;;;;;;;;;;16172:11;16184:3;;;;;;16172:16;;;;;;;;;;;:25;-1:-1:-1;;;;;16172:25:0;;;;;;;;-1:-1:-1;16167:3:0;;16134:63;;;-1:-1:-1;16213:6:0;16208:63;16229:3;:10;16225:1;:14;16208:63;;;16265:3;16269:1;16265:6;;;;;;;;;;;;;;;;16246:11;16258:3;;;;;;16246:16;;;;;;;;;;;:25;-1:-1:-1;;;;;16246:25:0;;;;;;;;-1:-1:-1;16241:3:0;;16208:63;;;-1:-1:-1;16287:6:0;16282:63;16303:3;:10;16299:1;:14;16282:63;;;16339:3;16343:1;16339:6;;;;;;;;;;;;;;;;16320:11;16332:3;;;;;;16320:16;;;;;;;;;;;:25;-1:-1:-1;;;;;16320:25:0;;;;;;;;-1:-1:-1;16315:3:0;;16282:63;;;-1:-1:-1;16361:6:0;16356:63;16377:3;:10;16373:1;:14;16356:63;;;16413:3;16417:1;16413:6;;;;;;;;;;;;;;;;16394:11;16406:3;;;;;;16394:16;;;;;;;;;;;:25;-1:-1:-1;;;;;16394:25:0;;;;;;;;-1:-1:-1;16389:3:0;;16356:63;;;-1:-1:-1;16435:6:0;16430:63;16451:3;:10;16447:1;:14;16430:63;;;16487:3;16491:1;16487:6;;;;;;;;;;;;;;;;16468:11;16480:3;;;;;;16468:16;;;;;;;;;;;:25;-1:-1:-1;;;;;16468:25:0;;;;;;;;-1:-1:-1;16463:3:0;;16430:63;;;-1:-1:-1;16509:6:0;16504:63;16525:3;:10;16521:1;:14;16504:63;;;16561:3;16565:1;16561:6;;;;;;;;;;;;;;;;16542:11;16554:3;;;;;;16542:16;;;;;;;;;;;:25;-1:-1:-1;;;;;16542:25:0;;;;;;;;-1:-1:-1;16537:3:0;;16504:63;;;-1:-1:-1;16583:6:0;16578:63;16599:3;:10;16595:1;:14;16578:63;;;16635:3;16639:1;16635:6;;;;;;;;;;;;;;;;16616:11;16628:3;;;;;;16616:16;;;;;;;;;;;:25;-1:-1:-1;;;;;16616:25:0;;;;;;;;-1:-1:-1;16611:3:0;;16578:63;;;-1:-1:-1;16659:11:0;;15786:892;-1:-1:-1;;;;;;;;;15786:892:0:o;10073:192::-;10159:7;10195:12;10187:6;;;;10179:29;;;;-1:-1:-1;;;10179:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;10179:29:0;-1:-1:-1;;;10231:5:0;;;10073:192::o;16715:483::-;16847:42;;;;;;;;;;;-1:-1:-1;;;16847:42:0;;;;16919:13;;16929:2;16919:13;;;16771;16919;;;;;;-1:-1:-1;;;;;16821:14:0;;;16847:42;16771:13;;16919;;;21:6:-1;;104:10;16919:13:0;87:34:-1;135:17;;-1:-1;16919:13:0;16900:32;;-1:-1:-1;;;16943:3:0;16947:1;16943:6;;;;;;;;;;;:12;-1:-1:-1;;;;;16943:12:0;;;;;;;;;-1:-1:-1;;;16966:3:0;16970:1;16966:6;;;;;;;;;;;:12;-1:-1:-1;;;;;16966:12:0;;;;;;;;-1:-1:-1;16994:9:0;16989:173;17013:2;17009:1;:6;16989:173;;;17050:8;17082:1;17065:5;17071:1;17075:2;17071:6;17065:13;;;;;;;;;;-1:-1:-1;;;;;17065:18:0;;;;17059:25;;17050:35;;;;;;;;;;;;;;;;;;17037:3;17043:1;17045;17043:3;17041:1;:5;17037:10;;;;;;;;;;;:48;-1:-1:-1;;;;;17037:48:0;;;;;;;;;17113:8;17128:5;17134:1;17138:2;17134:6;17128:13;;;;;;;17113:37;;17128:13;;;17144:4;17122:27;;17113:37;;;;;;;;;;;;;;17100:3;17106:1;17108;17106:3;17104:1;:5;17100:10;;;;;;;;;;;:50;-1:-1:-1;;;;;17100:50:0;;;;;;;;-1:-1:-1;17017:3:0;;16989:173;;17752:895;17920:12;17945:24;18060:3;:10;18047:3;:10;18034:3;:10;18021:3;:10;18008:3;:10;17995:3;:10;17982:3;:10;:23;:36;:49;:62;:75;:88;17972:99;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;104:10;17972:99:0;87:34:-1;135:17;;-1:-1;17972:99:0;-1:-1:-1;17945:126:0;-1:-1:-1;18082:6:0;;18103:63;18124:3;:10;18120:1;:14;18103:63;;;18160:3;18164:1;18160:6;;;;;;;;;;;;;;;;18141:11;18153:3;;;;;;18141:16;;;;;;;;;;;:25;-1:-1:-1;;;;;18141:25:0;;;;;;;;-1:-1:-1;18136:3:0;;18103:63;;;-1:-1:-1;18182:6:0;18177:63;18198:3;:10;18194:1;:14;18177:63;;;18234:3;18238:1;18234:6;;;;;;;;;;;;;;;;18215:11;18227:3;;;;;;18215:16;;;;;;;;;;;:25;-1:-1:-1;;;;;18215:25:0;;;;;;;;-1:-1:-1;18210:3:0;;18177:63;;;-1:-1:-1;18256:6:0;18251:63;18272:3;:10;18268:1;:14;18251:63;;;18308:3;18312:1;18308:6;;;;;;;;;;;;;;;;18289:11;18301:3;;;;;;18289:16;;;;;;;;;;;:25;-1:-1:-1;;;;;18289:25:0;;;;;;;;-1:-1:-1;18284:3:0;;18251:63;;;-1:-1:-1;18330:6:0;18325:63;18346:3;:10;18342:1;:14;18325:63;;;18382:3;18386:1;18382:6;;;;;;;;;;;;;;;;18363:11;18375:3;;;;;;18363:16;;;;;;;;;;;:25;-1:-1:-1;;;;;18363:25:0;;;;;;;;-1:-1:-1;18358:3:0;;18325:63;;;-1:-1:-1;18404:6:0;18399:63;18420:3;:10;18416:1;:14;18399:63;;;18456:3;18460:1;18456:6;;;;;;;;;;;;;;;;18437:11;18449:3;;;;;;18437:16;;;;;;;;;;;:25;-1:-1:-1;;;;;18437:25:0;;;;;;;;-1:-1:-1;18432:3:0;;18399:63;;;-1:-1:-1;18478:6:0;18473:63;18494:3;:10;18490:1;:14;18473:63;;;18530:3;18534:1;18530:6;;;;;;;;;;;;;;;;18511:11;18523:3;;;;;;18511:16;;;;;;;;;;;:25;-1:-1:-1;;;;;18511:25:0;;;;;;;;-1:-1:-1;18506:3:0;;18473:63;;;-1:-1:-1;18552:6:0;18547:63;18568:3;:10;18564:1;:14;18547:63;;;18604:3;18608:1;18604:6;;;;;;;;;;;;;;;;18585:11;18597:3;;;;;;18585:16;;;;;;;;;;;:25;-1:-1:-1;;;;;18585:25:0;;;;;;;;-1:-1:-1;18580:3:0;;18547:63;
Swarm Source
bzzr://3a5f9b1ef0c09045180897421b56cd5d5970563df039587d6f2c03a0d9d8f3d5
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.