Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 1,482 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Redeem Bulk ERC2... | 11984956 | 1417 days ago | IN | 0 ETH | 0.00397269 | ||||
Redeem Bulk ERC2... | 11982700 | 1418 days ago | IN | 0 ETH | 0.01444144 | ||||
Redeem Bulk ERC2... | 11978928 | 1418 days ago | IN | 0 ETH | 0.010662 | ||||
Redeem ERC1155 | 11963803 | 1420 days ago | IN | 0 ETH | 0.00326103 | ||||
Redeem ERC1155 | 11963793 | 1420 days ago | IN | 0 ETH | 0.00234047 | ||||
Redeem ERC1155 | 11963793 | 1420 days ago | IN | 0 ETH | 0.00326014 | ||||
Redeem ERC1155 | 11963677 | 1421 days ago | IN | 0 ETH | 0.00277552 | ||||
Redeem Bulk ERC2... | 11955912 | 1422 days ago | IN | 0 ETH | 0.006966 | ||||
Redeem ERC1155 | 11946030 | 1423 days ago | IN | 0 ETH | 0.00352544 | ||||
Redeem Bulk ERC2... | 11946019 | 1423 days ago | IN | 0 ETH | 0.02559472 | ||||
Redeem ERC1155 | 11946004 | 1423 days ago | IN | 0 ETH | 0.00250493 | ||||
Redeem ERC1155 | 11945988 | 1423 days ago | IN | 0 ETH | 0.00317203 | ||||
Redeem Bulk ERC2... | 11945950 | 1423 days ago | IN | 0 ETH | 0.02798784 | ||||
Redeem Bulk ERC2... | 11942231 | 1424 days ago | IN | 0 ETH | 0.03008534 | ||||
Redeem ERC1155 | 11942187 | 1424 days ago | IN | 0 ETH | 0.00343543 | ||||
Redeem ERC1155 | 11942175 | 1424 days ago | IN | 0 ETH | 0.00339323 | ||||
Redeem ERC1155 | 11942145 | 1424 days ago | IN | 0 ETH | 0.00339323 | ||||
Redeem ERC1155 | 11942109 | 1424 days ago | IN | 0 ETH | 0.0033086 | ||||
Redeem ERC1155 | 11942105 | 1424 days ago | IN | 0 ETH | 0.0033086 | ||||
Redeem Bulk ERC2... | 11942098 | 1424 days ago | IN | 0 ETH | 0.02926714 | ||||
Redeem ERC1155 | 11942087 | 1424 days ago | IN | 0 ETH | 0.0033042 | ||||
Redeem ERC1155 | 11942066 | 1424 days ago | IN | 0 ETH | 0.00334825 | ||||
Redeem ERC1155 | 11942054 | 1424 days ago | IN | 0 ETH | 0.00334825 | ||||
Redeem ERC1155 | 11942029 | 1424 days ago | IN | 0 ETH | 0.00356853 | ||||
Redeem Bulk ERC2... | 11942008 | 1424 days ago | IN | 0 ETH | 0.0282609 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
NFTLootbox
Compiler Version
v0.7.3+commit.9bfce1f6
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT pragma solidity 0.7.3; import "./Context.sol"; import "./SafeMath.sol"; import "./Ownable.sol"; import "./IERC20.sol"; import "./IERC1155.sol"; import "./ReentrancyGuard.sol"; contract NFTLootbox is Context, Ownable, ReentrancyGuard { using SafeMath for uint256; constructor (address _transferAddress) { transferAddress = _transferAddress; } event Bet(uint256 indexed bet, address account, uint256 lootboxID, uint256 seed, uint256 nonce); event UpdateLootbox(uint256 indexed id, address paymentToken, uint256 price); mapping(uint256 => address) public lootboxPaymentToken; mapping(uint256 => uint256) public lootboxPrice; address public transferAddress; address public authAddress; address private feeAddress = 0x4Cf135b4f0236B0fC55DfA9a09B25843416cE023; uint256 public totalBets; mapping(uint256 => address) public claimedBet; function submitBet(uint256 lootboxID, uint256 seed, uint256 bets) public nonReentrant { require(lootboxPaymentToken[lootboxID] != address(0), "Invalid Lootbox"); require(lootboxPrice[lootboxID] > 0, "Invalid Lootbox"); require(bets > 0, "Must place bets"); for (uint256 i = 1; i <= bets; i++) { claimedBet[totalBets.add(i)] = _msgSender(); emit Bet(totalBets.add(i), _msgSender(), lootboxID, seed, i); } totalBets = totalBets.add(bets); uint256 cost = lootboxPrice[lootboxID].mul(1e18).mul(bets); uint256 keep = cost.div(10); IERC20(lootboxPaymentToken[lootboxID]).transferFrom(_msgSender(), feeAddress, keep); IERC20(lootboxPaymentToken[lootboxID]).transferFrom(_msgSender(), address(this), cost.sub(keep)); IERC20(lootboxPaymentToken[lootboxID]).burn(cost.sub(keep)); } function redeemERC1155(address asset, uint256 id, uint256 amount, uint256 bet, uint8 v, bytes32 r, bytes32 s) public nonReentrant { require(claimedBet[bet] == _msgSender(), "Invalid bet"); bytes32 hash = keccak256(abi.encode(asset, id, amount, bet)); address signer = ecrecover(hash, v, r, s); require(signer == authAddress, "Invalid signature"); claimedBet[bet] = address(0); IERC1155(asset).safeTransferFrom(transferAddress, _msgSender(), id, amount, ""); } function redeemERC20(address asset, uint256 id, uint256 amount, uint256 bet, uint8 v, bytes32 r, bytes32 s) public nonReentrant { require(claimedBet[bet] == _msgSender(), "Invalid bet"); bytes32 hash = keccak256(abi.encode(asset, id, amount, bet)); address signer = ecrecover(hash, v, r, s); require(signer == authAddress, "Invalid signature"); claimedBet[bet] = address(0); IERC20(asset).transferFrom(transferAddress, _msgSender(), amount); } function redeemBulkERC20(address asset, uint256 id, uint256 amount, uint256[] calldata bet, uint8 v, bytes32 r, bytes32 s) public nonReentrant { bytes32 hash = keccak256(abi.encode(asset, id, amount, bet[0])); address signer = ecrecover(hash, v, r, s); require(signer == authAddress, "Invalid signature"); for (uint256 i = 0; i < bet.length; i++) { require(claimedBet[bet[i]] == _msgSender(), "Invalid bet"); claimedBet[bet[i]] = address(0); } IERC20(asset).transferFrom(transferAddress, _msgSender(), amount * bet.length); } function setTransferAddress(address _address) public onlyOwner nonReentrant { transferAddress = _address; } function setAuthAddress(address _address) public onlyOwner nonReentrant { authAddress = _address; } function updateLootbox(uint256 id, address paymentTokenAddress, uint256 price) public onlyOwner nonReentrant { lootboxPrice[id] = price; lootboxPaymentToken[id] = paymentTokenAddress; emit UpdateLootbox(id, paymentTokenAddress, price); } }
// SPDX-License-Identifier: MIT pragma solidity 0.7.3; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies in extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT pragma solidity 0.7.3; /* * @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. */ abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } }
// SPDX-License-Identifier: MIT pragma solidity 0.7.3; interface IERC1155 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external; }
// SPDX-License-Identifier: MIT pragma solidity 0.7.3; import "./IERC1155.sol"; /** * @dev Interface of the optional ERC1155MetadataExtension interface, as defined * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP]. * * _Available since v3.1._ */ interface IERC1155MetadataURI is IERC1155 { /** * @dev Returns the URI for token type `id`. * * If the `\{id\}` substring is present in the URI, it must be replaced by * clients with the actual token type ID. */ function uri(uint256 id) external view returns (string memory); }
// SPDX-License-Identifier: MIT pragma solidity 0.7.3; interface IERC1155Receiver { /** @dev Handles the receipt of a single ERC1155 token type. This function is called at the end of a `safeTransferFrom` after the balance has been updated. To accept the transfer, this must return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` (i.e. 0xf23a6e61, or its own function selector). @param operator The address which initiated the transfer (i.e. msg.sender) @param from The address which previously owned the token @param id The ID of the token being transferred @param value The amount of tokens being transferred @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns(bytes4); /** @dev Handles the receipt of a multiple ERC1155 token types. This function is called at the end of a `safeBatchTransferFrom` after the balances have been updated. To accept the transfer(s), this must return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` (i.e. 0xbc197c81, or its own function selector). @param operator The address which initiated the batch transfer (i.e. msg.sender) @param from The address which previously owned the token @param ids An array containing ids of each token being transferred (order and length must match values array) @param values An array containing amounts of each token being transferred (order and length must match ids array) @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns(bytes4); }
// SPDX-License-Identifier: MIT pragma solidity 0.7.3; import "./Address.sol"; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); function mint(address to, uint256 amount) external; function burn(uint256 amount) external; }
// SPDX-License-Identifier: MIT pragma solidity 0.7.3; interface ILOOTBOX { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); function mint(address to, uint256 amount) external; }
// SPDX-License-Identifier: MIT pragma solidity 0.7.3; import "./Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { 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(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { 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 virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } }
// SPDX-License-Identifier: MIT pragma solidity 0.7.3; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor () { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } }
// SPDX-License-Identifier: MIT pragma solidity 0.7.3; /** * @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. */ 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. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { 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. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_transferAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"bet","type":"uint256"},{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"lootboxID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"seed","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nonce","type":"uint256"}],"name":"Bet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"address","name":"paymentToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"}],"name":"UpdateLootbox","type":"event"},{"inputs":[],"name":"authAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"claimedBet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"lootboxPaymentToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"lootboxPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256[]","name":"bet","type":"uint256[]"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"redeemBulkERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"bet","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"redeemERC1155","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"bet","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"redeemERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setAuthAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setTransferAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"lootboxID","type":"uint256"},{"internalType":"uint256","name":"seed","type":"uint256"},{"internalType":"uint256","name":"bets","type":"uint256"}],"name":"submitBet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalBets","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transferAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"address","name":"paymentTokenAddress","type":"address"},{"internalType":"uint256","name":"price","type":"uint256"}],"name":"updateLootbox","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052734cf135b4f0236b0fc55dfa9a09b25843416ce023600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034801561006557600080fd5b50604051620028e7380380620028e78339818101604052602081101561008a57600080fd5b810190808051906020019092919050505060006100ab61019760201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506001808190555080600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505061019f565b600033905090565b61273880620001af6000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c806393d65f3411610097578063c73e618311610066578063c73e6183146104a2578063d272265614610525578063f2fde38b1461057d578063f444fdd8146105c157610100565b806393d65f34146103b657806399df609a1461040e578063a64719d714610450578063befa1e2f1461048457610100565b80636afc7340116100d35780636afc734014610227578063715018a6146102f55780637cdc2972146102ff5780638da5cb5b1461038257610100565b80631026569314610105578063185a56711461014957806330fc59a41461018d5780635c5396b2146101cf575b600080fd5b6101476004803603602081101561011b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506105f5565b005b61018b6004803603602081101561015f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610789565b005b6101b9600480360360208110156101a357600080fd5b810190808035906020019092919050505061091d565b6040518082815260200191505060405180910390f35b6101fb600480360360208110156101e557600080fd5b8101908080359060200190929190505050610935565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102f3600480360360e081101561023d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561028e57600080fd5b8201836020820111156102a057600080fd5b803590602001918460208302840111640100000000831117156102c257600080fd5b9091929391929390803560ff1690602001909291908035906020019092919080359060200190929190505050610968565b005b6102fd610dfa565b005b610380600480360360e081101561031557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803560ff1690602001909291908035906020019092919080359060200190929190505050610f80565b005b61038a6113b1565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103e2600480360360208110156103cc57600080fd5b81019080803590602001909291905050506113da565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61044e6004803603606081101561042457600080fd5b8101908080359060200190929190803590602001909291908035906020019092919050505061140d565b005b610458611ae0565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61048c611b06565b6040518082815260200191505060405180910390f35b610523600480360360e08110156104b857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803560ff1690602001909291908035906020019092919080359060200190929190505050611b0c565b005b61057b6004803603606081101561053b57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611f45565b005b6105bf6004803603602081101561059357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061215a565b005b6105c9612365565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105fd61238b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146106bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60026001541415610736576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b600260018190555080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001808190555050565b61079161238b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610851576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600260015414156108ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b600260018190555080600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001808190555050565b60036020528060005260406000206000915090505481565b60026020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260015414156109e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60026001819055506000888888888860008181106109fb57fe5b90506020020135604051602001808573ffffffffffffffffffffffffffffffffffffffff168152602001848152602001838152602001828152602001945050505050604051602081830303815290604052805190602001209050600060018286868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015610ab1573d6000803e3d6000fd5b505050602060405103519050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610b80576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f496e76616c6964207369676e617475726500000000000000000000000000000081525060200191505060405180910390fd5b60005b87879050811015610ced57610b9661238b565b73ffffffffffffffffffffffffffffffffffffffff16600860008a8a85818110610bbc57fe5b90506020020135815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c7b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f496e76616c69642062657400000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600860008a8a85818110610c8d57fe5b90506020020135815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508080600101915050610b83565b508973ffffffffffffffffffffffffffffffffffffffff166323b872dd600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610d3561238b565b8a8a90508c026040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015610dab57600080fd5b505af1158015610dbf573d6000803e3d6000fd5b505050506040513d6020811015610dd557600080fd5b8101908080519060200190929190505050505050600180819055505050505050505050565b610e0261238b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ec2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60026001541415610ff9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b600260018190555061100961238b565b73ffffffffffffffffffffffffffffffffffffffff166008600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f496e76616c69642062657400000000000000000000000000000000000000000081525060200191505060405180910390fd5b600087878787604051602001808573ffffffffffffffffffffffffffffffffffffffff168152602001848152602001838152602001828152602001945050505050604051602081830303815290604052805190602001209050600060018286868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611191573d6000803e3d6000fd5b505050602060405103519050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611260576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f496e76616c6964207369676e617475726500000000000000000000000000000081525060200191505060405180910390fd5b60006008600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508873ffffffffffffffffffffffffffffffffffffffff1663f242432a600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166112fa61238b565b8b8b6040518563ffffffff1660e01b8152600401808573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020018060200182810382526000815260200160200195505050505050600060405180830381600087803b15801561138757600080fd5b505af115801561139b573d6000803e3d6000fd5b5050505050506001808190555050505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60086020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60026001541415611486576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6002600181905550600073ffffffffffffffffffffffffffffffffffffffff166002600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f496e76616c6964204c6f6f74626f78000000000000000000000000000000000081525060200191505060405180910390fd5b60006003600085815260200190815260200160002054116115ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f496e76616c6964204c6f6f74626f78000000000000000000000000000000000081525060200191505060405180910390fd5b60008111611663576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f4d75737420706c6163652062657473000000000000000000000000000000000081525060200191505060405180910390fd5b6000600190505b81811161176c5761167961238b565b600860006116928460075461239390919063ffffffff16565b815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506116f38160075461239390919063ffffffff16565b7f315f79b2e911ff337a4e3abb6fd6259eb634fc0289b5a99121ada71862b95d2761171c61238b565b868685604051808573ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200194505050505060405180910390a2808060010191505061166a565b506117828160075461239390919063ffffffff16565b60078190555060006117ca826117bc670de0b6b3a7640000600360008981526020019081526020016000205461241b90919063ffffffff16565b61241b90919063ffffffff16565b905060006117e2600a836124a190919063ffffffff16565b90506002600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd61183b61238b565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156118cf57600080fd5b505af11580156118e3573d6000803e3d6000fd5b505050506040513d60208110156118f957600080fd5b8101908080519060200190929190505050506002600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd61196261238b565b3061197685876124eb90919063ffffffff16565b6040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156119e657600080fd5b505af11580156119fa573d6000803e3d6000fd5b505050506040513d6020811015611a1057600080fd5b8101908080519060200190929190505050506002600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342966c68611a8483856124eb90919063ffffffff16565b6040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611aba57600080fd5b505af1158015611ace573d6000803e3d6000fd5b50505050505060018081905550505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60075481565b60026001541415611b85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6002600181905550611b9561238b565b73ffffffffffffffffffffffffffffffffffffffff166008600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c68576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f496e76616c69642062657400000000000000000000000000000000000000000081525060200191505060405180910390fd5b600087878787604051602001808573ffffffffffffffffffffffffffffffffffffffff168152602001848152602001838152602001828152602001945050505050604051602081830303815290604052805190602001209050600060018286868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611d1d573d6000803e3d6000fd5b505050602060405103519050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611dec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f496e76616c6964207369676e617475726500000000000000000000000000000081525060200191505060405180910390fd5b60006008600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508873ffffffffffffffffffffffffffffffffffffffff166323b872dd600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611e8661238b565b8a6040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611ef757600080fd5b505af1158015611f0b573d6000803e3d6000fd5b505050506040513d6020811015611f2157600080fd5b81019080805190602001909291905050505050506001808190555050505050505050565b611f4d61238b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461200d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60026001541415612086576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6002600181905550806003600085815260200190815260200160002081905550816002600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550827f94e11c8f89498d25b94545e17be3c662908b704cc48d477693a73c47e231336d8383604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a260018081905550505050565b61216261238b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612222576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156122a8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806126bc6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600080828401905083811015612411576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008083141561242e576000905061249b565b600082840290508284828161243f57fe5b0414612496576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806126e26021913960400191505060405180910390fd5b809150505b92915050565b60006124e383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612535565b905092915050565b600061252d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506125fb565b905092915050565b600080831182906125e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156125a657808201518184015260208101905061258b565b50505050905090810190601f1680156125d35780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816125ed57fe5b049050809150509392505050565b60008383111582906126a8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561266d578082015181840152602081019050612652565b50505050905090810190601f16801561269a5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838503905080915050939250505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a26469706673582212200ab81af9c61ebb1eadf7552eae9bbe029e50f2457b4c384cda19fbbe95fd332664736f6c634300070300330000000000000000000000000633e36952d2f85675a340984baa532949793c7d
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101005760003560e01c806393d65f3411610097578063c73e618311610066578063c73e6183146104a2578063d272265614610525578063f2fde38b1461057d578063f444fdd8146105c157610100565b806393d65f34146103b657806399df609a1461040e578063a64719d714610450578063befa1e2f1461048457610100565b80636afc7340116100d35780636afc734014610227578063715018a6146102f55780637cdc2972146102ff5780638da5cb5b1461038257610100565b80631026569314610105578063185a56711461014957806330fc59a41461018d5780635c5396b2146101cf575b600080fd5b6101476004803603602081101561011b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506105f5565b005b61018b6004803603602081101561015f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610789565b005b6101b9600480360360208110156101a357600080fd5b810190808035906020019092919050505061091d565b6040518082815260200191505060405180910390f35b6101fb600480360360208110156101e557600080fd5b8101908080359060200190929190505050610935565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102f3600480360360e081101561023d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561028e57600080fd5b8201836020820111156102a057600080fd5b803590602001918460208302840111640100000000831117156102c257600080fd5b9091929391929390803560ff1690602001909291908035906020019092919080359060200190929190505050610968565b005b6102fd610dfa565b005b610380600480360360e081101561031557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803560ff1690602001909291908035906020019092919080359060200190929190505050610f80565b005b61038a6113b1565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103e2600480360360208110156103cc57600080fd5b81019080803590602001909291905050506113da565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61044e6004803603606081101561042457600080fd5b8101908080359060200190929190803590602001909291908035906020019092919050505061140d565b005b610458611ae0565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61048c611b06565b6040518082815260200191505060405180910390f35b610523600480360360e08110156104b857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803560ff1690602001909291908035906020019092919080359060200190929190505050611b0c565b005b61057b6004803603606081101561053b57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611f45565b005b6105bf6004803603602081101561059357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061215a565b005b6105c9612365565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105fd61238b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146106bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60026001541415610736576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b600260018190555080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001808190555050565b61079161238b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610851576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600260015414156108ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b600260018190555080600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001808190555050565b60036020528060005260406000206000915090505481565b60026020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260015414156109e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60026001819055506000888888888860008181106109fb57fe5b90506020020135604051602001808573ffffffffffffffffffffffffffffffffffffffff168152602001848152602001838152602001828152602001945050505050604051602081830303815290604052805190602001209050600060018286868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015610ab1573d6000803e3d6000fd5b505050602060405103519050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610b80576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f496e76616c6964207369676e617475726500000000000000000000000000000081525060200191505060405180910390fd5b60005b87879050811015610ced57610b9661238b565b73ffffffffffffffffffffffffffffffffffffffff16600860008a8a85818110610bbc57fe5b90506020020135815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c7b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f496e76616c69642062657400000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600860008a8a85818110610c8d57fe5b90506020020135815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508080600101915050610b83565b508973ffffffffffffffffffffffffffffffffffffffff166323b872dd600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610d3561238b565b8a8a90508c026040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015610dab57600080fd5b505af1158015610dbf573d6000803e3d6000fd5b505050506040513d6020811015610dd557600080fd5b8101908080519060200190929190505050505050600180819055505050505050505050565b610e0261238b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ec2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60026001541415610ff9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b600260018190555061100961238b565b73ffffffffffffffffffffffffffffffffffffffff166008600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f496e76616c69642062657400000000000000000000000000000000000000000081525060200191505060405180910390fd5b600087878787604051602001808573ffffffffffffffffffffffffffffffffffffffff168152602001848152602001838152602001828152602001945050505050604051602081830303815290604052805190602001209050600060018286868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611191573d6000803e3d6000fd5b505050602060405103519050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611260576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f496e76616c6964207369676e617475726500000000000000000000000000000081525060200191505060405180910390fd5b60006008600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508873ffffffffffffffffffffffffffffffffffffffff1663f242432a600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166112fa61238b565b8b8b6040518563ffffffff1660e01b8152600401808573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020018060200182810382526000815260200160200195505050505050600060405180830381600087803b15801561138757600080fd5b505af115801561139b573d6000803e3d6000fd5b5050505050506001808190555050505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60086020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60026001541415611486576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6002600181905550600073ffffffffffffffffffffffffffffffffffffffff166002600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f496e76616c6964204c6f6f74626f78000000000000000000000000000000000081525060200191505060405180910390fd5b60006003600085815260200190815260200160002054116115ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f496e76616c6964204c6f6f74626f78000000000000000000000000000000000081525060200191505060405180910390fd5b60008111611663576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f4d75737420706c6163652062657473000000000000000000000000000000000081525060200191505060405180910390fd5b6000600190505b81811161176c5761167961238b565b600860006116928460075461239390919063ffffffff16565b815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506116f38160075461239390919063ffffffff16565b7f315f79b2e911ff337a4e3abb6fd6259eb634fc0289b5a99121ada71862b95d2761171c61238b565b868685604051808573ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200194505050505060405180910390a2808060010191505061166a565b506117828160075461239390919063ffffffff16565b60078190555060006117ca826117bc670de0b6b3a7640000600360008981526020019081526020016000205461241b90919063ffffffff16565b61241b90919063ffffffff16565b905060006117e2600a836124a190919063ffffffff16565b90506002600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd61183b61238b565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156118cf57600080fd5b505af11580156118e3573d6000803e3d6000fd5b505050506040513d60208110156118f957600080fd5b8101908080519060200190929190505050506002600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd61196261238b565b3061197685876124eb90919063ffffffff16565b6040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156119e657600080fd5b505af11580156119fa573d6000803e3d6000fd5b505050506040513d6020811015611a1057600080fd5b8101908080519060200190929190505050506002600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342966c68611a8483856124eb90919063ffffffff16565b6040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611aba57600080fd5b505af1158015611ace573d6000803e3d6000fd5b50505050505060018081905550505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60075481565b60026001541415611b85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6002600181905550611b9561238b565b73ffffffffffffffffffffffffffffffffffffffff166008600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c68576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f496e76616c69642062657400000000000000000000000000000000000000000081525060200191505060405180910390fd5b600087878787604051602001808573ffffffffffffffffffffffffffffffffffffffff168152602001848152602001838152602001828152602001945050505050604051602081830303815290604052805190602001209050600060018286868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611d1d573d6000803e3d6000fd5b505050602060405103519050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611dec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f496e76616c6964207369676e617475726500000000000000000000000000000081525060200191505060405180910390fd5b60006008600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508873ffffffffffffffffffffffffffffffffffffffff166323b872dd600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611e8661238b565b8a6040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611ef757600080fd5b505af1158015611f0b573d6000803e3d6000fd5b505050506040513d6020811015611f2157600080fd5b81019080805190602001909291905050505050506001808190555050505050505050565b611f4d61238b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461200d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60026001541415612086576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6002600181905550806003600085815260200190815260200160002081905550816002600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550827f94e11c8f89498d25b94545e17be3c662908b704cc48d477693a73c47e231336d8383604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a260018081905550505050565b61216261238b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612222576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156122a8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806126bc6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600080828401905083811015612411576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008083141561242e576000905061249b565b600082840290508284828161243f57fe5b0414612496576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806126e26021913960400191505060405180910390fd5b809150505b92915050565b60006124e383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612535565b905092915050565b600061252d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506125fb565b905092915050565b600080831182906125e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156125a657808201518184015260208101905061258b565b50505050905090810190601f1680156125d35780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816125ed57fe5b049050809150509392505050565b60008383111582906126a8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561266d578082015181840152602081019050612652565b50505050905090810190601f16801561269a5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838503905080915050939250505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a26469706673582212200ab81af9c61ebb1eadf7552eae9bbe029e50f2457b4c384cda19fbbe95fd332664736f6c63430007030033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000633e36952d2f85675a340984baa532949793c7d
-----Decoded View---------------
Arg [0] : _transferAddress (address): 0x0633E36952d2f85675a340984BaA532949793c7D
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000000633e36952d2f85675a340984baa532949793c7d
Deployed Bytecode Sourcemap
211:3748:7:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3575:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3450:119;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;647:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;587:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2843:601;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1683:145:8;;;:::i;:::-;;1821:511:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1060:77:8;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;876:45:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;928:887;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;736:26;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;846:24;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2342:495;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3692:265;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1977:240:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;700:30:7;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;3575:111;1274:12:8;:10;:12::i;:::-;1264:22;;:6;;;;;;;;;;:22;;;1256:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1679:1:9::1;2259:7;;:19;;2251:63;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;1679:1;2389:7;:18;;;;3671:8:7::2;3657:11;;:22;;;;;;;;;;;;;;;;;;1636:1:9::1;2562:7:::0;:22:::1;;;;3575:111:7::0;:::o;3450:119::-;1274:12:8;:10;:12::i;:::-;1264:22;;:6;;;;;;;;;;:22;;;1256:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1679:1:9::1;2259:7;;:19;;2251:63;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;1679:1;2389:7;:18;;;;3554:8:7::2;3536:15;;:26;;;;;;;;;;;;;;;;;;1636:1:9::1;2562:7:::0;:22:::1;;;;3450:119:7::0;:::o;647:47::-;;;;;;;;;;;;;;;;;:::o;587:54::-;;;;;;;;;;;;;;;;;;;;;;:::o;2843:601::-;1679:1:9;2259:7;;:19;;2251:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1679:1;2389:7;:18;;;;2996:12:7::1;3032:5;3039:2;3043:6;3051:3;;3055:1;3051:6;;;;;;;;;;;;;3021:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3011:48;;;;;;2996:63;;3069:14;3086:24;3096:4;3102:1;3105;3108;3086:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;3069:41;;3138:11;;;;;;;;;;;3128:21;;:6;:21;;;3120:51;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;3186:9;3181:169;3205:3;;:10;;3201:1;:14;3181:169;;;3266:12;:10;:12::i;:::-;3244:34;;:10;:18;3255:3;;3259:1;3255:6;;;;;;;;;;;;;3244:18;;;;;;;;;;;;;;;;;;;;;:34;;;3236:58;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;3337:1;3308:10;:18;3319:3;;3323:1;3319:6;;;;;;;;;;;;;3308:18;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;3217:3;;;;;;;3181:169;;;;3366:5;3359:26;;;3386:15;;;;;;;;;;;3403:12;:10;:12::i;:::-;3426:3;;:10;;3417:6;:19;3359:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;2418:1:9;;1636::::0;2562:7;:22;;;;2843:601:7;;;;;;;;:::o;1683:145:8:-;1274:12;:10;:12::i;:::-;1264:22;;:6;;;;;;;;;;:22;;;1256:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1789:1:::1;1752:40;;1773:6;::::0;::::1;;;;;;;;1752:40;;;;;;;;;;;;1819:1;1802:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;1683:145::o:0;1821:511:7:-;1679:1:9;2259:7;;:19;;2251:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1679:1;2389:7;:18;;;;1988:12:7::1;:10;:12::i;:::-;1969:31;;:10;:15;1980:3;1969:15;;;;;;;;;;;;;;;;;;;;;:31;;;1961:55;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;2026:12;2062:5;2069:2;2073:6;2081:3;2051:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2041:45;;;;;;2026:60;;2096:14;2113:24;2123:4;2129:1;2132;2135;2113:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;2096:41;;2165:11;;;;;;;;;;;2155:21;;:6;:21;;;2147:51;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;2234:1;2208:10;:15;2219:3;2208:15;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;2255:5;2246:32;;;2279:15;;;;;;;;;;;2296:12;:10;:12::i;:::-;2310:2;2314:6;2246:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;2418:1:9;;1636::::0;2562:7;:22;;;;1821:511:7;;;;;;;:::o;1060:77:8:-;1098:7;1124:6;;;;;;;;;;;1117:13;;1060:77;:::o;876:45:7:-;;;;;;;;;;;;;;;;;;;;;;:::o;928:887::-;1679:1:9;2259:7;;:19;;2251:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1679:1;2389:7;:18;;;;1074:1:7::1;1032:44;;:19;:30;1052:9;1032:30;;;;;;;;;;;;;;;;;;;;;:44;;;;1024:72;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;1140:1;1114:12;:23;1127:9;1114:23;;;;;;;;;;;;:27;1106:55;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;1186:1;1179:4;:8;1171:36;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;1222:9;1234:1;1222:13;;1217:178;1242:4;1237:1;:9;1217:178;;1298:12;:10;:12::i;:::-;1267:10;:28;1278:16;1292:1;1278:9;;:13;;:16;;;;:::i;:::-;1267:28;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;1333:16;1347:1;1333:9;;:13;;:16;;;;:::i;:::-;1329:55;1351:12;:10;:12::i;:::-;1365:9;1376:4;1382:1;1329:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1248:3;;;;;;;1217:178;;;;1416:19;1430:4;1416:9;;:13;;:19;;;;:::i;:::-;1404:9;:31;;;;1445:12;1460:43;1498:4;1460:33;1488:4;1460:12;:23;1473:9;1460:23;;;;;;;;;;;;:27;;:33;;;;:::i;:::-;:37;;:43;;;;:::i;:::-;1445:58;;1513:12;1528;1537:2;1528:4;:8;;:12;;;;:::i;:::-;1513:27;;1557:19;:30;1577:9;1557:30;;;;;;;;;;;;;;;;;;;;;1550:51;;;1602:12;:10;:12::i;:::-;1616:10;;;;;;;;;;;1628:4;1550:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;1650:19;:30;1670:9;1650:30;;;;;;;;;;;;;;;;;;;;;1643:51;;;1695:12;:10;:12::i;:::-;1717:4;1724:14;1733:4;1724;:8;;:14;;;;:::i;:::-;1643:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;1756:19;:30;1776:9;1756:30;;;;;;;;;;;;;;;;;;;;;1749:43;;;1793:14;1802:4;1793;:8;;:14;;;;:::i;:::-;1749:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;2418:1:9;;1636::::0;2562:7;:22;;;;928:887:7;;;:::o;736:26::-;;;;;;;;;;;;;:::o;846:24::-;;;;:::o;2342:495::-;1679:1:9;2259:7;;:19;;2251:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1679:1;2389:7;:18;;;;2507:12:7::1;:10;:12::i;:::-;2488:31;;:10;:15;2499:3;2488:15;;;;;;;;;;;;;;;;;;;;;:31;;;2480:55;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;2545:12;2581:5;2588:2;2592:6;2600:3;2570:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2560:45;;;;;;2545:60;;2615:14;2632:24;2642:4;2648:1;2651;2654;2632:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;2615:41;;2684:11;;;;;;;;;;;2674:21;;:6;:21;;;2666:51;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;2753:1;2727:10;:15;2738:3;2727:15;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;2772:5;2765:26;;;2792:15;;;;;;;;;;;2809:12;:10;:12::i;:::-;2823:6;2765:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;2418:1:9;;1636::::0;2562:7;:22;;;;2342:495:7;;;;;;;:::o;3692:265::-;1274:12:8;:10;:12::i;:::-;1264:22;;:6;;;;;;;;;;:22;;;1256:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1679:1:9::1;2259:7;;:19;;2251:63;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;1679:1;2389:7;:18;;;;3830:5:7::2;3811:12;:16;3824:2;3811:16;;;;;;;;;;;:24;;;;3871:19;3845;:23;3865:2;3845:23;;;;;;;;;;;;:45;;;;;;;;;;;;;;;;;;3919:2;3905:45;3923:19;3944:5;3905:45;;;;;;;;;;;;;;;;;;;;;;;;;;1636:1:9::1;2562:7:::0;:22:::1;;;;3692:265:7::0;;;:::o;1977:240:8:-;1274:12;:10;:12::i;:::-;1264:22;;:6;;;;;;;;;;:22;;;1256:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2085:1:::1;2065:22;;:8;:22;;;;2057:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2174:8;2145:38;;2166:6;::::0;::::1;;;;;;;;2145:38;;;;;;;;;;;;2202:8;2193:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;1977:240:::0;:::o;700:30:7:-;;;;;;;;;;;;;:::o;589:104:1:-;642:15;676:10;669:17;;589:104;:::o;873:176:10:-;931:7;950:9;966:1;962;:5;950:17;;990:1;985;:6;;977:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1041:1;1034:8;;;873:176;;;;:::o;2179:459::-;2237:7;2483:1;2478;:6;2474:45;;;2507:1;2500:8;;;;2474:45;2529:9;2545:1;2541;:5;2529:17;;2573:1;2568;2564;:5;;;;;;:10;2556:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2630:1;2623:8;;;2179:459;;;;;:::o;3100:130::-;3158:7;3184:39;3188:1;3191;3184:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;3177:46;;3100:130;;;;:::o;1320:134::-;1378:7;1404:43;1408:1;1411;1404:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1397:50;;1320:134;;;;:::o;3712:272::-;3798:7;3829:1;3825;:5;3832:12;3817:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3855:9;3871:1;3867;:5;;;;;;3855:17;;3976:1;3969:8;;;3712:272;;;;;:::o;1745:187::-;1831:7;1863:1;1858;:6;;1866:12;1850:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1889:9;1905:1;1901;:5;1889:17;;1924:1;1917:8;;;1745:187;;;;;:::o
Swarm Source
ipfs://0ab81af9c61ebb1eadf7552eae9bbe029e50f2457b4c384cda19fbbe95fd3326
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ 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.