Source Code
Overview
ETH Balance
0 ETH
More Info
ContractCreator
Multichain Info
N/A
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Source Code Verified (Exact Match)
Contract Name:
AutoSniper
Compiler Version
v0.8.24+commit.e11b9ed9
ZkSolc Version
v1.5.7
Optimization Enabled:
Yes with Mode 3
Other Settings:
cancun EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity 0.8.24; import {SniperState} from "./helpers/SniperStructs.sol"; import {IERC721} from "forge-std/interfaces/IERC721.sol"; import {IERC20} from "forge-std/interfaces/IERC20.sol"; import {IERC1155} from "forge-std/interfaces/IERC1155.sol"; import {Ownable} from "solady/auth/Ownable.sol"; /** * @title AutoSniper 4.0 for @oSnipeNFT * @author 0xQuit */ /* @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%*+=--::::::--=+*#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*=:. ...... :=*%@@@@@@@@@%@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#=. .-+*%@@@@@@@@@@@@%#+=: -@@@@@@=:::=#@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@%+. :=#@@@@@@@@@@@@@@@@@@@@@@@@#+#@@@@@%**+-:::-%@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@#- :+%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%******+-::=@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@%: =%@@@@@@@@@@@@@@@@%%%%@@@@@@@@@@@@@@%*++++++***+=+@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@= -@@@@@@@@@@@@#+-:. :-+%@@@@@%*+++++++++*#@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@#. :%@@@@@@@@@%+: ..:::::. .*@@@%*+++++++++++#@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@* =@@@@@@@@@#: .=*%@@@@@@@@@@%@@@%+----======+#@@@@@%@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@+ *@@@@@@@@#: .+%@@@@@@@@@@@@@@@@@@=-------==+#@@@@@%- -@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@# #@@@@@@@@= .*@@@@@@@@@#=. .-+#+=--------*@@@@@@@% +@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@. =@@@@@@@@- =@@@@@@@@@@: -+**+- .--=----+%@@@@@@@@@# %@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@+ .@@@@@@@@- +@@@@@@@@@@- #@@@@%+-:. :=*@#%@@@*%@@@@@@@= -@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@. #@@@@@@@+ =@@@@@@@@@@@: @@@%=-----. #@@@@@*. -@@@@@@@@ %@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@# @@@@@@@@. .@@@@@@@@@@@@% :#=:::::--*+=@@@@@@- %@@@@@@@- +@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@+ :@@@@@@@% =@@@@@@@@@@@@@%-:--::::-*@@@@@@@@@@* *@@@@@@@+ :@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@= -@@@@@@@# +@@@@@@@@@@@@@#-:---:-*@@@@@@@@@@@@# +@@@@@@@+ :@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@+ -@@@@@@@% =@@@@@@*#@@@#-::---=. -@@@@@@@@@@@@* +@@@@@@@+ :@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@# .@@@@@@@@ .@@@@@+ #*-:::--*@@# -@@@@@@@@@@@- %@@@@@@@- =@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@ #@@@@@@@+ =@@@@@% .--:--+@@@@@= %@@@@@@@@@# :@@@@@@@@ %@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@= :@@@@@@@@=%@@@@@@*: :-*@@@@@@%. .@@@@@@@@@% %@@@@@@@= :@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@ +@@@@@@@@@@@@#+---:. .=*###*- :%@@@@@@@@# .%@@@@@@@# #@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@* %@@@@@@@@@#=------*%+- .-#@@@@@@@@%= .%@@@@@@@@. =@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@= .*@@@@@@@@+------=%@@@@@@%%%@@@@@@@@@@#- +@@@@@@@@@: :@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@#@@@@@@@@*===---=#@@@@@@@@@@@@@@@@@%*- +@@@@@@@@@# -@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@*=====+#%@@@@@%= .:--==--:. .-*@@@@@@@@@@+ +@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@+--==+#@@@@@@@@=:. :=*%@@@@@@@@@@@*. .#@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@*===+-*@@@@@@@@@@@@@@%%#####%@@@@@@@@@@@@@@@*. +@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@#+==#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#= .+@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@+==+%@@@@@@@@@%*%@@@@@@@@@@@@@@@@@@@@@@@@@*- -*@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@#=%@@@@@@@@@+ -=*%@@@@@@@@@@@@@@%*+-. :+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%+-. ..:::::::. .-+#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%*+=-:........:-=+*#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ */ contract AutoSniper is Ownable { error InsufficientBalance(); error FailedToWithdraw(); error FailedToPayAutosniper(); error FailedToPayValidator(); error OrderFailed(); error CallerNotFulfiller(); error MigrationNotEnabled(); error ArrayLengthMismatch(); error SniperIsPaused(); error FulfillerCannotHaveBalance(); event Deposit(address sniper, uint256 amount); event Withdrawal(address sniper, uint256 amount); address private fulfillerAddress = 0x7D79Bd0E4B3dC90665A3ed30Aa6C6c06c89D224E; address public nextContractVersionAddress; bool public migrationEnabled; mapping(address => SniperState) public sniperStates; constructor() { _initializeOwner(tx.origin); } // only the fulfiller can call this function modifier onlyFulfiller() { if (msg.sender != fulfillerAddress) revert CallerNotFulfiller(); _; } // allow the contract to receive Ether receive() external payable {} /** * @dev Generalized function for fulfilling orders * @param contractAddresses a list of contract addresses that will be called * @param calls a matching array to contractAddresses, each index being a call to make to a given contract * @param values a matching array to contractAddresses, each index being the value to send with the call * @param sniper the address of the sniper * @param validatorTip the amount to send to block.coinbase. Reverts if this is 0. * @param fulfillerTip the amount to send to fulfillerAddress. Reverts if this is 0. */ function snipe_2572234525( address[] calldata contractAddresses, bytes[] calldata calls, uint256[] calldata values, address sniper, uint256 validatorTip, uint256 fulfillerTip ) external onlyFulfiller { if (contractAddresses.length != calls.length) revert ArrayLengthMismatch(); if (calls.length != values.length) revert ArrayLengthMismatch(); if (sniperStates[sniper].isPaused) revert SniperIsPaused(); uint256 balanceBefore = address(this).balance; for (uint256 i = 0; i < contractAddresses.length; ++i) { (bool success,) = contractAddresses[i].call{value: values[i]}(calls[i]); if (!success) revert OrderFailed(); } (bool validatorPaid,) = block.coinbase.call{value: validatorTip}(""); if (!validatorPaid) revert FailedToPayValidator(); (bool fulfillerPaid,) = fulfillerAddress.call{value: fulfillerTip}(""); if (!fulfillerPaid) revert FailedToPayAutosniper(); uint256 balanceAfter = address(this).balance; if (balanceAfter < balanceBefore) { uint128 spent = uint128(balanceBefore - balanceAfter); if (sniperStates[sniper].ethBalance < spent) revert InsufficientBalance(); unchecked { sniperStates[sniper].ethBalance -= spent; } emit Withdrawal(sniper, spent); } else if (balanceAfter > balanceBefore) { unchecked { sniperStates[sniper].ethBalance += uint128(balanceAfter - balanceBefore); } emit Deposit(sniper, balanceAfter - balanceBefore); } } /** * @dev deposit Ether into the contract. * @param sniper is the address who's balance is affected. */ function deposit(address sniper) public payable { if (tx.origin == fulfillerAddress) revert FulfillerCannotHaveBalance(); unchecked { sniperStates[sniper].ethBalance += uint128(msg.value); } emit Deposit(sniper, msg.value); } /** * @dev deposit Ether into your own contract balance. */ function depositSelf() external payable { deposit(msg.sender); } /** * @dev withdraw Ether from your contract balance * @param amount the amount of Ether to be withdrawn */ function withdraw(uint256 amount) external { if (tx.origin == fulfillerAddress) revert FulfillerCannotHaveBalance(); if (sniperStates[msg.sender].ethBalance < amount) revert InsufficientBalance(); unchecked { sniperStates[msg.sender].ethBalance -= uint128(amount); } (bool success,) = payable(msg.sender).call{value: amount}(""); if (!success) revert FailedToWithdraw(); emit Withdrawal(msg.sender, amount); } function setUserIsPaused(bool isPaused) external { sniperStates[msg.sender].isPaused = isPaused; } /** * @dev Owner function to change fulfiller address if needed. */ function setFulfillerAddress(address _fulfiller) external onlyOwner { fulfillerAddress = _fulfiller; } /** * Enables migration and sets a destination address (the new contract) * @param _destination the new AutoSniper version to allow migration to. */ function setMigrationAddress(address _destination) external onlyOwner { migrationEnabled = true; nextContractVersionAddress = _destination; } /** * @dev in the event of a future contract upgrade, this function allows snipers to * easily move their ether balance to the new contract. This can only be called by * the sniper to move their personal balance - the contract owner or anybody else * does not have the power to migrate balances for users. */ function migrateBalance() external { if (!migrationEnabled) revert MigrationNotEnabled(); uint256 balanceToMigrate = sniperStates[msg.sender].ethBalance; sniperStates[msg.sender].ethBalance = 0; (bool success,) = nextContractVersionAddress.call{value: balanceToMigrate}( abi.encodeWithSelector(this.deposit.selector, msg.sender) ); if (!success) revert FailedToWithdraw(); } function sniperBalance(address sniper) external view returns (uint128) { return sniperStates[sniper].ethBalance; } function onERC1155Received(address, address, uint256, uint256, bytes calldata) public virtual returns (bytes4) { return this.onERC1155Received.selector; } function onERC1155BatchReceived(address, address, uint256[] calldata, uint256[] calldata, bytes calldata) public virtual returns (bytes4) { return this.onERC1155BatchReceived.selector; } function onERC721Received(address, address, uint256, bytes calldata) external virtual returns (bytes4) { return 0x150b7a02; } // Used by ERC721BasicToken.sol function onERC721Received(address, uint256, bytes calldata) external virtual returns (bytes4) { return 0xf0b9e5ba; } function supportsInterface(bytes4 interfaceId) external view virtual returns (bool) { return interfaceId == this.supportsInterface.selector; } // Emergency function: In case any ERC20 tokens get stuck in the contract unintentionally // Only owner can retrieve the asset balance to a recipient address function rescueERC20(address asset, address recipient) external onlyOwner { IERC20 token = IERC20(asset); token.transfer(recipient, token.balanceOf(address(this))); } // Emergency function: In case any ERC721 tokens get stuck in the contract unintentionally // Only owner can retrieve the asset balance to a recipient address function rescueERC721(address asset, uint256[] calldata ids, address recipient) external onlyOwner { for (uint256 i = 0; i < ids.length; i++) { IERC721(asset).transferFrom(address(this), recipient, ids[i]); } } // Emergency function: In case any ERC1155 tokens get stuck in the contract unintentionally // Only owner can retrieve the asset balance to a recipient address function rescueERC1155(address asset, uint256[] calldata ids, uint256[] calldata amounts, address recipient) external onlyOwner { for (uint256 i = 0; i < ids.length; i++) { IERC1155(asset).safeTransferFrom(address(this), recipient, ids[i], amounts[i], ""); } } }
// SPDX-License-Identifier: UNLICENSED pragma solidity 0.8.24; struct SniperState { uint128 ethBalance; bool isPaused; }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.2; import "./IERC165.sol"; /// @title ERC-721 Non-Fungible Token Standard /// @dev See https://eips.ethereum.org/EIPS/eip-721 /// Note: the ERC-165 identifier for this interface is 0x80ac58cd. interface IERC721 is IERC165 { /// @dev This emits when ownership of any NFT changes by any mechanism. /// This event emits when NFTs are created (`from` == 0) and destroyed /// (`to` == 0). Exception: during contract creation, any number of NFTs /// may be created and assigned without emitting Transfer. At the time of /// any transfer, the approved address for that NFT (if any) is reset to none. event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId); /// @dev This emits when the approved address for an NFT is changed or /// reaffirmed. The zero address indicates there is no approved address. /// When a Transfer event emits, this also indicates that the approved /// address for that NFT (if any) is reset to none. event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId); /// @dev This emits when an operator is enabled or disabled for an owner. /// The operator can manage all NFTs of the owner. event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved); /// @notice Count all NFTs assigned to an owner /// @dev NFTs assigned to the zero address are considered invalid, and this /// function throws for queries about the zero address. /// @param _owner An address for whom to query the balance /// @return The number of NFTs owned by `_owner`, possibly zero function balanceOf(address _owner) external view returns (uint256); /// @notice Find the owner of an NFT /// @dev NFTs assigned to zero address are considered invalid, and queries /// about them do throw. /// @param _tokenId The identifier for an NFT /// @return The address of the owner of the NFT function ownerOf(uint256 _tokenId) external view returns (address); /// @notice Transfers the ownership of an NFT from one address to another address /// @dev Throws unless `msg.sender` is the current owner, an authorized /// operator, or the approved address for this NFT. Throws if `_from` is /// not the current owner. Throws if `_to` is the zero address. Throws if /// `_tokenId` is not a valid NFT. When transfer is complete, this function /// checks if `_to` is a smart contract (code size > 0). If so, it calls /// `onERC721Received` on `_to` and throws if the return value is not /// `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`. /// @param _from The current owner of the NFT /// @param _to The new owner /// @param _tokenId The NFT to transfer /// @param data Additional data with no specified format, sent in call to `_to` function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes calldata data) external payable; /// @notice Transfers the ownership of an NFT from one address to another address /// @dev This works identically to the other function with an extra data parameter, /// except this function just sets data to "". /// @param _from The current owner of the NFT /// @param _to The new owner /// @param _tokenId The NFT to transfer function safeTransferFrom(address _from, address _to, uint256 _tokenId) external payable; /// @notice Transfer ownership of an NFT -- THE CALLER IS RESPONSIBLE /// TO CONFIRM THAT `_to` IS CAPABLE OF RECEIVING NFTS OR ELSE /// THEY MAY BE PERMANENTLY LOST /// @dev Throws unless `msg.sender` is the current owner, an authorized /// operator, or the approved address for this NFT. Throws if `_from` is /// not the current owner. Throws if `_to` is the zero address. Throws if /// `_tokenId` is not a valid NFT. /// @param _from The current owner of the NFT /// @param _to The new owner /// @param _tokenId The NFT to transfer function transferFrom(address _from, address _to, uint256 _tokenId) external payable; /// @notice Change or reaffirm the approved address for an NFT /// @dev The zero address indicates there is no approved address. /// Throws unless `msg.sender` is the current NFT owner, or an authorized /// operator of the current owner. /// @param _approved The new approved NFT controller /// @param _tokenId The NFT to approve function approve(address _approved, uint256 _tokenId) external payable; /// @notice Enable or disable approval for a third party ("operator") to manage /// all of `msg.sender`'s assets /// @dev Emits the ApprovalForAll event. The contract MUST allow /// multiple operators per owner. /// @param _operator Address to add to the set of authorized operators /// @param _approved True if the operator is approved, false to revoke approval function setApprovalForAll(address _operator, bool _approved) external; /// @notice Get the approved address for a single NFT /// @dev Throws if `_tokenId` is not a valid NFT. /// @param _tokenId The NFT to find the approved address for /// @return The approved address for this NFT, or the zero address if there is none function getApproved(uint256 _tokenId) external view returns (address); /// @notice Query if an address is an authorized operator for another address /// @param _owner The address that owns the NFTs /// @param _operator The address that acts on behalf of the owner /// @return True if `_operator` is an approved operator for `_owner`, false otherwise function isApprovedForAll(address _owner, address _operator) external view returns (bool); } /// @dev Note: the ERC-165 identifier for this interface is 0x150b7a02. interface IERC721TokenReceiver { /// @notice Handle the receipt of an NFT /// @dev The ERC721 smart contract calls this function on the recipient /// after a `transfer`. This function MAY throw to revert and reject the /// transfer. Return of other than the magic value MUST result in the /// transaction being reverted. /// Note: the contract address is always the message sender. /// @param _operator The address which called `safeTransferFrom` function /// @param _from The address which previously owned the token /// @param _tokenId The NFT identifier which is being transferred /// @param _data Additional data with no specified format /// @return `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))` /// unless throwing function onERC721Received(address _operator, address _from, uint256 _tokenId, bytes calldata _data) external returns (bytes4); } /// @title ERC-721 Non-Fungible Token Standard, optional metadata extension /// @dev See https://eips.ethereum.org/EIPS/eip-721 /// Note: the ERC-165 identifier for this interface is 0x5b5e139f. interface IERC721Metadata is IERC721 { /// @notice A descriptive name for a collection of NFTs in this contract function name() external view returns (string memory _name); /// @notice An abbreviated name for NFTs in this contract function symbol() external view returns (string memory _symbol); /// @notice A distinct Uniform Resource Identifier (URI) for a given asset. /// @dev Throws if `_tokenId` is not a valid NFT. URIs are defined in RFC /// 3986. The URI may point to a JSON file that conforms to the "ERC721 /// Metadata JSON Schema". function tokenURI(uint256 _tokenId) external view returns (string memory); } /// @title ERC-721 Non-Fungible Token Standard, optional enumeration extension /// @dev See https://eips.ethereum.org/EIPS/eip-721 /// Note: the ERC-165 identifier for this interface is 0x780e9d63. interface IERC721Enumerable is IERC721 { /// @notice Count NFTs tracked by this contract /// @return A count of valid NFTs tracked by this contract, where each one of /// them has an assigned and queryable owner not equal to the zero address function totalSupply() external view returns (uint256); /// @notice Enumerate valid NFTs /// @dev Throws if `_index` >= `totalSupply()`. /// @param _index A counter less than `totalSupply()` /// @return The token identifier for the `_index`th NFT, /// (sort order not specified) function tokenByIndex(uint256 _index) external view returns (uint256); /// @notice Enumerate NFTs assigned to an owner /// @dev Throws if `_index` >= `balanceOf(_owner)` or if /// `_owner` is the zero address, representing invalid NFTs. /// @param _owner An address where we are interested in NFTs owned by them /// @param _index A counter less than `balanceOf(_owner)` /// @return The token identifier for the `_index`th NFT assigned to `_owner`, /// (sort order not specified) function tokenOfOwnerByIndex(address _owner, uint256 _index) external view returns (uint256); }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.2; /// @dev Interface of the ERC20 standard as defined in the EIP. /// @dev This includes the optional name, symbol, and decimals metadata. interface IERC20 { /// @dev Emitted when `value` tokens are moved from one account (`from`) to another (`to`). event Transfer(address indexed from, address indexed to, uint256 value); /// @dev Emitted when the allowance of a `spender` for an `owner` is set, where `value` /// is the new allowance. event Approval(address indexed owner, address indexed spender, uint256 value); /// @notice Returns the amount of tokens in existence. function totalSupply() external view returns (uint256); /// @notice Returns the amount of tokens owned by `account`. function balanceOf(address account) external view returns (uint256); /// @notice Moves `amount` tokens from the caller's account to `to`. function transfer(address to, uint256 amount) external returns (bool); /// @notice Returns the remaining number of tokens that `spender` is allowed /// to spend on behalf of `owner` function allowance(address owner, address spender) external view returns (uint256); /// @notice Sets `amount` as the allowance of `spender` over the caller's tokens. /// @dev Be aware of front-running risks: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 function approve(address spender, uint256 amount) external returns (bool); /// @notice Moves `amount` tokens from `from` to `to` using the allowance mechanism. /// `amount` is then deducted from the caller's allowance. function transferFrom(address from, address to, uint256 amount) external returns (bool); /// @notice Returns the name of the token. function name() external view returns (string memory); /// @notice Returns the symbol of the token. function symbol() external view returns (string memory); /// @notice Returns the decimals places of the token. function decimals() external view returns (uint8); }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.2; import "./IERC165.sol"; /// @title ERC-1155 Multi Token Standard /// @dev See https://eips.ethereum.org/EIPS/eip-1155 /// Note: The ERC-165 identifier for this interface is 0xd9b67a26. interface IERC1155 is IERC165 { /// @dev /// - Either `TransferSingle` or `TransferBatch` MUST emit when tokens are transferred, including zero value transfers as well as minting or burning (see "Safe Transfer Rules" section of the standard). /// - The `_operator` argument MUST be the address of an account/contract that is approved to make the transfer (SHOULD be msg.sender). /// - The `_from` argument MUST be the address of the holder whose balance is decreased. /// - The `_to` argument MUST be the address of the recipient whose balance is increased. /// - The `_id` argument MUST be the token type being transferred. /// - The `_value` argument MUST be the number of tokens the holder balance is decreased by and match what the recipient balance is increased by. /// - When minting/creating tokens, the `_from` argument MUST be set to `0x0` (i.e. zero address). /// - When burning/destroying tokens, the `_to` argument MUST be set to `0x0` (i.e. zero address). event TransferSingle( address indexed _operator, address indexed _from, address indexed _to, uint256 _id, uint256 _value ); /// @dev /// - Either `TransferSingle` or `TransferBatch` MUST emit when tokens are transferred, including zero value transfers as well as minting or burning (see "Safe Transfer Rules" section of the standard). /// - The `_operator` argument MUST be the address of an account/contract that is approved to make the transfer (SHOULD be msg.sender). /// - The `_from` argument MUST be the address of the holder whose balance is decreased. /// - The `_to` argument MUST be the address of the recipient whose balance is increased. /// - The `_ids` argument MUST be the list of tokens being transferred. /// - The `_values` argument MUST be the list of number of tokens (matching the list and order of tokens specified in _ids) the holder balance is decreased by and match what the recipient balance is increased by. /// - When minting/creating tokens, the `_from` argument MUST be set to `0x0` (i.e. zero address). /// - When burning/destroying tokens, the `_to` argument MUST be set to `0x0` (i.e. zero address). event TransferBatch( address indexed _operator, address indexed _from, address indexed _to, uint256[] _ids, uint256[] _values ); /// @dev MUST emit when approval for a second party/operator address to manage all tokens for an owner address is enabled or disabled (absence of an event assumes disabled). event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved); /// @dev MUST emit when the URI is updated for a token ID. URIs are defined in RFC 3986. /// The URI MUST point to a JSON file that conforms to the "ERC-1155 Metadata URI JSON Schema". event URI(string _value, uint256 indexed _id); /// @notice Transfers `_value` amount of an `_id` from the `_from` address to the `_to` address specified (with safety call). /// @dev Caller must be approved to manage the tokens being transferred out of the `_from` account (see "Approval" section of the standard). /// - MUST revert if `_to` is the zero address. /// - MUST revert if balance of holder for token `_id` is lower than the `_value` sent. /// - MUST revert on any other error. /// - MUST emit the `TransferSingle` event to reflect the balance change (see "Safe Transfer Rules" section of the standard). /// - After the above conditions are met, this function MUST check if `_to` is a smart contract (e.g. code size > 0). If so, it MUST call `onERC1155Received` on `_to` and act appropriately (see "Safe Transfer Rules" section of the standard). /// @param _from Source address /// @param _to Target address /// @param _id ID of the token type /// @param _value Transfer amount /// @param _data Additional data with no specified format, MUST be sent unaltered in call to `onERC1155Received` on `_to` function safeTransferFrom(address _from, address _to, uint256 _id, uint256 _value, bytes calldata _data) external; /// @notice Transfers `_values` amount(s) of `_ids` from the `_from` address to the `_to` address specified (with safety call). /// @dev Caller must be approved to manage the tokens being transferred out of the `_from` account (see "Approval" section of the standard). /// - MUST revert if `_to` is the zero address. /// - MUST revert if length of `_ids` is not the same as length of `_values`. /// - MUST revert if any of the balance(s) of the holder(s) for token(s) in `_ids` is lower than the respective amount(s) in `_values` sent to the recipient. /// - MUST revert on any other error. /// - MUST emit `TransferSingle` or `TransferBatch` event(s) such that all the balance changes are reflected (see "Safe Transfer Rules" section of the standard). /// - Balance changes and events MUST follow the ordering of the arrays (_ids[0]/_values[0] before _ids[1]/_values[1], etc). /// - After the above conditions for the transfer(s) in the batch are met, this function MUST check if `_to` is a smart contract (e.g. code size > 0). If so, it MUST call the relevant `ERC1155TokenReceiver` hook(s) on `_to` and act appropriately (see "Safe Transfer Rules" section of the standard). /// @param _from Source address /// @param _to Target address /// @param _ids IDs of each token type (order and length must match _values array) /// @param _values Transfer amounts per token type (order and length must match _ids array) /// @param _data Additional data with no specified format, MUST be sent unaltered in call to the `ERC1155TokenReceiver` hook(s) on `_to` function safeBatchTransferFrom( address _from, address _to, uint256[] calldata _ids, uint256[] calldata _values, bytes calldata _data ) external; /// @notice Get the balance of an account's tokens. /// @param _owner The address of the token holder /// @param _id ID of the token /// @return The _owner's balance of the token type requested function balanceOf(address _owner, uint256 _id) external view returns (uint256); /// @notice Get the balance of multiple account/token pairs /// @param _owners The addresses of the token holders /// @param _ids ID of the tokens /// @return The _owner's balance of the token types requested (i.e. balance for each (owner, id) pair) function balanceOfBatch(address[] calldata _owners, uint256[] calldata _ids) external view returns (uint256[] memory); /// @notice Enable or disable approval for a third party ("operator") to manage all of the caller's tokens. /// @dev MUST emit the ApprovalForAll event on success. /// @param _operator Address to add to the set of authorized operators /// @param _approved True if the operator is approved, false to revoke approval function setApprovalForAll(address _operator, bool _approved) external; /// @notice Queries the approval status of an operator for a given owner. /// @param _owner The owner of the tokens /// @param _operator Address of authorized operator /// @return True if the operator is approved, false if not function isApprovedForAll(address _owner, address _operator) external view returns (bool); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.4; /// @notice Simple single owner authorization mixin. /// @author Solady (https://github.com/vectorized/solady/blob/main/src/auth/Ownable.sol) /// /// @dev Note: /// This implementation does NOT auto-initialize the owner to `msg.sender`. /// You MUST call the `_initializeOwner` in the constructor / initializer. /// /// While the ownable portion follows /// [EIP-173](https://eips.ethereum.org/EIPS/eip-173) for compatibility, /// the nomenclature for the 2-step ownership handover may be unique to this codebase. abstract contract Ownable { /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/ /* CUSTOM ERRORS */ /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/ /// @dev The caller is not authorized to call the function. error Unauthorized(); /// @dev The `newOwner` cannot be the zero address. error NewOwnerIsZeroAddress(); /// @dev The `pendingOwner` does not have a valid handover request. error NoHandoverRequest(); /// @dev Cannot double-initialize. error AlreadyInitialized(); /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/ /* EVENTS */ /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/ /// @dev The ownership is transferred from `oldOwner` to `newOwner`. /// This event is intentionally kept the same as OpenZeppelin's Ownable to be /// compatible with indexers and [EIP-173](https://eips.ethereum.org/EIPS/eip-173), /// despite it not being as lightweight as a single argument event. event OwnershipTransferred(address indexed oldOwner, address indexed newOwner); /// @dev An ownership handover to `pendingOwner` has been requested. event OwnershipHandoverRequested(address indexed pendingOwner); /// @dev The ownership handover to `pendingOwner` has been canceled. event OwnershipHandoverCanceled(address indexed pendingOwner); /// @dev `keccak256(bytes("OwnershipTransferred(address,address)"))`. uint256 private constant _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE = 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0; /// @dev `keccak256(bytes("OwnershipHandoverRequested(address)"))`. uint256 private constant _OWNERSHIP_HANDOVER_REQUESTED_EVENT_SIGNATURE = 0xdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d; /// @dev `keccak256(bytes("OwnershipHandoverCanceled(address)"))`. uint256 private constant _OWNERSHIP_HANDOVER_CANCELED_EVENT_SIGNATURE = 0xfa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92; /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/ /* STORAGE */ /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/ /// @dev The owner slot is given by: /// `bytes32(~uint256(uint32(bytes4(keccak256("_OWNER_SLOT_NOT")))))`. /// It is intentionally chosen to be a high value /// to avoid collision with lower slots. /// The choice of manual storage layout is to enable compatibility /// with both regular and upgradeable contracts. bytes32 internal constant _OWNER_SLOT = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927; /// The ownership handover slot of `newOwner` is given by: /// ``` /// mstore(0x00, or(shl(96, user), _HANDOVER_SLOT_SEED)) /// let handoverSlot := keccak256(0x00, 0x20) /// ``` /// It stores the expiry timestamp of the two-step ownership handover. uint256 private constant _HANDOVER_SLOT_SEED = 0x389a75e1; /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/ /* INTERNAL FUNCTIONS */ /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/ /// @dev Override to return true to make `_initializeOwner` prevent double-initialization. function _guardInitializeOwner() internal pure virtual returns (bool guard) {} /// @dev Initializes the owner directly without authorization guard. /// This function must be called upon initialization, /// regardless of whether the contract is upgradeable or not. /// This is to enable generalization to both regular and upgradeable contracts, /// and to save gas in case the initial owner is not the caller. /// For performance reasons, this function will not check if there /// is an existing owner. function _initializeOwner(address newOwner) internal virtual { if (_guardInitializeOwner()) { /// @solidity memory-safe-assembly assembly { let ownerSlot := _OWNER_SLOT if sload(ownerSlot) { mstore(0x00, 0x0dc149f0) // `AlreadyInitialized()`. revert(0x1c, 0x04) } // Clean the upper 96 bits. newOwner := shr(96, shl(96, newOwner)) // Store the new value. sstore(ownerSlot, or(newOwner, shl(255, iszero(newOwner)))) // Emit the {OwnershipTransferred} event. log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, 0, newOwner) } } else { /// @solidity memory-safe-assembly assembly { // Clean the upper 96 bits. newOwner := shr(96, shl(96, newOwner)) // Store the new value. sstore(_OWNER_SLOT, newOwner) // Emit the {OwnershipTransferred} event. log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, 0, newOwner) } } } /// @dev Sets the owner directly without authorization guard. function _setOwner(address newOwner) internal virtual { if (_guardInitializeOwner()) { /// @solidity memory-safe-assembly assembly { let ownerSlot := _OWNER_SLOT // Clean the upper 96 bits. newOwner := shr(96, shl(96, newOwner)) // Emit the {OwnershipTransferred} event. log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, sload(ownerSlot), newOwner) // Store the new value. sstore(ownerSlot, or(newOwner, shl(255, iszero(newOwner)))) } } else { /// @solidity memory-safe-assembly assembly { let ownerSlot := _OWNER_SLOT // Clean the upper 96 bits. newOwner := shr(96, shl(96, newOwner)) // Emit the {OwnershipTransferred} event. log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, sload(ownerSlot), newOwner) // Store the new value. sstore(ownerSlot, newOwner) } } } /// @dev Throws if the sender is not the owner. function _checkOwner() internal view virtual { /// @solidity memory-safe-assembly assembly { // If the caller is not the stored owner, revert. if iszero(eq(caller(), sload(_OWNER_SLOT))) { mstore(0x00, 0x82b42900) // `Unauthorized()`. revert(0x1c, 0x04) } } } /// @dev Returns how long a two-step ownership handover is valid for in seconds. /// Override to return a different value if needed. /// Made internal to conserve bytecode. Wrap it in a public function if needed. function _ownershipHandoverValidFor() internal view virtual returns (uint64) { return 48 * 3600; } /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/ /* PUBLIC UPDATE FUNCTIONS */ /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/ /// @dev Allows the owner to transfer the ownership to `newOwner`. function transferOwnership(address newOwner) public payable virtual onlyOwner { /// @solidity memory-safe-assembly assembly { if iszero(shl(96, newOwner)) { mstore(0x00, 0x7448fbae) // `NewOwnerIsZeroAddress()`. revert(0x1c, 0x04) } } _setOwner(newOwner); } /// @dev Allows the owner to renounce their ownership. function renounceOwnership() public payable virtual onlyOwner { _setOwner(address(0)); } /// @dev Request a two-step ownership handover to the caller. /// The request will automatically expire in 48 hours (172800 seconds) by default. function requestOwnershipHandover() public payable virtual { unchecked { uint256 expires = block.timestamp + _ownershipHandoverValidFor(); /// @solidity memory-safe-assembly assembly { // Compute and set the handover slot to `expires`. mstore(0x0c, _HANDOVER_SLOT_SEED) mstore(0x00, caller()) sstore(keccak256(0x0c, 0x20), expires) // Emit the {OwnershipHandoverRequested} event. log2(0, 0, _OWNERSHIP_HANDOVER_REQUESTED_EVENT_SIGNATURE, caller()) } } } /// @dev Cancels the two-step ownership handover to the caller, if any. function cancelOwnershipHandover() public payable virtual { /// @solidity memory-safe-assembly assembly { // Compute and set the handover slot to 0. mstore(0x0c, _HANDOVER_SLOT_SEED) mstore(0x00, caller()) sstore(keccak256(0x0c, 0x20), 0) // Emit the {OwnershipHandoverCanceled} event. log2(0, 0, _OWNERSHIP_HANDOVER_CANCELED_EVENT_SIGNATURE, caller()) } } /// @dev Allows the owner to complete the two-step ownership handover to `pendingOwner`. /// Reverts if there is no existing ownership handover requested by `pendingOwner`. function completeOwnershipHandover(address pendingOwner) public payable virtual onlyOwner { /// @solidity memory-safe-assembly assembly { // Compute and set the handover slot to 0. mstore(0x0c, _HANDOVER_SLOT_SEED) mstore(0x00, pendingOwner) let handoverSlot := keccak256(0x0c, 0x20) // If the handover does not exist, or has expired. if gt(timestamp(), sload(handoverSlot)) { mstore(0x00, 0x6f5e8818) // `NoHandoverRequest()`. revert(0x1c, 0x04) } // Set the handover slot to 0. sstore(handoverSlot, 0) } _setOwner(pendingOwner); } /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/ /* PUBLIC READ FUNCTIONS */ /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/ /// @dev Returns the owner of the contract. function owner() public view virtual returns (address result) { /// @solidity memory-safe-assembly assembly { result := sload(_OWNER_SLOT) } } /// @dev Returns the expiry timestamp for the two-step ownership handover to `pendingOwner`. function ownershipHandoverExpiresAt(address pendingOwner) public view virtual returns (uint256 result) { /// @solidity memory-safe-assembly assembly { // Compute the handover slot. mstore(0x0c, _HANDOVER_SLOT_SEED) mstore(0x00, pendingOwner) // Load the handover slot. result := sload(keccak256(0x0c, 0x20)) } } /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/ /* MODIFIERS */ /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/ /// @dev Marks a function as only callable by the owner. modifier onlyOwner() virtual { _checkOwner(); _; } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.2; interface IERC165 { /// @notice Query if a contract implements an interface /// @param interfaceID The interface identifier, as specified in ERC-165 /// @dev Interface identification is specified in ERC-165. This function /// uses less than 30,000 gas. /// @return `true` if the contract implements `interfaceID` and /// `interfaceID` is not 0xffffffff, `false` otherwise function supportsInterface(bytes4 interfaceID) external view returns (bool); }
{ "viaIR": false, "codegen": "yul", "remappings": [ "ds-test/=lib/forge-std/lib/ds-test/src/", "forge-std/=lib/forge-std/src/", "solady/=lib/solady/src/", "soladytest/=lib/solady/test/", "openzeppelin-contracts/=lib/openzeppelin-contracts/", "solmate/=lib/solmate/src/" ], "evmVersion": "cancun", "outputSelection": { "*": { "*": [ "abi", "metadata" ], "": [ "ast" ] } }, "optimizer": { "enabled": true, "mode": "3", "fallback_to_optimizing_for_size": false, "disable_system_request_memoization": true }, "metadata": {}, "libraries": {}, "detectMissingLibraries": false, "enableEraVMExtensions": false, "forceEVMLA": false }
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyInitialized","type":"error"},{"inputs":[],"name":"ArrayLengthMismatch","type":"error"},{"inputs":[],"name":"CallerNotFulfiller","type":"error"},{"inputs":[],"name":"FailedToPayAutosniper","type":"error"},{"inputs":[],"name":"FailedToPayValidator","type":"error"},{"inputs":[],"name":"FailedToWithdraw","type":"error"},{"inputs":[],"name":"FulfillerCannotHaveBalance","type":"error"},{"inputs":[],"name":"InsufficientBalance","type":"error"},{"inputs":[],"name":"MigrationNotEnabled","type":"error"},{"inputs":[],"name":"NewOwnerIsZeroAddress","type":"error"},{"inputs":[],"name":"NoHandoverRequest","type":"error"},{"inputs":[],"name":"OrderFailed","type":"error"},{"inputs":[],"name":"SniperIsPaused","type":"error"},{"inputs":[],"name":"Unauthorized","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniper","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pendingOwner","type":"address"}],"name":"OwnershipHandoverCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pendingOwner","type":"address"}],"name":"OwnershipHandoverRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniper","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdrawal","type":"event"},{"inputs":[],"name":"cancelOwnershipHandover","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pendingOwner","type":"address"}],"name":"completeOwnershipHandover","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"sniper","type":"address"}],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"depositSelf","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"migrateBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"migrationEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextContractVersionAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"result","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pendingOwner","type":"address"}],"name":"ownershipHandoverExpiresAt","outputs":[{"internalType":"uint256","name":"result","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"requestOwnershipHandover","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"address","name":"recipient","type":"address"}],"name":"rescueERC1155","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"rescueERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"address","name":"recipient","type":"address"}],"name":"rescueERC721","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_fulfiller","type":"address"}],"name":"setFulfillerAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_destination","type":"address"}],"name":"setMigrationAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"isPaused","type":"bool"}],"name":"setUserIsPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"contractAddresses","type":"address[]"},{"internalType":"bytes[]","name":"calls","type":"bytes[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"},{"internalType":"address","name":"sniper","type":"address"},{"internalType":"uint256","name":"validatorTip","type":"uint256"},{"internalType":"uint256","name":"fulfillerTip","type":"uint256"}],"name":"snipe_2572234525","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sniper","type":"address"}],"name":"sniperBalance","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"sniperStates","outputs":[{"internalType":"uint128","name":"ethBalance","type":"uint128"},{"internalType":"bool","name":"isPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
3cda3351d6309d958328352620b8856c0b08bd64c82244d2d70c3a4f3432c71635edf3c7010002753a4a3ebcfcef610a5bd873f2a0faa3a0b08dc12c45d0835bd290564200000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x0004000000000002000900000000000200000000030200190000006004100270000002060240019700030000002103550002000000010355000002060040019d0000008004000039000000400040043f0000000100300190000000a90000c13d000000040020008c000000cf0000413d000000000301043b000000e0033002700000020f0030009c000000d30000a13d000002100030009c000000ee0000213d0000021a0030009c000001970000a13d0000021b0030009c000001d20000213d0000021e0030009c000001f60000613d0000021f0030009c000005550000c13d000000840020008c000005550000413d0000000003000416000000000003004b000005550000c13d0000000403100370000000000303043b000900000003001d000002340030009c000005550000213d0000002403100370000000000303043b000002390030009c000005550000213d0000002304300039000000000024004b000005550000813d0000000404300039000000000441034f000000000404043b000500000004001d000002390040009c000005550000213d000400240030003d000000050300002900000005033002100000000403300029000000000023004b000005550000213d0000004403100370000000000303043b000002390030009c000005550000213d0000002304300039000000000024004b000005550000813d0000000404300039000000000441034f000000000404043b000300000004001d000002390040009c000005550000213d000200240030003d000000030300002900000005033002100000000203300029000000000023004b000005550000213d0000006401100370000000000101043b000100000001001d000002340010009c000005550000213d0000020b01000041000000000101041a0000000002000411000000000012004b000004100000c13d000000050000006b000000d10000613d0000000004000019000000050140021000000004031000290000000202000367000000000332034f000000000303043b000700000003001d000800000004001d000000030040006c000005e00000813d0000000201100029000000000112034f000000000101043b000600000001001d00000244010000410000000000100443000000090100002900000004001004430000000001000414000002060010009c0000020601008041000000c00110021000000245011001c700008002020000390814080f0000040f0000000100200190000007320000613d000000000101043b000000000001004b0000000804000029000005550000613d000000400500043d0000008401500039000000a002000039000000000021043500000064015000390000000602000029000000000021043500000044015000390000000702000029000000000021043500000024015000390000000102000029000000000021043500000246010000410000000000150435000000040150003900000000020004100000000000210435000000a401500039000000000001043500000000010004140000000902000029000000040020008c000000a20000613d000002060050009c000002060200004100000000020540190000004002200210000002060010009c0000020601008041000000c001100210000000000121019f00000247011001c70000000902000029000700000005001d0814080a0000040f000000070500002900000008040000290000006003100270000102060030019d00030000000103550000000100200190000005e60000613d000002390050009c000004320000213d000000400050043f0000000104400039000000050040006c000000590000413d000000d10000013d0000000001000416000000000001004b000005550000c13d000000000100041a000002070110019700000208011001c7000000000010041b000002090100004100000000001004430000000001000414000002060010009c0000020601008041000000c0011002100000020a011001c70000800b020000390814080f0000040f0000000100200190000007320000613d000000000601043b0000020b01000041000000000061041b0000000001000414000002060010009c0000020601008041000000c0011002100000020c011001c70000800d0200003900000003030000390000020d0400004100000000050000190814080a0000040f0000000100200190000005550000613d0000002001000039000001000010044300000120000004430000020e01000041000008150001042e000000000002004b000005550000c13d0000000001000019000008150001042e000002230030009c000001090000a13d000002240030009c000001a20000a13d000002250030009c000001ca0000213d000002280030009c0000027a0000613d000002290030009c000005550000c13d000000240020008c000005550000413d0000000002000416000000000002004b000005550000c13d0000000401100370000000000101043b000900000001001d000002340010009c000005550000213d081407ea0000040f000000000100041a000002070110019700000009011001af000000000010041b0000000001000019000008150001042e000002110030009c000001b30000a13d000002120030009c000001df0000213d000002150030009c0000028d0000613d000002160030009c000005550000c13d000000240020008c000005550000413d0000000401100370000000000101043b000900000001001d000002340010009c000005550000213d0000020b01000041000000000501041a0000000001000411000000000051004b000004100000c13d0000000906000029000000000006004b0000044d0000c13d0000023701000041000000000010043f000002380100004100000816000104300000022d0030009c000001260000213d000002310030009c000002a80000613d000002320030009c000002b70000613d000002330030009c000005550000c13d000000840020008c000005550000413d0000000003000416000000000003004b000005550000c13d0000000403100370000000000303043b000002340030009c000005550000213d0000002403100370000000000303043b000002340030009c000005550000213d0000006401100370000000000101043b000002390010009c000005550000213d0000000401100039081407860000040f0000026e01000041000002a10000013d0000022e0030009c000002d40000613d0000022f0030009c000002ec0000613d000002300030009c000005550000c13d000000640020008c000005550000413d0000000003000416000000000003004b000005550000c13d0000000403100370000000000303043b000900000003001d000002340030009c000005550000213d0000002403100370000000000303043b000002390030009c000005550000213d0000002304300039000000000024004b000005550000813d0000000404300039000000000441034f000000000404043b000600000004001d000002390040009c000005550000213d000500240030003d000000060300002900000005033002100000000503300029000000000023004b000005550000213d0000004401100370000000000101043b000002340010009c000005550000213d0000020b02000041000000000202041a0000000003000411000000000023004b000004100000c13d000000060000006b000000d10000613d000402340010019b0000000004000019000800000004001d000000050140021000000005011000290000000201100367000000000101043b000700000001001d00000244010000410000000000100443000000090100002900000004001004430000000001000414000002060010009c0000020601008041000000c00110021000000245011001c700008002020000390814080f0000040f0000000100200190000007320000613d000000000101043b000000000001004b0000000804000029000005550000613d000000400500043d0000004401500039000000070200002900000000002104350000002401500039000000040200002900000000002104350000026801000041000000000015043500000004015000390000000002000410000000000021043500000000010004140000000902000029000000040020008c000001900000613d000002060050009c000002060200004100000000020540190000004002200210000002060010009c0000020601008041000000c001100210000000000121019f00000269011001c70000000902000029000700000005001d0814080a0000040f000000070500002900000008040000290000006003100270000102060030019d00030000000103550000000100200190000005cb0000613d0000026a0050009c000004320000813d000000400050043f0000000104400039000000060040006c000001560000413d000000d10000013d000002200030009c000003130000613d000002210030009c000003340000613d000002220030009c000005550000c13d0000000001000416000000000001004b000005550000c13d0000020b01000041000001da0000013d0000022a0030009c000003490000613d0000022b0030009c000003540000613d0000022c0030009c000005550000c13d0000000001000416000000000001004b000005550000c13d0000000101000039000000000101041a00000260001001980000000001000039000000010100c039000000800010043f0000023601000041000008150001042e000002170030009c000003710000613d000002180030009c000003850000613d000002190030009c000005550000c13d000000640020008c000005550000413d0000000003000416000000000003004b000005550000c13d0000000403100370000000000303043b000002340030009c000005550000213d0000004401100370000000000101043b000002390010009c000005550000213d0000000401100039081407860000040f0000023c01000041000002a10000013d000002260030009c000003b40000613d000002270030009c000005550000c13d00000000010004110814079f0000040f0000000001000019000008150001042e0000021c0030009c000003d00000613d0000021d0030009c000005550000c13d0000000001000416000000000001004b000005550000c13d0000000101000039000000000101041a0000023401100197000000800010043f0000023601000041000008150001042e000002130030009c000004070000613d000002140030009c000005550000c13d000000240020008c000005550000413d0000000002000416000000000002004b000005550000c13d0000000401100370000000000101043b000002340010009c000005550000213d00000235020000410000000c0020043f000000000010043f0000000c010000390000002002000039081407f50000040f000000000101041a000000800010043f0000023601000041000008150001042e000000c40020008c000005550000413d0000000003000416000000000003004b000005550000c13d0000000403100370000000000403043b000002390040009c000005550000213d0000002303400039000000000023004b000005550000813d0000000403400039000000000331034f000000000303043b000002390030009c000005550000213d000600240040003d00000005043002100000000604400029000000000024004b000005550000213d0000002404100370000000000404043b000700000004001d000002390040009c000005550000213d00000007040000290000002304400039000000000024004b000005550000813d00000007040000290000000404400039000000000441034f000000000404043b000002390040009c000005550000213d0000000705000029000900240050003d00000005054002100000000905500029000000000025004b000005550000213d0000004405100370000000000505043b000002390050009c000005550000213d0000002306500039000000000026004b000005550000813d0000000406500039000000000661034f000000000606043b000500000006001d000002390060009c000005550000213d000400240050003d000000050500002900000005055002100000000405500029000000000025004b000005550000213d0000006401100370000000000101043b000300000001001d000002340010009c000005550000213d000000000100041a00000234011001970000000002000411000000000012004b000005d80000c13d000000000043004b000005dc0000c13d000000050030006c000005dc0000c13d0000000301000029000000000010043f0000000201000039000000200010043f0000000001000414000002060010009c0000020601008041000000c0011002100000024c011001c700008010020000390814080f0000040f0000000100200190000005550000613d000000000101043b000000000101041a0000024d00100198000005f30000c13d00000250010000410000000000100443000000000100041000000004001004430000000001000414000002060010009c0000020601008041000000c00110021000000245011001c70000800a020000390814080f0000040f0000000100200190000007320000613d000000000101043b000200000001001d000000050000006b000005f60000c13d00000084010000390000000201100367000000000101043b000900000001001d000002530100004100000000001004430000000001000414000002060010009c0000020601008041000000c0011002100000020a011001c70000800b020000390814080f0000040f0000000100200190000007320000613d000000000401043b0000000001000414000000040040008c0000068e0000c13d00000001020000390000000101000031000006a10000013d000000240020008c000005550000413d0000000002000416000000000002004b000005550000c13d0000000401100370000000000101043b000900000001001d000002340010009c000005550000213d081407ea0000040f0000000101000039000000000201041a0000025e0220019700000009022001af0000025f022001c7000000000021041b0000000001000019000008150001042e000000a40020008c000005550000413d0000000003000416000000000003004b000005550000c13d0000000403100370000000000303043b000002340030009c000005550000213d0000002403100370000000000303043b000002340030009c000005550000213d0000008401100370000000000101043b000002390010009c000005550000213d0000000401100039081407860000040f0000023a01000041000000400200043d0000000000120435000002060020009c000002060200804100000040012002100000023b011001c7000008150001042e000000240020008c000005550000413d0000000002000416000000000002004b000005550000c13d0000000401100370000000000101043b0000027100100198000005550000c13d000002720010009c00000000010000390000000101006039000000800010043f0000023601000041000008150001042e000000240020008c000005550000413d0000000002000416000000000002004b000005550000c13d0000000401100370000000000201043b000000000002004b0000000001000039000000010100c039000900000002001d000000000012004b000005550000c13d0000000001000411000000000010043f0000000201000039000000200010043f00000040020000390000000001000019081407f50000040f000000090000006b00000000020000190000026f0200c041000000000301041a0000027003300197000000000223019f000000000021041b0000000001000019000008150001042e000000240020008c000005550000413d0000000002000416000000000002004b000005550000c13d0000000401100370000000000101043b000002340010009c000005550000213d000000000010043f0000000201000039000000200010043f00000040020000390000000001000019081407f50000040f000000000101041a0000024002100197000000800020043f0000024d001001980000000001000039000000010100c039000000a00010043f0000026d01000041000008150001042e00000235010000410000000c0010043f0000000001000411000000000010043f0000023e0100004100000000001004430000000001000414000002060010009c0000020601008041000000c0011002100000020a011001c70000800b020000390814080f0000040f0000000100200190000007320000613d000000000101043b000900000001001d0000000001000414000002060010009c0000020601008041000000c0011002100000023d011001c700008010020000390814080f0000040f0000000100200190000005550000613d000000000101043b00000009020000290000026b0220009a000000000021041b0000000001000414000002060010009c0000020601008041000000c0011002100000020c011001c70000800d0200003900000002030000390000026c04000041000003cb0000013d000000440020008c000005550000413d0000000002000416000000000002004b000005550000c13d0000000402100370000000000202043b000900000002001d000002340020009c000005550000213d0000002401100370000000000101043b000800000001001d000002340010009c000005550000213d0000020b01000041000000000101041a0000000002000411000000000012004b000004100000c13d0000025901000041000000800010043f0000000001000410000000840010043f00000000010004140000000902000029000000040020008c000004660000c13d0000000103000031000000200030008c000000200400003900000000040340190000048b0000013d0000020b01000041000000000501041a0000000001000411000000000051004b000004100000c13d0000000001000414000002060010009c0000020601008041000000c0011002100000020c011001c70000800d0200003900000003030000390000020d0400004100000000060000190814080a0000040f0000000100200190000005550000613d0000020b01000041000000000001041b0000000001000019000008150001042e0000000001000416000000000001004b000005550000c13d0000000101000039000000000101041a0000026000100198000004140000c13d0000026601000041000000800010043f0000024a010000410000081600010430000000240020008c000005550000413d0000000002000416000000000002004b000005550000c13d0000000401100370000000000101043b000800000001001d000000000100041a000900000001001d000002090100004100000000001004430000000001000414000002060010009c0000020601008041000000c0011002100000020a011001c70000800b020000390814080f0000040f0000000100200190000007320000613d00000009020000290000023402200197000000000101043b000000000021004b000004380000c13d000000400100043d0000026202000041000005c50000013d000000240020008c000005550000413d0000000002000416000000000002004b000005550000c13d0000000401100370000000000101043b000002340010009c000005550000213d000000000010043f0000000201000039000000200010043f00000040020000390000000001000019081407f50000040f000000000101041a0000024001100197000000800010043f0000023601000041000008150001042e000000240020008c000005550000413d0000000401100370000000000101043b000900000001001d000002340010009c000005550000213d0000020b01000041000000000101041a0000000002000411000000000012004b000004100000c13d00000235010000410000000c0010043f0000000901000029000000000010043f0000000001000414000002060010009c0000020601008041000000c0011002100000023d011001c700008010020000390814080f0000040f0000000100200190000005550000613d000000000101043b000700000001001d000000000101041a000800000001001d0000023e0100004100000000001004430000000001000414000002060010009c0000020601008041000000c0011002100000020a011001c70000800b020000390814080f0000040f0000000100200190000007320000613d000000000101043b000000080010006c000004cb0000a13d0000023f01000041000000000010043f0000023801000041000008160001043000000235010000410000000c0010043f0000000001000411000000000010043f0000000001000414000002060010009c0000020601008041000000c0011002100000023d011001c700008010020000390814080f0000040f0000000100200190000005550000613d000000000101043b000000000001041b0000000001000414000002060010009c0000020601008041000000c0011002100000020c011001c70000800d0200003900000002030000390000025d0400004100000000050004110814080a0000040f0000000100200190000000d10000c13d000005550000013d000000a40020008c000005550000413d0000000003000416000000000003004b000005550000c13d0000000403100370000000000303043b000002340030009c000005550000213d0000002403100370000000000303043b000002340030009c000005550000213d0000004403100370000000000303043b000002390030009c000005550000213d0000002304300039000000000024004b000005550000813d0000000404300039000000000441034f000000000404043b000002390040009c000005550000213d000000050440021000000000034300190000002403300039000000000023004b000005550000213d0000006403100370000000000303043b000002390030009c000005550000213d0000002304300039000000000024004b000005550000813d0000000404300039000000000441034f000000000404043b000002390040009c000005550000213d000000050440021000000000034300190000002403300039000000000023004b000005550000213d0000008401100370000000000101043b000002390010009c000005550000213d0000000401100039081407860000040f0000024101000041000002a10000013d000000240020008c000005550000413d0000000401100370000000000101043b000002340010009c000005550000213d0814079f0000040f0000000001000019000008150001042e0000026701000041000000000010043f000002380100004100000816000104300000000001000411000000000010043f0000000201000039000000200010043f0000000001000414000002060010009c0000020601008041000000c0011002100000024c011001c700008010020000390814080f0000040f0000000100200190000005550000613d000000000201043b000000000102041a0000025603100197000000000032041b0000000102000039000000000402041a000000400300043d00000020073000390000026305000041000000000057043500000024053000390000000006000411000000000065043500000024050000390000000000530435000002640030009c0000045d0000a13d0000024201000041000000000010043f0000004101000039000000040010043f000002430100004100000816000104300000000001000411000000000010043f0000000201000039000000200010043f0000000001000414000002060010009c0000020601008041000000c0011002100000024c011001c700008010020000390814080f0000040f0000000100200190000005550000613d000000000101043b000000000101041a0000024001100197000000080010006c000004a20000813d000000400100043d0000026102000041000005c50000013d0000000001000414000002060010009c0000020601008041000000c0011002100000020c011001c70000800d0200003900000003030000390000020d040000410814080a0000040f0000000100200190000005550000613d0000020b010000410000000902000029000000000021041b0000000001000019000008150001042e00000234044001970000006005300039000000400050043f00000000060304330000000005000414000000040040008c000004bb0000c13d0000000101000031000004f40000013d000002060010009c0000020601008041000000c0011002100000025a011001c70814080f0000040f00000060031002700000020603300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000080057001bf000000800a0000390000047a0000613d000000000801034f000000008908043c000000000a9a043600000000005a004b000004760000c13d000000000006004b000004870000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000004e00000613d0000001f01400039000000600110018f00000080021001bf000700000002001d000000400020043f000000200030008c000005550000413d000000800200043d0000025b030000410000000705000029000000000035043500000084031001bf00000008040000290000000000430435000000a403100039000000000023043500000000030004140000000902000029000000040020008c000005210000c13d0000000001150019000000400010043f0000054e0000013d0000000201000039000000200010043f0000000001000414000002060010009c0000020601008041000000c0011002100000024c011001c700008010020000390814080f0000040f0000000100200190000005550000613d000000000101043b000000000201041a000000080320006a00000240033001970000025602200197000000000223019f000000000021041b00000000010004140000000002000411000000040020008c000005570000c13d00000001020000390000000101000031000005860000013d0000024003100197000002060070009c00000206070080410000004001700210000002060060009c00000206060080410000006002600210000000000112019f000002060050009c0000020605008041000000c002500210000000000121019f000000000003004b000004ec0000c13d0000000002040019000004ef0000013d0000000701000029000000000001041b0000020b01000041000000000501041a0000000001000414000002060010009c0000020601008041000000c0011002100000020c011001c70000800d0200003900000003030000390000020d0400004100000009060000290814080a0000040f0000000100200190000005550000613d00000009010000290000020b02000041000000000012041b0000000001000019000008150001042e0000001f0530018f0000024806300198000000400200043d0000000004620019000005690000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000004e70000c13d000005690000013d0000020c011001c7000080090200003900000000050000190814080a0000040f00030000000103550000006001100270000102060010019d0000020601100197000000000001004b000004fa0000c13d0000000100200190000000d10000c13d000000400100043d000005c40000013d0000001f0310003900000273033001970000003f033000390000027304300197000000400300043d0000000004430019000000000034004b00000000050000390000000105004039000002390040009c000004320000213d0000000100500190000004320000c13d000000400040043f000000000513043600000273081001980000001f0310018f00000000018500190000000304000367000005130000613d000000000604034f000000006706043c0000000005750436000000000015004b0000050f0000c13d000000000003004b000004f60000613d000000000584034f0000000303300210000000000401043300000000043401cf000000000434022f000000000505043b0000010003300089000000000535022f00000000033501cf000000000343019f0000000000310435000004f60000013d000002060030009c0000020603008041000000c0013002100000004003500210000000000131019f0000025c011001c70814080a0000040f00000060031002700000020603300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000705700029000005370000613d000000000801034f0000000709000029000000008a08043c0000000009a90436000000000059004b000005330000c13d000000000006004b000005440000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f000300000001035500000001002001900000055e0000613d0000001f01400039000000600110018f0000000701100029000000400010043f000000200030008c000005550000413d00000007010000290000000001010433000000000001004b0000000002000039000000010200c039000000000021004b000000d10000613d00000000010000190000081600010430000002060010009c0000020601008041000000c001100210000000080000006b0000057c0000c13d0000000002000411000005810000013d0000001f0530018f0000024806300198000000400200043d0000000004620019000005690000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000005650000c13d000000000005004b000005760000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f00000000001404350000006001300210000002060020009c00000206020080410000004002200210000000000112019f00000816000104300000020c011001c700008009020000390000000803000029000000000400041100000000050000190814080a0000040f00030000000103550000006001100270000102060010019d0000020601100197000000000001004b000005ae0000613d0000001f0410003900000273044001970000003f044000390000027305400197000000400400043d0000000005540019000000000045004b00000000060000390000000106004039000002390050009c000004320000213d0000000100600190000004320000c13d000000400050043f000000000614043600000273031001980000001f0410018f00000000013600190000000305000367000005a10000613d000000000705034f000000007807043c0000000006860436000000000016004b0000059d0000c13d000000000004004b000005ae0000613d000000000335034f0000000304400210000000000501043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f0000000000310435000000400100043d0000000100200190000005c40000613d000000200210003900000008030000290000000000320435000000000200041100000234022001970000000000210435000002060010009c000002060100804100000040011002100000000002000414000002060020009c0000020602008041000000c002200210000000000112019f0000024c011001c70000800d0200003900000001030000390000025804000041000003cc0000013d00000265020000410000000000210435000002060010009c000002060100804100000040011002100000024f011001c7000008160001043000000206033001970000001f0530018f0000024806300198000000400200043d0000000004620019000005690000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000005d30000c13d000005690000013d0000024901000041000000800010043f0000024a0100004100000816000104300000024b01000041000000800010043f0000024a0100004100000816000104300000024201000041000000000010043f0000003201000039000000040010043f0000024301000041000008160001043000000206033001970000001f0530018f0000024806300198000000400200043d0000000004620019000005690000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000005ee0000c13d000005690000013d000000400100043d0000024e02000041000005c50000013d0000000002000019000800000002001d000000050120021000000006031000290000000202000367000000000332034f000000000403043b000002340040009c000005550000213d0000000903100029000000000332034f000000000603043b0000000005000031000000070350006a000000430330008a00000251073001970000025108600197000000000978013f000000000078004b00000000070000190000025107004041000000000036004b00000000030000190000025103008041000002510090009c000000000703c0190000000401100029000000000112034f000000000301043b000000000007004b000005550000c13d0000000906600029000000000162034f000000000101043b000002390010009c000005550000213d0000000007150049000000200560003900000251067001970000025108500197000000000968013f000000000068004b00000000060000190000025106004041000000000075004b00000000070000190000025107002041000002510090009c000000000607c019000000000006004b000005550000c13d000000000652034f0000027307100198000000400200043d0000000005720019000006340000613d000000000806034f0000000009020019000000008a08043c0000000009a90436000000000059004b000006300000c13d0000001f08100190000006410000613d000000000676034f0000000307800210000000000805043300000000087801cf000000000878022f000000000606043b0000010007700089000000000676022f00000000067601cf000000000686019f0000000000650435000000000512001900000000000504350000000005000414000000040040008c000006490000c13d00000001010000310000000102000039000006600000013d000002060010009c00000206010080410000006001100210000002060020009c00000206020080410000004002200210000000000112019f000002060050009c0000020605008041000000c002500210000000000112019f000000000003004b0000065a0000613d0000020c011001c7000080090200003900000000050000190000065b0000013d00000000020400190814080a0000040f00030000000103550000006001100270000102060010019d0000020601100197000000000001004b000006870000613d0000001f0310003900000273033001970000003f033000390000027304300197000000400300043d0000000004430019000000000034004b00000000050000390000000105004039000002390040009c000004320000213d0000000100500190000004320000c13d000000400040043f00000000061304360000027304100198000000000346001900000003050003670000067a0000613d000000000705034f000000007807043c0000000006860436000000000036004b000006760000c13d0000001f01100190000006870000613d000000000445034f0000000301100210000000000503043300000000051501cf000000000515022f000000000404043b0000010001100089000000000414022f00000000011401cf000000000151019f00000000001304350000000100200190000006950000613d00000008020000290000000102200039000000050020006c000005f70000413d000002640000013d000002060010009c0000020601008041000000c001100210000000090000006b000006980000c13d00000000020400190000069c0000013d000000400100043d0000025202000041000005c50000013d0000020c011001c70000800902000039000000090300002900000000050000190814080a0000040f00030000000103550000006001100270000102060010019d0000020601100197000000000001004b000006af0000c13d0000000100200190000006d60000613d000000a4020000390000000202200367000000000302043b000000000400041a00000000020004140000023404400197000000040040008c000006d90000c13d0000000102000039000006e80000013d0000001f0410003900000273044001970000003f044000390000027305400197000000400400043d0000000005540019000000000045004b00000000060000390000000106004039000002390050009c000004320000213d0000000100600190000004320000c13d000000400050043f000000000714043600000273041001980000001f0510018f00000000034700190000000306000367000006c80000613d000000000806034f000000008908043c0000000007970436000000000037004b000006c40000c13d000000000005004b000006a30000613d000000000446034f0000000305500210000000000603043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f0000000000430435000006a30000013d000000400100043d0000025402000041000005c50000013d000002060020009c0000020602008041000000c001200210000000000003004b000006e00000c13d0000000002040019000006e30000013d0000020c011001c7000080090200003900000000050000190814080a0000040f00030000000103550000006001100270000102060010019d0000020601100197000000000001004b000007330000c13d00000001002001900000075a0000613d00000250010000410000000000100443000000000100041000000004001004430000000001000414000002060010009c0000020601008041000000c00110021000000245011001c70000800a020000390814080f0000040f0000000100200190000007320000613d000000000201043b000900000002001d00080002002000740000075d0000813d0000000301000029000000000010043f0000000201000039000000200010043f0000000001000414000002060010009c0000020601008041000000c0011002100000024c011001c700008010020000390814080f0000040f0000000100200190000005550000613d00000009030000290000000202300069000800000002001d000902400020019b000000000101043b000000000101041a0000024001100197000000090010006c0000044a0000413d0000000301000029000000000010043f0000000201000039000000200010043f0000000001000414000002060010009c0000020601008041000000c0011002100000024c011001c700008010020000390814080f0000040f0000000100200190000005550000613d000000000101043b000000000201041a000000080320006a00000240033001970000025602200197000000000223019f000000000021041b000000400100043d00000020021000390000000903000029000000000032043500000003020000290000000000210435000002060010009c000002060100804100000040011002100000000002000414000005bb0000013d000000000001042f0000001f0410003900000273044001970000003f044000390000027305400197000000400400043d0000000005540019000000000045004b00000000060000390000000106004039000002390050009c000004320000213d0000000100600190000004320000c13d000000400050043f000000000614043600000273031001980000001f0410018f000000000136001900000003050003670000074c0000613d000000000705034f000000007807043c0000000006860436000000000016004b000007480000c13d000000000004004b000006ea0000613d000000000335034f0000000304400210000000000501043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f0000000000310435000006ea0000013d000000400100043d0000025502000041000005c50000013d000000d10000a13d0000000301000029000000000010043f0000000201000039000000200010043f0000000001000414000002060010009c0000020601008041000000c0011002100000024c011001c700008010020000390814080f0000040f0000000100200190000005550000613d000000000101043b000000000201041a0000000804000029000000000342001900000240033001970000025602200197000000000223019f000000000021041b000000400100043d00000020021000390000000000420435000000030200002900000234022001970000000000210435000002060010009c000002060100804100000040011002100000000002000414000002060020009c0000020602008041000000c002200210000000000112019f0000024c011001c70000800d0200003900000001030000390000025704000041000003cc0000013d0000001f03100039000000000023004b0000000004000019000002510400404100000251052001970000025103300197000000000653013f000000000053004b00000000030000190000025103002041000002510060009c000000000304c019000000000003004b0000079d0000613d0000000203100367000000000303043b000002390030009c0000079d0000213d00000000013100190000002001100039000000000021004b0000079d0000213d000000000001042d000000000100001900000816000104300002000000000002000100000001001d000000000100041a000200000001001d000002090100004100000000001004430000000001000414000002060010009c0000020601008041000000c0011002100000020a011001c70000800b020000390814080f0000040f0000000100200190000007e10000613d00000002020000290000023402200197000000000101043b000000000021004b000007e20000613d00000001010000290000023401100197000200000001001d000000000010043f0000000201000039000000200010043f0000000001000414000002060010009c0000020601008041000000c0011002100000024c011001c700008010020000390814080f0000040f0000000100200190000007df0000613d000000000101043b000000000201041a0000000003000416000000000423001900000240044001970000025602200197000000000224019f000000000021041b000000400100043d0000002002100039000000000032043500000002020000290000000000210435000002060010009c000002060100804100000040011002100000000002000414000002060020009c0000020602008041000000c002200210000000000112019f0000024c011001c70000800d02000039000000010300003900000257040000410814080a0000040f0000000100200190000007df0000613d000000000001042d00000000010000190000081600010430000000000001042f000000400100043d00000262020000410000000000210435000002060010009c000002060100804100000040011002100000024f011001c700000816000104300000020b01000041000000000101041a0000000002000411000000000012004b000007f00000c13d000000000001042d0000026701000041000000000010043f00000238010000410000081600010430000000000001042f000002060010009c00000206010080410000004001100210000002060020009c00000206020080410000006002200210000000000112019f0000000002000414000002060020009c0000020602008041000000c002200210000000000112019f0000020c011001c700008010020000390814080f0000040f0000000100200190000008080000613d000000000101043b000000000001042d000000000100001900000816000104300000080d002104210000000102000039000000000001042d0000000002000019000000000001042d00000812002104230000000102000039000000000001042d0000000002000019000000000001042d0000081400000432000008150001042e0000081600010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000007d79bd0e4b3dc90665a3ed30aa6c6c06c89d224e938b5f3299a1f3b18e458564efbb950733226014eece26fae19012d850b48d830200000200000000000000000000000000000004000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff7487392702000000000000000000000000000000000000000000000000000000000000008be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e00000000200000000000000000000000000000040000001000000000000000000000000000000000000000000000000000000000000000000000000005d799f8600000000000000000000000000000000000000000000000000000000e339d9f000000000000000000000000000000000000000000000000000000000f23a6e6000000000000000000000000000000000000000000000000000000000f340fa0000000000000000000000000000000000000000000000000000000000f340fa0100000000000000000000000000000000000000000000000000000000fee81cf400000000000000000000000000000000000000000000000000000000f23a6e6100000000000000000000000000000000000000000000000000000000f2fde38b00000000000000000000000000000000000000000000000000000000e339d9f100000000000000000000000000000000000000000000000000000000f04e283e00000000000000000000000000000000000000000000000000000000f0b9e5ba00000000000000000000000000000000000000000000000000000000b00b1e4f00000000000000000000000000000000000000000000000000000000bc197c8000000000000000000000000000000000000000000000000000000000bc197c8100000000000000000000000000000000000000000000000000000000c9c50e2300000000000000000000000000000000000000000000000000000000b00b1e5000000000000000000000000000000000000000000000000000000000b7ce33a2000000000000000000000000000000000000000000000000000000005d799f8700000000000000000000000000000000000000000000000000000000715018a6000000000000000000000000000000000000000000000000000000008da5cb5b00000000000000000000000000000000000000000000000000000000270a6230000000000000000000000000000000000000000000000000000000004732a7db0000000000000000000000000000000000000000000000000000000054d1f13c0000000000000000000000000000000000000000000000000000000054d1f13d0000000000000000000000000000000000000000000000000000000057323648000000000000000000000000000000000000000000000000000000004732a7dc000000000000000000000000000000000000000000000000000000004c412aa300000000000000000000000000000000000000000000000000000000270a6231000000000000000000000000000000000000000000000000000000002e1a7d4d0000000000000000000000000000000000000000000000000000000035b944bf000000000000000000000000000000000000000000000000000000001a21241b000000000000000000000000000000000000000000000000000000001a21241c00000000000000000000000000000000000000000000000000000000256929620000000000000000000000000000000000000000000000000000000026e2dca20000000000000000000000000000000000000000000000000000000001ffc9a700000000000000000000000000000000000000000000000000000000115b794000000000000000000000000000000000000000000000000000000000150b7a02000000000000000000000000ffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000389a75e10000000000000000000000000000000000000020000000800000000000000000000000000000000000000000000000000000000000000000000000007448fbae00000000000000000000000000000000000000040000001c0000000000000000000000000000000000000000000000000000000000000000fffffffffffffffff23a6e61000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000f0b9e5ba0000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000200000000c0000000000000000796b89b91644bc98cd93958e4c9038275d622183e25ac5af08cc6b5d95539132000000000000000000000000000000000000000000000000000000006f5e881800000000000000000000000000000000ffffffffffffffffffffffffffffffffbc197c81000000000000000000000000000000000000000000000000000000004e487b710000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000240000000000000000000000001806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b830200000200000000000000000000000000000024000000000000000000000000f242432a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c400000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffe019caaa0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000800000000000000000a24a13a6000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000ff000000000000000000000000000000004e2916b70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000009cc7f708afc65944829bd487b90b72536b1951864fbfc14e125fc972a6507f398000000000000000000000000000000000000000000000000000000000000000e8d529f900000000000000000000000000000000000000000000000000000000a6ae0aac158b2d5c9a9c9285743419d62a32f6727a640955e4ce8ee41503c7842d66518f000000000000000000000000000000000000000000000000000000005676c71000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff00000000000000000000000000000000e1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b6570a08231000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000800000000000000000a9059cbb000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044000000000000000000000000fa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92ffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000ff0000000000000000000000000000000000000000f4d678b80000000000000000000000000000000000000000000000000000000035179a2400000000000000000000000000000000000000000000000000000000f340fa0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff9f2684a07900000000000000000000000000000000000000000000000000000000f6017bbd000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082b4290023b872dd0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000000000000010000000000000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd5d00dbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d0000000000000000000000000000000000000040000000800000000000000000150b7a02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000ffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff01ffc9a700000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0418869ac80f3b78189f8008cd34cb48b6f8f6bb6585f5848a9a441d04c9882ec
Loading...
Loading
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.