More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 130 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer To Mint... | 20796615 | 94 days ago | IN | 0 ETH | 0.01372334 | ||||
Transfer To Mint... | 20796605 | 94 days ago | IN | 0 ETH | 0.03125977 | ||||
Transfer To Mint... | 20796577 | 94 days ago | IN | 0 ETH | 0.00263332 | ||||
Transfer To Mint... | 20795741 | 95 days ago | IN | 0 ETH | 0.00151936 | ||||
Transfer To Mint... | 20795730 | 95 days ago | IN | 0 ETH | 0.00484687 | ||||
Transfer To Mint... | 20791929 | 95 days ago | IN | 0 ETH | 0.0038694 | ||||
Transfer To Mint... | 20790891 | 95 days ago | IN | 0 ETH | 0.01586148 | ||||
Transfer To Mint... | 20789719 | 95 days ago | IN | 0 ETH | 0.00443105 | ||||
Transfer To Mint... | 20789166 | 95 days ago | IN | 0 ETH | 0.00084388 | ||||
Transfer To Mint... | 20788808 | 96 days ago | IN | 0 ETH | 0.00934681 | ||||
Transfer To Mint... | 20788651 | 96 days ago | IN | 0 ETH | 0.00786733 | ||||
Transfer To Mint... | 20787668 | 96 days ago | IN | 0 ETH | 0.00289702 | ||||
Transfer To Mint... | 20787615 | 96 days ago | IN | 0 ETH | 0.00320666 | ||||
Transfer To Mint... | 20787001 | 96 days ago | IN | 0 ETH | 0.00375129 | ||||
Transfer To Mint... | 20786974 | 96 days ago | IN | 0 ETH | 0.00403219 | ||||
Transfer To Mint... | 20786962 | 96 days ago | IN | 0 ETH | 0.00516783 | ||||
Transfer To Mint... | 20782769 | 96 days ago | IN | 0 ETH | 0.03930064 | ||||
Transfer To Mint... | 20782686 | 96 days ago | IN | 0 ETH | 0.00433331 | ||||
Transfer To Mint... | 20778972 | 97 days ago | IN | 0 ETH | 0.01751951 | ||||
Transfer To Mint... | 20778409 | 97 days ago | IN | 0 ETH | 0.01079777 | ||||
Transfer To Mint... | 20777337 | 97 days ago | IN | 0 ETH | 0.00308809 | ||||
Transfer To Mint... | 20775002 | 97 days ago | IN | 0 ETH | 0.00643939 | ||||
Transfer To Mint... | 20774353 | 98 days ago | IN | 0 ETH | 0.00879083 | ||||
Transfer To Mint... | 20774339 | 98 days ago | IN | 0 ETH | 0.01955736 | ||||
Transfer To Mint... | 20773809 | 98 days ago | IN | 0 ETH | 0.00457099 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
StonerApeClubGen1Burn
Compiler Version
v0.8.21+commit.d9974bed
Optimization Enabled:
Yes with 100 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.13; import "@openzeppelin/contracts/token/ERC721/IERC721.sol"; import {SignatureChecker} from "@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; contract StonerApeClubGen1Burn is Ownable { error InvalidSolanaSignature(); error SafeCast128Overflow(); mapping(string => Mints) public mints; mapping(uint256 => bool) public isSuperVialId; IERC721 public immutable apesContract; IERC721 public immutable vialContract; address private _signer; struct Pair { uint256 apeId; uint256[2] vialIds; } struct Mints { uint128 regularMints; uint128 superMints; } event SolanaMint(string indexed solanaAddress, Pair[] pair, uint256[] superVialIds); constructor(uint256[] memory superVialIds, address _apesContract, address _vialContract, address signer) Ownable(tx.origin) { unchecked { uint256 len = superVialIds.length; for (uint256 i; i < len; ++i) { isSuperVialId[superVialIds[i]] = true; } } apesContract = IERC721(_apesContract); vialContract = IERC721(_vialContract); _signer = signer; } function transferToMints( Pair[] memory pairs, uint256[] calldata superVialIds, string memory solanaAddress, bytes memory isSolanaAddressSignature ) external { bytes32 digest = keccak256(abi.encodePacked(solanaAddress)); if (!SignatureChecker.isValidSignatureNow(_signer, digest, isSolanaAddressSignature)) { _revert(InvalidSolanaSignature.selector); } address recipientAddress = address(this); // Retrieve the current `Mints` struct for the `solanaAddress`. Mints memory currentMints = mints[solanaAddress]; for (uint256 i; i < pairs.length;) { Pair memory pair = pairs[i]; // Burn vials by transferring to recipientAddress vialContract.transferFrom(msg.sender, recipientAddress, pair.vialIds[0]); vialContract.transferFrom(msg.sender, recipientAddress, pair.vialIds[1]); apesContract.transferFrom(msg.sender, recipientAddress, pair.apeId); // Burn ape by transferring to recipientAddress unchecked { ++i; } } for (uint256 i; i < superVialIds.length;) { vialContract.transferFrom(msg.sender, recipientAddress, superVialIds[i]); // Burn super vial by transferring to recipientAddress unchecked { ++i; } } currentMints.regularMints += safeUint128Cast(pairs.length); currentMints.superMints += safeUint128Cast(superVialIds.length); // Update the `mints` mapping with the new `Mints` struct for the `solanaAddress`. mints[solanaAddress] = currentMints; // Emit event emit SolanaMint(solanaAddress, pairs, superVialIds); } function setSigner(address signer) external onlyOwner { _signer = signer; } function signer() external view returns (address) { return _signer; } function safeUint128Cast(uint256 value) internal pure returns (uint128) { if (value > type(uint128).max) { _revert(SafeCast128Overflow.selector); } return uint128(value); } function _revert(bytes4 selector) internal pure { assembly { mstore(0x0, selector) revert(0x0, 0x4) } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.20; import {IERC165} from "../../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 address zero. * * 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 (last updated v5.0.0) (utils/cryptography/SignatureChecker.sol) pragma solidity ^0.8.20; import {ECDSA} from "./ECDSA.sol"; import {IERC1271} from "../../interfaces/IERC1271.sol"; /** * @dev Signature verification helper that can be used instead of `ECDSA.recover` to seamlessly support both ECDSA * signatures from externally owned accounts (EOAs) as well as ERC1271 signatures from smart contract wallets like * Argent and Safe Wallet (previously Gnosis Safe). */ library SignatureChecker { /** * @dev Checks if a signature is valid for a given signer and data hash. If the signer is a smart contract, the * signature is validated against that smart contract using ERC1271, otherwise it's validated using `ECDSA.recover`. * * NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus * change through time. It could return true at block N and false at block N+1 (or the opposite). */ function isValidSignatureNow(address signer, bytes32 hash, bytes memory signature) internal view returns (bool) { (address recovered, ECDSA.RecoverError error, ) = ECDSA.tryRecover(hash, signature); return (error == ECDSA.RecoverError.NoError && recovered == signer) || isValidERC1271SignatureNow(signer, hash, signature); } /** * @dev Checks if a signature is valid for a given signer and data hash. The signature is validated * against the signer smart contract using ERC1271. * * NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus * change through time. It could return true at block N and false at block N+1 (or the opposite). */ function isValidERC1271SignatureNow( address signer, bytes32 hash, bytes memory signature ) internal view returns (bool) { (bool success, bytes memory result) = signer.staticcall( abi.encodeCall(IERC1271.isValidSignature, (hash, signature)) ); return (success && result.length >= 32 && abi.decode(result, (bytes32)) == bytes32(IERC1271.isValidSignature.selector)); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol) pragma solidity ^0.8.20; import {Context} from "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * The initial owner is set to the address provided by the deployer. This can * later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; /** * @dev The caller account is not authorized to perform an operation. */ error OwnableUnauthorizedAccount(address account); /** * @dev The owner is not a valid owner account. (eg. `address(0)`) */ error OwnableInvalidOwner(address owner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the address provided by the deployer as the initial owner. */ constructor(address initialOwner) { if (initialOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(initialOwner); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { if (owner() != _msgSender()) { revert OwnableUnauthorizedAccount(_msgSender()); } } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { if (newOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/IERC165.sol) pragma solidity ^0.8.20; /** * @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: MIT // OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/ECDSA.sol) pragma solidity ^0.8.20; /** * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations. * * These functions can be used to verify that a message was signed by the holder * of the private keys of a given address. */ library ECDSA { enum RecoverError { NoError, InvalidSignature, InvalidSignatureLength, InvalidSignatureS } /** * @dev The signature derives the `address(0)`. */ error ECDSAInvalidSignature(); /** * @dev The signature has an invalid length. */ error ECDSAInvalidSignatureLength(uint256 length); /** * @dev The signature has an S value that is in the upper half order. */ error ECDSAInvalidSignatureS(bytes32 s); /** * @dev Returns the address that signed a hashed message (`hash`) with `signature` or an error. This will not * return address(0) without also returning an error description. Errors are documented using an enum (error type) * and a bytes32 providing additional information about the error. * * If no error is returned, then the address can be used for verification purposes. * * The `ecrecover` EVM precompile allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it. * * Documentation for signature generation: * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js] * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers] */ function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError, bytes32) { if (signature.length == 65) { bytes32 r; bytes32 s; uint8 v; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. /// @solidity memory-safe-assembly assembly { r := mload(add(signature, 0x20)) s := mload(add(signature, 0x40)) v := byte(0, mload(add(signature, 0x60))) } return tryRecover(hash, v, r, s); } else { return (address(0), RecoverError.InvalidSignatureLength, bytes32(signature.length)); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature`. This address can then be used for verification purposes. * * The `ecrecover` EVM precompile allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it. */ function recover(bytes32 hash, bytes memory signature) internal pure returns (address) { (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, signature); _throwError(error, errorArg); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately. * * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures] */ function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError, bytes32) { unchecked { bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff); // We do not check for an overflow here since the shift operation results in 0 or 1. uint8 v = uint8((uint256(vs) >> 255) + 27); return tryRecover(hash, v, r, s); } } /** * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately. */ function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) { (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, r, vs); _throwError(error, errorArg); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `v`, * `r` and `s` signature fields separately. */ function tryRecover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address, RecoverError, bytes32) { // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most // signatures from current libraries generate a unique signature with an s-value in the lower half order. // // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept // these malleable signatures as well. if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) { return (address(0), RecoverError.InvalidSignatureS, s); } // If the signature is valid (and not malleable), return the signer address address signer = ecrecover(hash, v, r, s); if (signer == address(0)) { return (address(0), RecoverError.InvalidSignature, bytes32(0)); } return (signer, RecoverError.NoError, bytes32(0)); } /** * @dev Overload of {ECDSA-recover} that receives the `v`, * `r` and `s` signature fields separately. */ function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) { (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, v, r, s); _throwError(error, errorArg); return recovered; } /** * @dev Optionally reverts with the corresponding custom error according to the `error` argument provided. */ function _throwError(RecoverError error, bytes32 errorArg) private pure { if (error == RecoverError.NoError) { return; // no error: do nothing } else if (error == RecoverError.InvalidSignature) { revert ECDSAInvalidSignature(); } else if (error == RecoverError.InvalidSignatureLength) { revert ECDSAInvalidSignatureLength(uint256(errorArg)); } else if (error == RecoverError.InvalidSignatureS) { revert ECDSAInvalidSignatureS(errorArg); } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC1271.sol) pragma solidity ^0.8.20; /** * @dev Interface of the ERC1271 standard signature validation method for * contracts as defined in https://eips.ethereum.org/EIPS/eip-1271[ERC-1271]. */ interface IERC1271 { /** * @dev Should return whether the signature provided is valid for the provided data * @param hash Hash of the data to be signed * @param signature Signature byte array associated with _data */ function isValidSignature(bytes32 hash, bytes memory signature) external view returns (bytes4 magicValue); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol) pragma solidity ^0.8.20; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } function _contextSuffixLength() internal view virtual returns (uint256) { return 0; } }
{ "remappings": [ "forge-std/=lib/forge-std/src/", "solmate/=lib/solmate/src/", "ds-test/=lib/forge-std/lib/ds-test/src/", "erc721a/=lib/erc721a/", "ERC721A-Upgradeable/=lib/ERC721A-Upgradeable/", "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/", "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/", "openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/", "chainlink/=lib/chainlink-brownie-contracts/contracts/src/", "@/=src/", "solady/=lib/solady/src/", "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/", "openzeppelin-contracts/=lib/openzeppelin-contracts/" ], "optimizer": { "enabled": true, "runs": 100 }, "metadata": { "useLiteralContent": false, "bytecodeHash": "ipfs", "appendCBOR": true }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "evmVersion": "paris", "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256[]","name":"superVialIds","type":"uint256[]"},{"internalType":"address","name":"_apesContract","type":"address"},{"internalType":"address","name":"_vialContract","type":"address"},{"internalType":"address","name":"signer","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"InvalidSolanaSignature","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"SafeCast128Overflow","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"solanaAddress","type":"string"},{"components":[{"internalType":"uint256","name":"apeId","type":"uint256"},{"internalType":"uint256[2]","name":"vialIds","type":"uint256[2]"}],"indexed":false,"internalType":"struct StonerApeClubGen1Burn.Pair[]","name":"pair","type":"tuple[]"},{"indexed":false,"internalType":"uint256[]","name":"superVialIds","type":"uint256[]"}],"name":"SolanaMint","type":"event"},{"inputs":[],"name":"apesContract","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"isSuperVialId","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"mints","outputs":[{"internalType":"uint128","name":"regularMints","type":"uint128"},{"internalType":"uint128","name":"superMints","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"signer","type":"address"}],"name":"setSigner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"signer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"apeId","type":"uint256"},{"internalType":"uint256[2]","name":"vialIds","type":"uint256[2]"}],"internalType":"struct StonerApeClubGen1Burn.Pair[]","name":"pairs","type":"tuple[]"},{"internalType":"uint256[]","name":"superVialIds","type":"uint256[]"},{"internalType":"string","name":"solanaAddress","type":"string"},{"internalType":"bytes","name":"isSolanaAddressSignature","type":"bytes"}],"name":"transferToMints","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vialContract","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60c06040523480156200001157600080fd5b50604051620011ca380380620011ca833981016040819052620000349162000177565b32806200005b57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6200006681620000f4565b50835160005b81811015620000c25760016002600088848151811062000090576200009062000279565b6020908102919091018101518252810191909152604001600020805460ff19169115159190911790556001016200006c565b50506001600160a01b0392831660805290821660a052600380546001600160a01b03191691909216179055506200028f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b03811681146200017257600080fd5b919050565b600080600080608085870312156200018e57600080fd5b84516001600160401b0380821115620001a657600080fd5b818701915087601f830112620001bb57600080fd5b8151602082821115620001d257620001d262000144565b8160051b604051601f19603f83011681018181108682111715620001fa57620001fa62000144565b60405292835281830193508481018201928b8411156200021957600080fd5b948201945b8386101562000239578551855294820194938201936200021e565b98506200024a90508982016200015a565b9650505050506200025e604086016200015a565b91506200026e606086016200015a565b905092959194509250565b634e487b7160e01b600052603260045260246000fd5b60805160a051610efb620002cf6000396000818160a80152818161030e015281816103ab01526104e301526000818160f6015261045d0152610efb6000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c8063715018a611610066578063715018a61461018c5780638da5cb5b1461019457806391fcdae8146101a5578063f0271431146101d8578063f2fde38b146101eb57600080fd5b80631c63c7d6146100a3578063238ac933146100e0578063279a20bc146100f1578063494a6589146101185780636c19e78314610177575b600080fd5b6100ca7f000000000000000000000000000000000000000000000000000000000000000081565b6040516100d791906109b1565b60405180910390f35b6003546001600160a01b03166100ca565b6100ca7f000000000000000000000000000000000000000000000000000000000000000081565b610157610126366004610aa5565b80516020818301810180516001825292820191909301209152546001600160801b0380821691600160801b90041682565b604080516001600160801b039384168152929091166020830152016100d7565b61018a610185366004610ae2565b6101fe565b005b61018a610228565b6000546001600160a01b03166100ca565b6101c86101b3366004610b12565b60026020526000908152604090205460ff1681565b60405190151581526020016100d7565b61018a6101e6366004610b77565b61023c565b61018a6101f9366004610ae2565b61066f565b6102066106b6565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6102306106b6565b61023a60006106e3565b565b60008260405160200161024f9190610d19565b60408051601f198184030181529190528051602090910120600354909150610281906001600160a01b03168284610733565b6102955761029563e6a0772b60e01b610795565b600030905060006001856040516102ac9190610d19565b90815260408051918290036020908101832083830190925290546001600160801b038082168452600160801b9091041690820152905060005b88518110156104d557600089828151811061030257610302610d35565b602002602001015190507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd3386846020015160006002811061035457610354610d35565b60200201516040518463ffffffff1660e01b815260040161037793929190610d4b565b600060405180830381600087803b15801561039157600080fd5b505af11580156103a5573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd338684602001516001600281106103f1576103f1610d35565b60200201516040518463ffffffff1660e01b815260040161041493929190610d4b565b600060405180830381600087803b15801561042e57600080fd5b505af1158015610442573d6000803e3d6000fd5b505082516040516323b872dd60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001693506323b872dd9250610497913391899190600401610d4b565b600060405180830381600087803b1580156104b157600080fd5b505af11580156104c5573d6000803e3d6000fd5b50505050816001019150506102e5565b5060005b86811015610586577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd33858b8b8681811061052457610524610d35565b905060200201356040518463ffffffff1660e01b815260040161054993929190610d4b565b600060405180830381600087803b15801561056357600080fd5b505af1158015610577573d6000803e3d6000fd5b505050508060010190506104d9565b50610591885161079f565b815182906105a0908390610d6f565b6001600160801b03169052506105b58661079f565b816020018181516105c69190610d6f565b6001600160801b031690525060405181906001906105e5908890610d19565b9081526040519081900360209081018220835193909101516001600160801b03908116600160801b02931692909217909155610622908690610d19565b60405180910390207f23f5ff8eafbfd54e623e6bd45bf84f6b5c4e0bac4bf3267d546aaca51f4ae45a89898960405161065d93929190610dd6565b60405180910390a25050505050505050565b6106776106b6565b6001600160a01b0381166106aa576000604051631e4fbdf760e01b81526004016106a191906109b1565b60405180910390fd5b6106b3816106e3565b50565b6000546001600160a01b0316331461023a573360405163118cdaa760e01b81526004016106a191906109b1565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080600061074285856107c4565b509092509050600081600381111561075c5761075c610e5c565b14801561077a5750856001600160a01b0316826001600160a01b0316145b8061078b575061078b868686610811565b9695505050505050565b8060005260046000fd5b60006001600160801b038211156107c0576107c063d44d629b60e01b610795565b5090565b600080600083516041036107fe5760208401516040850151606086015160001a6107f0888285856108ec565b95509550955050505061080a565b50508151600091506002905b9250925092565b6000806000856001600160a01b03168585604051602401610833929190610e72565b60408051601f198184030181529181526020820180516001600160e01b0316630b135d3f60e11b179052516108689190610d19565b600060405180830381855afa9150503d80600081146108a3576040519150601f19603f3d011682016040523d82523d6000602084013e6108a8565b606091505b50915091508180156108bc57506020815110155b801561078b57508051630b135d3f60e11b906108e19083016020908101908401610eac565b149695505050505050565b600080806fa2a8918ca85bafe22016d0b997e4df60600160ff1b0384111561091d57506000915060039050826109a7565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015610971573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661099d575060009250600191508290506109a7565b9250600091508190505b9450945094915050565b6001600160a01b0391909116815260200190565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156109fe576109fe6109c5565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715610a2d57610a2d6109c5565b604052919050565b600082601f830112610a4657600080fd5b813567ffffffffffffffff811115610a6057610a606109c5565b610a73601f8201601f1916602001610a04565b818152846020838601011115610a8857600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215610ab757600080fd5b813567ffffffffffffffff811115610ace57600080fd5b610ada84828501610a35565b949350505050565b600060208284031215610af457600080fd5b81356001600160a01b0381168114610b0b57600080fd5b9392505050565b600060208284031215610b2457600080fd5b5035919050565b60008083601f840112610b3d57600080fd5b50813567ffffffffffffffff811115610b5557600080fd5b6020830191508360208260051b8501011115610b7057600080fd5b9250929050565b600080600080600060808688031215610b8f57600080fd5b67ffffffffffffffff8087351115610ba657600080fd5b8635870188601f820112610bb957600080fd5b8035602083821115610bcd57610bcd6109c5565b610bdb818360051b01610a04565b82815260609092028301810191818101908c841115610bf957600080fd5b938201935b83851015610c80576060858e031215610c1657600080fd5b610c1e6109db565b853581528d603f870112610c3157600080fd5b610c396109db565b808f606089011115610c4a57600080fd5b8588015b60608901811015610c685780358352918601918601610c4e565b50828601525082526060949094019390820190610bfe565b99505089013591505081811115610c9657600080fd5b610ca289828a01610b2b565b909650945050604087013581811115610cba57600080fd5b610cc689828a01610a35565b935050606087013581811115610cdb57600080fd5b610ce789828a01610a35565b925050509295509295909350565b60005b83811015610d10578181015183820152602001610cf8565b50506000910152565b60008251610d2b818460208701610cf5565b9190910192915050565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160801b03818116838216019080821115610d9d57634e487b7160e01b600052601160045260246000fd5b5092915050565b81835260006001600160fb1b03831115610dbd57600080fd5b8260051b80836020870137939093016020019392505050565b6040808252845190820181905260009060609081840190602080890185805b84811015610e3b57825180518752840151848701835b6002811015610e2857825182529186019190860190600101610e0b565b5050509486019491830191600101610df5565b5050508583039086015250610e51818688610da4565b979650505050505050565b634e487b7160e01b600052602160045260246000fd5b8281526040602082015260008251806040840152610e97816060850160208701610cf5565b601f01601f1916919091016060019392505050565b600060208284031215610ebe57600080fd5b505191905056fea26469706673582212203ee45d7cff7f362a0d292f6e70d12def87f1b35f71aecef1d2918c7b8f1ed75764736f6c634300081500330000000000000000000000000000000000000000000000000000000000000080000000000000000000000000984f7b398d577c0adde08293a53ae9d3b6b7a5c5000000000000000000000000f53fa6e5790f9c7700918550d3caf48dec3e0da7000000000000000000000000bef9b2cbb095f2e19d964b1668ee130f729276f100000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000c3c000000000000000000000000000000000000000000000000000000000000052200000000000000000000000000000000000000000000000000000000000005760000000000000000000000000000000000000000000000000000000000000582000000000000000000000000000000000000000000000000000000000000058900000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d72
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061009e5760003560e01c8063715018a611610066578063715018a61461018c5780638da5cb5b1461019457806391fcdae8146101a5578063f0271431146101d8578063f2fde38b146101eb57600080fd5b80631c63c7d6146100a3578063238ac933146100e0578063279a20bc146100f1578063494a6589146101185780636c19e78314610177575b600080fd5b6100ca7f000000000000000000000000f53fa6e5790f9c7700918550d3caf48dec3e0da781565b6040516100d791906109b1565b60405180910390f35b6003546001600160a01b03166100ca565b6100ca7f000000000000000000000000984f7b398d577c0adde08293a53ae9d3b6b7a5c581565b610157610126366004610aa5565b80516020818301810180516001825292820191909301209152546001600160801b0380821691600160801b90041682565b604080516001600160801b039384168152929091166020830152016100d7565b61018a610185366004610ae2565b6101fe565b005b61018a610228565b6000546001600160a01b03166100ca565b6101c86101b3366004610b12565b60026020526000908152604090205460ff1681565b60405190151581526020016100d7565b61018a6101e6366004610b77565b61023c565b61018a6101f9366004610ae2565b61066f565b6102066106b6565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6102306106b6565b61023a60006106e3565b565b60008260405160200161024f9190610d19565b60408051601f198184030181529190528051602090910120600354909150610281906001600160a01b03168284610733565b6102955761029563e6a0772b60e01b610795565b600030905060006001856040516102ac9190610d19565b90815260408051918290036020908101832083830190925290546001600160801b038082168452600160801b9091041690820152905060005b88518110156104d557600089828151811061030257610302610d35565b602002602001015190507f000000000000000000000000f53fa6e5790f9c7700918550d3caf48dec3e0da76001600160a01b03166323b872dd3386846020015160006002811061035457610354610d35565b60200201516040518463ffffffff1660e01b815260040161037793929190610d4b565b600060405180830381600087803b15801561039157600080fd5b505af11580156103a5573d6000803e3d6000fd5b505050507f000000000000000000000000f53fa6e5790f9c7700918550d3caf48dec3e0da76001600160a01b03166323b872dd338684602001516001600281106103f1576103f1610d35565b60200201516040518463ffffffff1660e01b815260040161041493929190610d4b565b600060405180830381600087803b15801561042e57600080fd5b505af1158015610442573d6000803e3d6000fd5b505082516040516323b872dd60e01b81526001600160a01b037f000000000000000000000000984f7b398d577c0adde08293a53ae9d3b6b7a5c51693506323b872dd9250610497913391899190600401610d4b565b600060405180830381600087803b1580156104b157600080fd5b505af11580156104c5573d6000803e3d6000fd5b50505050816001019150506102e5565b5060005b86811015610586577f000000000000000000000000f53fa6e5790f9c7700918550d3caf48dec3e0da76001600160a01b03166323b872dd33858b8b8681811061052457610524610d35565b905060200201356040518463ffffffff1660e01b815260040161054993929190610d4b565b600060405180830381600087803b15801561056357600080fd5b505af1158015610577573d6000803e3d6000fd5b505050508060010190506104d9565b50610591885161079f565b815182906105a0908390610d6f565b6001600160801b03169052506105b58661079f565b816020018181516105c69190610d6f565b6001600160801b031690525060405181906001906105e5908890610d19565b9081526040519081900360209081018220835193909101516001600160801b03908116600160801b02931692909217909155610622908690610d19565b60405180910390207f23f5ff8eafbfd54e623e6bd45bf84f6b5c4e0bac4bf3267d546aaca51f4ae45a89898960405161065d93929190610dd6565b60405180910390a25050505050505050565b6106776106b6565b6001600160a01b0381166106aa576000604051631e4fbdf760e01b81526004016106a191906109b1565b60405180910390fd5b6106b3816106e3565b50565b6000546001600160a01b0316331461023a573360405163118cdaa760e01b81526004016106a191906109b1565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080600061074285856107c4565b509092509050600081600381111561075c5761075c610e5c565b14801561077a5750856001600160a01b0316826001600160a01b0316145b8061078b575061078b868686610811565b9695505050505050565b8060005260046000fd5b60006001600160801b038211156107c0576107c063d44d629b60e01b610795565b5090565b600080600083516041036107fe5760208401516040850151606086015160001a6107f0888285856108ec565b95509550955050505061080a565b50508151600091506002905b9250925092565b6000806000856001600160a01b03168585604051602401610833929190610e72565b60408051601f198184030181529181526020820180516001600160e01b0316630b135d3f60e11b179052516108689190610d19565b600060405180830381855afa9150503d80600081146108a3576040519150601f19603f3d011682016040523d82523d6000602084013e6108a8565b606091505b50915091508180156108bc57506020815110155b801561078b57508051630b135d3f60e11b906108e19083016020908101908401610eac565b149695505050505050565b600080806fa2a8918ca85bafe22016d0b997e4df60600160ff1b0384111561091d57506000915060039050826109a7565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015610971573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661099d575060009250600191508290506109a7565b9250600091508190505b9450945094915050565b6001600160a01b0391909116815260200190565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156109fe576109fe6109c5565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715610a2d57610a2d6109c5565b604052919050565b600082601f830112610a4657600080fd5b813567ffffffffffffffff811115610a6057610a606109c5565b610a73601f8201601f1916602001610a04565b818152846020838601011115610a8857600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215610ab757600080fd5b813567ffffffffffffffff811115610ace57600080fd5b610ada84828501610a35565b949350505050565b600060208284031215610af457600080fd5b81356001600160a01b0381168114610b0b57600080fd5b9392505050565b600060208284031215610b2457600080fd5b5035919050565b60008083601f840112610b3d57600080fd5b50813567ffffffffffffffff811115610b5557600080fd5b6020830191508360208260051b8501011115610b7057600080fd5b9250929050565b600080600080600060808688031215610b8f57600080fd5b67ffffffffffffffff8087351115610ba657600080fd5b8635870188601f820112610bb957600080fd5b8035602083821115610bcd57610bcd6109c5565b610bdb818360051b01610a04565b82815260609092028301810191818101908c841115610bf957600080fd5b938201935b83851015610c80576060858e031215610c1657600080fd5b610c1e6109db565b853581528d603f870112610c3157600080fd5b610c396109db565b808f606089011115610c4a57600080fd5b8588015b60608901811015610c685780358352918601918601610c4e565b50828601525082526060949094019390820190610bfe565b99505089013591505081811115610c9657600080fd5b610ca289828a01610b2b565b909650945050604087013581811115610cba57600080fd5b610cc689828a01610a35565b935050606087013581811115610cdb57600080fd5b610ce789828a01610a35565b925050509295509295909350565b60005b83811015610d10578181015183820152602001610cf8565b50506000910152565b60008251610d2b818460208701610cf5565b9190910192915050565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160801b03818116838216019080821115610d9d57634e487b7160e01b600052601160045260246000fd5b5092915050565b81835260006001600160fb1b03831115610dbd57600080fd5b8260051b80836020870137939093016020019392505050565b6040808252845190820181905260009060609081840190602080890185805b84811015610e3b57825180518752840151848701835b6002811015610e2857825182529186019190860190600101610e0b565b5050509486019491830191600101610df5565b5050508583039086015250610e51818688610da4565b979650505050505050565b634e487b7160e01b600052602160045260246000fd5b8281526040602082015260008251806040840152610e97816060850160208701610cf5565b601f01601f1916919091016060019392505050565b600060208284031215610ebe57600080fd5b505191905056fea26469706673582212203ee45d7cff7f362a0d292f6e70d12def87f1b35f71aecef1d2918c7b8f1ed75764736f6c63430008150033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000080000000000000000000000000984f7b398d577c0adde08293a53ae9d3b6b7a5c5000000000000000000000000f53fa6e5790f9c7700918550d3caf48dec3e0da7000000000000000000000000bef9b2cbb095f2e19d964b1668ee130f729276f100000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000c3c000000000000000000000000000000000000000000000000000000000000052200000000000000000000000000000000000000000000000000000000000005760000000000000000000000000000000000000000000000000000000000000582000000000000000000000000000000000000000000000000000000000000058900000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d72
-----Decoded View---------------
Arg [0] : superVialIds (uint256[]): 3132,1314,1398,1410,1417,2048,3442
Arg [1] : _apesContract (address): 0x984f7B398d577C0ADDE08293a53aE9D3B6b7a5c5
Arg [2] : _vialContract (address): 0xF53FA6e5790F9C7700918550d3CAF48dEC3E0Da7
Arg [3] : signer (address): 0xBef9b2cbb095f2e19d964b1668eE130F729276f1
-----Encoded View---------------
12 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 000000000000000000000000984f7b398d577c0adde08293a53ae9d3b6b7a5c5
Arg [2] : 000000000000000000000000f53fa6e5790f9c7700918550d3caf48dec3e0da7
Arg [3] : 000000000000000000000000bef9b2cbb095f2e19d964b1668ee130f729276f1
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000c3c
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000522
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000576
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000582
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000589
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000800
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000d72
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.