Source Code
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 147 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Withdraw All | 21862690 | 392 days ago | IN | 0 ETH | 0.0000403 | ||||
| Withdraw All | 21831802 | 397 days ago | IN | 0 ETH | 0.00038028 | ||||
| Withdraw All | 21417318 | 455 days ago | IN | 0 ETH | 0.00069851 | ||||
| Withdraw All | 21411372 | 455 days ago | IN | 0 ETH | 0.00048331 | ||||
| Withdraw All | 20993548 | 514 days ago | IN | 0 ETH | 0.00080075 | ||||
| Withdraw All | 20993454 | 514 days ago | IN | 0 ETH | 0.00091098 | ||||
| Withdraw All | 20538167 | 577 days ago | IN | 0 ETH | 0.00002929 | ||||
| Withdraw All | 20423972 | 593 days ago | IN | 0 ETH | 0.00003949 | ||||
| Withdraw All | 20380717 | 599 days ago | IN | 0 ETH | 0.00016774 | ||||
| Withdraw All | 20373782 | 600 days ago | IN | 0 ETH | 0.00012641 | ||||
| Withdraw All | 20373773 | 600 days ago | IN | 0 ETH | 0.00010677 | ||||
| Withdraw All | 20373762 | 600 days ago | IN | 0 ETH | 0.00010276 | ||||
| Withdraw All | 20373754 | 600 days ago | IN | 0 ETH | 0.00011472 | ||||
| Withdraw All | 20373744 | 600 days ago | IN | 0 ETH | 0.00012039 | ||||
| Withdraw All | 20373723 | 600 days ago | IN | 0 ETH | 0.00011987 | ||||
| Withdraw All | 20373713 | 600 days ago | IN | 0 ETH | 0.00011339 | ||||
| Withdraw All | 20346482 | 604 days ago | IN | 0 ETH | 0.00013226 | ||||
| Withdraw All | 20302143 | 610 days ago | IN | 0 ETH | 0.00005595 | ||||
| Withdraw All | 20253274 | 617 days ago | IN | 0 ETH | 0.00004849 | ||||
| Withdraw All | 20083800 | 641 days ago | IN | 0 ETH | 0.00060618 | ||||
| Withdraw All | 20031806 | 648 days ago | IN | 0 ETH | 0.00052793 | ||||
| Withdraw All | 19957554 | 658 days ago | IN | 0 ETH | 0.00012684 | ||||
| Withdraw All | 19919914 | 664 days ago | IN | 0 ETH | 0.0006725 | ||||
| Withdraw All | 19909267 | 665 days ago | IN | 0 ETH | 0.00011827 | ||||
| Withdraw All | 19857639 | 672 days ago | IN | 0 ETH | 0.00010498 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Transfer | 21862690 | 392 days ago | 0.00049 ETH | ||||
| Transfer | 21831802 | 397 days ago | 0.005 ETH | ||||
| Mint Deposit | 21829864 | 397 days ago | 0.0002 ETH | ||||
| Mint Deposit | 21778627 | 404 days ago | 0.0002 ETH | ||||
| Mint Deposit | 21712488 | 413 days ago | 0.0002 ETH | ||||
| Mint Deposit | 21708616 | 414 days ago | 0.0002 ETH | ||||
| Mint Deposit | 21702422 | 415 days ago | 0.0002 ETH | ||||
| Mint Deposit | 21702256 | 415 days ago | 0.0002 ETH | ||||
| Mint Deposit | 21469672 | 447 days ago | 0.0025 ETH | ||||
| Transfer | 21417318 | 455 days ago | 0.0015 ETH | ||||
| Mint Deposit | 21413059 | 455 days ago | 0.0017 ETH | ||||
| Transfer | 21411372 | 455 days ago | 0.0036 ETH | ||||
| Mint Deposit | 21229499 | 481 days ago | 0.003 ETH | ||||
| Mint Deposit | 21226499 | 481 days ago | 0.0015 ETH | ||||
| Mint Deposit | 21168248 | 489 days ago | 0.0062216 ETH | ||||
| Mint Deposit | 21168246 | 489 days ago | 0.0023331 ETH | ||||
| Mint Deposit | 21042478 | 507 days ago | 0.0002 ETH | ||||
| Mint Deposit | 21036913 | 508 days ago | 0.000777 ETH | ||||
| Transfer | 20993548 | 514 days ago | 0.02 ETH | ||||
| Mint Deposit | 20993479 | 514 days ago | 0.0202 ETH | ||||
| Transfer | 20993454 | 514 days ago | 0.04 ETH | ||||
| Mint Deposit | 20993445 | 514 days ago | 0.0202 ETH | ||||
| Mint Deposit | 20993440 | 514 days ago | 0.0202 ETH | ||||
| Mint Deposit | 20872784 | 531 days ago | 0.0008 ETH | ||||
| Mint Deposit | 20864453 | 532 days ago | 0.0052 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
MintPayout
Compiler Version
v0.8.21+commit.d9974bed
Optimization Enabled:
Yes with 250000 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.21;
import {Ownable} from "solady/auth/Ownable.sol";
import {IMintPayout} from "create/interfaces/v1/IMintPayout.sol";
import {IMintContract} from "create/interfaces/v1/IMintContract.sol";
import {Version} from "create/contracts/v1/Version.sol";
import {
MINT_REFERRAL_REASON,
PROTOCOL_FEE_REASON,
PURCHASE_AMOUNT_REASON
} from "create/interfaces/v1/MintPayoutReasons.sol";
contract MintPayout is IMintPayout, Version, Ownable {
/// @inheritdoc IMintPayout
uint256 public protocolFee;
/// @inheritdoc IMintPayout
address public constant protocolFeeRecipientAccount = address(0x4444444444444444444444444444444444444444);
/// @inheritdoc IMintPayout
mapping(address => uint256) public balanceOf;
error InvalidAddress();
error InvalidArrayLength();
error IncorrectDepositAmount();
error InvalidWithdrawAmount();
error TransferFailed();
constructor() Version(1) {
_initializeOwner(tx.origin);
}
/// @inheritdoc IMintPayout
function totalSupply() external view returns (uint256) {
return address(this).balance;
}
/// @inheritdoc IMintPayout
function setProtocolFee(uint256 _protocolFee) external onlyOwner {
protocolFee = _protocolFee;
emit ProtocolFeeUpdated(_protocolFee);
}
/// @inheritdoc IMintPayout
function withdrawProtocolFee(address to, uint256 amount) external onlyOwner {
_withdraw(protocolFeeRecipientAccount, to, amount);
}
/// @inheritdoc IMintPayout
function mintDeposit(address mintContract, address minter, address referrer, uint256 quantity) external payable {
if (mintContract == address(0)) revert InvalidAddress();
if (quantity == 0) revert IncorrectDepositAmount();
if (msg.value == 0) revert IncorrectDepositAmount();
uint256 protocolPayout = protocolFee * quantity;
uint256 referralPayout;
if (referrer != address(0)) {
referralPayout = protocolPayout / 2;
protocolPayout = referralPayout;
}
if (msg.value < protocolPayout + referralPayout) revert IncorrectDepositAmount();
uint256 creatorPayout = msg.value - protocolPayout - referralPayout;
address creator;
if (creatorPayout > 0) {
creator = IMintContract(mintContract).payoutRecipient();
if (creator == address(0)) {
creator = protocolFeeRecipientAccount;
}
_deposit(msg.sender, creator, PURCHASE_AMOUNT_REASON, creatorPayout);
}
if (referralPayout > 0) {
_deposit(msg.sender, referrer, MINT_REFERRAL_REASON, referralPayout);
}
if (protocolPayout > 0) {
_deposit(msg.sender, protocolFeeRecipientAccount, PROTOCOL_FEE_REASON, protocolPayout);
}
emit MintDeposit(
msg.sender,
mintContract,
minter,
referrer,
creator,
creatorPayout,
referralPayout,
protocolPayout,
msg.value,
quantity,
protocolFee
);
}
/// @inheritdoc IMintPayout
function deposit(address to, bytes4 reason) external payable {
if (to == address(0)) revert InvalidAddress();
_deposit(msg.sender, to, reason, msg.value);
}
/// @inheritdoc IMintPayout
function depositBatch(address[] calldata recipients, uint256[] calldata amounts, bytes4[] calldata reasons)
external
payable
{
uint256 numRecipients = recipients.length;
if (numRecipients != amounts.length || numRecipients != reasons.length) {
revert InvalidArrayLength();
}
uint256 expectedTotalValue;
for (uint256 i; i < numRecipients;) {
expectedTotalValue += amounts[i];
unchecked {
++i;
}
}
if (msg.value != expectedTotalValue) revert IncorrectDepositAmount();
address currentRecipient;
uint256 currentAmount;
for (uint256 i; i < numRecipients;) {
currentRecipient = recipients[i];
currentAmount = amounts[i];
if (currentRecipient == address(0)) revert InvalidAddress();
_deposit(msg.sender, currentRecipient, reasons[i], currentAmount);
unchecked {
++i;
}
}
}
function _deposit(address from, address to, bytes4 reason, uint256 amount) internal {
balanceOf[to] += amount;
emit Deposit(from, to, reason, amount);
}
/// @inheritdoc IMintPayout
function withdraw(address to, uint256 amount) external {
_withdraw(msg.sender, to, amount);
}
/// @inheritdoc IMintPayout
function withdrawAll(address to) external {
_withdraw(msg.sender, to, balanceOf[msg.sender]);
}
function _withdraw(address from, address to, uint256 amount) internal {
if (to == address(0)) revert InvalidAddress();
if (amount == 0 || amount > balanceOf[from]) revert InvalidWithdrawAmount();
balanceOf[from] -= amount;
emit Withdraw(from, to, amount);
(bool success,) = to.call{value: amount}("");
if (!success) revert TransferFailed();
}
}// 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();
/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
/* 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: `not(_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.
uint256 private constant _OWNER_SLOT_NOT = 0x8b78c6d8;
/// 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 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 {
/// @solidity memory-safe-assembly
assembly {
// Clean the upper 96 bits.
newOwner := shr(96, shl(96, newOwner))
// Store the new value.
sstore(not(_OWNER_SLOT_NOT), 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 {
/// @solidity memory-safe-assembly
assembly {
let ownerSlot := not(_OWNER_SLOT_NOT)
// 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(not(_OWNER_SLOT_NOT)))) {
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(not(_OWNER_SLOT_NOT))
}
}
/// @dev Returns the expiry timestamp for the two-step ownership handover to `pendingOwner`.
function ownershipHandoverExpiresAt(address pendingOwner)
public
view
virtual
returns (uint256 result)
{
/// @solidity memory-safe-assembly
assembly {
// Compute the handover slot.
mstore(0x0c, _HANDOVER_SLOT_SEED)
mstore(0x00, pendingOwner)
// Load the handover slot.
result := sload(keccak256(0x0c, 0x20))
}
}
/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
/* MODIFIERS */
/*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
/// @dev Marks a function as only callable by the owner.
modifier onlyOwner() virtual {
_checkOwner();
_;
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.21;
interface IMintPayoutEvents {
/// @notice Emitted when a deposit has been made.
/// @param from The depositor's address.
/// @param to The address receiving the deposit.
/// @param reason The reason code for the deposit.
/// @param amount The deposit amount.
event Deposit(address from, address to, bytes4 reason, uint256 amount);
/// @notice Emitted when a withdrawal has been made.
/// @param from The address withdrawing.
/// @param to The address receiving the withdrawn funds.
/// @param amount The withdrawal amount.
event Withdraw(address from, address to, uint256 amount);
/// @notice Emitted during a mint deposit to provide additional context.
/// @param depositedBy The address of the mint initiator.
/// @param mintContract The mint contract address this mint deposit refers to.
/// @param minter The address of the person minting.
/// @param referrer The address of the referrer, or the zero address for no referrer.
/// @param creator The address of the contract creator, or the protocol fee recipient if none.
/// @param creatorPayout The amount being paid to the creator.
/// @param referralPayout The amount being paid to the referrer.
/// @param protocolPayout The amount being paid to the protocol.
/// @param totalAmount The total deposit amount.
/// @param quantity The number of tokens being minted.
/// @param protocolFee The per-mint fee for the protocol.
event MintDeposit(
address depositedBy,
address mintContract,
address minter,
address referrer,
address creator,
uint256 creatorPayout,
uint256 referralPayout,
uint256 protocolPayout,
uint256 totalAmount,
uint256 quantity,
uint256 protocolFee
);
/// @notice Emitted when the protocol fee is updated.
/// @param fee The new protocol fee.
event ProtocolFeeUpdated(uint256 fee);
}
interface IMintPayout is IMintPayoutEvents {
function balanceOf(address owner) external view returns (uint256);
function totalSupply() external view returns (uint256);
/// @notice The current protocol fee per-mint.
function protocolFee() external view returns (uint256 fee);
/// @notice Sets the protocol fee per-mint.
/// @dev Only callable by the owner.
/// @param fee The new protocol fee.
function setProtocolFee(uint256 fee) external;
/// @notice Magic value used to represent the fees belonging to the protocol.
function protocolFeeRecipientAccount() external view returns (address);
/// @notice Withdraws from the protocol fee balance.
/// @dev Only callable by the owner.
/// @param to The address receiving the withdrawn funds.
/// @param amount The withdrawal amount.
function withdrawProtocolFee(address to, uint256 amount) external;
/// @notice Deposits ether for a mint.
/// @dev Ensure that `quantity` is > 0. The `protocolFee` should be per-mint, not the total taken.
/// Will trigger a `MintDeposit` event, followed by `Deposit` events for:
/// creator payout, protocol payout, and referrer payout (if a referrer is specified).
/// @param mintContract The mint contract address this mint deposit refers to.
/// @param minter The address of the minter.
/// @param referrer The address of the referrer, or the zero address for no referrer.
/// @param quantity The amount being minted.
function mintDeposit(address mintContract, address minter, address referrer, uint256 quantity) external payable;
/// @notice Deposits ether to an address.
/// @param to The address receiving the deposit.
/// @param reason The reason code for the deposit.
function deposit(address to, bytes4 reason) external payable;
/// @notice Deposits ether to multiple addresses.
/// @dev The length of `recipients`, `amounts`, and `reasons` must be the same.
/// @param recipients List of addresses receiving the deposits.
/// @param amounts List of deposit amounts.
/// @param reasons List of reason codes for the deposits.
function depositBatch(address[] calldata recipients, uint256[] calldata amounts, bytes4[] calldata reasons)
external
payable;
/// @notice Withdraws ether from the `msg.sender`'s account to a specified address.
/// @param to The address receiving the withdrawn funds.
/// @param amount The withdrawal amount.
function withdraw(address to, uint256 amount) external;
/// @notice Withdraws all ether from the `msg.sender`'s account to a specified address.
/// @param to The address receiving the withdrawn funds.
function withdrawAll(address to) external;
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.21;
import {IMetadataRenderer} from "create/interfaces/v1/IMetadataRenderer.sol";
interface IMintContractEvents {
/// @notice Emitted when the royalty is updated.
event RoyaltyUpdated(uint256 bps);
/// @notice Emitted when a new mint module is added.
event ModuleAdded(address module);
/// @notice Emitted when a mint module is removed.
event ModuleRemoved(address module);
/// @notice Emitted when the metadata renderer is updated.
event MetadataRendererUpdated(address renderer);
}
interface IMintContract is IMintContractEvents {
/// @notice Mints tokens using approved mint modules.
/// @param to The address receiving the minted tokens.
/// @param quantity The quantity of tokens to mint.
function mint(address to, uint256 quantity) external;
/// @notice Mints tokens, callable only by the contract owner.
/// @param to The address receiving the minted tokens.
/// @param quantity The quantity of tokens to mint.
function adminMint(address to, uint256 quantity) external;
/// @notice Retrieves the payout recipient address for this mint contract.
/// @return recipient address of the payout recipient.
function payoutRecipient() external view returns (address recipient);
/// @notice Returns the total number of tokens minted.
/// @return total number of tokens minted.
function totalMinted() external view returns (uint256 total);
/// @notice Adds a new mint module as an approved minter.
/// @dev Can only be executed by the owner of the contract.
/// Must be approved in the MintModuleRegistry.
/// @param mintModule The contract address of the mint module.
function addMintModule(address mintModule) external;
/// @notice Removes a mint module as an approved minter.
/// @dev Can only be executed by the owner of the contract.
/// @param mintModule The contract address of the mint module.
function removeMintModule(address mintModule) external;
/// @notice Returns whether a mint module is approved.
/// @param mintModule The contract address of the mint module.
/// @return isApproved Whether the mint module is approved.
function isMintModuleApproved(address mintModule) external view returns (bool isApproved);
/// @notice Updates configuration located in an external contract.
/// @dev Can only be executed by the owner of the contract.
/// The cardinality of `configurables` and `configData` must be the same.
/// @param configurables The contract addresses to configure.
/// @param configData The configuration data for the contracts.
function updateExternalConfiguration(address[] calldata configurables, bytes[] calldata configData) external;
/// @notice Sets the metadata renderer.
/// @dev This will not request a metadata refresh. If needed, call `refreshMetadata`.
/// @param renderer The new metadata renderer.
function setMetadataRenderer(IMetadataRenderer renderer) external;
/// @notice Returns the metadata renderer for this contract.
/// @return metadataRenderer The metadata renderer.
function metadataRenderer() external returns (IMetadataRenderer metadataRenderer);
/// @notice Triggers a batch metadata update.
function refreshMetadata() external;
/// @notice Updates the royalty for this contract.
/// @dev Can only be called by the contract owner.
/// Emits a `RoyaltyUpdated` event.
/// @param bps The new royalty.
function setRoyalty(uint256 bps) external;
/// @notice Returns the royalty for this contract.
/// @return bps The royalty.
function royaltyBps() external returns (uint256 bps);
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.21;
abstract contract Version {
/// @notice The version of the contract.
uint32 public immutable contractVersion;
constructor(uint32 _contractVersion) {
contractVersion = _contractVersion;
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.21;
bytes4 constant MINT_REFERRAL_REASON = bytes4(keccak256("MINT_REFERRAL"));
bytes4 constant PROTOCOL_FEE_REASON = bytes4(keccak256("PROTOCOL_FEE"));
bytes4 constant PURCHASE_AMOUNT_REASON = bytes4(keccak256("PURCHASE_AMOUNT"));// SPDX-License-Identifier: MIT
pragma solidity ^0.8.21;
interface IMetadataRenderer {
/// @notice Retrieves the token URI for the specified token ID.
/// @param tokenId The ID of the token.
/// @return uri The URI of the token.
function tokenURI(uint256 tokenId) external view returns (string memory uri);
}{
"remappings": [
"ERC721A/=lib/ERC721A/contracts/",
"ds-test/=lib/forge-std/lib/ds-test/src/",
"forge-std/=lib/forge-std/src/",
"openzeppelin/=lib/openzeppelin-contracts/contracts/",
"solmate/=lib/solmate/src/",
"solady/=lib/solady/src/",
"fundrop/=src/Fundrop/",
"operator-filter-registry/=lib/operator-filter-registry/src/",
"base64/=lib/base64/",
"create/=src/Create/",
"erc4626-tests/=lib/operator-filter-registry/lib/openzeppelin-contracts/lib/erc4626-tests/",
"erc721a-upgradeable/=lib/erc721a-upgradeable/contracts/",
"openzeppelin-contracts-upgradeable/=lib/operator-filter-registry/lib/openzeppelin-contracts-upgradeable/",
"openzeppelin-contracts/=lib/openzeppelin-contracts/"
],
"optimizer": {
"enabled": true,
"runs": 250000
},
"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
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"IncorrectDepositAmount","type":"error"},{"inputs":[],"name":"InvalidAddress","type":"error"},{"inputs":[],"name":"InvalidArrayLength","type":"error"},{"inputs":[],"name":"InvalidWithdrawAmount","type":"error"},{"inputs":[],"name":"NewOwnerIsZeroAddress","type":"error"},{"inputs":[],"name":"NoHandoverRequest","type":"error"},{"inputs":[],"name":"TransferFailed","type":"error"},{"inputs":[],"name":"Unauthorized","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"bytes4","name":"reason","type":"bytes4"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"depositedBy","type":"address"},{"indexed":false,"internalType":"address","name":"mintContract","type":"address"},{"indexed":false,"internalType":"address","name":"minter","type":"address"},{"indexed":false,"internalType":"address","name":"referrer","type":"address"},{"indexed":false,"internalType":"address","name":"creator","type":"address"},{"indexed":false,"internalType":"uint256","name":"creatorPayout","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"referralPayout","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"protocolPayout","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"quantity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"protocolFee","type":"uint256"}],"name":"MintDeposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pendingOwner","type":"address"}],"name":"OwnershipHandoverCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pendingOwner","type":"address"}],"name":"OwnershipHandoverRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"}],"name":"ProtocolFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cancelOwnershipHandover","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pendingOwner","type":"address"}],"name":"completeOwnershipHandover","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"contractVersion","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"bytes4","name":"reason","type":"bytes4"}],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes4[]","name":"reasons","type":"bytes4[]"}],"name":"depositBatch","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"mintContract","type":"address"},{"internalType":"address","name":"minter","type":"address"},{"internalType":"address","name":"referrer","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mintDeposit","outputs":[],"stateMutability":"payable","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":"protocolFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protocolFeeRecipientAccount","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"requestOwnershipHandover","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_protocolFee","type":"uint256"}],"name":"setProtocolFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawProtocolFee","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60a060405234801561001057600080fd5b50600160805261001f32610024565b610060565b6001600160a01b0316638b78c6d8198190558060007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a350565b60805161114161007b60003960006102be01526111416000f3fe6080604052600436106101445760003560e01c80638da5cb5b116100c0578063f04e283e11610074578063f3fef3a311610059578063f3fef3a314610331578063fa09e63014610351578063fee81cf41461037157600080fd5b8063f04e283e1461030b578063f2fde38b1461031e57600080fd5b8063a05230af116100a5578063a05230af14610299578063a0a8e460146102ac578063b0e21e8a146102f557600080fd5b80638da5cb5b146102525780639d080e851461028657600080fd5b80634d3a2a8c1161011757806370a08231116100fc57806370a08231146101fd578063715018a61461022a578063787dce3d1461023257600080fd5b80634d3a2a8c146101d557806354d1f13d146101f557600080fd5b80630fea4a29146101495780631628e9ab1461015e57806318160ddd146101b057806325692962146101cd575b600080fd5b61015c610157366004610ded565b6103a4565b005b34801561016a57600080fd5b5061018673444444444444444444444444444444444444444481565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156101bc57600080fd5b50475b6040519081526020016101a7565b61015c6106f1565b3480156101e157600080fd5b5061015c6101f0366004610e3e565b610741565b61015c61076c565b34801561020957600080fd5b506101bf610218366004610e6a565b60016020526000908152604090205481565b61015c6107a8565b34801561023e57600080fd5b5061015c61024d366004610e8e565b6107bc565b34801561025e57600080fd5b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffff7487392754610186565b61015c610294366004610ef3565b6107ff565b61015c6102a7366004610fc2565b6109a2565b3480156102b857600080fd5b506102e07f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020016101a7565b34801561030157600080fd5b506101bf60005481565b61015c610319366004610e6a565b6109fb565b61015c61032c366004610e6a565b610a3b565b34801561033d57600080fd5b5061015c61034c366004610e3e565b610a62565b34801561035d57600080fd5b5061015c61036c366004610e6a565b610a6d565b34801561037d57600080fd5b506101bf61038c366004610e6a565b63389a75e1600c908152600091909152602090205490565b73ffffffffffffffffffffffffffffffffffffffff84166103f1576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060000361042b576040517f9ad7e28700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b34600003610465576040517f9ad7e28700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000816000546104759190611026565b9050600073ffffffffffffffffffffffffffffffffffffffff8416156104a6576104a0600283611043565b90508091505b6104b0818361107e565b3410156104e9576040517f9ad7e28700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000816104f68434611091565b6105009190611091565b9050600081156105d9578773ffffffffffffffffffffffffffffffffffffffff16633fb80b156040518163ffffffff1660e01b8152600401602060405180830381865afa158015610555573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057991906110a4565b905073ffffffffffffffffffffffffffffffffffffffff81166105ad57507344444444444444444444444444444444444444445b6105d933827fc411e70444b73b3a5336515eb7f6a684f96d9b53ddebb07972f2ca32cd9ca23b85610a89565b821561060b5761060b33877fb9c7dcfcea3408eb0f704ccbfb46c10b4dc310e57a4722a39b53a9d7f01ee8ff86610a89565b831561065157610651337344444444444444444444444444444444444444447faa072a75f148988e1647e65b0d00c2928a6ed1bc51c4671e0ac15252c77dc49587610a89565b6000546040805133815273ffffffffffffffffffffffffffffffffffffffff8b811660208301528a81168284015289811660608301528416608082015260a0810185905260c0810186905260e08101879052346101008201526101208101889052610140810192909252517f4a55f704187cad507053b8534bedfc41df74e86e5bef2c2709406c006f52ad17918190036101600190a15050505050505050565b60006202a30067ffffffffffffffff164201905063389a75e1600c5233600052806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d600080a250565b610749610b48565b6107687344444444444444444444444444444444444444448383610b7e565b5050565b63389a75e1600c523360005260006020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92600080a2565b6107b0610b48565b6107ba6000610d65565b565b6107c4610b48565b60008190556040518181527fd10d75876659a287a59a6ccfa2e3fff42f84d94b542837acd30bc184d562de409060200160405180910390a150565b84838114158061080f5750808214155b15610846576040517f9d89020a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805b8281101561088057868682818110610864576108646110c1565b9050602002013582610876919061107e565b915060010161084a565b508034146108ba576040517f9ad7e28700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060005b84811015610995578a8a828181106108da576108da6110c1565b90506020020160208101906108ef9190610e6a565b9250888882818110610903576109036110c1565b602002919091013592505073ffffffffffffffffffffffffffffffffffffffff831661095b576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61098d3384898985818110610972576109726110c1565b905060200201602081019061098791906110f0565b85610a89565b6001016108c0565b5050505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff82166109ef576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61076833838334610a89565b610a03610b48565b63389a75e1600c52806000526020600c208054421115610a2b57636f5e88186000526004601cfd5b60009055610a3881610d65565b50565b610a43610b48565b8060601b610a5957637448fbae6000526004601cfd5b610a3881610d65565b610768338383610b7e565b33600081815260016020526040902054610a3891908390610b7e565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602052604081208054839290610abe90849061107e565b90915550506040805173ffffffffffffffffffffffffffffffffffffffff8681168252851660208201527fffffffff000000000000000000000000000000000000000000000000000000008416818301526060810183905290517f879eaeb54de761b418d321d70c187f266a128356d6c370564c16781625e7001d9181900360800190a150505050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739275433146107ba576382b429006000526004601cfd5b73ffffffffffffffffffffffffffffffffffffffff8216610bcb576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b801580610bfc575073ffffffffffffffffffffffffffffffffffffffff831660009081526001602052604090205481115b15610c33576040517fdb73cdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602052604081208054839290610c68908490611091565b90915550506040805173ffffffffffffffffffffffffffffffffffffffff8086168252841660208201529081018290527f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb9060600160405180910390a160008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114610d1f576040519150601f19603f3d011682016040523d82523d6000602084013e610d24565b606091505b5050905080610d5f576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927805473ffffffffffffffffffffffffffffffffffffffff9092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a355565b73ffffffffffffffffffffffffffffffffffffffff81168114610a3857600080fd5b60008060008060808587031215610e0357600080fd5b8435610e0e81610dcb565b93506020850135610e1e81610dcb565b92506040850135610e2e81610dcb565b9396929550929360600135925050565b60008060408385031215610e5157600080fd5b8235610e5c81610dcb565b946020939093013593505050565b600060208284031215610e7c57600080fd5b8135610e8781610dcb565b9392505050565b600060208284031215610ea057600080fd5b5035919050565b60008083601f840112610eb957600080fd5b50813567ffffffffffffffff811115610ed157600080fd5b6020830191508360208260051b8501011115610eec57600080fd5b9250929050565b60008060008060008060608789031215610f0c57600080fd5b863567ffffffffffffffff80821115610f2457600080fd5b610f308a838b01610ea7565b90985096506020890135915080821115610f4957600080fd5b610f558a838b01610ea7565b90965094506040890135915080821115610f6e57600080fd5b50610f7b89828a01610ea7565b979a9699509497509295939492505050565b80357fffffffff0000000000000000000000000000000000000000000000000000000081168114610fbd57600080fd5b919050565b60008060408385031215610fd557600080fd5b8235610fe081610dcb565b9150610fee60208401610f8d565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808202811582820484141761103d5761103d610ff7565b92915050565b600082611079577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8082018082111561103d5761103d610ff7565b8181038181111561103d5761103d610ff7565b6000602082840312156110b657600080fd5b8151610e8781610dcb565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561110257600080fd5b610e8782610f8d56fea2646970667358221220610f94766b81e8c03b023f1f6893f9ca616f198d56f3db26aeb141532d12940d64736f6c63430008150033
Deployed Bytecode
0x6080604052600436106101445760003560e01c80638da5cb5b116100c0578063f04e283e11610074578063f3fef3a311610059578063f3fef3a314610331578063fa09e63014610351578063fee81cf41461037157600080fd5b8063f04e283e1461030b578063f2fde38b1461031e57600080fd5b8063a05230af116100a5578063a05230af14610299578063a0a8e460146102ac578063b0e21e8a146102f557600080fd5b80638da5cb5b146102525780639d080e851461028657600080fd5b80634d3a2a8c1161011757806370a08231116100fc57806370a08231146101fd578063715018a61461022a578063787dce3d1461023257600080fd5b80634d3a2a8c146101d557806354d1f13d146101f557600080fd5b80630fea4a29146101495780631628e9ab1461015e57806318160ddd146101b057806325692962146101cd575b600080fd5b61015c610157366004610ded565b6103a4565b005b34801561016a57600080fd5b5061018673444444444444444444444444444444444444444481565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156101bc57600080fd5b50475b6040519081526020016101a7565b61015c6106f1565b3480156101e157600080fd5b5061015c6101f0366004610e3e565b610741565b61015c61076c565b34801561020957600080fd5b506101bf610218366004610e6a565b60016020526000908152604090205481565b61015c6107a8565b34801561023e57600080fd5b5061015c61024d366004610e8e565b6107bc565b34801561025e57600080fd5b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffff7487392754610186565b61015c610294366004610ef3565b6107ff565b61015c6102a7366004610fc2565b6109a2565b3480156102b857600080fd5b506102e07f000000000000000000000000000000000000000000000000000000000000000181565b60405163ffffffff90911681526020016101a7565b34801561030157600080fd5b506101bf60005481565b61015c610319366004610e6a565b6109fb565b61015c61032c366004610e6a565b610a3b565b34801561033d57600080fd5b5061015c61034c366004610e3e565b610a62565b34801561035d57600080fd5b5061015c61036c366004610e6a565b610a6d565b34801561037d57600080fd5b506101bf61038c366004610e6a565b63389a75e1600c908152600091909152602090205490565b73ffffffffffffffffffffffffffffffffffffffff84166103f1576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060000361042b576040517f9ad7e28700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b34600003610465576040517f9ad7e28700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000816000546104759190611026565b9050600073ffffffffffffffffffffffffffffffffffffffff8416156104a6576104a0600283611043565b90508091505b6104b0818361107e565b3410156104e9576040517f9ad7e28700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000816104f68434611091565b6105009190611091565b9050600081156105d9578773ffffffffffffffffffffffffffffffffffffffff16633fb80b156040518163ffffffff1660e01b8152600401602060405180830381865afa158015610555573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057991906110a4565b905073ffffffffffffffffffffffffffffffffffffffff81166105ad57507344444444444444444444444444444444444444445b6105d933827fc411e70444b73b3a5336515eb7f6a684f96d9b53ddebb07972f2ca32cd9ca23b85610a89565b821561060b5761060b33877fb9c7dcfcea3408eb0f704ccbfb46c10b4dc310e57a4722a39b53a9d7f01ee8ff86610a89565b831561065157610651337344444444444444444444444444444444444444447faa072a75f148988e1647e65b0d00c2928a6ed1bc51c4671e0ac15252c77dc49587610a89565b6000546040805133815273ffffffffffffffffffffffffffffffffffffffff8b811660208301528a81168284015289811660608301528416608082015260a0810185905260c0810186905260e08101879052346101008201526101208101889052610140810192909252517f4a55f704187cad507053b8534bedfc41df74e86e5bef2c2709406c006f52ad17918190036101600190a15050505050505050565b60006202a30067ffffffffffffffff164201905063389a75e1600c5233600052806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d600080a250565b610749610b48565b6107687344444444444444444444444444444444444444448383610b7e565b5050565b63389a75e1600c523360005260006020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92600080a2565b6107b0610b48565b6107ba6000610d65565b565b6107c4610b48565b60008190556040518181527fd10d75876659a287a59a6ccfa2e3fff42f84d94b542837acd30bc184d562de409060200160405180910390a150565b84838114158061080f5750808214155b15610846576040517f9d89020a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805b8281101561088057868682818110610864576108646110c1565b9050602002013582610876919061107e565b915060010161084a565b508034146108ba576040517f9ad7e28700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060005b84811015610995578a8a828181106108da576108da6110c1565b90506020020160208101906108ef9190610e6a565b9250888882818110610903576109036110c1565b602002919091013592505073ffffffffffffffffffffffffffffffffffffffff831661095b576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61098d3384898985818110610972576109726110c1565b905060200201602081019061098791906110f0565b85610a89565b6001016108c0565b5050505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff82166109ef576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61076833838334610a89565b610a03610b48565b63389a75e1600c52806000526020600c208054421115610a2b57636f5e88186000526004601cfd5b60009055610a3881610d65565b50565b610a43610b48565b8060601b610a5957637448fbae6000526004601cfd5b610a3881610d65565b610768338383610b7e565b33600081815260016020526040902054610a3891908390610b7e565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602052604081208054839290610abe90849061107e565b90915550506040805173ffffffffffffffffffffffffffffffffffffffff8681168252851660208201527fffffffff000000000000000000000000000000000000000000000000000000008416818301526060810183905290517f879eaeb54de761b418d321d70c187f266a128356d6c370564c16781625e7001d9181900360800190a150505050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739275433146107ba576382b429006000526004601cfd5b73ffffffffffffffffffffffffffffffffffffffff8216610bcb576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b801580610bfc575073ffffffffffffffffffffffffffffffffffffffff831660009081526001602052604090205481115b15610c33576040517fdb73cdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602052604081208054839290610c68908490611091565b90915550506040805173ffffffffffffffffffffffffffffffffffffffff8086168252841660208201529081018290527f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb9060600160405180910390a160008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114610d1f576040519150601f19603f3d011682016040523d82523d6000602084013e610d24565b606091505b5050905080610d5f576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927805473ffffffffffffffffffffffffffffffffffffffff9092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a355565b73ffffffffffffffffffffffffffffffffffffffff81168114610a3857600080fd5b60008060008060808587031215610e0357600080fd5b8435610e0e81610dcb565b93506020850135610e1e81610dcb565b92506040850135610e2e81610dcb565b9396929550929360600135925050565b60008060408385031215610e5157600080fd5b8235610e5c81610dcb565b946020939093013593505050565b600060208284031215610e7c57600080fd5b8135610e8781610dcb565b9392505050565b600060208284031215610ea057600080fd5b5035919050565b60008083601f840112610eb957600080fd5b50813567ffffffffffffffff811115610ed157600080fd5b6020830191508360208260051b8501011115610eec57600080fd5b9250929050565b60008060008060008060608789031215610f0c57600080fd5b863567ffffffffffffffff80821115610f2457600080fd5b610f308a838b01610ea7565b90985096506020890135915080821115610f4957600080fd5b610f558a838b01610ea7565b90965094506040890135915080821115610f6e57600080fd5b50610f7b89828a01610ea7565b979a9699509497509295939492505050565b80357fffffffff0000000000000000000000000000000000000000000000000000000081168114610fbd57600080fd5b919050565b60008060408385031215610fd557600080fd5b8235610fe081610dcb565b9150610fee60208401610f8d565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808202811582820484141761103d5761103d610ff7565b92915050565b600082611079577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8082018082111561103d5761103d610ff7565b8181038181111561103d5761103d610ff7565b6000602082840312156110b657600080fd5b8151610e8781610dcb565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561110257600080fd5b610e8782610f8d56fea2646970667358221220610f94766b81e8c03b023f1f6893f9ca616f198d56f3db26aeb141532d12940d64736f6c63430008150033
Loading...
Loading
Loading...
Loading
Net Worth in USD
$23,946.67
Net Worth in ETH
10.218885
Token Allocations
ETH
100.00%
Multichain Portfolio | 33 Chains
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.