Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 1,159 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
Withdraw | 19040942 | 172 days ago | IN | 0 ETH | 0.00065542 | ||||
Migrate Balance | 17775517 | 349 days ago | IN | 0 ETH | 0.00101866 | ||||
Migrate Balance | 17695347 | 360 days ago | IN | 0 ETH | 0.00080849 | ||||
Migrate Balance | 17695312 | 360 days ago | IN | 0 ETH | 0.00046713 | ||||
Migrate Balance | 17693630 | 360 days ago | IN | 0 ETH | 0.00104311 | ||||
Deposit Self | 17690264 | 361 days ago | IN | 1.3 ETH | 0.00092567 | ||||
Migrate Balance | 17679997 | 362 days ago | IN | 0 ETH | 0.00143039 | ||||
Migrate Balance | 17679954 | 362 days ago | IN | 0 ETH | 0.00137734 | ||||
Migrate Balance | 17678793 | 362 days ago | IN | 0 ETH | 0.00321294 | ||||
Migrate Balance | 17678573 | 362 days ago | IN | 0 ETH | 0.00383639 | ||||
Migrate Balance | 17678242 | 363 days ago | IN | 0 ETH | 0.00194378 | ||||
Migrate Balance | 17673960 | 363 days ago | IN | 0 ETH | 0.0007126 | ||||
Migrate Balance | 17673932 | 363 days ago | IN | 0 ETH | 0.00072958 | ||||
Migrate Balance | 17672441 | 363 days ago | IN | 0 ETH | 0.00095424 | ||||
Migrate Balance | 17672405 | 363 days ago | IN | 0 ETH | 0.00140238 | ||||
Migrate Balance | 17672206 | 363 days ago | IN | 0 ETH | 0.00206517 | ||||
Deposit | 17672043 | 363 days ago | IN | 3 ETH | 0.00182064 | ||||
Migrate Balance | 17671907 | 363 days ago | IN | 0 ETH | 0.00187757 | ||||
Migrate Balance | 17671895 | 363 days ago | IN | 0 ETH | 0.00204872 | ||||
Migrate Balance | 17671729 | 363 days ago | IN | 0 ETH | 0.0021505 | ||||
Fulfill Order | 17670041 | 364 days ago | IN | 0 ETH | 0.00409759 | ||||
Migrate Balance | 17669461 | 364 days ago | IN | 0 ETH | 0.00102141 | ||||
Fulfill Non Comp... | 17669447 | 364 days ago | IN | 0 ETH | 0.00284099 | ||||
Migrate Balance | 17669396 | 364 days ago | IN | 0 ETH | 0.00358554 | ||||
Set Migration Ad... | 17669099 | 364 days ago | IN | 0 ETH | 0.00087609 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | Value | ||
---|---|---|---|---|---|---|
19040942 | 172 days ago | 0.00000041 ETH | ||||
17775517 | 349 days ago | 1.3 ETH | ||||
17695347 | 360 days ago | 0.5 ETH | ||||
17693630 | 360 days ago | 0.00099999 ETH | ||||
17679997 | 362 days ago | 8.2 ETH | ||||
17679954 | 362 days ago | 3 ETH | ||||
17678793 | 362 days ago | 2.59483433 ETH | ||||
17678573 | 362 days ago | 1.482 ETH | ||||
17673960 | 363 days ago | 1.09479999 ETH | ||||
17673932 | 363 days ago | 3 ETH | ||||
17672441 | 363 days ago | 0.4 ETH | ||||
17672405 | 363 days ago | 12.13392 ETH | ||||
17672206 | 363 days ago | 0.01951678 ETH | ||||
17671907 | 363 days ago | 5 ETH | ||||
17671895 | 363 days ago | 8.77392494 ETH | ||||
17671729 | 363 days ago | 2.25 ETH | ||||
17670041 | 364 days ago | 0.00436859 ETH | ||||
17670041 | 364 days ago | 0.149 ETH | ||||
17670041 | 364 days ago | 0.0116314 ETH | ||||
17669461 | 364 days ago | 0.04073976 ETH | ||||
17669447 | 364 days ago | 0.005 ETH | ||||
17669447 | 364 days ago | 0.44408535 ETH | ||||
17669447 | 364 days ago | 0.44908535 ETH | ||||
17669396 | 364 days ago | 0.712 ETH | ||||
17667458 | 364 days ago | 0.01637894 ETH |
Loading...
Loading
Contract Name:
AutoSniper
Compiler Version
v0.8.18+commit.87f61d96
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// // // SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.18; import "./helpers/SniperStructs.sol"; import "./helpers/IWETH.sol"; import "./helpers/IPunk.sol"; import "./helpers/SniperErrors.sol"; import "solmate/src/auth/Owned.sol"; import "openzeppelin/contracts/token/ERC721/IERC721.sol"; import "openzeppelin/contracts/token/ERC20/IERC20.sol"; import "openzeppelin/contracts/token/ERC1155/IERC1155.sol"; /** * @title AutoSniper 2.0 for @oSnipeNFT * @author 0xQuit */ /* @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%*+=--::::::--=+*#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*=:. ...... :=*%@@@@@@@@@%@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#=. .-+*%@@@@@@@@@@@@%#+=: -@@@@@@=:::=#@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@%+. :=#@@@@@@@@@@@@@@@@@@@@@@@@#+#@@@@@%**+-:::-%@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@#- :+%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%******+-::=@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@%: =%@@@@@@@@@@@@@@@@%%%%@@@@@@@@@@@@@@%*++++++***+=+@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@= -@@@@@@@@@@@@#+-:. :-+%@@@@@%*+++++++++*#@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@#. :%@@@@@@@@@%+: ..:::::. .*@@@%*+++++++++++#@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@* =@@@@@@@@@#: .=*%@@@@@@@@@@%@@@%+----======+#@@@@@%@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@+ *@@@@@@@@#: .+%@@@@@@@@@@@@@@@@@@=-------==+#@@@@@%- -@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@# #@@@@@@@@= .*@@@@@@@@@#=. .-+#+=--------*@@@@@@@% +@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@. =@@@@@@@@- =@@@@@@@@@@: -+**+- .--=----+%@@@@@@@@@# %@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@+ .@@@@@@@@- +@@@@@@@@@@- #@@@@%+-:. :=*@#%@@@*%@@@@@@@= -@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@. #@@@@@@@+ =@@@@@@@@@@@: @@@%=-----. #@@@@@*. -@@@@@@@@ %@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@# @@@@@@@@. .@@@@@@@@@@@@% :#=:::::--*+=@@@@@@- %@@@@@@@- +@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@+ :@@@@@@@% =@@@@@@@@@@@@@%-:--::::-*@@@@@@@@@@* *@@@@@@@+ :@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@= -@@@@@@@# +@@@@@@@@@@@@@#-:---:-*@@@@@@@@@@@@# +@@@@@@@+ :@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@+ -@@@@@@@% =@@@@@@*#@@@#-::---=. -@@@@@@@@@@@@* +@@@@@@@+ :@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@# .@@@@@@@@ .@@@@@+ #*-:::--*@@# -@@@@@@@@@@@- %@@@@@@@- =@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@ #@@@@@@@+ =@@@@@% .--:--+@@@@@= %@@@@@@@@@# :@@@@@@@@ %@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@= :@@@@@@@@=%@@@@@@*: :-*@@@@@@%. .@@@@@@@@@% %@@@@@@@= :@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@ +@@@@@@@@@@@@#+---:. .=*###*- :%@@@@@@@@# .%@@@@@@@# #@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@* %@@@@@@@@@#=------*%+- .-#@@@@@@@@%= .%@@@@@@@@. =@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@= .*@@@@@@@@+------=%@@@@@@%%%@@@@@@@@@@#- +@@@@@@@@@: :@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@#@@@@@@@@*===---=#@@@@@@@@@@@@@@@@@%*- +@@@@@@@@@# -@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@*=====+#%@@@@@%= .:--==--:. .-*@@@@@@@@@@+ +@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@+--==+#@@@@@@@@=:. :=*%@@@@@@@@@@@*. .#@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@*===+-*@@@@@@@@@@@@@@%%#####%@@@@@@@@@@@@@@@*. +@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@#+==#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#= .+@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@+==+%@@@@@@@@@%*%@@@@@@@@@@@@@@@@@@@@@@@@@*- -*@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@#=%@@@@@@@@@+ -=*%@@@@@@@@@@@@@@%*+-. :+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%+-. ..:::::::. .-+#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%*+=-:........:-=+*#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ */ contract AutoSniper is Owned { event Snipe( SniperOrder order, Claim[] claims ); event Deposit( address sniper, uint256 amount ); event Withdrawal( address sniper, uint256 amount ); string public constant name = "oSnipe: AutoSniper V2"; address private constant WETH_ADDRESS = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; address private fulfillerAddress = 0x816B65bd147df5C2566d2C9828815E85ff6055c6; address public nextContractVersionAddress; bool public migrationEnabled; mapping(address => bool) public allowedMarketplaces; mapping(address => uint256) public sniperBalances; mapping(address => SniperGuardrails) public sniperGuardrails; constructor() Owned(0x507c8252c764489Dc1150135CA7e41b01e10ee74) {} /** * @dev fulfillOrder conducts its own checks to ensure that the passed order is a valid sniper * before forwarding the snipe on to the appropriate marketplace. Snipers can block orders by setting * up guardrails that prevent orders from being fulfilled outside of allowlisted marketplaces or * nft contracts, or with tips that exceed a maximum tip amount. WETH is used to subsidize * the order in case the Sniper's deposited balance is too low. WETH must be approved in order for this to * work. Calculation is done off-chain and passed in via wethAmount. If for some reason there is an overpay, * the marketplace will refund the difference, which is added to the Sniper's balance. * @param wethSubsidy the amount of WETH that needs to be converted. * @param claims an array of claims that the sniped NFT is eligible for. Claims are claimed and * transferred to the sniper along with the sniped NFT. */ function fulfillOrder(SniperOrder calldata order, Claim[] calldata claims, uint256 wethSubsidy) external onlyFulfiller { _checkGuardrails(order.tokenAddress, order.marketplace, order.autosniperTip, order.to); uint256 totalValue = order.value + order.autosniperTip + order.validatorTip; if (wethSubsidy > 0) _swapWeth(wethSubsidy, order.to); if (sniperBalances[order.to] < totalValue) revert InsufficientBalance(); uint256 balanceBefore = address(this).balance; (bool autosniperPaid, ) = payable(fulfillerAddress).call{value: order.autosniperTip}(""); if (!autosniperPaid) revert FailedToPayAutosniper(); (bool orderFilled,) = order.marketplace.call{value: order.value}(order.data); if (!orderFilled) revert OrderFailed(); (bool validatorPaid, ) = block.coinbase.call{value: order.validatorTip}(""); if (!validatorPaid) revert FailedToPayValidator(); uint256 balanceAfter = address(this).balance; uint256 spent = balanceBefore - balanceAfter; sniperBalances[order.to] -= spent; _claimAndTransferClaimableAssets(claims, order.to); _transferNftToSniper(order.tokenType, order.tokenAddress, order.tokenId, address(this), order.to); emit Snipe(order, claims); } /** * @dev fulfillNonCompliantMarketplaceOrder is a variant on fulfillOrder, used for markets that * don't allow purchases through contracts. The fulfiller EOA will fulfill the order, and then use * this function to get it to the sniper. * @param wethSubsidy the amount of WETH that needs to be converted. * @param claims an array of claims that the sniped NFT is eligible for. Claims are claimed and * transferred to the sniper along with the sniped NFT. */ function fulfillNonCompliantMarketplaceOrder(SniperOrder calldata order, Claim[] calldata claims, uint256 wethSubsidy) external onlyFulfiller { _checkGuardrails(order.tokenAddress, order.marketplace, order.autosniperTip, order.to); uint256 totalValue = order.value + order.autosniperTip + order.validatorTip; if (wethSubsidy > 0) _swapWeth(wethSubsidy, order.to); if (sniperBalances[order.to] < totalValue) revert InsufficientBalance(); uint256 balanceBefore = address(this).balance; (bool autosniperPaid, ) = payable(fulfillerAddress).call{value: order.autosniperTip + order.value}(""); if (!autosniperPaid) revert FailedToPayAutosniper(); (bool validatorPaid, ) = block.coinbase.call{value: order.validatorTip}(""); if (!validatorPaid) revert FailedToPayValidator(); uint256 balanceAfter = address(this).balance; uint256 spent = balanceBefore - balanceAfter; sniperBalances[order.to] -= spent; _transferNftToSniper(order.tokenType, order.tokenAddress, order.tokenId, fulfillerAddress, order.to); emit Snipe(order, claims); } /** * @dev solSnatch is a pure arbitrage function for fulfilling an order, and accepting a WETH offer in the same transaction. * Contract balance can be used, but user balances cannot be affected - the call will revert if the post-call contract * balance is lower than the pre-call balance. * @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 validatorTip the amount to send to block.coinbase. Reverts if this is 0. */ function solSnatch(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(); uint256 balanceBefore = address(this).balance; for (uint256 i = 0; i < contractAddresses.length;) { (bool success, ) = contractAddresses[i].call{value: values[i]}(calls[i]); if (!success) revert OrderFailed(); unchecked { ++i; } } (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) revert NoMoneyMoProblems(); sniperBalances[sniper] += balanceAfter - balanceBefore; emit Deposit(sniper, balanceAfter - balanceBefore); } /** * @dev In cases where we execute a snipe without using this contract, use this function as a solution to * bypass priority fee by tipping the coinbase directly, and emit Snipe event for logging purposes. * @param order this order contains a validator tip which is paid out, and is emitted in the Snipe event * @param claims these claims are unused, but are included in the event and should reflect the claims executed * as part of the snipe prior to calling this function. */ function sendDirectTipToCoinbase(SniperOrder calldata order, Claim[] calldata claims) external payable onlyFulfiller { (bool validatorPaid, ) = block.coinbase.call{value: order.validatorTip}(""); if (!validatorPaid) revert FailedToPayValidator(); emit Snipe(order, claims); } /** * @dev deposit Ether into the contract. * @param sniper is the address who's balance is affected. */ function deposit(address sniper) public payable { sniperBalances[sniper] += 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 (sniperBalances[msg.sender] < amount) revert InsufficientBalance(); sniperBalances[msg.sender] -= amount; (bool success, ) = payable(msg.sender).call{value: amount}(""); if (!success) revert FailedToWithdraw(); emit Withdrawal(msg.sender, amount); } /** * @dev set up a marketplace allowlist. * @param guardEnabled if false then marketplace allowlist will not be checked for this user * @param marketplaceAllowed boolean indicating whether the marketplace is allowed or not */ function setUserAllowedMarketplaces(bool guardEnabled, bool marketplaceAllowed, address[] calldata marketplaces) external { sniperGuardrails[msg.sender].marketplaceGuardEnabled = guardEnabled; for (uint256 i = 0; i < marketplaces.length;) { sniperGuardrails[msg.sender].allowedMarketplaces[marketplaces[i]] = marketplaceAllowed; unchecked { ++i; } } } /** * @dev Set up a maximum tip guardrail (in wei). If set to 0, guardrail will be disabled. */ function setUserMaxTip(uint256 maxTipInWei) external { sniperGuardrails[msg.sender].maxTip = maxTipInWei; } /** * @dev set up NFT contract allowlist * @param guardEnabled if false then NFT contract allowlist will not be checked for this user * @param nftAllowed boolean indicating whether the NFT contract is allowed or not */ function setUserAllowedNfts(bool guardEnabled, bool nftAllowed, address[] calldata nfts) external { sniperGuardrails[msg.sender].nftContractGuardEnabled = guardEnabled; for (uint256 i = 0; i < nfts.length;) { sniperGuardrails[msg.sender].allowedNftContracts[nfts[i]] = nftAllowed; unchecked { ++i; } } } /** * @dev Owner function to set up global marketplace allowlist. */ function configureMarkets(address[] calldata marketplaces, bool status) external onlyOwner { for (uint256 i = 0; i < marketplaces.length;) { allowedMarketplaces[marketplaces[i]] = status; unchecked { ++i; } } } /** * @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; } // getters to simplify web3js calls function marketplaceApprovedBySniper(address sniper, address marketplace) external view returns (bool) { return sniperGuardrails[sniper].allowedMarketplaces[marketplace]; } function nftContractApprovedBySniper(address sniper, address nftContract) external view returns (bool) { return sniperGuardrails[sniper].allowedNftContracts[nftContract]; } /** * @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 = sniperBalances[msg.sender]; sniperBalances[msg.sender] = 0; (bool success, ) = nextContractVersionAddress.call{value: balanceToMigrate}(abi.encodeWithSelector(this.deposit.selector, msg.sender)); if (!success) revert FailedToWithdraw(); } // internal helpers function _swapWeth(uint256 wethAmount, address sniper) private onlyFulfiller { IWETH weth = IWETH(WETH_ADDRESS); weth.transferFrom(sniper, address(this), wethAmount); weth.withdraw(wethAmount); unchecked { sniperBalances[sniper] += wethAmount; } } function _transferNftToSniper(ItemType tokenType, address tokenAddress, uint256 tokenId, address source, address sniper) private { if (tokenType == ItemType.ERC721) { IERC721(tokenAddress).transferFrom(source, sniper, tokenId); } else if (tokenType == ItemType.ERC1155) { IERC1155(tokenAddress).safeTransferFrom(source, sniper, tokenId, 1, ""); } else if (tokenType == ItemType.CRYPTOPUNKS) { IPunk(tokenAddress).transferPunk(sniper, tokenId); } else if (tokenType == ItemType.ERC20) { IERC20 token = IERC20(tokenAddress); token.transfer(sniper, token.balanceOf(source)); } } function _claimAndTransferClaimableAssets(Claim[] calldata claims, address sniper) private { for (uint256 i = 0; i < claims.length; i++) { Claim memory claim = claims[i]; (bool claimSuccess, ) = claim.tokenAddress.call(claim.claimData); if (!claimSuccess) revert ClaimFailed(); _transferNftToSniper(claim.tokenType, claim.tokenAddress, claim.tokenId, address(this), sniper); } } function _checkGuardrails(address tokenAddress, address marketplace, uint256 tip, address sniper) private view { SniperGuardrails storage guardrails = sniperGuardrails[sniper]; if (!allowedMarketplaces[marketplace]) revert MarketplaceNotAllowed(); if (guardrails.maxTip > 0 && tip > guardrails.maxTip) revert MaxTipExceeded(); if (guardrails.marketplaceGuardEnabled && !guardrails.allowedMarketplaces[marketplace]) revert MarketplaceNotAllowed(); if (guardrails.nftContractGuardEnabled && !guardrails.allowedNftContracts[tokenAddress]) revert TokenContractNotAllowed(); } 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 virtual view returns (bool) { return interfaceId == this.supportsInterface.selector; } receive() external payable {} // 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) onlyOwner external { 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) onlyOwner external { 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) onlyOwner external { for (uint256 i = 0; i < ids.length; i++) { IERC1155(asset).safeTransferFrom(address(this), recipient, ids[i], amounts[i], ""); } } modifier onlyFulfiller() { if (msg.sender != fulfillerAddress) revert CallerNotFulfiller(); _; } }
// 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/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); }
// SPDX-License-Identifier: AGPL-3.0-only pragma solidity >=0.8.0; /// @notice Simple single owner authorization mixin. /// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/auth/Owned.sol) abstract contract Owned { /*////////////////////////////////////////////////////////////// EVENTS //////////////////////////////////////////////////////////////*/ event OwnershipTransferred(address indexed user, address indexed newOwner); /*////////////////////////////////////////////////////////////// OWNERSHIP STORAGE //////////////////////////////////////////////////////////////*/ address public owner; modifier onlyOwner() virtual { require(msg.sender == owner, "UNAUTHORIZED"); _; } /*////////////////////////////////////////////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////*/ constructor(address _owner) { owner = _owner; emit OwnershipTransferred(address(0), _owner); } /*////////////////////////////////////////////////////////////// OWNERSHIP LOGIC //////////////////////////////////////////////////////////////*/ function transferOwnership(address newOwner) public virtual onlyOwner { owner = newOwner; emit OwnershipTransferred(msg.sender, newOwner); } }
// SPDX-License-Identifier: UNLICENSED pragma solidity 0.8.18; interface IPunk { function transferPunk(address to, uint punkIndex) external; }
// SPDX-License-Identifier: UNLICENSED pragma solidity 0.8.18; interface IWETH { function transferFrom(address src, address dst, uint wad) external; function deposit() external payable; function withdraw(uint wad) external; function balanceOf(address user) external view returns (uint256); function approve(address guy, uint wad) external returns (bool); }
// SPDX-License-Identifier: UNLICENSED pragma solidity 0.8.18; // from Seaport enum ItemType { // 0: ETH on mainnet, MATIC on polygon, etc. NATIVE, // 1: ERC20 items (ERC777 and ERC20 analogues could also technically work) ERC20, // 2: ERC721 items ERC721, // 3: ERC1155 items ERC1155, // 4: ERC721 items where a number of tokenIds are supported ERC721_WITH_CRITERIA, // 5: ERC1155 items where a number of ids are supported ERC1155_WITH_CRITERIA, // 6: CryptoPunks CRYPTOPUNKS }
// SPDX-License-Identifier: MIT pragma solidity 0.8.18; error InsufficientBalance(); error FailedToWithdraw(); error FailedToPayAutosniper(); error FailedToPayValidator(); error MaxTipExceeded(); error MarketplaceNotAllowed(); error TokenContractNotAllowed(); error OrderFailed(); error CallerNotFulfiller(); error ClaimFailed(); error MigrationNotEnabled(); error ArrayLengthMismatch(); error NoMoneyMoProblems();
// SPDX-License-Identifier: UNLICENSED pragma solidity 0.8.18; import "./SniperEnums.sol"; struct SniperOrder { address to; address marketplace; uint256 value; uint256 autosniperTip; uint256 validatorTip; ItemType tokenType; bytes data; address tokenAddress; uint256 tokenId; } struct Claim { ItemType tokenType; address tokenAddress; uint256 tokenId; bytes claimData; } struct SniperGuardrails { bool marketplaceGuardEnabled; bool nftContractGuardEnabled; mapping(address => bool) allowedMarketplaces; mapping(address => bool) allowedNftContracts; uint256 maxTip; }
{ "remappings": [ "ERC721A/=lib/ERC721A/", "ds-test/=lib/forge-std/lib/ds-test/src/", "forge-std/=lib/forge-std/src/", "openzeppelin-contracts/=lib/openzeppelin-contracts/", "openzeppelin/=lib/openzeppelin-contracts/", "solmate/=lib/solmate/" ], "optimizer": { "enabled": true, "runs": 200 }, "metadata": { "bytecodeHash": "ipfs", "appendCBOR": true }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "evmVersion": "london", "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ArrayLengthMismatch","type":"error"},{"inputs":[],"name":"CallerNotFulfiller","type":"error"},{"inputs":[],"name":"ClaimFailed","type":"error"},{"inputs":[],"name":"FailedToPayAutosniper","type":"error"},{"inputs":[],"name":"FailedToPayValidator","type":"error"},{"inputs":[],"name":"FailedToWithdraw","type":"error"},{"inputs":[],"name":"InsufficientBalance","type":"error"},{"inputs":[],"name":"MarketplaceNotAllowed","type":"error"},{"inputs":[],"name":"MaxTipExceeded","type":"error"},{"inputs":[],"name":"MigrationNotEnabled","type":"error"},{"inputs":[],"name":"NoMoneyMoProblems","type":"error"},{"inputs":[],"name":"OrderFailed","type":"error"},{"inputs":[],"name":"TokenContractNotAllowed","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":"user","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"address","name":"marketplace","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"autosniperTip","type":"uint256"},{"internalType":"uint256","name":"validatorTip","type":"uint256"},{"internalType":"enum ItemType","name":"tokenType","type":"uint8"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"indexed":false,"internalType":"struct SniperOrder","name":"order","type":"tuple"},{"components":[{"internalType":"enum ItemType","name":"tokenType","type":"uint8"},{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"claimData","type":"bytes"}],"indexed":false,"internalType":"struct Claim[]","name":"claims","type":"tuple[]"}],"name":"Snipe","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":[{"internalType":"address","name":"","type":"address"}],"name":"allowedMarketplaces","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"marketplaces","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"configureMarkets","outputs":[],"stateMutability":"nonpayable","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":[{"components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"address","name":"marketplace","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"autosniperTip","type":"uint256"},{"internalType":"uint256","name":"validatorTip","type":"uint256"},{"internalType":"enum ItemType","name":"tokenType","type":"uint8"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"internalType":"struct SniperOrder","name":"order","type":"tuple"},{"components":[{"internalType":"enum ItemType","name":"tokenType","type":"uint8"},{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"claimData","type":"bytes"}],"internalType":"struct Claim[]","name":"claims","type":"tuple[]"},{"internalType":"uint256","name":"wethSubsidy","type":"uint256"}],"name":"fulfillNonCompliantMarketplaceOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"address","name":"marketplace","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"autosniperTip","type":"uint256"},{"internalType":"uint256","name":"validatorTip","type":"uint256"},{"internalType":"enum ItemType","name":"tokenType","type":"uint8"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"internalType":"struct SniperOrder","name":"order","type":"tuple"},{"components":[{"internalType":"enum ItemType","name":"tokenType","type":"uint8"},{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"claimData","type":"bytes"}],"internalType":"struct Claim[]","name":"claims","type":"tuple[]"},{"internalType":"uint256","name":"wethSubsidy","type":"uint256"}],"name":"fulfillOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sniper","type":"address"},{"internalType":"address","name":"marketplace","type":"address"}],"name":"marketplaceApprovedBySniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextContractVersionAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sniper","type":"address"},{"internalType":"address","name":"nftContract","type":"address"}],"name":"nftContractApprovedBySniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"","type":"address"}],"stateMutability":"view","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":[{"components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"address","name":"marketplace","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"autosniperTip","type":"uint256"},{"internalType":"uint256","name":"validatorTip","type":"uint256"},{"internalType":"enum ItemType","name":"tokenType","type":"uint8"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"internalType":"struct SniperOrder","name":"order","type":"tuple"},{"components":[{"internalType":"enum ItemType","name":"tokenType","type":"uint8"},{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"claimData","type":"bytes"}],"internalType":"struct Claim[]","name":"claims","type":"tuple[]"}],"name":"sendDirectTipToCoinbase","outputs":[],"stateMutability":"payable","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":"guardEnabled","type":"bool"},{"internalType":"bool","name":"marketplaceAllowed","type":"bool"},{"internalType":"address[]","name":"marketplaces","type":"address[]"}],"name":"setUserAllowedMarketplaces","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"guardEnabled","type":"bool"},{"internalType":"bool","name":"nftAllowed","type":"bool"},{"internalType":"address[]","name":"nfts","type":"address[]"}],"name":"setUserAllowedNfts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTipInWei","type":"uint256"}],"name":"setUserMaxTip","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"sniperBalances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"sniperGuardrails","outputs":[{"internalType":"bool","name":"marketplaceGuardEnabled","type":"bool"},{"internalType":"bool","name":"nftContractGuardEnabled","type":"bool"},{"internalType":"uint256","name":"maxTip","type":"uint256"}],"stateMutability":"view","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":"solSnatch","outputs":[],"stateMutability":"nonpayable","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":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052600180546001600160a01b03191673816b65bd147df5c2566d2c9828815e85ff6055c617905534801561003657600080fd5b50600080546001600160a01b03191673507c8252c764489dc1150135ca7e41b01e10ee749081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350612afd8061009b6000396000f3fe6080604052600436106101e75760003560e01c80637f685c0411610102578063c9c50e2311610095578063f0b9e5ba11610064578063f0b9e5ba1461068c578063f23a6e61146106b7578063f2fde38b146106e4578063f340fa011461070457600080fd5b8063c9c50e23146105cf578063d0e4886d146105ef578063d2b102d71461061f578063d431cac61461066c57600080fd5b8063adb2234e116100d1578063adb2234e146104e7578063b1f9aa8214610545578063b7ce33a214610580578063bc197c81146105a057600080fd5b80637f685c041461045c5780638da5cb5b1461047c57806397ccb19d146104b4578063a2c5a942146104d457600080fd5b80634732a7dc1161017a5780635d0907fb116101495780635d0907fb146103cc5780635d799f87146103ec5780635f3603381461040c578063730ed97b1461042c57600080fd5b80634732a7dc146103645780634c412aa314610384578063530e5406146103a457806357323648146103c457600080fd5b8063270a6231116101b6578063270a6231146102ee5780632e1a7d4d146103035780633219524e1461032357806335b944bf1461034357600080fd5b806301ffc9a7146101f357806306fdde0314610239578063150b7a021461028757806326e2dca2146102cc57600080fd5b366101ee57005b600080fd5b3480156101ff57600080fd5b5061022461020e366004611eb2565b6001600160e01b0319166301ffc9a760e01b1490565b60405190151581526020015b60405180910390f35b34801561024557600080fd5b5061027a6040518060400160405280601581526020017437a9b734b8329d1020baba37a9b734b832b9102b1960591b81525081565b6040516102309190611f07565b34801561029357600080fd5b506102b36102a2366004611f9e565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610230565b3480156102d857600080fd5b506102ec6102e7366004612050565b610717565b005b3480156102fa57600080fd5b506102ec610801565b34801561030f57600080fd5b506102ec61031e3660046120b4565b6108fd565b34801561032f57600080fd5b506102ec61033e3660046120de565b6109f7565b34801561034f57600080fd5b5060025461022490600160a01b900460ff1681565b34801561037057600080fd5b506102ec61037f366004612142565b610a8e565b34801561039057600080fd5b506102ec61039f366004612142565b610ae1565b3480156103b057600080fd5b506102246103bf36600461215d565b610b2d565b6102ec610b61565b3480156103d857600080fd5b506102ec6103e73660046121a9565b610b6c565b3480156103f857600080fd5b506102ec61040736600461215d565b610e4d565b34801561041857600080fd5b506102ec6104273660046121a9565b610f60565b34801561043857600080fd5b50610224610447366004612142565b60036020526000908152604090205460ff1681565b34801561046857600080fd5b506102ec6104773660046120de565b6112a8565b34801561048857600080fd5b5060005461049c906001600160a01b031681565b6040516001600160a01b039091168152602001610230565b3480156104c057600080fd5b506102ec6104cf366004612218565b61133a565b6102ec6104e23660046122d4565b61162f565b3480156104f357600080fd5b50610528610502366004612142565b6005602052600090815260409020805460039091015460ff808316926101009004169083565b604080519315158452911515602084015290820152606001610230565b34801561055157600080fd5b50610572610560366004612142565b60046020526000908152604090205481565b604051908152602001610230565b34801561058c57600080fd5b506102ec61059b36600461233c565b611708565b3480156105ac57600080fd5b506102b36105bb3660046123cb565b63bc197c8160e01b98975050505050505050565b3480156105db57600080fd5b5060025461049c906001600160a01b031681565b3480156105fb57600080fd5b506102ec61060a3660046120b4565b33600090815260056020526040902060030155565b34801561062b57600080fd5b5061022461063a36600461215d565b6001600160a01b0391821660009081526005602090815260408083209390941682526002909201909152205460ff1690565b34801561067857600080fd5b506102ec610687366004612485565b6117ed565b34801561069857600080fd5b506102b36106a73660046124db565b63785cf2dd60e11b949350505050565b3480156106c357600080fd5b506102b36106d2366004612528565b63f23a6e6160e01b9695505050505050565b3480156106f057600080fd5b506102ec6106ff366004612142565b61187e565b6102ec610712366004612142565b6118f3565b6000546001600160a01b0316331461074a5760405162461bcd60e51b81526004016107419061259f565b60405180910390fd5b60005b828110156107fa57846001600160a01b03166323b872dd3084878786818110610778576107786125c5565b6040516001600160e01b031960e088901b1681526001600160a01b03958616600482015294909316602485015250602090910201356044820152606401600060405180830381600087803b1580156107cf57600080fd5b505af11580156107e3573d6000803e3d6000fd5b5050505080806107f2906125f1565b91505061074d565b5050505050565b600254600160a01b900460ff1661082b5760405163f6017bbd60e01b815260040160405180910390fd5b336000818152600460209081526040808320805490849055600254825160248082019790975283518082039097018752604401835292850180516001600160e01b031663f340fa0160e01b179052905190936001600160a01b03909216918491610895919061260a565b60006040518083038185875af1925050503d80600081146108d2576040519150601f19603f3d011682016040523d82523d6000602084013e6108d7565b606091505b50509050806108f957604051632684a07960e01b815260040160405180910390fd5b5050565b3360009081526004602052604090205481111561092d57604051631e9acf1760e31b815260040160405180910390fd5b336000908152600460205260408120805483929061094c908490612626565b9091555050604051600090339083908381818185875af1925050503d8060008114610993576040519150601f19603f3d011682016040523d82523d6000602084013e610998565b606091505b50509050806109ba57604051632684a07960e01b815260040160405180910390fd5b60408051338152602081018490527f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65910160405180910390a15050565b336000908152600560205260408120805461ff001916610100871515021790555b818110156107fa573360009081526005602052604081208591600290910190858585818110610a4957610a496125c5565b9050602002016020810190610a5e9190612142565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055600101610a18565b6000546001600160a01b03163314610ab85760405162461bcd60e51b81526004016107419061259f565b600280546001600160a01b039092166001600160a81b031990921691909117600160a01b179055565b6000546001600160a01b03163314610b0b5760405162461bcd60e51b81526004016107419061259f565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038083166000908152600560209081526040808320938516835260019093019052205460ff165b92915050565b610b6a336118f3565b565b6001546001600160a01b03163314610b97576040516319caaa0b60e01b815260040160405180910390fd5b610bd2610bab610100860160e08701612142565b610bbb6040870160208801612142565b6060870135610bcd6020890189612142565b611964565b60006080850135610beb60608701356040880135612639565b610bf59190612639565b90508115610c1357610c1382610c0e6020880188612142565b611a7b565b8060046000610c256020890189612142565b6001600160a01b03166001600160a01b03168152602001908152602001600020541015610c6557604051631e9acf1760e31b815260040160405180910390fd5b60015447906000906001600160a01b0316610c88604089013560608a0135612639565b604051600081818185875af1925050503d8060008114610cc4576040519150601f19603f3d011682016040523d82523d6000602084013e610cc9565b606091505b5050905080610ceb576040516305676c7160e41b815260040160405180910390fd5b604051600090419060808a0135908381818185875af1925050503d8060008114610d31576040519150601f19603f3d011682016040523d82523d6000602084013e610d36565b606091505b5050905080610d5857604051632d66518f60e01b815260040160405180910390fd5b476000610d658286612626565b90508060046000610d7960208e018e612142565b6001600160a01b03166001600160a01b031681526020019081526020016000206000828254610da89190612626565b90915550610e069050610dc160c08c0160a08d0161265b565b610dd26101008d0160e08e01612142565b8c6101000135600160009054906101000a90046001600160a01b03168e6000016020810190610e019190612142565b611ba0565b7fdf03fa719a9597aa71cfc8cf37de74ffc35af96dca128759dde37afa90e34a298a8a8a604051610e39939291906127d5565b60405180910390a150505050505050505050565b6000546001600160a01b03163314610e775760405162461bcd60e51b81526004016107419061259f565b6040516370a0823160e01b815230600482015282906001600160a01b0382169063a9059cbb90849083906370a0823190602401602060405180830381865afa158015610ec7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eeb91906128b8565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610f36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5a91906128d1565b50505050565b6001546001600160a01b03163314610f8b576040516319caaa0b60e01b815260040160405180910390fd5b610f9f610bab610100860160e08701612142565b60006080850135610fb860608701356040880135612639565b610fc29190612639565b90508115610fdb57610fdb82610c0e6020880188612142565b8060046000610fed6020890189612142565b6001600160a01b03166001600160a01b0316815260200190815260200160002054101561102d57604051631e9acf1760e31b815260040160405180910390fd5b60015460405147916000916001600160a01b03909116906060890135908381818185875af1925050503d8060008114611082576040519150601f19603f3d011682016040523d82523d6000602084013e611087565b606091505b50509050806110a9576040516305676c7160e41b815260040160405180910390fd5b60006110bb6040890160208a01612142565b6001600160a01b031660408901356110d660c08b018b6128ee565b6040516110e4929190612934565b60006040518083038185875af1925050503d8060008114611121576040519150601f19603f3d011682016040523d82523d6000602084013e611126565b606091505b50509050806111485760405163e8d529f960e01b815260040160405180910390fd5b604051600090419060808b0135908381818185875af1925050503d806000811461118e576040519150601f19603f3d011682016040523d82523d6000602084013e611193565b606091505b50509050806111b557604051632d66518f60e01b815260040160405180910390fd5b4760006111c28287612626565b905080600460006111d660208f018f612142565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008282546112059190612626565b9091555061122290508a8a61121d60208f018f612142565b611dc2565b61126061123560c08d0160a08e0161265b565b6112466101008e0160e08f01612142565b8d6101000135308f6000016020810190610e019190612142565b7fdf03fa719a9597aa71cfc8cf37de74ffc35af96dca128759dde37afa90e34a298b8b8b604051611293939291906127d5565b60405180910390a15050505050505050505050565b336000908152600560205260408120805460ff19168615151790555b818110156107fa5733600090815260056020526040812085916001909101908585858181106112f5576112f56125c5565b905060200201602081019061130a9190612142565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556001016112c4565b6001546001600160a01b03163314611365576040516319caaa0b60e01b815260040160405180910390fd5b8786146113855760405163512509d360e11b815260040160405180910390fd5b8584146113a55760405163512509d360e11b815260040160405180910390fd5b4760005b8981101561149b5760008b8b838181106113c5576113c56125c5565b90506020020160208101906113da9190612142565b6001600160a01b03168888848181106113f5576113f56125c5565b905060200201358b8b8581811061140e5761140e6125c5565b905060200281019061142091906128ee565b60405161142e929190612934565b60006040518083038185875af1925050503d806000811461146b576040519150601f19603f3d011682016040523d82523d6000602084013e611470565b606091505b50509050806114925760405163e8d529f960e01b815260040160405180910390fd5b506001016113a9565b50604051600090419085908381818185875af1925050503d80600081146114de576040519150601f19603f3d011682016040523d82523d6000602084013e6114e3565b606091505b505090508061150557604051632d66518f60e01b815260040160405180910390fd5b6001546040516000916001600160a01b03169085908381818185875af1925050503d8060008114611552576040519150601f19603f3d011682016040523d82523d6000602084013e611557565b606091505b5050905080611579576040516305676c7160e41b815260040160405180910390fd5b4783811161159a5760405163104d28f560e21b815260040160405180910390fd5b6115a48482612626565b6001600160a01b038816600090815260046020526040812080549091906115cc908490612639565b909155507fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9050876115fe8684612626565b604080516001600160a01b03909316835260208301919091520160405180910390a150505050505050505050505050565b6001546001600160a01b0316331461165a576040516319caaa0b60e01b815260040160405180910390fd5b60405160009041906080860135908381818185875af1925050503d80600081146116a0576040519150601f19603f3d011682016040523d82523d6000602084013e6116a5565b606091505b50509050806116c757604051632d66518f60e01b815260040160405180910390fd5b7fdf03fa719a9597aa71cfc8cf37de74ffc35af96dca128759dde37afa90e34a298484846040516116fa939291906127d5565b60405180910390a150505050565b6000546001600160a01b031633146117325760405162461bcd60e51b81526004016107419061259f565b60005b848110156117e457866001600160a01b031663f242432a3084898986818110611760576117606125c5565b90506020020135888887818110611779576117796125c5565b905060200201356040518563ffffffff1660e01b815260040161179f9493929190612944565b600060405180830381600087803b1580156117b957600080fd5b505af11580156117cd573d6000803e3d6000fd5b5050505080806117dc906125f1565b915050611735565b50505050505050565b6000546001600160a01b031633146118175760405162461bcd60e51b81526004016107419061259f565b60005b82811015610f5a578160036000868685818110611839576118396125c5565b905060200201602081019061184e9190612142565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905560010161181a565b6000546001600160a01b031633146118a85760405162461bcd60e51b81526004016107419061259f565b600080546001600160a01b0319166001600160a01b0383169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6001600160a01b0381166000908152600460205260408120805434929061191b908490612639565b9091555050604080516001600160a01b03831681523460208201527fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c910160405180910390a150565b6001600160a01b0380821660009081526005602090815260408083209387168352600390915290205460ff166119ad576040516311de472b60e11b815260040160405180910390fd5b600081600301541180156119c45750806003015483115b156119e25760405163c185173d60e01b815260040160405180910390fd5b805460ff168015611a0e57506001600160a01b038416600090815260018201602052604090205460ff16155b15611a2c576040516311de472b60e11b815260040160405180910390fd5b8054610100900460ff168015611a5d57506001600160a01b038516600090815260028201602052604090205460ff16155b156107fa57604051631a70568560e21b815260040160405180910390fd5b6001546001600160a01b03163314611aa6576040516319caaa0b60e01b815260040160405180910390fd5b6040516323b872dd60e01b81526001600160a01b03821660048201523060248201526044810183905273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc29081906323b872dd90606401600060405180830381600087803b158015611b0a57600080fd5b505af1158015611b1e573d6000803e3d6000fd5b5050604051632e1a7d4d60e01b8152600481018690526001600160a01b0384169250632e1a7d4d9150602401600060405180830381600087803b158015611b6457600080fd5b505af1158015611b78573d6000803e3d6000fd5b5050506001600160a01b03909216600090815260046020526040902080549093019092555050565b6002856006811115611bb457611bb4612676565b03611c29576040516323b872dd60e01b81526001600160a01b0383811660048301528281166024830152604482018590528516906323b872dd906064015b600060405180830381600087803b158015611c0c57600080fd5b505af1158015611c20573d6000803e3d6000fd5b505050506107fa565b6003856006811115611c3d57611c3d612676565b03611c7557604051637921219560e11b81526001600160a01b0385169063f242432a90611bf290859085908890600190600401612944565b6006856006811115611c8957611c89612676565b03611cc3576040516322dca8bb60e21b81526001600160a01b03828116600483015260248201859052851690638b72a2ec90604401611bf2565b6001856006811115611cd757611cd7612676565b036107fa576040516370a0823160e01b81526001600160a01b03838116600483015285919082169063a9059cbb90849083906370a0823190602401602060405180830381865afa158015611d2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d5391906128b8565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015611d9e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e491906128d1565b60005b82811015610f5a576000848483818110611de157611de16125c5565b9050602002810190611df3919061297c565b611dfc90612a00565b9050600081602001516001600160a01b03168260600151604051611e20919061260a565b6000604051808303816000865af19150503d8060008114611e5d576040519150601f19603f3d011682016040523d82523d6000602084013e611e62565b606091505b5050905080611e845760405163360e42e160e01b815260040160405180910390fd5b611e9d8260000151836020015184604001513088611ba0565b50508080611eaa906125f1565b915050611dc5565b600060208284031215611ec457600080fd5b81356001600160e01b031981168114611edc57600080fd5b9392505050565b60005b83811015611efe578181015183820152602001611ee6565b50506000910152565b6020815260008251806020840152611f26816040850160208701611ee3565b601f01601f19169190910160400192915050565b80356001600160a01b0381168114611f5157600080fd5b919050565b60008083601f840112611f6857600080fd5b5081356001600160401b03811115611f7f57600080fd5b602083019150836020828501011115611f9757600080fd5b9250929050565b600080600080600060808688031215611fb657600080fd5b611fbf86611f3a565b9450611fcd60208701611f3a565b93506040860135925060608601356001600160401b03811115611fef57600080fd5b611ffb88828901611f56565b969995985093965092949392505050565b60008083601f84011261201e57600080fd5b5081356001600160401b0381111561203557600080fd5b6020830191508360208260051b8501011115611f9757600080fd5b6000806000806060858703121561206657600080fd5b61206f85611f3a565b935060208501356001600160401b0381111561208a57600080fd5b6120968782880161200c565b90945092506120a9905060408601611f3a565b905092959194509250565b6000602082840312156120c657600080fd5b5035919050565b80151581146120db57600080fd5b50565b600080600080606085870312156120f457600080fd5b84356120ff816120cd565b9350602085013561210f816120cd565b925060408501356001600160401b0381111561212a57600080fd5b6121368782880161200c565b95989497509550505050565b60006020828403121561215457600080fd5b611edc82611f3a565b6000806040838503121561217057600080fd5b61217983611f3a565b915061218760208401611f3a565b90509250929050565b600061012082840312156121a357600080fd5b50919050565b600080600080606085870312156121bf57600080fd5b84356001600160401b03808211156121d657600080fd5b6121e288838901612190565b955060208701359150808211156121f857600080fd5b506122058782880161200c565b9598909750949560400135949350505050565b600080600080600080600080600060c08a8c03121561223657600080fd5b89356001600160401b038082111561224d57600080fd5b6122598d838e0161200c565b909b50995060208c013591508082111561227257600080fd5b61227e8d838e0161200c565b909950975060408c013591508082111561229757600080fd5b506122a48c828d0161200c565b90965094506122b7905060608b01611f3a565b925060808a0135915060a08a013590509295985092959850929598565b6000806000604084860312156122e957600080fd5b83356001600160401b038082111561230057600080fd5b61230c87838801612190565b9450602086013591508082111561232257600080fd5b5061232f8682870161200c565b9497909650939450505050565b6000806000806000806080878903121561235557600080fd5b61235e87611f3a565b955060208701356001600160401b038082111561237a57600080fd5b6123868a838b0161200c565b9097509550604089013591508082111561239f57600080fd5b506123ac89828a0161200c565b90945092506123bf905060608801611f3a565b90509295509295509295565b60008060008060008060008060a0898b0312156123e757600080fd5b6123f089611f3a565b97506123fe60208a01611f3a565b965060408901356001600160401b038082111561241a57600080fd5b6124268c838d0161200c565b909850965060608b013591508082111561243f57600080fd5b61244b8c838d0161200c565b909650945060808b013591508082111561246457600080fd5b506124718b828c01611f56565b999c989b5096995094979396929594505050565b60008060006040848603121561249a57600080fd5b83356001600160401b038111156124b057600080fd5b6124bc8682870161200c565b90945092505060208401356124d0816120cd565b809150509250925092565b600080600080606085870312156124f157600080fd5b6124fa85611f3a565b93506020850135925060408501356001600160401b0381111561251c57600080fd5b61213687828801611f56565b60008060008060008060a0878903121561254157600080fd5b61254a87611f3a565b955061255860208801611f3a565b9450604087013593506060870135925060808701356001600160401b0381111561258157600080fd5b61258d89828a01611f56565b979a9699509497509295939492505050565b6020808252600c908201526b15539055551213d49256915160a21b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201612603576126036125db565b5060010190565b6000825161261c818460208701611ee3565b9190910192915050565b81810381811115610b5b57610b5b6125db565b80820180821115610b5b57610b5b6125db565b803560078110611f5157600080fd5b60006020828403121561266d57600080fd5b611edc8261264c565b634e487b7160e01b600052602160045260246000fd5b600781106126aa57634e487b7160e01b600052602160045260246000fd5b9052565b6000808335601e198436030181126126c557600080fd5b83016020810192503590506001600160401b038111156126e457600080fd5b803603821315611f9757600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b81835260006020808501808196508560051b81019150846000805b888110156127c7578385038a528235607e19893603018112612757578283fd5b8801608061276d876127688461264c565b61268c565b6001600160a01b03612780838a01611f3a565b168789015260408281013590880152606061279d818401846126ae565b935082828a01526127b1838a0185836126f3565b9d8a019d98505050938701935050600101612737565b509298975050505050505050565b604081526127f6604082016127e986611f3a565b6001600160a01b03169052565b600061280460208601611f3a565b6001600160a01b03811660608401525060408501356080830152606085013560a0830152608085013560c083015261283e60a0860161264c565b61284b60e084018261268c565b5061285960c08601866126ae565b6101206101008181870152612873610160870184866126f3565b935061288160e08a01611f3a565b6001600160a01b0316918601919091528701356101408501525082810360208401526128ae81858761271c565b9695505050505050565b6000602082840312156128ca57600080fd5b5051919050565b6000602082840312156128e357600080fd5b8151611edc816120cd565b6000808335601e1984360301811261290557600080fd5b8301803591506001600160401b0382111561291f57600080fd5b602001915036819003821315611f9757600080fd5b8183823760009101908152919050565b6001600160a01b0394851681529290931660208301526040820152606081019190915260a06080820181905260009082015260c00190565b60008235607e1983360301811261261c57600080fd5b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156129ca576129ca612992565b60405290565b604051601f8201601f191681016001600160401b03811182821017156129f8576129f8612992565b604052919050565b600060808236031215612a1257600080fd5b612a1a6129a8565b612a238361264c565b81526020612a32818501611f3a565b818301526040840135604083015260608401356001600160401b0380821115612a5a57600080fd5b9085019036601f830112612a6d57600080fd5b813581811115612a7f57612a7f612992565b612a91601f8201601f191685016129d0565b91508082523684828501011115612aa757600080fd5b80848401858401376000908201909301929092525060608201529291505056fea264697066735822122016d284d288885193d16164373e24ea34e6c6f64012461e73a700e14d9618f17b64736f6c63430008120033
Deployed Bytecode
0x6080604052600436106101e75760003560e01c80637f685c0411610102578063c9c50e2311610095578063f0b9e5ba11610064578063f0b9e5ba1461068c578063f23a6e61146106b7578063f2fde38b146106e4578063f340fa011461070457600080fd5b8063c9c50e23146105cf578063d0e4886d146105ef578063d2b102d71461061f578063d431cac61461066c57600080fd5b8063adb2234e116100d1578063adb2234e146104e7578063b1f9aa8214610545578063b7ce33a214610580578063bc197c81146105a057600080fd5b80637f685c041461045c5780638da5cb5b1461047c57806397ccb19d146104b4578063a2c5a942146104d457600080fd5b80634732a7dc1161017a5780635d0907fb116101495780635d0907fb146103cc5780635d799f87146103ec5780635f3603381461040c578063730ed97b1461042c57600080fd5b80634732a7dc146103645780634c412aa314610384578063530e5406146103a457806357323648146103c457600080fd5b8063270a6231116101b6578063270a6231146102ee5780632e1a7d4d146103035780633219524e1461032357806335b944bf1461034357600080fd5b806301ffc9a7146101f357806306fdde0314610239578063150b7a021461028757806326e2dca2146102cc57600080fd5b366101ee57005b600080fd5b3480156101ff57600080fd5b5061022461020e366004611eb2565b6001600160e01b0319166301ffc9a760e01b1490565b60405190151581526020015b60405180910390f35b34801561024557600080fd5b5061027a6040518060400160405280601581526020017437a9b734b8329d1020baba37a9b734b832b9102b1960591b81525081565b6040516102309190611f07565b34801561029357600080fd5b506102b36102a2366004611f9e565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610230565b3480156102d857600080fd5b506102ec6102e7366004612050565b610717565b005b3480156102fa57600080fd5b506102ec610801565b34801561030f57600080fd5b506102ec61031e3660046120b4565b6108fd565b34801561032f57600080fd5b506102ec61033e3660046120de565b6109f7565b34801561034f57600080fd5b5060025461022490600160a01b900460ff1681565b34801561037057600080fd5b506102ec61037f366004612142565b610a8e565b34801561039057600080fd5b506102ec61039f366004612142565b610ae1565b3480156103b057600080fd5b506102246103bf36600461215d565b610b2d565b6102ec610b61565b3480156103d857600080fd5b506102ec6103e73660046121a9565b610b6c565b3480156103f857600080fd5b506102ec61040736600461215d565b610e4d565b34801561041857600080fd5b506102ec6104273660046121a9565b610f60565b34801561043857600080fd5b50610224610447366004612142565b60036020526000908152604090205460ff1681565b34801561046857600080fd5b506102ec6104773660046120de565b6112a8565b34801561048857600080fd5b5060005461049c906001600160a01b031681565b6040516001600160a01b039091168152602001610230565b3480156104c057600080fd5b506102ec6104cf366004612218565b61133a565b6102ec6104e23660046122d4565b61162f565b3480156104f357600080fd5b50610528610502366004612142565b6005602052600090815260409020805460039091015460ff808316926101009004169083565b604080519315158452911515602084015290820152606001610230565b34801561055157600080fd5b50610572610560366004612142565b60046020526000908152604090205481565b604051908152602001610230565b34801561058c57600080fd5b506102ec61059b36600461233c565b611708565b3480156105ac57600080fd5b506102b36105bb3660046123cb565b63bc197c8160e01b98975050505050505050565b3480156105db57600080fd5b5060025461049c906001600160a01b031681565b3480156105fb57600080fd5b506102ec61060a3660046120b4565b33600090815260056020526040902060030155565b34801561062b57600080fd5b5061022461063a36600461215d565b6001600160a01b0391821660009081526005602090815260408083209390941682526002909201909152205460ff1690565b34801561067857600080fd5b506102ec610687366004612485565b6117ed565b34801561069857600080fd5b506102b36106a73660046124db565b63785cf2dd60e11b949350505050565b3480156106c357600080fd5b506102b36106d2366004612528565b63f23a6e6160e01b9695505050505050565b3480156106f057600080fd5b506102ec6106ff366004612142565b61187e565b6102ec610712366004612142565b6118f3565b6000546001600160a01b0316331461074a5760405162461bcd60e51b81526004016107419061259f565b60405180910390fd5b60005b828110156107fa57846001600160a01b03166323b872dd3084878786818110610778576107786125c5565b6040516001600160e01b031960e088901b1681526001600160a01b03958616600482015294909316602485015250602090910201356044820152606401600060405180830381600087803b1580156107cf57600080fd5b505af11580156107e3573d6000803e3d6000fd5b5050505080806107f2906125f1565b91505061074d565b5050505050565b600254600160a01b900460ff1661082b5760405163f6017bbd60e01b815260040160405180910390fd5b336000818152600460209081526040808320805490849055600254825160248082019790975283518082039097018752604401835292850180516001600160e01b031663f340fa0160e01b179052905190936001600160a01b03909216918491610895919061260a565b60006040518083038185875af1925050503d80600081146108d2576040519150601f19603f3d011682016040523d82523d6000602084013e6108d7565b606091505b50509050806108f957604051632684a07960e01b815260040160405180910390fd5b5050565b3360009081526004602052604090205481111561092d57604051631e9acf1760e31b815260040160405180910390fd5b336000908152600460205260408120805483929061094c908490612626565b9091555050604051600090339083908381818185875af1925050503d8060008114610993576040519150601f19603f3d011682016040523d82523d6000602084013e610998565b606091505b50509050806109ba57604051632684a07960e01b815260040160405180910390fd5b60408051338152602081018490527f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65910160405180910390a15050565b336000908152600560205260408120805461ff001916610100871515021790555b818110156107fa573360009081526005602052604081208591600290910190858585818110610a4957610a496125c5565b9050602002016020810190610a5e9190612142565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055600101610a18565b6000546001600160a01b03163314610ab85760405162461bcd60e51b81526004016107419061259f565b600280546001600160a01b039092166001600160a81b031990921691909117600160a01b179055565b6000546001600160a01b03163314610b0b5760405162461bcd60e51b81526004016107419061259f565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038083166000908152600560209081526040808320938516835260019093019052205460ff165b92915050565b610b6a336118f3565b565b6001546001600160a01b03163314610b97576040516319caaa0b60e01b815260040160405180910390fd5b610bd2610bab610100860160e08701612142565b610bbb6040870160208801612142565b6060870135610bcd6020890189612142565b611964565b60006080850135610beb60608701356040880135612639565b610bf59190612639565b90508115610c1357610c1382610c0e6020880188612142565b611a7b565b8060046000610c256020890189612142565b6001600160a01b03166001600160a01b03168152602001908152602001600020541015610c6557604051631e9acf1760e31b815260040160405180910390fd5b60015447906000906001600160a01b0316610c88604089013560608a0135612639565b604051600081818185875af1925050503d8060008114610cc4576040519150601f19603f3d011682016040523d82523d6000602084013e610cc9565b606091505b5050905080610ceb576040516305676c7160e41b815260040160405180910390fd5b604051600090419060808a0135908381818185875af1925050503d8060008114610d31576040519150601f19603f3d011682016040523d82523d6000602084013e610d36565b606091505b5050905080610d5857604051632d66518f60e01b815260040160405180910390fd5b476000610d658286612626565b90508060046000610d7960208e018e612142565b6001600160a01b03166001600160a01b031681526020019081526020016000206000828254610da89190612626565b90915550610e069050610dc160c08c0160a08d0161265b565b610dd26101008d0160e08e01612142565b8c6101000135600160009054906101000a90046001600160a01b03168e6000016020810190610e019190612142565b611ba0565b7fdf03fa719a9597aa71cfc8cf37de74ffc35af96dca128759dde37afa90e34a298a8a8a604051610e39939291906127d5565b60405180910390a150505050505050505050565b6000546001600160a01b03163314610e775760405162461bcd60e51b81526004016107419061259f565b6040516370a0823160e01b815230600482015282906001600160a01b0382169063a9059cbb90849083906370a0823190602401602060405180830381865afa158015610ec7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eeb91906128b8565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610f36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5a91906128d1565b50505050565b6001546001600160a01b03163314610f8b576040516319caaa0b60e01b815260040160405180910390fd5b610f9f610bab610100860160e08701612142565b60006080850135610fb860608701356040880135612639565b610fc29190612639565b90508115610fdb57610fdb82610c0e6020880188612142565b8060046000610fed6020890189612142565b6001600160a01b03166001600160a01b0316815260200190815260200160002054101561102d57604051631e9acf1760e31b815260040160405180910390fd5b60015460405147916000916001600160a01b03909116906060890135908381818185875af1925050503d8060008114611082576040519150601f19603f3d011682016040523d82523d6000602084013e611087565b606091505b50509050806110a9576040516305676c7160e41b815260040160405180910390fd5b60006110bb6040890160208a01612142565b6001600160a01b031660408901356110d660c08b018b6128ee565b6040516110e4929190612934565b60006040518083038185875af1925050503d8060008114611121576040519150601f19603f3d011682016040523d82523d6000602084013e611126565b606091505b50509050806111485760405163e8d529f960e01b815260040160405180910390fd5b604051600090419060808b0135908381818185875af1925050503d806000811461118e576040519150601f19603f3d011682016040523d82523d6000602084013e611193565b606091505b50509050806111b557604051632d66518f60e01b815260040160405180910390fd5b4760006111c28287612626565b905080600460006111d660208f018f612142565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008282546112059190612626565b9091555061122290508a8a61121d60208f018f612142565b611dc2565b61126061123560c08d0160a08e0161265b565b6112466101008e0160e08f01612142565b8d6101000135308f6000016020810190610e019190612142565b7fdf03fa719a9597aa71cfc8cf37de74ffc35af96dca128759dde37afa90e34a298b8b8b604051611293939291906127d5565b60405180910390a15050505050505050505050565b336000908152600560205260408120805460ff19168615151790555b818110156107fa5733600090815260056020526040812085916001909101908585858181106112f5576112f56125c5565b905060200201602081019061130a9190612142565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556001016112c4565b6001546001600160a01b03163314611365576040516319caaa0b60e01b815260040160405180910390fd5b8786146113855760405163512509d360e11b815260040160405180910390fd5b8584146113a55760405163512509d360e11b815260040160405180910390fd5b4760005b8981101561149b5760008b8b838181106113c5576113c56125c5565b90506020020160208101906113da9190612142565b6001600160a01b03168888848181106113f5576113f56125c5565b905060200201358b8b8581811061140e5761140e6125c5565b905060200281019061142091906128ee565b60405161142e929190612934565b60006040518083038185875af1925050503d806000811461146b576040519150601f19603f3d011682016040523d82523d6000602084013e611470565b606091505b50509050806114925760405163e8d529f960e01b815260040160405180910390fd5b506001016113a9565b50604051600090419085908381818185875af1925050503d80600081146114de576040519150601f19603f3d011682016040523d82523d6000602084013e6114e3565b606091505b505090508061150557604051632d66518f60e01b815260040160405180910390fd5b6001546040516000916001600160a01b03169085908381818185875af1925050503d8060008114611552576040519150601f19603f3d011682016040523d82523d6000602084013e611557565b606091505b5050905080611579576040516305676c7160e41b815260040160405180910390fd5b4783811161159a5760405163104d28f560e21b815260040160405180910390fd5b6115a48482612626565b6001600160a01b038816600090815260046020526040812080549091906115cc908490612639565b909155507fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9050876115fe8684612626565b604080516001600160a01b03909316835260208301919091520160405180910390a150505050505050505050505050565b6001546001600160a01b0316331461165a576040516319caaa0b60e01b815260040160405180910390fd5b60405160009041906080860135908381818185875af1925050503d80600081146116a0576040519150601f19603f3d011682016040523d82523d6000602084013e6116a5565b606091505b50509050806116c757604051632d66518f60e01b815260040160405180910390fd5b7fdf03fa719a9597aa71cfc8cf37de74ffc35af96dca128759dde37afa90e34a298484846040516116fa939291906127d5565b60405180910390a150505050565b6000546001600160a01b031633146117325760405162461bcd60e51b81526004016107419061259f565b60005b848110156117e457866001600160a01b031663f242432a3084898986818110611760576117606125c5565b90506020020135888887818110611779576117796125c5565b905060200201356040518563ffffffff1660e01b815260040161179f9493929190612944565b600060405180830381600087803b1580156117b957600080fd5b505af11580156117cd573d6000803e3d6000fd5b5050505080806117dc906125f1565b915050611735565b50505050505050565b6000546001600160a01b031633146118175760405162461bcd60e51b81526004016107419061259f565b60005b82811015610f5a578160036000868685818110611839576118396125c5565b905060200201602081019061184e9190612142565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905560010161181a565b6000546001600160a01b031633146118a85760405162461bcd60e51b81526004016107419061259f565b600080546001600160a01b0319166001600160a01b0383169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6001600160a01b0381166000908152600460205260408120805434929061191b908490612639565b9091555050604080516001600160a01b03831681523460208201527fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c910160405180910390a150565b6001600160a01b0380821660009081526005602090815260408083209387168352600390915290205460ff166119ad576040516311de472b60e11b815260040160405180910390fd5b600081600301541180156119c45750806003015483115b156119e25760405163c185173d60e01b815260040160405180910390fd5b805460ff168015611a0e57506001600160a01b038416600090815260018201602052604090205460ff16155b15611a2c576040516311de472b60e11b815260040160405180910390fd5b8054610100900460ff168015611a5d57506001600160a01b038516600090815260028201602052604090205460ff16155b156107fa57604051631a70568560e21b815260040160405180910390fd5b6001546001600160a01b03163314611aa6576040516319caaa0b60e01b815260040160405180910390fd5b6040516323b872dd60e01b81526001600160a01b03821660048201523060248201526044810183905273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc29081906323b872dd90606401600060405180830381600087803b158015611b0a57600080fd5b505af1158015611b1e573d6000803e3d6000fd5b5050604051632e1a7d4d60e01b8152600481018690526001600160a01b0384169250632e1a7d4d9150602401600060405180830381600087803b158015611b6457600080fd5b505af1158015611b78573d6000803e3d6000fd5b5050506001600160a01b03909216600090815260046020526040902080549093019092555050565b6002856006811115611bb457611bb4612676565b03611c29576040516323b872dd60e01b81526001600160a01b0383811660048301528281166024830152604482018590528516906323b872dd906064015b600060405180830381600087803b158015611c0c57600080fd5b505af1158015611c20573d6000803e3d6000fd5b505050506107fa565b6003856006811115611c3d57611c3d612676565b03611c7557604051637921219560e11b81526001600160a01b0385169063f242432a90611bf290859085908890600190600401612944565b6006856006811115611c8957611c89612676565b03611cc3576040516322dca8bb60e21b81526001600160a01b03828116600483015260248201859052851690638b72a2ec90604401611bf2565b6001856006811115611cd757611cd7612676565b036107fa576040516370a0823160e01b81526001600160a01b03838116600483015285919082169063a9059cbb90849083906370a0823190602401602060405180830381865afa158015611d2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d5391906128b8565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015611d9e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e491906128d1565b60005b82811015610f5a576000848483818110611de157611de16125c5565b9050602002810190611df3919061297c565b611dfc90612a00565b9050600081602001516001600160a01b03168260600151604051611e20919061260a565b6000604051808303816000865af19150503d8060008114611e5d576040519150601f19603f3d011682016040523d82523d6000602084013e611e62565b606091505b5050905080611e845760405163360e42e160e01b815260040160405180910390fd5b611e9d8260000151836020015184604001513088611ba0565b50508080611eaa906125f1565b915050611dc5565b600060208284031215611ec457600080fd5b81356001600160e01b031981168114611edc57600080fd5b9392505050565b60005b83811015611efe578181015183820152602001611ee6565b50506000910152565b6020815260008251806020840152611f26816040850160208701611ee3565b601f01601f19169190910160400192915050565b80356001600160a01b0381168114611f5157600080fd5b919050565b60008083601f840112611f6857600080fd5b5081356001600160401b03811115611f7f57600080fd5b602083019150836020828501011115611f9757600080fd5b9250929050565b600080600080600060808688031215611fb657600080fd5b611fbf86611f3a565b9450611fcd60208701611f3a565b93506040860135925060608601356001600160401b03811115611fef57600080fd5b611ffb88828901611f56565b969995985093965092949392505050565b60008083601f84011261201e57600080fd5b5081356001600160401b0381111561203557600080fd5b6020830191508360208260051b8501011115611f9757600080fd5b6000806000806060858703121561206657600080fd5b61206f85611f3a565b935060208501356001600160401b0381111561208a57600080fd5b6120968782880161200c565b90945092506120a9905060408601611f3a565b905092959194509250565b6000602082840312156120c657600080fd5b5035919050565b80151581146120db57600080fd5b50565b600080600080606085870312156120f457600080fd5b84356120ff816120cd565b9350602085013561210f816120cd565b925060408501356001600160401b0381111561212a57600080fd5b6121368782880161200c565b95989497509550505050565b60006020828403121561215457600080fd5b611edc82611f3a565b6000806040838503121561217057600080fd5b61217983611f3a565b915061218760208401611f3a565b90509250929050565b600061012082840312156121a357600080fd5b50919050565b600080600080606085870312156121bf57600080fd5b84356001600160401b03808211156121d657600080fd5b6121e288838901612190565b955060208701359150808211156121f857600080fd5b506122058782880161200c565b9598909750949560400135949350505050565b600080600080600080600080600060c08a8c03121561223657600080fd5b89356001600160401b038082111561224d57600080fd5b6122598d838e0161200c565b909b50995060208c013591508082111561227257600080fd5b61227e8d838e0161200c565b909950975060408c013591508082111561229757600080fd5b506122a48c828d0161200c565b90965094506122b7905060608b01611f3a565b925060808a0135915060a08a013590509295985092959850929598565b6000806000604084860312156122e957600080fd5b83356001600160401b038082111561230057600080fd5b61230c87838801612190565b9450602086013591508082111561232257600080fd5b5061232f8682870161200c565b9497909650939450505050565b6000806000806000806080878903121561235557600080fd5b61235e87611f3a565b955060208701356001600160401b038082111561237a57600080fd5b6123868a838b0161200c565b9097509550604089013591508082111561239f57600080fd5b506123ac89828a0161200c565b90945092506123bf905060608801611f3a565b90509295509295509295565b60008060008060008060008060a0898b0312156123e757600080fd5b6123f089611f3a565b97506123fe60208a01611f3a565b965060408901356001600160401b038082111561241a57600080fd5b6124268c838d0161200c565b909850965060608b013591508082111561243f57600080fd5b61244b8c838d0161200c565b909650945060808b013591508082111561246457600080fd5b506124718b828c01611f56565b999c989b5096995094979396929594505050565b60008060006040848603121561249a57600080fd5b83356001600160401b038111156124b057600080fd5b6124bc8682870161200c565b90945092505060208401356124d0816120cd565b809150509250925092565b600080600080606085870312156124f157600080fd5b6124fa85611f3a565b93506020850135925060408501356001600160401b0381111561251c57600080fd5b61213687828801611f56565b60008060008060008060a0878903121561254157600080fd5b61254a87611f3a565b955061255860208801611f3a565b9450604087013593506060870135925060808701356001600160401b0381111561258157600080fd5b61258d89828a01611f56565b979a9699509497509295939492505050565b6020808252600c908201526b15539055551213d49256915160a21b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201612603576126036125db565b5060010190565b6000825161261c818460208701611ee3565b9190910192915050565b81810381811115610b5b57610b5b6125db565b80820180821115610b5b57610b5b6125db565b803560078110611f5157600080fd5b60006020828403121561266d57600080fd5b611edc8261264c565b634e487b7160e01b600052602160045260246000fd5b600781106126aa57634e487b7160e01b600052602160045260246000fd5b9052565b6000808335601e198436030181126126c557600080fd5b83016020810192503590506001600160401b038111156126e457600080fd5b803603821315611f9757600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b81835260006020808501808196508560051b81019150846000805b888110156127c7578385038a528235607e19893603018112612757578283fd5b8801608061276d876127688461264c565b61268c565b6001600160a01b03612780838a01611f3a565b168789015260408281013590880152606061279d818401846126ae565b935082828a01526127b1838a0185836126f3565b9d8a019d98505050938701935050600101612737565b509298975050505050505050565b604081526127f6604082016127e986611f3a565b6001600160a01b03169052565b600061280460208601611f3a565b6001600160a01b03811660608401525060408501356080830152606085013560a0830152608085013560c083015261283e60a0860161264c565b61284b60e084018261268c565b5061285960c08601866126ae565b6101206101008181870152612873610160870184866126f3565b935061288160e08a01611f3a565b6001600160a01b0316918601919091528701356101408501525082810360208401526128ae81858761271c565b9695505050505050565b6000602082840312156128ca57600080fd5b5051919050565b6000602082840312156128e357600080fd5b8151611edc816120cd565b6000808335601e1984360301811261290557600080fd5b8301803591506001600160401b0382111561291f57600080fd5b602001915036819003821315611f9757600080fd5b8183823760009101908152919050565b6001600160a01b0394851681529290931660208301526040820152606081019190915260a06080820181905260009082015260c00190565b60008235607e1983360301811261261c57600080fd5b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156129ca576129ca612992565b60405290565b604051601f8201601f191681016001600160401b03811182821017156129f8576129f8612992565b604052919050565b600060808236031215612a1257600080fd5b612a1a6129a8565b612a238361264c565b81526020612a32818501611f3a565b818301526040840135604083015260608401356001600160401b0380821115612a5a57600080fd5b9085019036601f830112612a6d57600080fd5b813581811115612a7f57612a7f612992565b612a91601f8201601f191685016129d0565b91508082523684828501011115612aa757600080fd5b80848401858401376000908201909301929092525060608201529291505056fea264697066735822122016d284d288885193d16164373e24ea34e6c6f64012461e73a700e14d9618f17b64736f6c63430008120033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $3,067.06 | 0.258 | $791.33 |
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.