Source Code
Latest 25 from a total of 769 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Claim Batch | 24602125 | 1 hr ago | IN | 0 ETH | 0.00000391 | ||||
| Claim Batch | 24599431 | 10 hrs ago | IN | 0 ETH | 0.00039856 | ||||
| Claim Batch | 24599331 | 11 hrs ago | IN | 0 ETH | 0.0003933 | ||||
| Claim Batch | 24598791 | 13 hrs ago | IN | 0 ETH | 0.00035787 | ||||
| Claim Batch | 24598196 | 15 hrs ago | IN | 0 ETH | 0.00022999 | ||||
| Claim Batch | 24597463 | 17 hrs ago | IN | 0 ETH | 0.00023552 | ||||
| Claim Batch | 24596337 | 21 hrs ago | IN | 0 ETH | 0.000341 | ||||
| Claim Batch | 24596237 | 21 hrs ago | IN | 0 ETH | 0.00034077 | ||||
| Claim Batch | 24594658 | 26 hrs ago | IN | 0 ETH | 0.00013967 | ||||
| Claim Batch | 24593381 | 31 hrs ago | IN | 0 ETH | 0.00032098 | ||||
| Claim Batch | 24587887 | 2 days ago | IN | 0 ETH | 0.00031532 | ||||
| Claim Batch | 24585162 | 2 days ago | IN | 0 ETH | 0.00084438 | ||||
| Claim Batch | 24579582 | 3 days ago | IN | 0 ETH | 0.00026107 | ||||
| Claim Batch | 24578311 | 3 days ago | IN | 0 ETH | 0.00026306 | ||||
| Claim Batch | 24577682 | 3 days ago | IN | 0 ETH | 0.00015907 | ||||
| Claim Batch | 24563541 | 5 days ago | IN | 0 ETH | 0.00022979 | ||||
| Claim Batch | 24554966 | 6 days ago | IN | 0 ETH | 0.00022977 | ||||
| Claim Batch | 24551431 | 7 days ago | IN | 0 ETH | 0.00031836 | ||||
| Claim Batch | 24550845 | 7 days ago | IN | 0 ETH | 0.00023043 | ||||
| Claim Batch | 24549232 | 7 days ago | IN | 0 ETH | 0.00004485 | ||||
| Claim Batch | 24546904 | 7 days ago | IN | 0 ETH | 0.00022912 | ||||
| Claim Batch | 24546459 | 7 days ago | IN | 0 ETH | 0.00022911 | ||||
| Claim Batch | 24536803 | 9 days ago | IN | 0 ETH | 0.00025116 | ||||
| Claim Batch | 24536605 | 9 days ago | IN | 0 ETH | 0.00023511 | ||||
| Claim Batch | 24536137 | 9 days ago | IN | 0 ETH | 0.00001249 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
ChimpersMigration
Compiler Version
v0.8.28+commit.7893614a
Optimization Enabled:
Yes with 200 runs
Other Settings:
prague EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity 0.8.28;
import {Ownable} from "solady/auth/Ownable.sol";
import {IERC721} from "openzeppelin-contracts/contracts/token/ERC721/IERC721.sol";
interface IChimpers {
function mint(address to, uint256 tokenId) external;
}
/// @title ChimpersMigration
/// @notice Migration contract for moving Chimpers from old to new collection
contract ChimpersMigration is Ownable {
/// @notice Error when claims are closed
error ClaimsClosed();
/// @notice Error when batch size exceeds maximum
error BatchTooLarge();
/// @notice Error when claims are still open
error ClaimsNotClosed();
/// @notice The old Chimpers contract
IERC721 public immutable oldChimpers;
/// @notice The new Chimpers contract
IChimpers public immutable newChimpers;
/// @notice Whether claims are closed
bool public claimsClosed;
/// @param oldChimpers_ The old Chimpers contract address
/// @param newChimpers_ The new Chimpers contract address
constructor(address oldChimpers_, address newChimpers_) {
oldChimpers = IERC721(oldChimpers_);
newChimpers = IChimpers(newChimpers_);
_initializeOwner(msg.sender);
}
/// @notice Claims a single token, transferring old and minting new
/// @param tokenId The token ID to claim
function claim(uint256 tokenId) external {
if (claimsClosed) revert ClaimsClosed();
oldChimpers.transferFrom(msg.sender, address(this), tokenId);
newChimpers.mint(msg.sender, tokenId);
}
/// @notice Claims multiple tokens in a batch
/// @param tokenIds The token IDs to claim
function claimBatch(uint256[] calldata tokenIds) external {
if (claimsClosed) revert ClaimsClosed();
if (tokenIds.length > 100) revert BatchTooLarge();
for (uint256 i; i < tokenIds.length; ++i) {
oldChimpers.transferFrom(msg.sender, address(this), tokenIds[i]);
newChimpers.mint(msg.sender, tokenIds[i]);
}
}
/// @notice Closes claims permanently
function closeClaims() external onlyOwner {
claimsClosed = true;
}
/// @notice Mints unclaimed tokens to treasury after claims are closed
/// @param tokenIds The token IDs to mint
/// @param treasury The address to receive the tokens
function claimUnclaimed(uint256[] calldata tokenIds, address treasury) external onlyOwner {
if (!claimsClosed) revert ClaimsNotClosed();
for (uint256 i; i < tokenIds.length; ++i) {
newChimpers.mint(treasury, tokenIds[i]);
}
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
/// @notice Simple single owner authorization mixin.
/// @author Solady (https://github.com/vectorized/solady/blob/main/src/auth/Ownable.sol)
///
/// @dev Note:
/// This implementation does NOT auto-initialize the owner to `msg.sender`.
/// You MUST call the `_initializeOwner` in the constructor / initializer.
///
/// While the ownable portion follows
/// [EIP-173](https://eips.ethereum.org/EIPS/eip-173) for compatibility,
/// the nomenclature for the 2-step ownership handover may be unique to this codebase.
abstract contract Ownable {
/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
/* CUSTOM ERRORS */
/*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
/// @dev The caller is not authorized to call the function.
error Unauthorized();
/// @dev The `newOwner` cannot be the zero address.
error NewOwnerIsZeroAddress();
/// @dev The `pendingOwner` does not have a valid handover request.
error NoHandoverRequest();
/// @dev Cannot double-initialize.
error AlreadyInitialized();
/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
/* EVENTS */
/*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
/// @dev The ownership is transferred from `oldOwner` to `newOwner`.
/// This event is intentionally kept the same as OpenZeppelin's Ownable to be
/// compatible with indexers and [EIP-173](https://eips.ethereum.org/EIPS/eip-173),
/// despite it not being as lightweight as a single argument event.
event OwnershipTransferred(address indexed oldOwner, address indexed newOwner);
/// @dev An ownership handover to `pendingOwner` has been requested.
event OwnershipHandoverRequested(address indexed pendingOwner);
/// @dev The ownership handover to `pendingOwner` has been canceled.
event OwnershipHandoverCanceled(address indexed pendingOwner);
/// @dev `keccak256(bytes("OwnershipTransferred(address,address)"))`.
uint256 private constant _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE =
0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0;
/// @dev `keccak256(bytes("OwnershipHandoverRequested(address)"))`.
uint256 private constant _OWNERSHIP_HANDOVER_REQUESTED_EVENT_SIGNATURE =
0xdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d;
/// @dev `keccak256(bytes("OwnershipHandoverCanceled(address)"))`.
uint256 private constant _OWNERSHIP_HANDOVER_CANCELED_EVENT_SIGNATURE =
0xfa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92;
/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
/* STORAGE */
/*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
/// @dev The owner slot is given by:
/// `bytes32(~uint256(uint32(bytes4(keccak256("_OWNER_SLOT_NOT")))))`.
/// It is intentionally chosen to be a high value
/// to avoid collision with lower slots.
/// The choice of manual storage layout is to enable compatibility
/// with both regular and upgradeable contracts.
bytes32 internal constant _OWNER_SLOT =
0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927;
/// The ownership handover slot of `newOwner` is given by:
/// ```
/// mstore(0x00, or(shl(96, user), _HANDOVER_SLOT_SEED))
/// let handoverSlot := keccak256(0x00, 0x20)
/// ```
/// It stores the expiry timestamp of the two-step ownership handover.
uint256 private constant _HANDOVER_SLOT_SEED = 0x389a75e1;
/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
/* INTERNAL FUNCTIONS */
/*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
/// @dev Override to return true to make `_initializeOwner` prevent double-initialization.
function _guardInitializeOwner() internal pure virtual returns (bool guard) {}
/// @dev Initializes the owner directly without authorization guard.
/// This function must be called upon initialization,
/// regardless of whether the contract is upgradeable or not.
/// This is to enable generalization to both regular and upgradeable contracts,
/// and to save gas in case the initial owner is not the caller.
/// For performance reasons, this function will not check if there
/// is an existing owner.
function _initializeOwner(address newOwner) internal virtual {
if (_guardInitializeOwner()) {
/// @solidity memory-safe-assembly
assembly {
let ownerSlot := _OWNER_SLOT
if sload(ownerSlot) {
mstore(0x00, 0x0dc149f0) // `AlreadyInitialized()`.
revert(0x1c, 0x04)
}
// Clean the upper 96 bits.
newOwner := shr(96, shl(96, newOwner))
// Store the new value.
sstore(ownerSlot, or(newOwner, shl(255, iszero(newOwner))))
// Emit the {OwnershipTransferred} event.
log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, 0, newOwner)
}
} else {
/// @solidity memory-safe-assembly
assembly {
// Clean the upper 96 bits.
newOwner := shr(96, shl(96, newOwner))
// Store the new value.
sstore(_OWNER_SLOT, newOwner)
// Emit the {OwnershipTransferred} event.
log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, 0, newOwner)
}
}
}
/// @dev Sets the owner directly without authorization guard.
function _setOwner(address newOwner) internal virtual {
if (_guardInitializeOwner()) {
/// @solidity memory-safe-assembly
assembly {
let ownerSlot := _OWNER_SLOT
// Clean the upper 96 bits.
newOwner := shr(96, shl(96, newOwner))
// Emit the {OwnershipTransferred} event.
log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, sload(ownerSlot), newOwner)
// Store the new value.
sstore(ownerSlot, or(newOwner, shl(255, iszero(newOwner))))
}
} else {
/// @solidity memory-safe-assembly
assembly {
let ownerSlot := _OWNER_SLOT
// Clean the upper 96 bits.
newOwner := shr(96, shl(96, newOwner))
// Emit the {OwnershipTransferred} event.
log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, sload(ownerSlot), newOwner)
// Store the new value.
sstore(ownerSlot, newOwner)
}
}
}
/// @dev Throws if the sender is not the owner.
function _checkOwner() internal view virtual {
/// @solidity memory-safe-assembly
assembly {
// If the caller is not the stored owner, revert.
if iszero(eq(caller(), sload(_OWNER_SLOT))) {
mstore(0x00, 0x82b42900) // `Unauthorized()`.
revert(0x1c, 0x04)
}
}
}
/// @dev Returns how long a two-step ownership handover is valid for in seconds.
/// Override to return a different value if needed.
/// Made internal to conserve bytecode. Wrap it in a public function if needed.
function _ownershipHandoverValidFor() internal view virtual returns (uint64) {
return 48 * 3600;
}
/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
/* PUBLIC UPDATE FUNCTIONS */
/*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
/// @dev Allows the owner to transfer the ownership to `newOwner`.
function transferOwnership(address newOwner) public payable virtual onlyOwner {
/// @solidity memory-safe-assembly
assembly {
if iszero(shl(96, newOwner)) {
mstore(0x00, 0x7448fbae) // `NewOwnerIsZeroAddress()`.
revert(0x1c, 0x04)
}
}
_setOwner(newOwner);
}
/// @dev Allows the owner to renounce their ownership.
function renounceOwnership() public payable virtual onlyOwner {
_setOwner(address(0));
}
/// @dev Request a two-step ownership handover to the caller.
/// The request will automatically expire in 48 hours (172800 seconds) by default.
function requestOwnershipHandover() public payable virtual {
unchecked {
uint256 expires = block.timestamp + _ownershipHandoverValidFor();
/// @solidity memory-safe-assembly
assembly {
// Compute and set the handover slot to `expires`.
mstore(0x0c, _HANDOVER_SLOT_SEED)
mstore(0x00, caller())
sstore(keccak256(0x0c, 0x20), expires)
// Emit the {OwnershipHandoverRequested} event.
log2(0, 0, _OWNERSHIP_HANDOVER_REQUESTED_EVENT_SIGNATURE, caller())
}
}
}
/// @dev Cancels the two-step ownership handover to the caller, if any.
function cancelOwnershipHandover() public payable virtual {
/// @solidity memory-safe-assembly
assembly {
// Compute and set the handover slot to 0.
mstore(0x0c, _HANDOVER_SLOT_SEED)
mstore(0x00, caller())
sstore(keccak256(0x0c, 0x20), 0)
// Emit the {OwnershipHandoverCanceled} event.
log2(0, 0, _OWNERSHIP_HANDOVER_CANCELED_EVENT_SIGNATURE, caller())
}
}
/// @dev Allows the owner to complete the two-step ownership handover to `pendingOwner`.
/// Reverts if there is no existing ownership handover requested by `pendingOwner`.
function completeOwnershipHandover(address pendingOwner) public payable virtual onlyOwner {
/// @solidity memory-safe-assembly
assembly {
// Compute and set the handover slot to 0.
mstore(0x0c, _HANDOVER_SLOT_SEED)
mstore(0x00, pendingOwner)
let handoverSlot := keccak256(0x0c, 0x20)
// If the handover does not exist, or has expired.
if gt(timestamp(), sload(handoverSlot)) {
mstore(0x00, 0x6f5e8818) // `NoHandoverRequest()`.
revert(0x1c, 0x04)
}
// Set the handover slot to 0.
sstore(handoverSlot, 0)
}
_setOwner(pendingOwner);
}
/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
/* PUBLIC READ FUNCTIONS */
/*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
/// @dev Returns the owner of the contract.
function owner() public view virtual returns (address result) {
/// @solidity memory-safe-assembly
assembly {
result := sload(_OWNER_SLOT)
}
}
/// @dev Returns the expiry timestamp for the two-step ownership handover to `pendingOwner`.
function ownershipHandoverExpiresAt(address pendingOwner)
public
view
virtual
returns (uint256 result)
{
/// @solidity memory-safe-assembly
assembly {
// Compute the handover slot.
mstore(0x0c, _HANDOVER_SLOT_SEED)
mstore(0x00, pendingOwner)
// Load the handover slot.
result := sload(keccak256(0x0c, 0x20))
}
}
/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
/* MODIFIERS */
/*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
/// @dev Marks a function as only callable by the owner.
modifier onlyOwner() virtual {
_checkOwner();
_;
}
}// SPDX-License-Identifier: MIT
// 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);
}{
"remappings": [
"@limitbreak/permit-c/=lib/creator-token-standards/lib/PermitC/src/",
"@opensea/tstorish/=lib/creator-token-standards/lib/tstorish/src/",
"@openzeppelin/=lib/creator-token-standards/lib/openzeppelin-contracts/",
"@rari-capital/solmate/=lib/creator-token-standards/lib/PermitC/lib/solmate/",
"ERC721A/=lib/creator-token-standards/lib/ERC721A/contracts/",
"PermitC/=lib/creator-token-standards/lib/PermitC/",
"creator-token-standards/=lib/creator-token-standards/",
"ds-test/=lib/creator-token-standards/lib/forge-std/lib/ds-test/src/",
"erc4626-tests/=lib/creator-token-standards/lib/PermitC/lib/openzeppelin-contracts/lib/erc4626-tests/",
"erc721a/=lib/creator-token-standards/lib/ERC721A/",
"forge-gas-metering/=lib/creator-token-standards/lib/PermitC/lib/forge-gas-metering/",
"forge-std/=lib/forge-std/src/",
"murky/=lib/creator-token-standards/lib/murky/",
"openzeppelin-contracts/=lib/creator-token-standards/lib/openzeppelin-contracts/",
"openzeppelin/=lib/creator-token-standards/lib/PermitC/lib/openzeppelin-contracts/contracts/",
"solady/=lib/solady/src/",
"solmate/=lib/creator-token-standards/lib/PermitC/lib/solmate/src/",
"tstorish/=lib/creator-token-standards/lib/tstorish/src/"
],
"optimizer": {
"enabled": true,
"runs": 200
},
"metadata": {
"useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"evmVersion": "prague",
"viaIR": false
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"oldChimpers_","type":"address"},{"internalType":"address","name":"newChimpers_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyInitialized","type":"error"},{"inputs":[],"name":"BatchTooLarge","type":"error"},{"inputs":[],"name":"ClaimsClosed","type":"error"},{"inputs":[],"name":"ClaimsNotClosed","type":"error"},{"inputs":[],"name":"NewOwnerIsZeroAddress","type":"error"},{"inputs":[],"name":"NoHandoverRequest","type":"error"},{"inputs":[],"name":"Unauthorized","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pendingOwner","type":"address"}],"name":"OwnershipHandoverCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pendingOwner","type":"address"}],"name":"OwnershipHandoverRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"cancelOwnershipHandover","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"claimBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"address","name":"treasury","type":"address"}],"name":"claimUnclaimed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimsClosed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"closeClaims","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pendingOwner","type":"address"}],"name":"completeOwnershipHandover","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"newChimpers","outputs":[{"internalType":"contract IChimpers","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oldChimpers","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"result","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pendingOwner","type":"address"}],"name":"ownershipHandoverExpiresAt","outputs":[{"internalType":"uint256","name":"result","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"requestOwnershipHandover","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"payable","type":"function"}]Contract Creation Code
60c060405234801561000f575f5ffd5b50604051610a43380380610a4383398101604081905261002e916100a7565b6001600160a01b03808316608052811660a05261004a33610051565b50506100d8565b6001600160a01b0316638b78c6d819819055805f7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a350565b80516001600160a01b03811681146100a2575f5ffd5b919050565b5f5f604083850312156100b8575f5ffd5b6100c18361008c565b91506100cf6020840161008c565b90509250929050565b60805160a05161092761011c5f395f81816101170152818161039b01528181610536015261063101525f81816101f501528181610322015261048901526109275ff3fe6080604052600436106100d9575f3560e01c80638da5cb5b1161007c578063cfee88db11610057578063cfee88db14610217578063f04e283e1461022b578063f2fde38b1461023e578063fee81cf414610251575f5ffd5b80638da5cb5b146101a45780638ea0bee6146101bc578063b0d38dd3146101e4575f5ffd5b806354d1f13d116100b757806354d1f13d1461015657806362abebce1461015e578063715018a61461017d57806387249a1114610185575f5ffd5b806325692962146100dd578063379607f5146100e757806350c69d1c14610106575b5f5ffd5b6100e5610290565b005b3480156100f2575f5ffd5b506100e56101013660046107b4565b6102dd565b348015610111575f5ffd5b506101397f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6100e56103ff565b348015610169575f5ffd5b506100e5610178366004610813565b610438565b6100e56105e8565b348015610190575f5ffd5b506100e561019f36600461086d565b6105fb565b3480156101af575f5ffd5b50638b78c6d81954610139565b3480156101c7575f5ffd5b505f546101d49060ff1681565b604051901515815260200161014d565b3480156101ef575f5ffd5b506101397f000000000000000000000000000000000000000000000000000000000000000081565b348015610222575f5ffd5b506100e56106e4565b6100e56102393660046108bd565b6106fa565b6100e561024c3660046108bd565b610737565b34801561025c575f5ffd5b5061028261026b3660046108bd565b63389a75e1600c9081525f91909152602090205490565b60405190815260200161014d565b5f6202a30067ffffffffffffffff164201905063389a75e1600c52335f52806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d5f5fa250565b5f5460ff161561030057604051637087773560e11b815260040160405180910390fd5b6040516323b872dd60e01b8152336004820152306024820152604481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd906064015f604051808303815f87803b15801561036b575f5ffd5b505af115801561037d573d5f5f3e3d5ffd5b50506040516340c10f1960e01b8152336004820152602481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031692506340c10f1991506044015f604051808303815f87803b1580156103e6575f5ffd5b505af11580156103f8573d5f5f3e3d5ffd5b5050505050565b63389a75e1600c52335f525f6020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c925f5fa2565b5f5460ff161561045b57604051637087773560e11b815260040160405180910390fd5b606481111561047d576040516305beb17160e11b815260040160405180910390fd5b5f5b818110156105e3577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd33308686868181106104ca576104ca6108dd565b6040516001600160e01b031960e088901b1681526001600160a01b039586166004820152949093166024850152506020909102013560448201526064015f604051808303815f87803b15801561051e575f5ffd5b505af1158015610530573d5f5f3e3d5ffd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166340c10f1933858585818110610576576105766108dd565b6040516001600160e01b031960e087901b1681526001600160a01b03909416600485015260200291909101356024830152506044015f604051808303815f87803b1580156105c2575f5ffd5b505af11580156105d4573d5f5f3e3d5ffd5b5050505080600101905061047f565b505050565b6105f061075d565b6105f95f610777565b565b61060361075d565b5f5460ff166106255760405163731c543360e01b815260040160405180910390fd5b5f5b828110156106de577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166340c10f1983868685818110610671576106716108dd565b6040516001600160e01b031960e087901b1681526001600160a01b03909416600485015260200291909101356024830152506044015f604051808303815f87803b1580156106bd575f5ffd5b505af11580156106cf573d5f5f3e3d5ffd5b50505050806001019050610627565b50505050565b6106ec61075d565b5f805460ff19166001179055565b61070261075d565b63389a75e1600c52805f526020600c20805442111561072857636f5e88185f526004601cfd5b5f905561073481610777565b50565b61073f61075d565b8060601b61075457637448fbae5f526004601cfd5b61073481610777565b638b78c6d8195433146105f9576382b429005f526004601cfd5b638b78c6d81980546001600160a01b039092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a355565b5f602082840312156107c4575f5ffd5b5035919050565b5f5f83601f8401126107db575f5ffd5b50813567ffffffffffffffff8111156107f2575f5ffd5b6020830191508360208260051b850101111561080c575f5ffd5b9250929050565b5f5f60208385031215610824575f5ffd5b823567ffffffffffffffff81111561083a575f5ffd5b610846858286016107cb565b90969095509350505050565b80356001600160a01b0381168114610868575f5ffd5b919050565b5f5f5f6040848603121561087f575f5ffd5b833567ffffffffffffffff811115610895575f5ffd5b6108a1868287016107cb565b90945092506108b4905060208501610852565b90509250925092565b5f602082840312156108cd575f5ffd5b6108d682610852565b9392505050565b634e487b7160e01b5f52603260045260245ffdfea2646970667358221220447ee7f2b09e289200af3645557631015f5d4176b91d37499bb4b88a7401547c64736f6c634300081c003300000000000000000000000080336ad7a747236ef41f47ed2c7641828a480baa000000000000000000000000307af7d28afee82092aa95d35644898311ca5360
Deployed Bytecode
0x6080604052600436106100d9575f3560e01c80638da5cb5b1161007c578063cfee88db11610057578063cfee88db14610217578063f04e283e1461022b578063f2fde38b1461023e578063fee81cf414610251575f5ffd5b80638da5cb5b146101a45780638ea0bee6146101bc578063b0d38dd3146101e4575f5ffd5b806354d1f13d116100b757806354d1f13d1461015657806362abebce1461015e578063715018a61461017d57806387249a1114610185575f5ffd5b806325692962146100dd578063379607f5146100e757806350c69d1c14610106575b5f5ffd5b6100e5610290565b005b3480156100f2575f5ffd5b506100e56101013660046107b4565b6102dd565b348015610111575f5ffd5b506101397f000000000000000000000000307af7d28afee82092aa95d35644898311ca536081565b6040516001600160a01b0390911681526020015b60405180910390f35b6100e56103ff565b348015610169575f5ffd5b506100e5610178366004610813565b610438565b6100e56105e8565b348015610190575f5ffd5b506100e561019f36600461086d565b6105fb565b3480156101af575f5ffd5b50638b78c6d81954610139565b3480156101c7575f5ffd5b505f546101d49060ff1681565b604051901515815260200161014d565b3480156101ef575f5ffd5b506101397f00000000000000000000000080336ad7a747236ef41f47ed2c7641828a480baa81565b348015610222575f5ffd5b506100e56106e4565b6100e56102393660046108bd565b6106fa565b6100e561024c3660046108bd565b610737565b34801561025c575f5ffd5b5061028261026b3660046108bd565b63389a75e1600c9081525f91909152602090205490565b60405190815260200161014d565b5f6202a30067ffffffffffffffff164201905063389a75e1600c52335f52806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d5f5fa250565b5f5460ff161561030057604051637087773560e11b815260040160405180910390fd5b6040516323b872dd60e01b8152336004820152306024820152604481018290527f00000000000000000000000080336ad7a747236ef41f47ed2c7641828a480baa6001600160a01b0316906323b872dd906064015f604051808303815f87803b15801561036b575f5ffd5b505af115801561037d573d5f5f3e3d5ffd5b50506040516340c10f1960e01b8152336004820152602481018490527f000000000000000000000000307af7d28afee82092aa95d35644898311ca53606001600160a01b031692506340c10f1991506044015f604051808303815f87803b1580156103e6575f5ffd5b505af11580156103f8573d5f5f3e3d5ffd5b5050505050565b63389a75e1600c52335f525f6020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c925f5fa2565b5f5460ff161561045b57604051637087773560e11b815260040160405180910390fd5b606481111561047d576040516305beb17160e11b815260040160405180910390fd5b5f5b818110156105e3577f00000000000000000000000080336ad7a747236ef41f47ed2c7641828a480baa6001600160a01b03166323b872dd33308686868181106104ca576104ca6108dd565b6040516001600160e01b031960e088901b1681526001600160a01b039586166004820152949093166024850152506020909102013560448201526064015f604051808303815f87803b15801561051e575f5ffd5b505af1158015610530573d5f5f3e3d5ffd5b505050507f000000000000000000000000307af7d28afee82092aa95d35644898311ca53606001600160a01b03166340c10f1933858585818110610576576105766108dd565b6040516001600160e01b031960e087901b1681526001600160a01b03909416600485015260200291909101356024830152506044015f604051808303815f87803b1580156105c2575f5ffd5b505af11580156105d4573d5f5f3e3d5ffd5b5050505080600101905061047f565b505050565b6105f061075d565b6105f95f610777565b565b61060361075d565b5f5460ff166106255760405163731c543360e01b815260040160405180910390fd5b5f5b828110156106de577f000000000000000000000000307af7d28afee82092aa95d35644898311ca53606001600160a01b03166340c10f1983868685818110610671576106716108dd565b6040516001600160e01b031960e087901b1681526001600160a01b03909416600485015260200291909101356024830152506044015f604051808303815f87803b1580156106bd575f5ffd5b505af11580156106cf573d5f5f3e3d5ffd5b50505050806001019050610627565b50505050565b6106ec61075d565b5f805460ff19166001179055565b61070261075d565b63389a75e1600c52805f526020600c20805442111561072857636f5e88185f526004601cfd5b5f905561073481610777565b50565b61073f61075d565b8060601b61075457637448fbae5f526004601cfd5b61073481610777565b638b78c6d8195433146105f9576382b429005f526004601cfd5b638b78c6d81980546001600160a01b039092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a355565b5f602082840312156107c4575f5ffd5b5035919050565b5f5f83601f8401126107db575f5ffd5b50813567ffffffffffffffff8111156107f2575f5ffd5b6020830191508360208260051b850101111561080c575f5ffd5b9250929050565b5f5f60208385031215610824575f5ffd5b823567ffffffffffffffff81111561083a575f5ffd5b610846858286016107cb565b90969095509350505050565b80356001600160a01b0381168114610868575f5ffd5b919050565b5f5f5f6040848603121561087f575f5ffd5b833567ffffffffffffffff811115610895575f5ffd5b6108a1868287016107cb565b90945092506108b4905060208501610852565b90509250925092565b5f602082840312156108cd575f5ffd5b6108d682610852565b9392505050565b634e487b7160e01b5f52603260045260245ffdfea2646970667358221220447ee7f2b09e289200af3645557631015f5d4176b91d37499bb4b88a7401547c64736f6c634300081c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000080336ad7a747236ef41f47ed2c7641828a480baa000000000000000000000000307af7d28afee82092aa95d35644898311ca5360
-----Decoded View---------------
Arg [0] : oldChimpers_ (address): 0x80336Ad7A747236ef41F47ed2C7641828a480BAA
Arg [1] : newChimpers_ (address): 0x307AF7d28AfEE82092aA95D35644898311CA5360
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000080336ad7a747236ef41f47ed2c7641828a480baa
Arg [1] : 000000000000000000000000307af7d28afee82092aa95d35644898311ca5360
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.