Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Sponsored
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
0x60806040 | 15990071 | 316 days 12 hrs ago | IN | Create: BulkSender | 0 ETH | 0.02604294 |
Loading...
Loading
Contract Name:
BulkSender
Compiler Version
v0.8.7+commit.e28d00a7
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.7; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC721/IERC721.sol"; import "@openzeppelin/contracts/token/ERC1155/IERC1155.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; contract BulkSender is Ownable { // Events event WithdrawEther(address indexed account, uint256 amount); event WithdrawToken(address indexed token, address indexed account, uint256 amount); event RegisterVIP(address indexed account); event RemoveFromVIPList(address[] indexed adresses); event AddToVipList(address[] indexed adresses); event SetReceiverAddress(address indexed Address); event SetVipFee(uint256 newVipFee); event SetTxFee(uint256 newTransactionFee); event SetMaxAdresses(uint maxAddresses); event EthSendSameValue(address indexed sender, address payable[] indexed receiver, uint256 value); event EthSendDifferentValue( address indexed sender, address[] indexed receivers, uint256[] values ); event ERC20BulksendSameValue( address indexed sender, address indexed tokenAddress, address[] indexed receivers, uint256 value, uint256 sendAmount ); event ERC20BulksendDiffValue( address indexed sender, address indexed tokenAddress, address[] indexed receivers, uint256[] values, uint256 sendAmount ); event ERC721Bulksend( address indexed sender, address indexed tokenAddress, address[] indexed receivers, uint256[] values, uint256 sendAmount ); event ERC1155Bulksend( address indexed sender, address indexed tokenAddress, address[] indexed receivers, uint256[] tokenId, uint256[] amount ); // Variables address payable public receiverAddress; uint256 public txFee = 0.01 ether; uint256 public VIPFee = 1 ether; uint public maxAddresses = 255; bool internal locked; // Modifiers modifier noReentrant() { require(!locked, "No re-entrancy"); locked = true; _; locked = false; } // Functions // VIP List mapping(address => bool) public vipList; // Withdraw Ether function withdrawEth() external onlyOwner noReentrant { address _receiverAddress = getReceiverAddress(); uint256 balance = address(this).balance; (bool success, ) = _receiverAddress.call{value: balance}(""); require(success, "Bulksender: failed to send ETH"); emit WithdrawEther(_receiverAddress, balance); } // Withdraw ERC20 function withdrawToken(address _tokenAddress, address _receiverAddress) external onlyOwner noReentrant { IERC20 token = IERC20(_tokenAddress); uint256 balance = token.balanceOf(address(this)); token.transfer(_receiverAddress, balance); emit WithdrawToken(_tokenAddress, _receiverAddress, balance); } // Register VIP function registerVIP() external payable { require(vipList[msg.sender] == false, "Bulksender: already vip"); require(msg.value >= VIPFee, "Bulksender: invalid vip fee"); address _receiverAddress = getReceiverAddress(); (bool success, ) = _receiverAddress.call{value: msg.value}(""); require(success, "Bulksender: failed to send ETH"); vipList[msg.sender] = true; emit RegisterVIP(msg.sender); } // VIP list function addToVIPList(address[] calldata _vipList) external onlyOwner { uint256 len = _vipList.length; for (uint256 i = 0; i < len; ) { vipList[_vipList[i]] = true; unchecked { ++i; } } emit AddToVipList(_vipList); } // Remove address from VIP List by Owner function removeFromVIPList(address[] calldata _vipList) external onlyOwner { uint256 len = _vipList.length; for (uint256 i = 0; i < len; ) { vipList[_vipList[i]] = false; unchecked { ++i; } } emit RemoveFromVIPList(_vipList); } // Check isVIP function isVIP(address _addr) public view returns (bool) { return _addr == owner() || vipList[_addr]; } // Set receiver address function setReceiverAddress(address payable _addr) external onlyOwner { require(_addr != address(0), "Bulksender: zero address"); receiverAddress = _addr; emit SetReceiverAddress(_addr); } // Get receiver address function getReceiverAddress() public view returns (address) { if (receiverAddress == address(0)) { return owner(); } return receiverAddress; } // Set vip fee function setVIPFee(uint256 _fee) external onlyOwner { VIPFee = _fee; emit SetVipFee(_fee); } // Set tx fee function setTxFee(uint256 _fee) external onlyOwner { txFee = _fee; emit SetTxFee(_fee); } // Set max addresses function setMaxAdresses(uint _maxAddresses) external onlyOwner { require(_maxAddresses > 0, "Bulksender: zero maxAddresses"); maxAddresses = _maxAddresses; emit SetMaxAdresses(_maxAddresses); } // Sum total values from an array function _sumTotalValues(uint256[] calldata _value) internal pure returns (uint256) { uint256 sum = 0; uint256 len = _value.length; for (uint256 i = 0; i < len; ) { sum += _value[i]; unchecked { ++i; } } return sum; } // Send ETH (same value) function bulkSendETHWithSameValue(address payable[] calldata _to, uint256 _value) external payable { uint256 sendAmount = (_to.length) * _value; uint256 remainingValue = msg.value; bool vip = isVIP(msg.sender); if (vip) { require(remainingValue >= sendAmount, "Bulksender: insufficient ETH"); } else { require(remainingValue >= sendAmount + txFee, "Bulksender: invalid txFee"); } require(_to.length <= maxAddresses, "Bulksender: max number of addresses"); uint256 len = _to.length; for (uint256 i = 0; i < len; ) { assert(remainingValue >= _value); remainingValue -= _value; (bool success, ) = _to[i].call{value: _value}(""); require(success, "Bulksender: failed to send ETH"); unchecked { i++; } } emit EthSendSameValue(msg.sender, _to, _value); } // Send ETH (different value) function bulkSendETHWithDifferentValue(address[] calldata _to, uint256[] calldata _value) external payable { uint256 sendAmount = _sumTotalValues(_value); uint256 remainingValue = msg.value; bool vip = isVIP(msg.sender); if (vip) { require(remainingValue >= sendAmount, "Bulksender: invalid eth send"); } else { require(remainingValue >= sendAmount + txFee, "Bulksender: invalid txFee"); } require(_to.length == _value.length, "Bulksender: diff arrays length"); require(_to.length <= maxAddresses, "Bulksender: max number of addresses"); uint256 len = _to.length; for (uint256 i = 0; i < len; ) { assert(remainingValue >= _value[i]); remainingValue -= _value[i]; (bool success, ) = _to[i].call{value: _value[i]}(""); require(success, "Bulksender: failed to send ETH"); unchecked { ++i; } } emit EthSendDifferentValue(msg.sender, _to, _value); } // Send ERC20 (same value) function bulkSendERC20SameValue( address _tokenAddress, address[] calldata _to, uint256 _value ) external payable { uint256 sendValue = msg.value; bool vip = isVIP(msg.sender); if (!vip) { require(sendValue >= txFee, "Bulksender: invalid txFee"); } require(_to.length <= maxAddresses, "Bulksender: max number of addresses"); address from = msg.sender; uint256 sendAmount = _to.length * _value; IERC20 token = IERC20(_tokenAddress); uint256 len = _to.length; for (uint256 i = 0; i < len; ) { token.transferFrom(from, _to[i], _value); unchecked { ++i; } } emit ERC20BulksendSameValue(msg.sender, _tokenAddress, _to, _value, sendAmount); } // Send ERC20 (diff value) function bulkSendERC20DiffValue( address _tokenAddress, address[] calldata _to, uint256[] calldata _value ) external payable { uint256 sendValue = msg.value; bool vip = isVIP(msg.sender); if (!vip) { require(sendValue >= txFee, "Bulksender: invalid txFee"); } require(_to.length == _value.length, "Bulksender: diff arrays length"); require(_to.length <= maxAddresses, "Bulksender: max number of addresses"); uint256 sendAmount = _sumTotalValues(_value); IERC20 token = IERC20(_tokenAddress); uint256 len = _to.length; for (uint256 i = 0; i < len; ) { token.transferFrom(msg.sender, _to[i], _value[i]); unchecked { ++i; } } emit ERC20BulksendDiffValue(msg.sender, _tokenAddress, _to, _value, sendAmount); } //Send ERC721 tokens function bulkSendERC721( address _tokenAddress, address[] calldata _to, uint256[] calldata _value ) external payable { uint256 sendValue = msg.value; bool vip = isVIP(msg.sender); if (!vip) { require(sendValue >= txFee, "Bulksender: invalid txFee"); } require(_to.length == _value.length, "Bulksender: diff arrays length"); require(_to.length <= maxAddresses, "Bulksender: max number of addresses"); uint256 sendAmount = _sumTotalValues(_value); IERC721 token = IERC721(_tokenAddress); uint256 len = _to.length; for (uint256 i = 0; i < len; ) { token.transferFrom(msg.sender, _to[i], _value[i]); unchecked { ++i; } } emit ERC721Bulksend(msg.sender, _tokenAddress, _to, _value, sendAmount); } //Send ERC1155 tokens function bulkSendERC1155( address _tokenAddress, address[] calldata _to, uint256[] calldata _tokenId, uint256[] calldata _amount ) external payable { uint256 sendValue = msg.value; bool vip = isVIP(msg.sender); if (!vip) { require(sendValue >= txFee, "Bulksender: invalid txFee"); } require(_to.length == _tokenId.length, "Bulksender: different length of inputs"); require(_to.length <= maxAddresses, "Bulksender: max number of addresses"); IERC1155 token = IERC1155(_tokenAddress); uint256 len = _to.length; for (uint256 i = 0; i < len; ) { token.safeTransferFrom(msg.sender, _to[i], _tokenId[i], _amount[i], "0x"); unchecked { ++i; } } emit ERC1155Bulksend(msg.sender, _tokenAddress, _to, _tokenId, _amount); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @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 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 // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @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); /** * @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 `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, 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 `from` to `to` 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 from, address to, uint256 amount ) external returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.8.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721 * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must * understand this adds an external call which potentially creates a reentrancy vulnerability. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.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); }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address[]","name":"adresses","type":"address[]"}],"name":"AddToVipList","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":true,"internalType":"address[]","name":"receivers","type":"address[]"},{"indexed":false,"internalType":"uint256[]","name":"tokenId","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"amount","type":"uint256[]"}],"name":"ERC1155Bulksend","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":true,"internalType":"address[]","name":"receivers","type":"address[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"sendAmount","type":"uint256"}],"name":"ERC20BulksendDiffValue","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":true,"internalType":"address[]","name":"receivers","type":"address[]"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sendAmount","type":"uint256"}],"name":"ERC20BulksendSameValue","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":true,"internalType":"address[]","name":"receivers","type":"address[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"sendAmount","type":"uint256"}],"name":"ERC721Bulksend","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address[]","name":"receivers","type":"address[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"EthSendDifferentValue","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address payable[]","name":"receiver","type":"address[]"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"EthSendSameValue","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":"address","name":"account","type":"address"}],"name":"RegisterVIP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address[]","name":"adresses","type":"address[]"}],"name":"RemoveFromVIPList","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxAddresses","type":"uint256"}],"name":"SetMaxAdresses","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"Address","type":"address"}],"name":"SetReceiverAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newTransactionFee","type":"uint256"}],"name":"SetTxFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newVipFee","type":"uint256"}],"name":"SetVipFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WithdrawEther","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WithdrawToken","type":"event"},{"inputs":[],"name":"VIPFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_vipList","type":"address[]"}],"name":"addToVIPList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"address[]","name":"_to","type":"address[]"},{"internalType":"uint256[]","name":"_tokenId","type":"uint256[]"},{"internalType":"uint256[]","name":"_amount","type":"uint256[]"}],"name":"bulkSendERC1155","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"address[]","name":"_to","type":"address[]"},{"internalType":"uint256[]","name":"_value","type":"uint256[]"}],"name":"bulkSendERC20DiffValue","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"address[]","name":"_to","type":"address[]"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"bulkSendERC20SameValue","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"address[]","name":"_to","type":"address[]"},{"internalType":"uint256[]","name":"_value","type":"uint256[]"}],"name":"bulkSendERC721","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_to","type":"address[]"},{"internalType":"uint256[]","name":"_value","type":"uint256[]"}],"name":"bulkSendETHWithDifferentValue","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address payable[]","name":"_to","type":"address[]"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"bulkSendETHWithSameValue","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"getReceiverAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"isVIP","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxAddresses","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"receiverAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"registerVIP","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_vipList","type":"address[]"}],"name":"removeFromVIPList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxAddresses","type":"uint256"}],"name":"setMaxAdresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_addr","type":"address"}],"name":"setReceiverAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"setTxFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"setVIPFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"txFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"vipList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"address","name":"_receiverAddress","type":"address"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052662386f26fc10000600255670de0b6b3a764000060035560ff60045534801561002c57600080fd5b506100363361003b565b61008b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611fad8061009a6000396000f3fe6080604052600436106101665760003560e01c80638e50c9f9116100d1578063c8813ffd1161008a578063f0a0a29911610064578063f0a0a299146103bb578063f2fde38b146103d1578063f4201c3c146103f1578063f48d11af1461041157600080fd5b8063c8813ffd14610365578063cf82046114610385578063f05d16f71461039b57600080fd5b80638e50c9f9146102be57806393e5365f146102d15780639c1f6133146102f5578063a0ef91df146102fd578063a74ecbae14610312578063aa168b471461032557600080fd5b80635d07f35c116101235780635d07f35c146102255780637052d2b914610245578063715018a61461025857806375c6b74a1461026d5780638279c7db146102805780638da5cb5b146102a057600080fd5b806316fed3e21461016b5780633aeac4e1146101a85780633d06242a146101ca5780633e720a07146101ea5780634c3b8912146101fd578063531ebce514610210575b600080fd5b34801561017757600080fd5b5060015461018b906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101b457600080fd5b506101c86101c33660046119b6565b610431565b005b3480156101d657600080fd5b506101c86101e5366004611c97565b6105ef565b6101c86101f83660046119ef565b610633565b6101c861020b366004611c29565b610819565b34801561021c57600080fd5b5061018b6109fe565b34801561023157600080fd5b506101c8610240366004611c97565b610a31565b6101c86102533660046119ef565b610abe565b34801561026457600080fd5b506101c8610c72565b6101c861027b366004611bbd565b610c86565b34801561028c57600080fd5b506101c861029b366004611992565b610ee4565b3480156102ac57600080fd5b506000546001600160a01b031661018b565b6101c86102cc366004611b1f565b610f8c565b3480156102dd57600080fd5b506102e760045481565b60405190815260200161019f565b6101c8611121565b34801561030957600080fd5b506101c8611296565b6101c8610320366004611a72565b6113c1565b34801561033157600080fd5b50610355610340366004611992565b60066020526000908152604090205460ff1681565b604051901515815260200161019f565b34801561037157600080fd5b506101c8610380366004611b7b565b6115f7565b34801561039157600080fd5b506102e760025481565b3480156103a757600080fd5b506101c86103b6366004611c97565b6116ae565b3480156103c757600080fd5b506102e760035481565b3480156103dd57600080fd5b506101c86103ec366004611992565b6116eb565b3480156103fd57600080fd5b5061035561040c366004611992565b611764565b34801561041d57600080fd5b506101c861042c366004611b7b565b61179f565b610439611856565b60055460ff16156104825760405162461bcd60e51b815260206004820152600e60248201526d4e6f2072652d656e7472616e637960901b60448201526064015b60405180910390fd5b6005805460ff191660011790556040516370a0823160e01b815230600482015282906000906001600160a01b038316906370a082319060240160206040518083038186803b1580156104d357600080fd5b505afa1580156104e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061050b9190611cb0565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509083169063a9059cbb90604401602060405180830381600087803b15801561055957600080fd5b505af115801561056d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105919190611c75565b50826001600160a01b0316846001600160a01b03167f037238854fe57fbf51f09946f854fc3916fe83938d6521f09bd05463839f1304836040516105d791815260200190565b60405180910390a350506005805460ff191690555050565b6105f7611856565b60038190556040518181527fb44d6d9784a7e43d625af323676ad5a2b011837b3d357457287aed917436ae1b906020015b60405180910390a150565b34600061063f33611764565b905080610668576002548210156106685760405162461bcd60e51b815260040161047990611e21565b8483146106875760405162461bcd60e51b815260040161047990611dea565b6004548511156106a95760405162461bcd60e51b815260040161047990611e58565b60006106b585856118b0565b9050878660005b818110156107a557826001600160a01b03166323b872dd338c8c858181106106e6576106e6611f4c565b90506020020160208101906106fb9190611992565b8b8b8681811061070d5761070d611f4c565b6040516001600160e01b031960e088901b1681526001600160a01b03958616600482015294909316602485015250602090910201356044820152606401602060405180830381600087803b15801561076457600080fd5b505af1158015610778573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061079c9190611c75565b506001016106bc565b5088886040516107b6929190611cff565b60405180910390208a6001600160a01b0316336001600160a01b03167f8b0d99ca0f78f682a8cb40ebf89aa88859763c7f64a6b88d2d8b87a801af7db48a8a8860405161080593929190611dc6565b60405180910390a450505050505050505050565b60006108258284611eea565b905034600061083333611764565b90508015610890578282101561088b5760405162461bcd60e51b815260206004820152601c60248201527f42756c6b73656e6465723a20696e73756666696369656e7420455448000000006044820152606401610479565b6108bc565b60025461089d9084611ed2565b8210156108bc5760405162461bcd60e51b815260040161047990611e21565b6004548511156108de5760405162461bcd60e51b815260040161047990611e58565b8460005b818110156109a857858410156108fa576108fa611f20565b6109048685611f09565b9350600088888381811061091a5761091a611f4c565b905060200201602081019061092f9190611992565b6001600160a01b03168760405160006040518083038185875af1925050503d8060008114610979576040519150601f19603f3d011682016040523d82523d6000602084013e61097e565b606091505b505090508061099f5760405162461bcd60e51b815260040161047990611e9b565b506001016108e2565b5086866040516109b9929190611d41565b6040519081900381208682529033907f71d3cc836071fe1f97bf6238176df070e5396568960ce424e907293058705bde9060200160405180910390a350505050505050565b6001546000906001600160a01b0316610a2157506000546001600160a01b031690565b506001546001600160a01b031690565b610a39611856565b60008111610a895760405162461bcd60e51b815260206004820152601d60248201527f42756c6b73656e6465723a207a65726f206d61784164647265737365730000006044820152606401610479565b60048190556040518181527fc55d48b3d5c5e40a67e083a9c841be9f6ecc6c36cf2d733d270778b37931dfa590602001610628565b346000610aca33611764565b905080610af357600254821015610af35760405162461bcd60e51b815260040161047990611e21565b848314610b125760405162461bcd60e51b815260040161047990611dea565b600454851115610b345760405162461bcd60e51b815260040161047990611e58565b6000610b4085856118b0565b9050878660005b81811015610c1257826001600160a01b03166323b872dd338c8c85818110610b7157610b71611f4c565b9050602002016020810190610b869190611992565b8b8b86818110610b9857610b98611f4c565b6040516001600160e01b031960e088901b1681526001600160a01b03958616600482015294909316602485015250602090910201356044820152606401600060405180830381600087803b158015610bef57600080fd5b505af1158015610c03573d6000803e3d6000fd5b50505050806001019050610b47565b508888604051610c23929190611cff565b60405180910390208a6001600160a01b0316336001600160a01b03167fe4a65cc4b6042cf65c6c2e6940b477d3a3ae95a5a3adcabb77fab1c23ceb32078a8a8860405161080593929190611dc6565b610c7a611856565b610c8460006118f6565b565b6000610c9283836118b0565b9050346000610ca033611764565b90508015610cfd5782821015610cf85760405162461bcd60e51b815260206004820152601c60248201527f42756c6b73656e6465723a20696e76616c6964206574682073656e64000000006044820152606401610479565b610d29565b600254610d0a9084611ed2565b821015610d295760405162461bcd60e51b815260040161047990611e21565b858414610d485760405162461bcd60e51b815260040161047990611dea565b600454861115610d6a5760405162461bcd60e51b815260040161047990611e58565b8560005b81811015610e7e57868682818110610d8857610d88611f4c565b90506020020135841015610d9e57610d9e611f20565b868682818110610db057610db0611f4c565b9050602002013584610dc29190611f09565b93506000898983818110610dd857610dd8611f4c565b9050602002016020810190610ded9190611992565b6001600160a01b0316888884818110610e0857610e08611f4c565b9050602002013560405160006040518083038185875af1925050503d8060008114610e4f576040519150601f19603f3d011682016040523d82523d6000602084013e610e54565b606091505b5050905080610e755760405162461bcd60e51b815260040161047990611e9b565b50600101610d6e565b508787604051610e8f929190611cff565b6040518091039020336001600160a01b03167f5276a5428c18040f38e591a1762fa2542851c18931160f3592295aa52c0588478888604051610ed2929190611d78565b60405180910390a35050505050505050565b610eec611856565b6001600160a01b038116610f425760405162461bcd60e51b815260206004820152601860248201527f42756c6b73656e6465723a207a65726f206164647265737300000000000000006044820152606401610479565b600180546001600160a01b0319166001600160a01b0383169081179091556040517f305178007fba67b7dba31962d440eb513562c145e68053ccf952ac8558e306a590600090a250565b346000610f9833611764565b905080610fc157600254821015610fc15760405162461bcd60e51b815260040161047990611e21565b600454841115610fe35760405162461bcd60e51b815260040161047990611e58565b336000610ff08587611eea565b9050878660005b818110156110c657826001600160a01b03166323b872dd868c8c8581811061102157611021611f4c565b90506020020160208101906110369190611992565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604481018b9052606401602060405180830381600087803b15801561108557600080fd5b505af1158015611099573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110bd9190611c75565b50600101610ff7565b5088886040516110d7929190611cff565b6040805191829003822089835260208301869052916001600160a01b038d169133917fbd4ad1f57a716c9124f3ebcbedc9cd25e06746577d319ca8ddbceb0b6af091919101610805565b3360009081526006602052604090205460ff16156111815760405162461bcd60e51b815260206004820152601760248201527f42756c6b73656e6465723a20616c7265616479207669700000000000000000006044820152606401610479565b6003543410156111d35760405162461bcd60e51b815260206004820152601b60248201527f42756c6b73656e6465723a20696e76616c6964207669702066656500000000006044820152606401610479565b60006111dd6109fe565b90506000816001600160a01b03163460405160006040518083038185875af1925050503d806000811461122c576040519150601f19603f3d011682016040523d82523d6000602084013e611231565b606091505b50509050806112525760405162461bcd60e51b815260040161047990611e9b565b33600081815260066020526040808220805460ff19166001179055517f110b9052dd0fb65bceb50d21ecf864a104b98046d5144883c77bedff0e4980b09190a25050565b61129e611856565b60055460ff16156112e25760405162461bcd60e51b815260206004820152600e60248201526d4e6f2072652d656e7472616e637960901b6044820152606401610479565b6005805460ff1916600117905560006112f96109fe565b60405190915047906000906001600160a01b0384169083908381818185875af1925050503d8060008114611349576040519150601f19603f3d011682016040523d82523d6000602084013e61134e565b606091505b505090508061136f5760405162461bcd60e51b815260040161047990611e9b565b826001600160a01b03167fdb35132c111efe920cede025e819975671cfd1b8fcc1174762c8670c4e94c211836040516113aa91815260200190565b60405180910390a250506005805460ff1916905550565b3460006113cd33611764565b9050806113f6576002548210156113f65760405162461bcd60e51b815260040161047990611e21565b8685146114545760405162461bcd60e51b815260206004820152602660248201527f42756c6b73656e6465723a20646966666572656e74206c656e677468206f6620604482015265696e7075747360d01b6064820152608401610479565b6004548711156114765760405162461bcd60e51b815260040161047990611e58565b888760005b8181101561158057826001600160a01b031663f242432a338d8d858181106114a5576114a5611f4c565b90506020020160208101906114ba9190611992565b8c8c868181106114cc576114cc611f4c565b905060200201358b8b878181106114e5576114e5611f4c565b6040516001600160e01b031960e089901b1681526001600160a01b03968716600482015295909416602486015250604484019190915260209091020135606482015260a06084820152600260a482015261060f60f31b60c482015260e401600060405180830381600087803b15801561155d57600080fd5b505af1158015611571573d6000803e3d6000fd5b5050505080600101905061147b565b508989604051611591929190611cff565b60405180910390208b6001600160a01b0316336001600160a01b03167fb72d583ee457d2260995bddf087f5c088c6f3a275215c36e0a4fa6553937586c8b8b8b8b6040516115e29493929190611d94565b60405180910390a45050505050505050505050565b6115ff611856565b8060005b818110156116685760016006600086868581811061162357611623611f4c565b90506020020160208101906116389190611992565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055600101611603565b508282604051611679929190611cff565b604051908190038120907fc9f42388650052159f4e63ee96e98159386e9128c4565f65c1e67c747909029790600090a2505050565b6116b6611856565b60028190556040518181527f659173bb145424b051a0ae81d35844da8b0027210b17a7137786f17295f296e290602001610628565b6116f3611856565b6001600160a01b0381166117585760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610479565b611761816118f6565b50565b600080546001600160a01b038381169116148061179957506001600160a01b03821660009081526006602052604090205460ff165b92915050565b6117a7611856565b8060005b81811015611810576000600660008686858181106117cb576117cb611f4c565b90506020020160208101906117e09190611992565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556001016117ab565b508282604051611821929190611cff565b604051908190038120907ff792baf12ca7a1ec0319e12ac04793eb9c1b0c5aa5eafb63c61ec236aee322a090600090a2505050565b6000546001600160a01b03163314610c845760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610479565b60008082815b818110156118ec578585828181106118d0576118d0611f4c565b90506020020135836118e29190611ed2565b92506001016118b6565b5090949350505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008083601f84011261195857600080fd5b50813567ffffffffffffffff81111561197057600080fd5b6020830191508360208260051b850101111561198b57600080fd5b9250929050565b6000602082840312156119a457600080fd5b81356119af81611f62565b9392505050565b600080604083850312156119c957600080fd5b82356119d481611f62565b915060208301356119e481611f62565b809150509250929050565b600080600080600060608688031215611a0757600080fd5b8535611a1281611f62565b9450602086013567ffffffffffffffff80821115611a2f57600080fd5b611a3b89838a01611946565b90965094506040880135915080821115611a5457600080fd5b50611a6188828901611946565b969995985093965092949392505050565b60008060008060008060006080888a031215611a8d57600080fd5b8735611a9881611f62565b9650602088013567ffffffffffffffff80821115611ab557600080fd5b611ac18b838c01611946565b909850965060408a0135915080821115611ada57600080fd5b611ae68b838c01611946565b909650945060608a0135915080821115611aff57600080fd5b50611b0c8a828b01611946565b989b979a50959850939692959293505050565b60008060008060608587031215611b3557600080fd5b8435611b4081611f62565b9350602085013567ffffffffffffffff811115611b5c57600080fd5b611b6887828801611946565b9598909750949560400135949350505050565b60008060208385031215611b8e57600080fd5b823567ffffffffffffffff811115611ba557600080fd5b611bb185828601611946565b90969095509350505050565b60008060008060408587031215611bd357600080fd5b843567ffffffffffffffff80821115611beb57600080fd5b611bf788838901611946565b90965094506020870135915080821115611c1057600080fd5b50611c1d87828801611946565b95989497509550505050565b600080600060408486031215611c3e57600080fd5b833567ffffffffffffffff811115611c5557600080fd5b611c6186828701611946565b909790965060209590950135949350505050565b600060208284031215611c8757600080fd5b815180151581146119af57600080fd5b600060208284031215611ca957600080fd5b5035919050565b600060208284031215611cc257600080fd5b5051919050565b81835260006001600160fb1b03831115611ce257600080fd5b8260051b8083602087013760009401602001938452509192915050565b60008184825b85811015611d36578135611d1881611f62565b6001600160a01b031683526020928301929190910190600101611d05565b509095945050505050565b60008184825b85811015611d36578135611d5a81611f62565b6001600160a01b031683526020928301929190910190600101611d47565b602081526000611d8c602083018486611cc9565b949350505050565b604081526000611da8604083018688611cc9565b8281036020840152611dbb818587611cc9565b979650505050505050565b604081526000611dda604083018587611cc9565b9050826020830152949350505050565b6020808252601e908201527f42756c6b73656e6465723a206469666620617272617973206c656e6774680000604082015260600190565b60208082526019908201527f42756c6b73656e6465723a20696e76616c696420747846656500000000000000604082015260600190565b60208082526023908201527f42756c6b73656e6465723a206d6178206e756d626572206f662061646472657360408201526273657360e81b606082015260800190565b6020808252601e908201527f42756c6b73656e6465723a206661696c656420746f2073656e64204554480000604082015260600190565b60008219821115611ee557611ee5611f36565b500190565b6000816000190483118215151615611f0457611f04611f36565b500290565b600082821015611f1b57611f1b611f36565b500390565b634e487b7160e01b600052600160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038116811461176157600080fdfea264697066735822122076acb3c0534ec4ada082b795edf0ef05a87d4d5b4f4312451c9790762e9c8ab364736f6c63430008070033
Deployed Bytecode
0x6080604052600436106101665760003560e01c80638e50c9f9116100d1578063c8813ffd1161008a578063f0a0a29911610064578063f0a0a299146103bb578063f2fde38b146103d1578063f4201c3c146103f1578063f48d11af1461041157600080fd5b8063c8813ffd14610365578063cf82046114610385578063f05d16f71461039b57600080fd5b80638e50c9f9146102be57806393e5365f146102d15780639c1f6133146102f5578063a0ef91df146102fd578063a74ecbae14610312578063aa168b471461032557600080fd5b80635d07f35c116101235780635d07f35c146102255780637052d2b914610245578063715018a61461025857806375c6b74a1461026d5780638279c7db146102805780638da5cb5b146102a057600080fd5b806316fed3e21461016b5780633aeac4e1146101a85780633d06242a146101ca5780633e720a07146101ea5780634c3b8912146101fd578063531ebce514610210575b600080fd5b34801561017757600080fd5b5060015461018b906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101b457600080fd5b506101c86101c33660046119b6565b610431565b005b3480156101d657600080fd5b506101c86101e5366004611c97565b6105ef565b6101c86101f83660046119ef565b610633565b6101c861020b366004611c29565b610819565b34801561021c57600080fd5b5061018b6109fe565b34801561023157600080fd5b506101c8610240366004611c97565b610a31565b6101c86102533660046119ef565b610abe565b34801561026457600080fd5b506101c8610c72565b6101c861027b366004611bbd565b610c86565b34801561028c57600080fd5b506101c861029b366004611992565b610ee4565b3480156102ac57600080fd5b506000546001600160a01b031661018b565b6101c86102cc366004611b1f565b610f8c565b3480156102dd57600080fd5b506102e760045481565b60405190815260200161019f565b6101c8611121565b34801561030957600080fd5b506101c8611296565b6101c8610320366004611a72565b6113c1565b34801561033157600080fd5b50610355610340366004611992565b60066020526000908152604090205460ff1681565b604051901515815260200161019f565b34801561037157600080fd5b506101c8610380366004611b7b565b6115f7565b34801561039157600080fd5b506102e760025481565b3480156103a757600080fd5b506101c86103b6366004611c97565b6116ae565b3480156103c757600080fd5b506102e760035481565b3480156103dd57600080fd5b506101c86103ec366004611992565b6116eb565b3480156103fd57600080fd5b5061035561040c366004611992565b611764565b34801561041d57600080fd5b506101c861042c366004611b7b565b61179f565b610439611856565b60055460ff16156104825760405162461bcd60e51b815260206004820152600e60248201526d4e6f2072652d656e7472616e637960901b60448201526064015b60405180910390fd5b6005805460ff191660011790556040516370a0823160e01b815230600482015282906000906001600160a01b038316906370a082319060240160206040518083038186803b1580156104d357600080fd5b505afa1580156104e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061050b9190611cb0565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509083169063a9059cbb90604401602060405180830381600087803b15801561055957600080fd5b505af115801561056d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105919190611c75565b50826001600160a01b0316846001600160a01b03167f037238854fe57fbf51f09946f854fc3916fe83938d6521f09bd05463839f1304836040516105d791815260200190565b60405180910390a350506005805460ff191690555050565b6105f7611856565b60038190556040518181527fb44d6d9784a7e43d625af323676ad5a2b011837b3d357457287aed917436ae1b906020015b60405180910390a150565b34600061063f33611764565b905080610668576002548210156106685760405162461bcd60e51b815260040161047990611e21565b8483146106875760405162461bcd60e51b815260040161047990611dea565b6004548511156106a95760405162461bcd60e51b815260040161047990611e58565b60006106b585856118b0565b9050878660005b818110156107a557826001600160a01b03166323b872dd338c8c858181106106e6576106e6611f4c565b90506020020160208101906106fb9190611992565b8b8b8681811061070d5761070d611f4c565b6040516001600160e01b031960e088901b1681526001600160a01b03958616600482015294909316602485015250602090910201356044820152606401602060405180830381600087803b15801561076457600080fd5b505af1158015610778573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061079c9190611c75565b506001016106bc565b5088886040516107b6929190611cff565b60405180910390208a6001600160a01b0316336001600160a01b03167f8b0d99ca0f78f682a8cb40ebf89aa88859763c7f64a6b88d2d8b87a801af7db48a8a8860405161080593929190611dc6565b60405180910390a450505050505050505050565b60006108258284611eea565b905034600061083333611764565b90508015610890578282101561088b5760405162461bcd60e51b815260206004820152601c60248201527f42756c6b73656e6465723a20696e73756666696369656e7420455448000000006044820152606401610479565b6108bc565b60025461089d9084611ed2565b8210156108bc5760405162461bcd60e51b815260040161047990611e21565b6004548511156108de5760405162461bcd60e51b815260040161047990611e58565b8460005b818110156109a857858410156108fa576108fa611f20565b6109048685611f09565b9350600088888381811061091a5761091a611f4c565b905060200201602081019061092f9190611992565b6001600160a01b03168760405160006040518083038185875af1925050503d8060008114610979576040519150601f19603f3d011682016040523d82523d6000602084013e61097e565b606091505b505090508061099f5760405162461bcd60e51b815260040161047990611e9b565b506001016108e2565b5086866040516109b9929190611d41565b6040519081900381208682529033907f71d3cc836071fe1f97bf6238176df070e5396568960ce424e907293058705bde9060200160405180910390a350505050505050565b6001546000906001600160a01b0316610a2157506000546001600160a01b031690565b506001546001600160a01b031690565b610a39611856565b60008111610a895760405162461bcd60e51b815260206004820152601d60248201527f42756c6b73656e6465723a207a65726f206d61784164647265737365730000006044820152606401610479565b60048190556040518181527fc55d48b3d5c5e40a67e083a9c841be9f6ecc6c36cf2d733d270778b37931dfa590602001610628565b346000610aca33611764565b905080610af357600254821015610af35760405162461bcd60e51b815260040161047990611e21565b848314610b125760405162461bcd60e51b815260040161047990611dea565b600454851115610b345760405162461bcd60e51b815260040161047990611e58565b6000610b4085856118b0565b9050878660005b81811015610c1257826001600160a01b03166323b872dd338c8c85818110610b7157610b71611f4c565b9050602002016020810190610b869190611992565b8b8b86818110610b9857610b98611f4c565b6040516001600160e01b031960e088901b1681526001600160a01b03958616600482015294909316602485015250602090910201356044820152606401600060405180830381600087803b158015610bef57600080fd5b505af1158015610c03573d6000803e3d6000fd5b50505050806001019050610b47565b508888604051610c23929190611cff565b60405180910390208a6001600160a01b0316336001600160a01b03167fe4a65cc4b6042cf65c6c2e6940b477d3a3ae95a5a3adcabb77fab1c23ceb32078a8a8860405161080593929190611dc6565b610c7a611856565b610c8460006118f6565b565b6000610c9283836118b0565b9050346000610ca033611764565b90508015610cfd5782821015610cf85760405162461bcd60e51b815260206004820152601c60248201527f42756c6b73656e6465723a20696e76616c6964206574682073656e64000000006044820152606401610479565b610d29565b600254610d0a9084611ed2565b821015610d295760405162461bcd60e51b815260040161047990611e21565b858414610d485760405162461bcd60e51b815260040161047990611dea565b600454861115610d6a5760405162461bcd60e51b815260040161047990611e58565b8560005b81811015610e7e57868682818110610d8857610d88611f4c565b90506020020135841015610d9e57610d9e611f20565b868682818110610db057610db0611f4c565b9050602002013584610dc29190611f09565b93506000898983818110610dd857610dd8611f4c565b9050602002016020810190610ded9190611992565b6001600160a01b0316888884818110610e0857610e08611f4c565b9050602002013560405160006040518083038185875af1925050503d8060008114610e4f576040519150601f19603f3d011682016040523d82523d6000602084013e610e54565b606091505b5050905080610e755760405162461bcd60e51b815260040161047990611e9b565b50600101610d6e565b508787604051610e8f929190611cff565b6040518091039020336001600160a01b03167f5276a5428c18040f38e591a1762fa2542851c18931160f3592295aa52c0588478888604051610ed2929190611d78565b60405180910390a35050505050505050565b610eec611856565b6001600160a01b038116610f425760405162461bcd60e51b815260206004820152601860248201527f42756c6b73656e6465723a207a65726f206164647265737300000000000000006044820152606401610479565b600180546001600160a01b0319166001600160a01b0383169081179091556040517f305178007fba67b7dba31962d440eb513562c145e68053ccf952ac8558e306a590600090a250565b346000610f9833611764565b905080610fc157600254821015610fc15760405162461bcd60e51b815260040161047990611e21565b600454841115610fe35760405162461bcd60e51b815260040161047990611e58565b336000610ff08587611eea565b9050878660005b818110156110c657826001600160a01b03166323b872dd868c8c8581811061102157611021611f4c565b90506020020160208101906110369190611992565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604481018b9052606401602060405180830381600087803b15801561108557600080fd5b505af1158015611099573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110bd9190611c75565b50600101610ff7565b5088886040516110d7929190611cff565b6040805191829003822089835260208301869052916001600160a01b038d169133917fbd4ad1f57a716c9124f3ebcbedc9cd25e06746577d319ca8ddbceb0b6af091919101610805565b3360009081526006602052604090205460ff16156111815760405162461bcd60e51b815260206004820152601760248201527f42756c6b73656e6465723a20616c7265616479207669700000000000000000006044820152606401610479565b6003543410156111d35760405162461bcd60e51b815260206004820152601b60248201527f42756c6b73656e6465723a20696e76616c6964207669702066656500000000006044820152606401610479565b60006111dd6109fe565b90506000816001600160a01b03163460405160006040518083038185875af1925050503d806000811461122c576040519150601f19603f3d011682016040523d82523d6000602084013e611231565b606091505b50509050806112525760405162461bcd60e51b815260040161047990611e9b565b33600081815260066020526040808220805460ff19166001179055517f110b9052dd0fb65bceb50d21ecf864a104b98046d5144883c77bedff0e4980b09190a25050565b61129e611856565b60055460ff16156112e25760405162461bcd60e51b815260206004820152600e60248201526d4e6f2072652d656e7472616e637960901b6044820152606401610479565b6005805460ff1916600117905560006112f96109fe565b60405190915047906000906001600160a01b0384169083908381818185875af1925050503d8060008114611349576040519150601f19603f3d011682016040523d82523d6000602084013e61134e565b606091505b505090508061136f5760405162461bcd60e51b815260040161047990611e9b565b826001600160a01b03167fdb35132c111efe920cede025e819975671cfd1b8fcc1174762c8670c4e94c211836040516113aa91815260200190565b60405180910390a250506005805460ff1916905550565b3460006113cd33611764565b9050806113f6576002548210156113f65760405162461bcd60e51b815260040161047990611e21565b8685146114545760405162461bcd60e51b815260206004820152602660248201527f42756c6b73656e6465723a20646966666572656e74206c656e677468206f6620604482015265696e7075747360d01b6064820152608401610479565b6004548711156114765760405162461bcd60e51b815260040161047990611e58565b888760005b8181101561158057826001600160a01b031663f242432a338d8d858181106114a5576114a5611f4c565b90506020020160208101906114ba9190611992565b8c8c868181106114cc576114cc611f4c565b905060200201358b8b878181106114e5576114e5611f4c565b6040516001600160e01b031960e089901b1681526001600160a01b03968716600482015295909416602486015250604484019190915260209091020135606482015260a06084820152600260a482015261060f60f31b60c482015260e401600060405180830381600087803b15801561155d57600080fd5b505af1158015611571573d6000803e3d6000fd5b5050505080600101905061147b565b508989604051611591929190611cff565b60405180910390208b6001600160a01b0316336001600160a01b03167fb72d583ee457d2260995bddf087f5c088c6f3a275215c36e0a4fa6553937586c8b8b8b8b6040516115e29493929190611d94565b60405180910390a45050505050505050505050565b6115ff611856565b8060005b818110156116685760016006600086868581811061162357611623611f4c565b90506020020160208101906116389190611992565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055600101611603565b508282604051611679929190611cff565b604051908190038120907fc9f42388650052159f4e63ee96e98159386e9128c4565f65c1e67c747909029790600090a2505050565b6116b6611856565b60028190556040518181527f659173bb145424b051a0ae81d35844da8b0027210b17a7137786f17295f296e290602001610628565b6116f3611856565b6001600160a01b0381166117585760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610479565b611761816118f6565b50565b600080546001600160a01b038381169116148061179957506001600160a01b03821660009081526006602052604090205460ff165b92915050565b6117a7611856565b8060005b81811015611810576000600660008686858181106117cb576117cb611f4c565b90506020020160208101906117e09190611992565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556001016117ab565b508282604051611821929190611cff565b604051908190038120907ff792baf12ca7a1ec0319e12ac04793eb9c1b0c5aa5eafb63c61ec236aee322a090600090a2505050565b6000546001600160a01b03163314610c845760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610479565b60008082815b818110156118ec578585828181106118d0576118d0611f4c565b90506020020135836118e29190611ed2565b92506001016118b6565b5090949350505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008083601f84011261195857600080fd5b50813567ffffffffffffffff81111561197057600080fd5b6020830191508360208260051b850101111561198b57600080fd5b9250929050565b6000602082840312156119a457600080fd5b81356119af81611f62565b9392505050565b600080604083850312156119c957600080fd5b82356119d481611f62565b915060208301356119e481611f62565b809150509250929050565b600080600080600060608688031215611a0757600080fd5b8535611a1281611f62565b9450602086013567ffffffffffffffff80821115611a2f57600080fd5b611a3b89838a01611946565b90965094506040880135915080821115611a5457600080fd5b50611a6188828901611946565b969995985093965092949392505050565b60008060008060008060006080888a031215611a8d57600080fd5b8735611a9881611f62565b9650602088013567ffffffffffffffff80821115611ab557600080fd5b611ac18b838c01611946565b909850965060408a0135915080821115611ada57600080fd5b611ae68b838c01611946565b909650945060608a0135915080821115611aff57600080fd5b50611b0c8a828b01611946565b989b979a50959850939692959293505050565b60008060008060608587031215611b3557600080fd5b8435611b4081611f62565b9350602085013567ffffffffffffffff811115611b5c57600080fd5b611b6887828801611946565b9598909750949560400135949350505050565b60008060208385031215611b8e57600080fd5b823567ffffffffffffffff811115611ba557600080fd5b611bb185828601611946565b90969095509350505050565b60008060008060408587031215611bd357600080fd5b843567ffffffffffffffff80821115611beb57600080fd5b611bf788838901611946565b90965094506020870135915080821115611c1057600080fd5b50611c1d87828801611946565b95989497509550505050565b600080600060408486031215611c3e57600080fd5b833567ffffffffffffffff811115611c5557600080fd5b611c6186828701611946565b909790965060209590950135949350505050565b600060208284031215611c8757600080fd5b815180151581146119af57600080fd5b600060208284031215611ca957600080fd5b5035919050565b600060208284031215611cc257600080fd5b5051919050565b81835260006001600160fb1b03831115611ce257600080fd5b8260051b8083602087013760009401602001938452509192915050565b60008184825b85811015611d36578135611d1881611f62565b6001600160a01b031683526020928301929190910190600101611d05565b509095945050505050565b60008184825b85811015611d36578135611d5a81611f62565b6001600160a01b031683526020928301929190910190600101611d47565b602081526000611d8c602083018486611cc9565b949350505050565b604081526000611da8604083018688611cc9565b8281036020840152611dbb818587611cc9565b979650505050505050565b604081526000611dda604083018587611cc9565b9050826020830152949350505050565b6020808252601e908201527f42756c6b73656e6465723a206469666620617272617973206c656e6774680000604082015260600190565b60208082526019908201527f42756c6b73656e6465723a20696e76616c696420747846656500000000000000604082015260600190565b60208082526023908201527f42756c6b73656e6465723a206d6178206e756d626572206f662061646472657360408201526273657360e81b606082015260800190565b6020808252601e908201527f42756c6b73656e6465723a206661696c656420746f2073656e64204554480000604082015260600190565b60008219821115611ee557611ee5611f36565b500190565b6000816000190483118215151615611f0457611f04611f36565b500290565b600082821015611f1b57611f1b611f36565b500390565b634e487b7160e01b600052600160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038116811461176157600080fdfea264697066735822122076acb3c0534ec4ada082b795edf0ef05a87d4d5b4f4312451c9790762e9c8ab364736f6c63430008070033
Loading...
Loading
Loading...
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.
[ 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.