Overview
APE Balance
APE Value
$0.00More Info
Private Name Tags
ContractCreator
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
ApeBombNftWinnerClaim
Compiler Version
v0.8.28+commit.7893614a
Optimization Enabled:
Yes with 200 runs
Other Settings:
cancun EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity 0.8.28; interface INFTShadow { function locked(uint256 tokenId) external view returns (bool); function ownerOf(uint256 tokenId) external view returns (address); } interface IApeBomb { function owner() external view returns (address); } struct Winner { address contractAddress; uint96 amount; uint64 tokenId; uint40 timestamp; bool claimed; bool reclaimed; } contract ApeBombNftWinnerClaim { error NoWinner(); error NotExpired(); error NotApeBombContract(); error InvalidCaller(); error AlreadyClaimed(); error TransferFailed(); error TokenIsLocked(); error NotOwner(); event WinnerSet(uint256 tournamentId, Winner winner); event Claimed(uint256 tournamentId, address winner, uint256 amount); event Reclaimed(uint256 tournamentId, address winner, uint256 amount); mapping(uint256 tournamentId => Winner) public winners; address public immutable APE_BOMB_CONTRACT_ADDRESS; uint256 public constant EXPIRATION = 30 days; constructor(address _apeBombContract) { APE_BOMB_CONTRACT_ADDRESS = _apeBombContract; } /** * @dev Set the winner of the tournament. * @param tournamentId The ID of the tournament. * @param contractAddress The address of the NFT contract. * @param tokenId The ID of the NFT. */ function setWinner(uint256 tournamentId, address contractAddress, uint256 tokenId) external payable { if (msg.sender != APE_BOMB_CONTRACT_ADDRESS) revert NotApeBombContract(); winners[tournamentId] = Winner({ contractAddress: contractAddress, amount: uint96(msg.value), tokenId: uint64(tokenId), timestamp: uint40(block.timestamp), claimed: false, reclaimed: false }); emit WinnerSet(tournamentId, winners[tournamentId]); } /** * @dev Claim the winner's NFT. * @param tournamentId The ID of the tournament. */ function claim(uint256 tournamentId) external { if (winners[tournamentId].amount == 0) revert NoWinner(); INFTShadow nftShadow = INFTShadow(winners[tournamentId].contractAddress); if (winners[tournamentId].claimed || winners[tournamentId].reclaimed) revert AlreadyClaimed(); winners[tournamentId].claimed = true; uint256 tokenId = winners[tournamentId].tokenId; if (nftShadow.locked(tokenId)) revert TokenIsLocked(); if (nftShadow.ownerOf(tokenId) != msg.sender) revert NotOwner(); (bool success,) = payable(msg.sender).call{value: winners[tournamentId].amount}(""); if (!success) revert TransferFailed(); emit Claimed(tournamentId, msg.sender, winners[tournamentId].amount); } /** * @dev If the winner does not claim within 30 days, 90% of the funds will be added to the current ApeBomb tournament * and the remaining 10% will be sent to the ApeBomb owner. * @param tournamentId The ID of the tournament. */ function reclaim(uint256 tournamentId) external { if (winners[tournamentId].amount == 0) revert NoWinner(); if (winners[tournamentId].claimed || winners[tournamentId].reclaimed) revert AlreadyClaimed(); if (block.timestamp < winners[tournamentId].timestamp + EXPIRATION) revert NotExpired(); winners[tournamentId].reclaimed = true; uint256 totalAmount = winners[tournamentId].amount; uint256 amountToTournament = totalAmount * 90 / 100; uint256 amountToOwner = totalAmount - amountToTournament; (bool success,) = payable(APE_BOMB_CONTRACT_ADDRESS).call{value: amountToTournament}(""); if (!success) revert TransferFailed(); (success,) = payable(IApeBomb(APE_BOMB_CONTRACT_ADDRESS).owner()).call{value: amountToOwner}(""); if (!success) revert TransferFailed(); emit Reclaimed(tournamentId, APE_BOMB_CONTRACT_ADDRESS, winners[tournamentId].amount); } }
{ "remappings": [ "@pythnetwork/entropy-sdk-solidity/=node_modules/@pythnetwork/entropy-sdk-solidity/", "solady/=lib/solady/src/", "forge-std/=lib/forge-std/src/" ], "optimizer": { "enabled": true, "runs": 200 }, "metadata": { "useLiteralContent": false, "bytecodeHash": "ipfs", "appendCBOR": true }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "evmVersion": "cancun", "viaIR": false, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_apeBombContract","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyClaimed","type":"error"},{"inputs":[],"name":"InvalidCaller","type":"error"},{"inputs":[],"name":"NoWinner","type":"error"},{"inputs":[],"name":"NotApeBombContract","type":"error"},{"inputs":[],"name":"NotExpired","type":"error"},{"inputs":[],"name":"NotOwner","type":"error"},{"inputs":[],"name":"TokenIsLocked","type":"error"},{"inputs":[],"name":"TransferFailed","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tournamentId","type":"uint256"},{"indexed":false,"internalType":"address","name":"winner","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Claimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tournamentId","type":"uint256"},{"indexed":false,"internalType":"address","name":"winner","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Reclaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tournamentId","type":"uint256"},{"components":[{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"uint96","name":"amount","type":"uint96"},{"internalType":"uint64","name":"tokenId","type":"uint64"},{"internalType":"uint40","name":"timestamp","type":"uint40"},{"internalType":"bool","name":"claimed","type":"bool"},{"internalType":"bool","name":"reclaimed","type":"bool"}],"indexed":false,"internalType":"struct Winner","name":"winner","type":"tuple"}],"name":"WinnerSet","type":"event"},{"inputs":[],"name":"APE_BOMB_CONTRACT_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EXPIRATION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tournamentId","type":"uint256"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tournamentId","type":"uint256"}],"name":"reclaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tournamentId","type":"uint256"},{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"setWinner","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tournamentId","type":"uint256"}],"name":"winners","outputs":[{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"uint96","name":"amount","type":"uint96"},{"internalType":"uint64","name":"tokenId","type":"uint64"},{"internalType":"uint40","name":"timestamp","type":"uint40"},{"internalType":"bool","name":"claimed","type":"bool"},{"internalType":"bool","name":"reclaimed","type":"bool"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60a060405234801561000f575f5ffd5b50604051610bdf380380610bdf83398101604081905261002e9161003f565b6001600160a01b031660805261006c565b5f6020828403121561004f575f5ffd5b81516001600160a01b0381168114610065575f5ffd5b9392505050565b608051610b4061009f5f395f8181606901528181610337015281816103c6015281816104cb01526108200152610b405ff3fe608060405260043610610054575f3560e01c80631f886e6b146100585780632dabbeed146100a8578063379607f5146100c957806351b42283146100e8578063a2fb1175146100fb578063bb4b5734146101d0575b5f5ffd5b348015610063575f5ffd5b5061008b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100b3575f5ffd5b506100c76100c2366004610974565b6101f4565b005b3480156100d4575f5ffd5b506100c76100e3366004610974565b610542565b6100c76100f63660046109a2565b610815565b348015610106575f5ffd5b50610179610115366004610974565b5f60208190529081526040902080546001909101546001600160a01b038216916001600160601b03600160a01b909104169067ffffffffffffffff81169064ffffffffff600160401b8204169060ff600160681b8204811691600160701b90041686565b604080516001600160a01b0390971687526001600160601b03909516602087015267ffffffffffffffff9093169385019390935264ffffffffff1660608401529015156080830152151560a082015260c00161009f565b3480156101db575f5ffd5b506101e662278d0081565b60405190815260200161009f565b5f81815260208190526040812054600160a01b90046001600160601b0316900361023157604051638b9ae95f60e01b815260040160405180910390fd5b5f81815260208190526040902060010154600160681b900460ff168061026e57505f81815260208190526040902060010154600160701b900460ff165b1561028c57604051630c8d9eab60e31b815260040160405180910390fd5b5f818152602081905260409020600101546102b99062278d0090600160401b900464ffffffffff166109eb565b4210156102d95760405163d0404f8560e01b815260040160405180910390fd5b5f81815260208190526040812060018101805460ff60701b1916600160701b179055546001600160601b03600160a01b9091041690606461031b83605a610a04565b6103259190610a1b565b90505f6103328284610a3a565b90505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836040515f6040518083038185875af1925050503d805f811461039d576040519150601f19603f3d011682016040523d82523d5f602084013e6103a2565b606091505b50509050806103c4576040516312171d8360e31b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610420573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104449190610a4d565b6001600160a01b0316826040515f6040518083038185875af1925050503d805f811461048b576040519150601f19603f3d011682016040523d82523d5f602084013e610490565b606091505b505080915050806104b4576040516312171d8360e31b815260040160405180910390fd5b5f85815260208181526040918290205482518881527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316928101929092526001600160601b03600160a01b909104168183015290517fe79f76d3ef42e7845b4f718917861642d857a02a4e690c28e79e5af7f5f8f2d39181900360600190a15050505050565b5f81815260208190526040812054600160a01b90046001600160601b0316900361057f57604051638b9ae95f60e01b815260040160405180910390fd5b5f81815260208190526040902080546001909101546001600160a01b0390911690600160681b900460ff16806105cc57505f82815260208190526040902060010154600160701b900460ff165b156105ea57604051630c8d9eab60e31b815260040160405180910390fd5b5f82815260208190526040908190206001018054600160681b60ff60681b198216179091559051635a2d1e0760e11b815267ffffffffffffffff90911660048201819052906001600160a01b0383169063b45a3c0e90602401602060405180830381865afa15801561065e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106829190610a6f565b156106a05760405163c066bae760e01b815260040160405180910390fd5b6040516331a9108f60e11b81526004810182905233906001600160a01b03841690636352211e90602401602060405180830381865afa1580156106e5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107099190610a4d565b6001600160a01b031614610730576040516330cd747160e01b815260040160405180910390fd5b5f838152602081905260408082205490513391600160a01b90046001600160601b0316908381818185875af1925050503d805f811461078a576040519150601f19603f3d011682016040523d82523d5f602084013e61078f565b606091505b50509050806107b1576040516312171d8360e31b815260040160405180910390fd5b5f848152602081815260409182902054825187815233928101929092526001600160601b03600160a01b909104168183015290517f4ec90e965519d92681267467f775ada5bd214aa92c0dc93d90a5e880ce9ed0269181900360600190a150505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461085e576040516339a78b7d60e11b815260040160405180910390fd5b6040805160c0810182526001600160a01b0380851682526001600160601b03348116602080850191825267ffffffffffffffff80881686880190815264ffffffffff428116606089019081525f60808a0181815260a08b018281528f835296829052908b902099519651909716600160a01b0295909716949094178755516001870180549651955193511515600160701b0260ff60701b19941515600160681b029490941661ffff60681b1996909516600160401b026cffffffffffffffffffffffffff19909716919092161794909417929092161717905590517f398209caf1bcaecd286ab47767a44aa435a3ded2db7ae6de4baf4bc4f5f6ebf39161096791869190610a8e565b60405180910390a1505050565b5f60208284031215610984575f5ffd5b5035919050565b6001600160a01b038116811461099f575f5ffd5b50565b5f5f5f606084860312156109b4575f5ffd5b8335925060208401356109c68161098b565b929592945050506040919091013590565b634e487b7160e01b5f52601160045260245ffd5b808201808211156109fe576109fe6109d7565b92915050565b80820281158282048414176109fe576109fe6109d7565b5f82610a3557634e487b7160e01b5f52601260045260245ffd5b500490565b818103818111156109fe576109fe6109d7565b5f60208284031215610a5d575f5ffd5b8151610a688161098b565b9392505050565b5f60208284031215610a7f575f5ffd5b81518015158114610a68575f5ffd5b82815281546001600160a01b038116602083015260a090811c604080840191909152600184015467ffffffffffffffff811660608501529081901c64ffffffffff16608084015260e0830191610aee908401606883901c60ff1615159052565b610b0260c0840160ff8360701c1615159052565b50939250505056fea26469706673582212201c07fe6beb3700d2fb98ed334e7f58fab5a6aaaf8bf72bc06233b9eecb94bb6c64736f6c634300081c0033000000000000000000000000c1932844edcc3193ae2622089c4b57ae5f023d7f
Deployed Bytecode
0x608060405260043610610054575f3560e01c80631f886e6b146100585780632dabbeed146100a8578063379607f5146100c957806351b42283146100e8578063a2fb1175146100fb578063bb4b5734146101d0575b5f5ffd5b348015610063575f5ffd5b5061008b7f000000000000000000000000c1932844edcc3193ae2622089c4b57ae5f023d7f81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100b3575f5ffd5b506100c76100c2366004610974565b6101f4565b005b3480156100d4575f5ffd5b506100c76100e3366004610974565b610542565b6100c76100f63660046109a2565b610815565b348015610106575f5ffd5b50610179610115366004610974565b5f60208190529081526040902080546001909101546001600160a01b038216916001600160601b03600160a01b909104169067ffffffffffffffff81169064ffffffffff600160401b8204169060ff600160681b8204811691600160701b90041686565b604080516001600160a01b0390971687526001600160601b03909516602087015267ffffffffffffffff9093169385019390935264ffffffffff1660608401529015156080830152151560a082015260c00161009f565b3480156101db575f5ffd5b506101e662278d0081565b60405190815260200161009f565b5f81815260208190526040812054600160a01b90046001600160601b0316900361023157604051638b9ae95f60e01b815260040160405180910390fd5b5f81815260208190526040902060010154600160681b900460ff168061026e57505f81815260208190526040902060010154600160701b900460ff165b1561028c57604051630c8d9eab60e31b815260040160405180910390fd5b5f818152602081905260409020600101546102b99062278d0090600160401b900464ffffffffff166109eb565b4210156102d95760405163d0404f8560e01b815260040160405180910390fd5b5f81815260208190526040812060018101805460ff60701b1916600160701b179055546001600160601b03600160a01b9091041690606461031b83605a610a04565b6103259190610a1b565b90505f6103328284610a3a565b90505f7f000000000000000000000000c1932844edcc3193ae2622089c4b57ae5f023d7f6001600160a01b0316836040515f6040518083038185875af1925050503d805f811461039d576040519150601f19603f3d011682016040523d82523d5f602084013e6103a2565b606091505b50509050806103c4576040516312171d8360e31b815260040160405180910390fd5b7f000000000000000000000000c1932844edcc3193ae2622089c4b57ae5f023d7f6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610420573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104449190610a4d565b6001600160a01b0316826040515f6040518083038185875af1925050503d805f811461048b576040519150601f19603f3d011682016040523d82523d5f602084013e610490565b606091505b505080915050806104b4576040516312171d8360e31b815260040160405180910390fd5b5f85815260208181526040918290205482518881527f000000000000000000000000c1932844edcc3193ae2622089c4b57ae5f023d7f6001600160a01b0316928101929092526001600160601b03600160a01b909104168183015290517fe79f76d3ef42e7845b4f718917861642d857a02a4e690c28e79e5af7f5f8f2d39181900360600190a15050505050565b5f81815260208190526040812054600160a01b90046001600160601b0316900361057f57604051638b9ae95f60e01b815260040160405180910390fd5b5f81815260208190526040902080546001909101546001600160a01b0390911690600160681b900460ff16806105cc57505f82815260208190526040902060010154600160701b900460ff165b156105ea57604051630c8d9eab60e31b815260040160405180910390fd5b5f82815260208190526040908190206001018054600160681b60ff60681b198216179091559051635a2d1e0760e11b815267ffffffffffffffff90911660048201819052906001600160a01b0383169063b45a3c0e90602401602060405180830381865afa15801561065e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106829190610a6f565b156106a05760405163c066bae760e01b815260040160405180910390fd5b6040516331a9108f60e11b81526004810182905233906001600160a01b03841690636352211e90602401602060405180830381865afa1580156106e5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107099190610a4d565b6001600160a01b031614610730576040516330cd747160e01b815260040160405180910390fd5b5f838152602081905260408082205490513391600160a01b90046001600160601b0316908381818185875af1925050503d805f811461078a576040519150601f19603f3d011682016040523d82523d5f602084013e61078f565b606091505b50509050806107b1576040516312171d8360e31b815260040160405180910390fd5b5f848152602081815260409182902054825187815233928101929092526001600160601b03600160a01b909104168183015290517f4ec90e965519d92681267467f775ada5bd214aa92c0dc93d90a5e880ce9ed0269181900360600190a150505050565b336001600160a01b037f000000000000000000000000c1932844edcc3193ae2622089c4b57ae5f023d7f161461085e576040516339a78b7d60e11b815260040160405180910390fd5b6040805160c0810182526001600160a01b0380851682526001600160601b03348116602080850191825267ffffffffffffffff80881686880190815264ffffffffff428116606089019081525f60808a0181815260a08b018281528f835296829052908b902099519651909716600160a01b0295909716949094178755516001870180549651955193511515600160701b0260ff60701b19941515600160681b029490941661ffff60681b1996909516600160401b026cffffffffffffffffffffffffff19909716919092161794909417929092161717905590517f398209caf1bcaecd286ab47767a44aa435a3ded2db7ae6de4baf4bc4f5f6ebf39161096791869190610a8e565b60405180910390a1505050565b5f60208284031215610984575f5ffd5b5035919050565b6001600160a01b038116811461099f575f5ffd5b50565b5f5f5f606084860312156109b4575f5ffd5b8335925060208401356109c68161098b565b929592945050506040919091013590565b634e487b7160e01b5f52601160045260245ffd5b808201808211156109fe576109fe6109d7565b92915050565b80820281158282048414176109fe576109fe6109d7565b5f82610a3557634e487b7160e01b5f52601260045260245ffd5b500490565b818103818111156109fe576109fe6109d7565b5f60208284031215610a5d575f5ffd5b8151610a688161098b565b9392505050565b5f60208284031215610a7f575f5ffd5b81518015158114610a68575f5ffd5b82815281546001600160a01b038116602083015260a090811c604080840191909152600184015467ffffffffffffffff811660608501529081901c64ffffffffff16608084015260e0830191610aee908401606883901c60ff1615159052565b610b0260c0840160ff8360701c1615159052565b50939250505056fea26469706673582212201c07fe6beb3700d2fb98ed334e7f58fab5a6aaaf8bf72bc06233b9eecb94bb6c64736f6c634300081c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000c1932844edcc3193ae2622089c4b57ae5f023d7f
-----Decoded View---------------
Arg [0] : _apeBombContract (address): 0xC1932844eDcc3193ae2622089c4B57ae5F023D7f
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000c1932844edcc3193ae2622089c4b57ae5f023d7f
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.