// SPDX-License-Identifier: MIT
pragma solidity 0.8.24;
import { ERC20 } from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol";
import { Ownable2Step } from "@openzeppelin/contracts/access/Ownable2Step.sol";
import { ReentrancyGuard } from "@openzeppelin/contracts/utils/ReentrancyGuard.sol";
contract Robinboo is ERC20, Ownable2Step, ReentrancyGuard {
enum MintState {
Pending,
Active,
Paused,
Ended
}
enum SettlementState {
Pending,
Refunding,
Transferred
}
struct MinterInfo {
uint8 mintedUnits;
bool ethReturned;
}
uint256 public constant TOTAL_SUPPLY = 1_000_000_000 ether;
uint256 public constant PUBLIC_INVENTORY = 800_000_000 ether;
uint256 public constant PROJECT_RESERVE = 200_000_000 ether;
uint256 public constant TOKENS_PER_UNIT = 16_000 ether;
uint32 public constant MAX_MINT_UNITS = 50_000;
uint8 public constant MAX_UNITS_PER_WALLET = 10;
uint256 public constant MAX_REFUND_BATCH = 100;
error ZeroAddress();
error ZeroMintPrice();
error InvalidMintState(MintState current);
error InvalidUnits();
error WalletLimitExceeded(uint256 requestedTotal, uint256 maximum);
error MintSupplyExceeded(uint256 requestedTotal, uint256 maximum);
error IncorrectPayment(uint256 sent, uint256 required);
error MinterIndexOutOfBounds(uint256 index);
error TradingNotEnabled();
error TradingAlreadyEnabled();
error InvalidSettlementState(SettlementState current);
error InvalidRefundRange(uint256 startIndex, uint256 count);
error RefundBatchTooLarge(uint256 count, uint256 maximum);
error ETHTransferFailed(address recipient);
event MintStateChanged(MintState indexed previousState, MintState indexed newState);
event Minted(address indexed buyer, uint256 units, uint256 booAmount, uint256 ethAmount);
event PreTradingAllowedSet(address indexed account, bool allowed);
event TradingEnabled();
event FullRefundStarted(uint256 minterCount, uint256 totalMintedUnits);
event ETHReturned(address indexed minter, uint256 units, uint256 amount);
event ProceedsTransferred(address indexed recipient, uint256 amount);
address public immutable projectWallet;
uint256 public immutable mintPrice;
MintState public mintState;
SettlementState public settlementState;
bool public tradingEnabled;
uint32 public totalMintedUnits;
uint256 public totalETHReturned;
mapping(address => MinterInfo) public minterInfo;
address[] private minterList;
mapping(address => bool) public preTradingAllowed;
constructor(
string memory name_,
string memory symbol_,
address owner_,
address projectWallet_,
uint256 mintPrice_
) ERC20(name_, symbol_) Ownable(_validateAddress(owner_)) {
if (projectWallet_ == address(0)) revert ZeroAddress();
if (mintPrice_ == 0) revert ZeroMintPrice();
projectWallet = projectWallet_;
mintPrice = mintPrice_;
preTradingAllowed[projectWallet_] = true;
_mint(address(this), PUBLIC_INVENTORY);
_mint(projectWallet_, PROJECT_RESERVE);
}
function startMint() external onlyOwner {
if (mintState != MintState.Pending) revert InvalidMintState(mintState);
_changeMintState(MintState.Active);
}
function pauseMint() external onlyOwner {
if (mintState != MintState.Active) revert InvalidMintState(mintState);
_changeMintState(MintState.Paused);
}
function resumeMint() external onlyOwner {
if (mintState != MintState.Paused) revert InvalidMintState(mintState);
_changeMintState(MintState.Active);
}
function endMint() external onlyOwner {
if (mintState != MintState.Active && mintState != MintState.Paused) {
revert InvalidMintState(mintState);
}
_changeMintState(MintState.Ended);
}
function setPreTradingAllowed(address account, bool allowed) external onlyOwner {
if (tradingEnabled) revert TradingAlreadyEnabled();
if (account == address(0)) revert ZeroAddress();
preTradingAllowed[account] = allowed;
emit PreTradingAllowedSet(account, allowed);
}
function enableTrading() external onlyOwner {
if (tradingEnabled) revert TradingAlreadyEnabled();
if (mintState != MintState.Ended) revert InvalidMintState(mintState);
tradingEnabled = true;
emit TradingEnabled();
}
function startFullRefund() external onlyOwner {
if (mintState != MintState.Ended) revert InvalidMintState(mintState);
if (settlementState != SettlementState.Pending) {
revert InvalidSettlementState(settlementState);
}
settlementState = SettlementState.Refunding;
emit FullRefundStarted(minterList.length, totalMintedUnits);
}
function refundBatch(uint256 startIndex, uint256 count) external onlyOwner nonReentrant {
if (settlementState != SettlementState.Refunding) {
revert InvalidSettlementState(settlementState);
}
if (count == 0) revert InvalidRefundRange(startIndex, count);
if (count > MAX_REFUND_BATCH) revert RefundBatchTooLarge(count, MAX_REFUND_BATCH);
uint256 length = minterList.length;
if (startIndex >= length) revert InvalidRefundRange(startIndex, count);
uint256 endIndex = startIndex + count;
if (endIndex > length) endIndex = length;
for (uint256 i = startIndex; i < endIndex; ++i) {
address minter = minterList[i];
MinterInfo storage info = minterInfo[minter];
if (info.ethReturned) continue;
uint256 units = info.mintedUnits;
uint256 amount = units * mintPrice;
info.ethReturned = true;
totalETHReturned += amount;
(bool success,) = payable(minter).call{ value: amount }("");
if (!success) revert ETHTransferFailed(minter);
emit ETHReturned(minter, units, amount);
}
}
function transferProceeds(address payable recipient) external onlyOwner nonReentrant {
if (mintState != MintState.Ended) revert InvalidMintState(mintState);
if (settlementState != SettlementState.Pending) {
revert InvalidSettlementState(settlementState);
}
if (recipient == address(0)) revert ZeroAddress();
settlementState = SettlementState.Transferred;
uint256 amount = address(this).balance;
(bool success,) = recipient.call{ value: amount }("");
if (!success) revert ETHTransferFailed(recipient);
emit ProceedsTransferred(recipient, amount);
}
function mint(uint256 units) external payable {
_processMint(msg.sender, units, msg.value);
}
function minterCount() external view returns (uint256) {
return minterList.length;
}
function minterAt(uint256 index) external view returns (address) {
if (index >= minterList.length) revert MinterIndexOutOfBounds(index);
return minterList[index];
}
function _processMint(address buyer, uint256 units, uint256 payment) internal {
if (mintState != MintState.Active) revert InvalidMintState(mintState);
if (units == 0) revert InvalidUnits();
MinterInfo storage info = minterInfo[buyer];
uint256 requestedWalletTotal = uint256(info.mintedUnits) + units;
if (requestedWalletTotal > MAX_UNITS_PER_WALLET) {
revert WalletLimitExceeded(requestedWalletTotal, MAX_UNITS_PER_WALLET);
}
uint256 requestedGlobalTotal = uint256(totalMintedUnits) + units;
if (requestedGlobalTotal > MAX_MINT_UNITS) {
revert MintSupplyExceeded(requestedGlobalTotal, MAX_MINT_UNITS);
}
uint256 requiredPayment = units * mintPrice;
if (payment != requiredPayment) revert IncorrectPayment(payment, requiredPayment);
if (info.mintedUnits == 0) minterList.push(buyer);
info.mintedUnits = uint8(requestedWalletTotal);
totalMintedUnits = uint32(requestedGlobalTotal);
if (requestedGlobalTotal == MAX_MINT_UNITS) _changeMintState(MintState.Ended);
uint256 booAmount = units * TOKENS_PER_UNIT;
_transfer(address(this), buyer, booAmount);
emit Minted(buyer, units, booAmount, payment);
}
function _update(address from, address to, uint256 value) internal override {
if (
!tradingEnabled && from != address(0) && from != address(this)
&& !preTradingAllowed[from]
) revert TradingNotEnabled();
super._update(from, to, value);
}
function _changeMintState(MintState newState) private {
MintState previousState = mintState;
mintState = newState;
emit MintStateChanged(previousState, newState);
}
function _validateAddress(address account) private pure returns (address) {
if (account == address(0)) revert ZeroAddress();
return account;
}
}[
{
"type": "constructor",
"inputs": [
{
"name": "name_",
"type": "string",
"internalType": "string"
},
{
"name": "symbol_",
"type": "string",
"internalType": "string"
},
{
"name": "owner_",
"type": "address",
"internalType": "address"
},
{
"name": "projectWallet_",
"type": "address",
"internalType": "address"
},
{
"name": "mintPrice_",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "nonpayable"
},
{
"name": "ERC20InsufficientAllowance",
"type": "error",
"inputs": [
{
"name": "spender",
"type": "address",
"internalType": "address"
},
{
"name": "allowance",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "needed",
"type": "uint256",
"internalType": "uint256"
}
]
},
{
"name": "ERC20InsufficientBalance",
"type": "error",
"inputs": [
{
"name": "sender",
"type": "address",
"internalType": "address"
},
{
"name": "balance",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "needed",
"type": "uint256",
"internalType": "uint256"
}
]
},
{
"name": "ERC20InvalidApprover",
"type": "error",
"inputs": [
{
"name": "approver",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "ERC20InvalidReceiver",
"type": "error",
"inputs": [
{
"name": "receiver",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "ERC20InvalidSender",
"type": "error",
"inputs": [
{
"name": "sender",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "ERC20InvalidSpender",
"type": "error",
"inputs": [
{
"name": "spender",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "ETHTransferFailed",
"type": "error",
"inputs": [
{
"name": "recipient",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "IncorrectPayment",
"type": "error",
"inputs": [
{
"name": "sent",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "required",
"type": "uint256",
"internalType": "uint256"
}
]
},
{
"name": "InvalidMintState",
"type": "error",
"inputs": [
{
"name": "current",
"type": "uint8",
"internalType": "enum Robinboo.MintState"
}
]
},
{
"name": "InvalidRefundRange",
"type": "error",
"inputs": [
{
"name": "startIndex",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "count",
"type": "uint256",
"internalType": "uint256"
}
]
},
{
"name": "InvalidSettlementState",
"type": "error",
"inputs": [
{
"name": "current",
"type": "uint8",
"internalType": "enum Robinboo.SettlementState"
}
]
},
{
"name": "InvalidUnits",
"type": "error",
"inputs": []
},
{
"name": "MintSupplyExceeded",
"type": "error",
"inputs": [
{
"name": "requestedTotal",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "maximum",
"type": "uint256",
"internalType": "uint256"
}
]
},
{
"name": "MinterIndexOutOfBounds",
"type": "error",
"inputs": [
{
"name": "index",
"type": "uint256",
"internalType": "uint256"
}
]
},
{
"name": "OwnableInvalidOwner",
"type": "error",
"inputs": [
{
"name": "owner",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "OwnableUnauthorizedAccount",
"type": "error",
"inputs": [
{
"name": "account",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "ReentrancyGuardReentrantCall",
"type": "error",
"inputs": []
},
{
"name": "RefundBatchTooLarge",
"type": "error",
"inputs": [
{
"name": "count",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "maximum",
"type": "uint256",
"internalType": "uint256"
}
]
},
{
"name": "TradingAlreadyEnabled",
"type": "error",
"inputs": []
},
{
"name": "TradingNotEnabled",
"type": "error",
"inputs": []
},
{
"name": "WalletLimitExceeded",
"type": "error",
"inputs": [
{
"name": "requestedTotal",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "maximum",
"type": "uint256",
"internalType": "uint256"
}
]
},
{
"name": "ZeroAddress",
"type": "error",
"inputs": []
},
{
"name": "ZeroMintPrice",
"type": "error",
"inputs": []
},
{
"name": "Approval",
"type": "event",
"inputs": [
{
"name": "owner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "spender",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "value",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "ETHReturned",
"type": "event",
"inputs": [
{
"name": "minter",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "units",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "FullRefundStarted",
"type": "event",
"inputs": [
{
"name": "minterCount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "totalMintedUnits",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "MintStateChanged",
"type": "event",
"inputs": [
{
"name": "previousState",
"type": "uint8",
"indexed": true,
"internalType": "enum Robinboo.MintState"
},
{
"name": "newState",
"type": "uint8",
"indexed": true,
"internalType": "enum Robinboo.MintState"
}
],
"anonymous": false
},
{
"name": "Minted",
"type": "event",
"inputs": [
{
"name": "buyer",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "units",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "booAmount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "ethAmount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "OwnershipTransferStarted",
"type": "event",
"inputs": [
{
"name": "previousOwner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "newOwner",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "OwnershipTransferred",
"type": "event",
"inputs": [
{
"name": "previousOwner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "newOwner",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "PreTradingAllowedSet",
"type": "event",
"inputs": [
{
"name": "account",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "allowed",
"type": "bool",
"indexed": false,
"internalType": "bool"
}
],
"anonymous": false
},
{
"name": "ProceedsTransferred",
"type": "event",
"inputs": [
{
"name": "recipient",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "TradingEnabled",
"type": "event",
"inputs": [],
"anonymous": false
},
{
"name": "Transfer",
"type": "event",
"inputs": [
{
"name": "from",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "to",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "value",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "MAX_MINT_UNITS",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint32",
"internalType": "uint32"
}
],
"stateMutability": "view"
},
{
"name": "MAX_REFUND_BATCH",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "MAX_UNITS_PER_WALLET",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint8",
"internalType": "uint8"
}
],
"stateMutability": "view"
},
{
"name": "PROJECT_RESERVE",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "PUBLIC_INVENTORY",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "TOKENS_PER_UNIT",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "TOTAL_SUPPLY",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "acceptOwnership",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "allowance",
"type": "function",
"inputs": [
{
"name": "owner",
"type": "address",
"internalType": "address"
},
{
"name": "spender",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "approve",
"type": "function",
"inputs": [
{
"name": "spender",
"type": "address",
"internalType": "address"
},
{
"name": "value",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "nonpayable"
},
{
"name": "balanceOf",
"type": "function",
"inputs": [
{
"name": "account",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "decimals",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint8",
"internalType": "uint8"
}
],
"stateMutability": "view"
},
{
"name": "enableTrading",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "endMint",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "mint",
"type": "function",
"inputs": [
{
"name": "units",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "payable"
},
{
"name": "mintPrice",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "mintState",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint8",
"internalType": "enum Robinboo.MintState"
}
],
"stateMutability": "view"
},
{
"name": "minterAt",
"type": "function",
"inputs": [
{
"name": "index",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "minterCount",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "minterInfo",
"type": "function",
"inputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "mintedUnits",
"type": "uint8",
"internalType": "uint8"
},
{
"name": "ethReturned",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "name",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "owner",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "pauseMint",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "pendingOwner",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "preTradingAllowed",
"type": "function",
"inputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "projectWallet",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "refundBatch",
"type": "function",
"inputs": [
{
"name": "startIndex",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "count",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "renounceOwnership",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "resumeMint",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setPreTradingAllowed",
"type": "function",
"inputs": [
{
"name": "account",
"type": "address",
"internalType": "address"
},
{
"name": "allowed",
"type": "bool",
"internalType": "bool"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "settlementState",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint8",
"internalType": "enum Robinboo.SettlementState"
}
],
"stateMutability": "view"
},
{
"name": "startFullRefund",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "startMint",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "symbol",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "totalETHReturned",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "totalMintedUnits",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint32",
"internalType": "uint32"
}
],
"stateMutability": "view"
},
{
"name": "totalSupply",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "tradingEnabled",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "transfer",
"type": "function",
"inputs": [
{
"name": "to",
"type": "address",
"internalType": "address"
},
{
"name": "value",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "nonpayable"
},
{
"name": "transferFrom",
"type": "function",
"inputs": [
{
"name": "from",
"type": "address",
"internalType": "address"
},
{
"name": "to",
"type": "address",
"internalType": "address"
},
{
"name": "value",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "nonpayable"
},
{
"name": "transferOwnership",
"type": "function",
"inputs": [
{
"name": "newOwner",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "transferProceeds",
"type": "function",
"inputs": [
{
"name": "recipient",
"type": "address",
"internalType": "address payable"
}
],
"outputs": [],
"stateMutability": "nonpayable"
}
]0x60c060405234801562000010575f80fd5b50604051620021ed380380620021ed8339810160408190526200003391620004c1565b6200003e836200014f565b858560036200004e8382620005dd565b5060046200005d8282620005dd565b5050506001600160a01b0381166200008f57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b6200009a816200017c565b5060016007556001600160a01b038216620000c85760405163d92e233d60e01b815260040160405180910390fd5b805f03620000e9576040516301d6003760e51b815260040160405180910390fd5b6001600160a01b038216608081905260a08290525f908152600c60205260409020805460ff191660011790556200012d306b0295be96e6406697200000006200019a565b62000144826aa56fa5b99019a5c80000006200019a565b5050505050620006cf565b5f6001600160a01b038216620001785760405163d92e233d60e01b815260040160405180910390fd5b5090565b600680546001600160a01b03191690556200019781620001d6565b50565b6001600160a01b038216620001c55760405163ec442f0560e01b81525f600482015260240162000086565b620001d25f838362000227565b5050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b60085462010000900460ff161580156200024957506001600160a01b03831615155b80156200025f57506001600160a01b0383163014155b80156200028457506001600160a01b0383165f908152600c602052604090205460ff16155b15620002a3576040516312f1f92360e01b815260040160405180910390fd5b620002b0838383620002b5565b505050565b6001600160a01b038316620002e3578060025f828254620002d79190620006a9565b90915550620003559050565b6001600160a01b0383165f9081526020819052604090205481811015620003375760405163391434e360e21b81526001600160a01b0385166004820152602481018290526044810183905260640162000086565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b038216620003735760028054829003905562000391565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620003d791815260200190565b60405180910390a3505050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011262000408575f80fd5b81516001600160401b0380821115620004255762000425620003e4565b604051601f8301601f19908116603f01168101908282118183101715620004505762000450620003e4565b81604052838152602092508660208588010111156200046d575f80fd5b5f91505b8382101562000490578582018301518183018401529082019062000471565b5f602085830101528094505050505092915050565b80516001600160a01b0381168114620004bc575f80fd5b919050565b5f805f805f60a08688031215620004d6575f80fd5b85516001600160401b0380821115620004ed575f80fd5b620004fb89838a01620003f8565b9650602088015191508082111562000511575f80fd5b506200052088828901620003f8565b9450506200053160408701620004a5565b92506200054160608701620004a5565b9150608086015190509295509295909350565b600181811c908216806200056957607f821691505b6020821081036200058857634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620002b057805f5260205f20601f840160051c81016020851015620005b55750805b601f840160051c820191505b81811015620005d6575f8155600101620005c1565b5050505050565b81516001600160401b03811115620005f957620005f9620003e4565b62000611816200060a845462000554565b846200058e565b602080601f83116001811462000647575f84156200062f5750858301515b5f19600386901b1c1916600185901b178555620006a1565b5f85815260208120601f198616915b82811015620006775788860151825594840194600190910190840162000656565b50858210156200069557878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b80820180821115620006c957634e487b7160e01b5f52601160045260245ffd5b92915050565b60805160a051611aee620006ff5f395f818161043a01528181610c54015261143a01525f6106550152611aee5ff3fe608060405260043610610249575f3560e01c80638da5cb5b11610134578063ba166e2b116100b3578063dd62ed3e11610078578063dd62ed3e146106df578063dede32db14610723578063e30c397814610742578063f2fde38b1461075f578063f3b547661461077e578063fc33962c1461079d575f80fd5b8063ba166e2b14610627578063beb08ab914610644578063c051e38a14610677578063cd85cdb51461069d578063d4ba21b6146106b1575f80fd5b80639e9311fc116100f95780639e9311fc1461059f578063a0213ae9146105c2578063a0712d68146105d7578063a9059cbb146105ea578063ad63118014610609575f80fd5b80638da5cb5b146104eb578063902d55a51461050857806395d89b4114610527578063977b0b051461053b5780639e46e3321461058b575f80fd5b8063313ce567116101cb5780636817c76c116101905780636817c76c1461042957806370a082311461045c578063715018a61461049057806379ba5097146104a45780637faa7e98146104b85780638a8c523c146104d7575f80fd5b8063313ce567146103735780634ada218b14610394578063515097ce146103b3578063543ad305146103de578063645224ed14610415575f80fd5b8063209e0d5111610211578063209e0d51146102ee57806323b872dd1461030257806325e43e911461032157806328b108221461034b5780632be095611461035f575f80fd5b8063017043a51461024d57806306fdde0314610263578063095ea7b31461028d57806318160ddd146102bc5780631fe7b624146102da575b5f80fd5b348015610258575f80fd5b506102616107bc565b005b34801561026e575f80fd5b5061027761083c565b6040516102849190611864565b60405180910390f35b348015610298575f80fd5b506102ac6102a73660046118c4565b6108cc565b6040519015158152602001610284565b3480156102c7575f80fd5b506002545b604051908152602001610284565b3480156102e5575f80fd5b506102616108e5565b3480156102f9575f80fd5b50610261610936565b34801561030d575f80fd5b506102ac61031c3660046118ee565b610a20565b34801561032c575f80fd5b5061033661c35081565b60405163ffffffff9091168152602001610284565b348015610356575f80fd5b506102cc606481565b34801561036a575f80fd5b50610261610a43565b34801561037e575f80fd5b5060125b60405160ff9091168152602001610284565b34801561039f575f80fd5b506008546102ac9062010000900460ff1681565b3480156103be575f80fd5b506008546103d190610100900460ff1681565b6040516102849190611940565b3480156103e9575f80fd5b506103fd6103f836600461195a565b610a51565b6040516001600160a01b039091168152602001610284565b348015610420575f80fd5b50610382600a81565b348015610434575f80fd5b506102cc7f000000000000000000000000000000000000000000000000000000000000000081565b348015610467575f80fd5b506102cc610476366004611971565b6001600160a01b03165f9081526020819052604090205490565b34801561049b575f80fd5b50610261610aa5565b3480156104af575f80fd5b50610261610ab6565b3480156104c3575f80fd5b506102616104d2366004611993565b610afa565b3480156104e2575f80fd5b50610261610d7e565b3480156104f6575f80fd5b506005546001600160a01b03166103fd565b348015610513575f80fd5b506102cc6b033b2e3c9fd0803ce800000081565b348015610532575f80fd5b50610277610e29565b348015610546575f80fd5b50610572610555366004611971565b600a6020525f908152604090205460ff8082169161010090041682565b6040805160ff9093168352901515602083015201610284565b348015610596575f80fd5b50600b546102cc565b3480156105aa575f80fd5b50600854610336906301000000900463ffffffff1681565b3480156105cd575f80fd5b506102cc60095481565b6102616105e536600461195a565b610e38565b3480156105f5575f80fd5b506102ac6106043660046118c4565b610e43565b348015610614575f80fd5b506102cc6aa56fa5b99019a5c800000081565b348015610632575f80fd5b506102cc6903635c9adc5dea00000081565b34801561064f575f80fd5b506103fd7f000000000000000000000000000000000000000000000000000000000000000081565b348015610682575f80fd5b506008546106909060ff1681565b60405161028491906119b3565b3480156106a8575f80fd5b50610261610e50565b3480156106bc575f80fd5b506102ac6106cb366004611971565b600c6020525f908152604090205460ff1681565b3480156106ea575f80fd5b506102cc6106f93660046119c7565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b34801561072e575f80fd5b5061026161073d3660046119fe565b610ea0565b34801561074d575f80fd5b506006546001600160a01b03166103fd565b34801561076a575f80fd5b50610261610779366004611971565b610f57565b348015610789575f80fd5b506102cc6b0295be96e64066972000000081565b3480156107a8575f80fd5b506102616107b7366004611971565b610fc8565b6107c461115e565b600160085460ff1660038111156107dd576107dd61192c565b141580156108025750600260085460ff1660038111156107ff576107ff61192c565b14155b15610830576008546040516337dc3f9360e01b81526108279160ff16906004016119b3565b60405180910390fd5b61083a600361118b565b565b60606003805461084b90611a2e565b80601f016020809104026020016040519081016040528092919081815260200182805461087790611a2e565b80156108c25780601f10610899576101008083540402835291602001916108c2565b820191905f5260205f20905b8154815290600101906020018083116108a557829003601f168201915b5050505050905090565b5f336108d9818585611203565b60019150505b92915050565b6108ed61115e565b60025b60085460ff1660038111156109075761090761192c565b1461092c576008546040516337dc3f9360e01b81526108279160ff16906004016119b3565b61083a600161118b565b61093e61115e565b600360085460ff1660038111156109575761095761192c565b1461097c576008546040516337dc3f9360e01b81526108279160ff16906004016119b3565b5f600854610100900460ff1660028111156109995761099961192c565b146109c357600854604051634f76fb5160e11b815261082791610100900460ff1690600401611940565b6008805461ff0019166101001790819055600b5460408051918252630100000090920463ffffffff16602082015281517fda204ce0dc5a238b3dcb391f90c1129e26366661692ca31948be06585fb8541c929181900390910190a1565b5f33610a2d858285611215565b610a38858585611291565b506001949350505050565b610a4b61115e565b5f6108f0565b600b545f908210610a785760405163eec9943560e01b815260048101839052602401610827565b600b8281548110610a8b57610a8b611a66565b5f918252602090912001546001600160a01b031692915050565b610aad61115e565b61083a5f6112ee565b60065433906001600160a01b03168114610aee5760405163118cdaa760e01b81526001600160a01b0382166004820152602401610827565b610af7816112ee565b50565b610b0261115e565b610b0a611307565b6001600854610100900460ff166002811115610b2857610b2861192c565b14610b5257600854604051634f76fb5160e11b815261082791610100900460ff1690600401611940565b805f03610b7c57604051635628235560e01b81526004810183905260248101829052604401610827565b6064811115610ba8576040516367f3dcbf60e01b81526004810182905260646024820152604401610827565b600b54808310610bd557604051635628235560e01b81526004810184905260248101839052604401610827565b5f610be08385611a8e565b905081811115610bed5750805b835b81811015610d6d575f600b8281548110610c0b57610c0b611a66565b5f9182526020808320909101546001600160a01b0316808352600a909152604090912080549192509060ff6101009091041615610c49575050610d65565b805460ff165f610c797f000000000000000000000000000000000000000000000000000000000000000083611aa1565b835461ff0019166101001784556009805491925082915f90610c9c908490611a8e565b90915550506040515f906001600160a01b0386169083908381818185875af1925050503d805f8114610ce9576040519150601f19603f3d011682016040523d82523d5f602084013e610cee565b606091505b5050905080610d1b57604051630e4c403160e11b81526001600160a01b0386166004820152602401610827565b60408051848152602081018490526001600160a01b038716917f3b9f528aa3e7f13919be1a7987566981d92d17862386e2fa2a5796fa311824eb910160405180910390a250505050505b600101610bef565b505050610d7a6001600755565b5050565b610d8661115e565b60085462010000900460ff1615610db057604051636b91f55d60e11b815260040160405180910390fd5b600360085460ff166003811115610dc957610dc961192c565b14610dee576008546040516337dc3f9360e01b81526108279160ff16906004016119b3565b6008805462ff00001916620100001790556040517f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c7905f90a1565b60606004805461084b90611a2e565b610af7338234611331565b5f336108d9818585611291565b610e5861115e565b600160085460ff166003811115610e7157610e7161192c565b14610e96576008546040516337dc3f9360e01b81526108279160ff16906004016119b3565b61083a600261118b565b610ea861115e565b60085462010000900460ff1615610ed257604051636b91f55d60e11b815260040160405180910390fd5b6001600160a01b038216610ef95760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0382165f818152600c6020908152604091829020805460ff191685151590811790915591519182527f7d63b2ed20750b93ec4d312399bcb415989da38d0775053fe1b80c651419f5b8910160405180910390a25050565b610f5f61115e565b600680546001600160a01b0383166001600160a01b03199091168117909155610f906005546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b610fd061115e565b610fd8611307565b600360085460ff166003811115610ff157610ff161192c565b14611016576008546040516337dc3f9360e01b81526108279160ff16906004016119b3565b5f600854610100900460ff1660028111156110335761103361192c565b1461105d57600854604051634f76fb5160e11b815261082791610100900460ff1690600401611940565b6001600160a01b0381166110845760405163d92e233d60e01b815260040160405180910390fd5b6008805461ff00191661020017905560405147905f906001600160a01b0384169083908381818185875af1925050503d805f81146110dd576040519150601f19603f3d011682016040523d82523d5f602084013e6110e2565b606091505b505090508061110f57604051630e4c403160e11b81526001600160a01b0384166004820152602401610827565b826001600160a01b03167f02996517c348e50d0e3249e492ef8219daf9a64f91fa68a08fc68a6c6cc496ca8360405161114a91815260200190565b60405180910390a25050610af76001600755565b6005546001600160a01b0316331461083a5760405163118cdaa760e01b8152336004820152602401610827565b6008805460ff811691839160ff191660018360038111156111ae576111ae61192c565b02179055508160038111156111c5576111c561192c565b8160038111156111d7576111d761192c565b6040517f670bb7c9cd9e417ef0567a4a88b180d126f426bdcd5a49e873a33e1c59a4a54a905f90a35050565b6112108383836001611598565b505050565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f1981101561128b578181101561127d57604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610827565b61128b84848484035f611598565b50505050565b6001600160a01b0383166112ba57604051634b637e8f60e11b81525f6004820152602401610827565b6001600160a01b0382166112e35760405163ec442f0560e01b81525f6004820152602401610827565b61121083838361166a565b600680546001600160a01b0319169055610af7816116ed565b60026007540361132a57604051633ee5aeb560e01b815260040160405180910390fd5b6002600755565b600160085460ff16600381111561134a5761134a61192c565b1461136f576008546040516337dc3f9360e01b81526108279160ff16906004016119b3565b815f0361138f57604051630e433c2360e31b815260040160405180910390fd5b6001600160a01b0383165f908152600a6020526040812080549091906113b990859060ff16611a8e565b9050600a8111156113e757604051637b781f3b60e01b815260048101829052600a6024820152604401610827565b6008545f906114049086906301000000900463ffffffff16611a8e565b905061c35081111561143457604051639aa1842560e01b81526004810182905261c3506024820152604401610827565b5f61145f7f000000000000000000000000000000000000000000000000000000000000000087611aa1565b905080851461148b57604051630d35e92160e01b81526004810186905260248101829052604401610827565b835460ff165f036114e157600b80546001810182555f919091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319166001600160a01b0389161790555b835460ff191660ff84161784556008805466ffffffff0000001916630100000063ffffffff85160217905561c34f19820161152057611520600361118b565b5f6115356903635c9adc5dea00000088611aa1565b9050611542308983611291565b60408051888152602081018390529081018790526001600160a01b038916907f5a3358a3d27a5373c0df2604662088d37894d56b7cfd27f315770440f4e0d9199060600160405180910390a25050505050505050565b6001600160a01b0384166115c15760405163e602df0560e01b81525f6004820152602401610827565b6001600160a01b0383166115ea57604051634a1406b160e11b81525f6004820152602401610827565b6001600160a01b038085165f908152600160209081526040808320938716835292905220829055801561128b57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161165c91815260200190565b60405180910390a350505050565b60085462010000900460ff1615801561168b57506001600160a01b03831615155b80156116a057506001600160a01b0383163014155b80156116c457506001600160a01b0383165f908152600c602052604090205460ff16155b156116e2576040516312f1f92360e01b815260040160405180910390fd5b61121083838361173e565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b038316611768578060025f82825461175d9190611a8e565b909155506117d89050565b6001600160a01b0383165f90815260208190526040902054818110156117ba5760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610827565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b0382166117f457600280548290039055611812565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161185791815260200190565b60405180910390a3505050565b5f602080835283518060208501525f5b8181101561189057858101830151858201604001528201611874565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610af7575f80fd5b5f80604083850312156118d5575f80fd5b82356118e0816118b0565b946020939093013593505050565b5f805f60608486031215611900575f80fd5b833561190b816118b0565b9250602084013561191b816118b0565b929592945050506040919091013590565b634e487b7160e01b5f52602160045260245ffd5b60208101600383106119545761195461192c565b91905290565b5f6020828403121561196a575f80fd5b5035919050565b5f60208284031215611981575f80fd5b813561198c816118b0565b9392505050565b5f80604083850312156119a4575f80fd5b50508035926020909101359150565b60208101600483106119545761195461192c565b5f80604083850312156119d8575f80fd5b82356119e3816118b0565b915060208301356119f3816118b0565b809150509250929050565b5f8060408385031215611a0f575f80fd5b8235611a1a816118b0565b9150602083013580151581146119f3575f80fd5b600181811c90821680611a4257607f821691505b602082108103611a6057634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b808201808211156108df576108df611a7a565b80820281158282048414176108df576108df611a7a56fea2646970667358221220ac7194e04da20abbdc067543ba71ba795dbb1b1c507aefc330e94fc91bd8717664736f6c6343000818003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000a586fa8102e5784e5d189e49611a67056bcb02d7000000000000000000000000a586fa8102e5784e5d189e49611a67056bcb02d7000000000000000000000000000000000000000000000000000000746a528800000000000000000000000000000000000000000000000000000000000000000c4d696e74466c6f7754657374000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034d46540000000000000000000000000000000000000000000000000000000000
0x608060405260043610610249575f3560e01c80638da5cb5b11610134578063ba166e2b116100b3578063dd62ed3e11610078578063dd62ed3e146106df578063dede32db14610723578063e30c397814610742578063f2fde38b1461075f578063f3b547661461077e578063fc33962c1461079d575f80fd5b8063ba166e2b14610627578063beb08ab914610644578063c051e38a14610677578063cd85cdb51461069d578063d4ba21b6146106b1575f80fd5b80639e9311fc116100f95780639e9311fc1461059f578063a0213ae9146105c2578063a0712d68146105d7578063a9059cbb146105ea578063ad63118014610609575f80fd5b80638da5cb5b146104eb578063902d55a51461050857806395d89b4114610527578063977b0b051461053b5780639e46e3321461058b575f80fd5b8063313ce567116101cb5780636817c76c116101905780636817c76c1461042957806370a082311461045c578063715018a61461049057806379ba5097146104a45780637faa7e98146104b85780638a8c523c146104d7575f80fd5b8063313ce567146103735780634ada218b14610394578063515097ce146103b3578063543ad305146103de578063645224ed14610415575f80fd5b8063209e0d5111610211578063209e0d51146102ee57806323b872dd1461030257806325e43e911461032157806328b108221461034b5780632be095611461035f575f80fd5b8063017043a51461024d57806306fdde0314610263578063095ea7b31461028d57806318160ddd146102bc5780631fe7b624146102da575b5f80fd5b348015610258575f80fd5b506102616107bc565b005b34801561026e575f80fd5b5061027761083c565b6040516102849190611864565b60405180910390f35b348015610298575f80fd5b506102ac6102a73660046118c4565b6108cc565b6040519015158152602001610284565b3480156102c7575f80fd5b506002545b604051908152602001610284565b3480156102e5575f80fd5b506102616108e5565b3480156102f9575f80fd5b50610261610936565b34801561030d575f80fd5b506102ac61031c3660046118ee565b610a20565b34801561032c575f80fd5b5061033661c35081565b60405163ffffffff9091168152602001610284565b348015610356575f80fd5b506102cc606481565b34801561036a575f80fd5b50610261610a43565b34801561037e575f80fd5b5060125b60405160ff9091168152602001610284565b34801561039f575f80fd5b506008546102ac9062010000900460ff1681565b3480156103be575f80fd5b506008546103d190610100900460ff1681565b6040516102849190611940565b3480156103e9575f80fd5b506103fd6103f836600461195a565b610a51565b6040516001600160a01b039091168152602001610284565b348015610420575f80fd5b50610382600a81565b348015610434575f80fd5b506102cc7f000000000000000000000000000000000000000000000000000000746a52880081565b348015610467575f80fd5b506102cc610476366004611971565b6001600160a01b03165f9081526020819052604090205490565b34801561049b575f80fd5b50610261610aa5565b3480156104af575f80fd5b50610261610ab6565b3480156104c3575f80fd5b506102616104d2366004611993565b610afa565b3480156104e2575f80fd5b50610261610d7e565b3480156104f6575f80fd5b506005546001600160a01b03166103fd565b348015610513575f80fd5b506102cc6b033b2e3c9fd0803ce800000081565b348015610532575f80fd5b50610277610e29565b348015610546575f80fd5b50610572610555366004611971565b600a6020525f908152604090205460ff8082169161010090041682565b6040805160ff9093168352901515602083015201610284565b348015610596575f80fd5b50600b546102cc565b3480156105aa575f80fd5b50600854610336906301000000900463ffffffff1681565b3480156105cd575f80fd5b506102cc60095481565b6102616105e536600461195a565b610e38565b3480156105f5575f80fd5b506102ac6106043660046118c4565b610e43565b348015610614575f80fd5b506102cc6aa56fa5b99019a5c800000081565b348015610632575f80fd5b506102cc6903635c9adc5dea00000081565b34801561064f575f80fd5b506103fd7f000000000000000000000000a586fa8102e5784e5d189e49611a67056bcb02d781565b348015610682575f80fd5b506008546106909060ff1681565b60405161028491906119b3565b3480156106a8575f80fd5b50610261610e50565b3480156106bc575f80fd5b506102ac6106cb366004611971565b600c6020525f908152604090205460ff1681565b3480156106ea575f80fd5b506102cc6106f93660046119c7565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b34801561072e575f80fd5b5061026161073d3660046119fe565b610ea0565b34801561074d575f80fd5b506006546001600160a01b03166103fd565b34801561076a575f80fd5b50610261610779366004611971565b610f57565b348015610789575f80fd5b506102cc6b0295be96e64066972000000081565b3480156107a8575f80fd5b506102616107b7366004611971565b610fc8565b6107c461115e565b600160085460ff1660038111156107dd576107dd61192c565b141580156108025750600260085460ff1660038111156107ff576107ff61192c565b14155b15610830576008546040516337dc3f9360e01b81526108279160ff16906004016119b3565b60405180910390fd5b61083a600361118b565b565b60606003805461084b90611a2e565b80601f016020809104026020016040519081016040528092919081815260200182805461087790611a2e565b80156108c25780601f10610899576101008083540402835291602001916108c2565b820191905f5260205f20905b8154815290600101906020018083116108a557829003601f168201915b5050505050905090565b5f336108d9818585611203565b60019150505b92915050565b6108ed61115e565b60025b60085460ff1660038111156109075761090761192c565b1461092c576008546040516337dc3f9360e01b81526108279160ff16906004016119b3565b61083a600161118b565b61093e61115e565b600360085460ff1660038111156109575761095761192c565b1461097c576008546040516337dc3f9360e01b81526108279160ff16906004016119b3565b5f600854610100900460ff1660028111156109995761099961192c565b146109c357600854604051634f76fb5160e11b815261082791610100900460ff1690600401611940565b6008805461ff0019166101001790819055600b5460408051918252630100000090920463ffffffff16602082015281517fda204ce0dc5a238b3dcb391f90c1129e26366661692ca31948be06585fb8541c929181900390910190a1565b5f33610a2d858285611215565b610a38858585611291565b506001949350505050565b610a4b61115e565b5f6108f0565b600b545f908210610a785760405163eec9943560e01b815260048101839052602401610827565b600b8281548110610a8b57610a8b611a66565b5f918252602090912001546001600160a01b031692915050565b610aad61115e565b61083a5f6112ee565b60065433906001600160a01b03168114610aee5760405163118cdaa760e01b81526001600160a01b0382166004820152602401610827565b610af7816112ee565b50565b610b0261115e565b610b0a611307565b6001600854610100900460ff166002811115610b2857610b2861192c565b14610b5257600854604051634f76fb5160e11b815261082791610100900460ff1690600401611940565b805f03610b7c57604051635628235560e01b81526004810183905260248101829052604401610827565b6064811115610ba8576040516367f3dcbf60e01b81526004810182905260646024820152604401610827565b600b54808310610bd557604051635628235560e01b81526004810184905260248101839052604401610827565b5f610be08385611a8e565b905081811115610bed5750805b835b81811015610d6d575f600b8281548110610c0b57610c0b611a66565b5f9182526020808320909101546001600160a01b0316808352600a909152604090912080549192509060ff6101009091041615610c49575050610d65565b805460ff165f610c797f000000000000000000000000000000000000000000000000000000746a52880083611aa1565b835461ff0019166101001784556009805491925082915f90610c9c908490611a8e565b90915550506040515f906001600160a01b0386169083908381818185875af1925050503d805f8114610ce9576040519150601f19603f3d011682016040523d82523d5f602084013e610cee565b606091505b5050905080610d1b57604051630e4c403160e11b81526001600160a01b0386166004820152602401610827565b60408051848152602081018490526001600160a01b038716917f3b9f528aa3e7f13919be1a7987566981d92d17862386e2fa2a5796fa311824eb910160405180910390a250505050505b600101610bef565b505050610d7a6001600755565b5050565b610d8661115e565b60085462010000900460ff1615610db057604051636b91f55d60e11b815260040160405180910390fd5b600360085460ff166003811115610dc957610dc961192c565b14610dee576008546040516337dc3f9360e01b81526108279160ff16906004016119b3565b6008805462ff00001916620100001790556040517f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c7905f90a1565b60606004805461084b90611a2e565b610af7338234611331565b5f336108d9818585611291565b610e5861115e565b600160085460ff166003811115610e7157610e7161192c565b14610e96576008546040516337dc3f9360e01b81526108279160ff16906004016119b3565b61083a600261118b565b610ea861115e565b60085462010000900460ff1615610ed257604051636b91f55d60e11b815260040160405180910390fd5b6001600160a01b038216610ef95760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0382165f818152600c6020908152604091829020805460ff191685151590811790915591519182527f7d63b2ed20750b93ec4d312399bcb415989da38d0775053fe1b80c651419f5b8910160405180910390a25050565b610f5f61115e565b600680546001600160a01b0383166001600160a01b03199091168117909155610f906005546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b610fd061115e565b610fd8611307565b600360085460ff166003811115610ff157610ff161192c565b14611016576008546040516337dc3f9360e01b81526108279160ff16906004016119b3565b5f600854610100900460ff1660028111156110335761103361192c565b1461105d57600854604051634f76fb5160e11b815261082791610100900460ff1690600401611940565b6001600160a01b0381166110845760405163d92e233d60e01b815260040160405180910390fd5b6008805461ff00191661020017905560405147905f906001600160a01b0384169083908381818185875af1925050503d805f81146110dd576040519150601f19603f3d011682016040523d82523d5f602084013e6110e2565b606091505b505090508061110f57604051630e4c403160e11b81526001600160a01b0384166004820152602401610827565b826001600160a01b03167f02996517c348e50d0e3249e492ef8219daf9a64f91fa68a08fc68a6c6cc496ca8360405161114a91815260200190565b60405180910390a25050610af76001600755565b6005546001600160a01b0316331461083a5760405163118cdaa760e01b8152336004820152602401610827565b6008805460ff811691839160ff191660018360038111156111ae576111ae61192c565b02179055508160038111156111c5576111c561192c565b8160038111156111d7576111d761192c565b6040517f670bb7c9cd9e417ef0567a4a88b180d126f426bdcd5a49e873a33e1c59a4a54a905f90a35050565b6112108383836001611598565b505050565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f1981101561128b578181101561127d57604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610827565b61128b84848484035f611598565b50505050565b6001600160a01b0383166112ba57604051634b637e8f60e11b81525f6004820152602401610827565b6001600160a01b0382166112e35760405163ec442f0560e01b81525f6004820152602401610827565b61121083838361166a565b600680546001600160a01b0319169055610af7816116ed565b60026007540361132a57604051633ee5aeb560e01b815260040160405180910390fd5b6002600755565b600160085460ff16600381111561134a5761134a61192c565b1461136f576008546040516337dc3f9360e01b81526108279160ff16906004016119b3565b815f0361138f57604051630e433c2360e31b815260040160405180910390fd5b6001600160a01b0383165f908152600a6020526040812080549091906113b990859060ff16611a8e565b9050600a8111156113e757604051637b781f3b60e01b815260048101829052600a6024820152604401610827565b6008545f906114049086906301000000900463ffffffff16611a8e565b905061c35081111561143457604051639aa1842560e01b81526004810182905261c3506024820152604401610827565b5f61145f7f000000000000000000000000000000000000000000000000000000746a52880087611aa1565b905080851461148b57604051630d35e92160e01b81526004810186905260248101829052604401610827565b835460ff165f036114e157600b80546001810182555f919091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319166001600160a01b0389161790555b835460ff191660ff84161784556008805466ffffffff0000001916630100000063ffffffff85160217905561c34f19820161152057611520600361118b565b5f6115356903635c9adc5dea00000088611aa1565b9050611542308983611291565b60408051888152602081018390529081018790526001600160a01b038916907f5a3358a3d27a5373c0df2604662088d37894d56b7cfd27f315770440f4e0d9199060600160405180910390a25050505050505050565b6001600160a01b0384166115c15760405163e602df0560e01b81525f6004820152602401610827565b6001600160a01b0383166115ea57604051634a1406b160e11b81525f6004820152602401610827565b6001600160a01b038085165f908152600160209081526040808320938716835292905220829055801561128b57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161165c91815260200190565b60405180910390a350505050565b60085462010000900460ff1615801561168b57506001600160a01b03831615155b80156116a057506001600160a01b0383163014155b80156116c457506001600160a01b0383165f908152600c602052604090205460ff16155b156116e2576040516312f1f92360e01b815260040160405180910390fd5b61121083838361173e565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b038316611768578060025f82825461175d9190611a8e565b909155506117d89050565b6001600160a01b0383165f90815260208190526040902054818110156117ba5760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610827565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b0382166117f457600280548290039055611812565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161185791815260200190565b60405180910390a3505050565b5f602080835283518060208501525f5b8181101561189057858101830151858201604001528201611874565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610af7575f80fd5b5f80604083850312156118d5575f80fd5b82356118e0816118b0565b946020939093013593505050565b5f805f60608486031215611900575f80fd5b833561190b816118b0565b9250602084013561191b816118b0565b929592945050506040919091013590565b634e487b7160e01b5f52602160045260245ffd5b60208101600383106119545761195461192c565b91905290565b5f6020828403121561196a575f80fd5b5035919050565b5f60208284031215611981575f80fd5b813561198c816118b0565b9392505050565b5f80604083850312156119a4575f80fd5b50508035926020909101359150565b60208101600483106119545761195461192c565b5f80604083850312156119d8575f80fd5b82356119e3816118b0565b915060208301356119f3816118b0565b809150509250929050565b5f8060408385031215611a0f575f80fd5b8235611a1a816118b0565b9150602083013580151581146119f3575f80fd5b600181811c90821680611a4257607f821691505b602082108103611a6057634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b808201808211156108df576108df611a7a565b80820281158282048414176108df576108df611a7a56fea2646970667358221220ac7194e04da20abbdc067543ba71ba795dbb1b1c507aefc330e94fc91bd8717664736f6c63430008180033
| Token | Symbol | Balance | Price | Value |
|---|---|---|---|---|
| MintFlowTest (MFT) | MFT | 799,808,000 | — | — |
| Type | Age | Block | Details |
|---|---|---|---|
| no cross-chain L1↔L2 transactions for this address | |||
| Txn Hash | Age | Event | Topics / Data |
|---|---|---|---|
| 0x631f59…347304 | 36 days agoSun, 12 Jul 2026 17:53:46 UTC | 0x5a3358…d919 | [0] 0x000000000000…d19ca8cc data: 0x000000000000000000…139ca800 |
| 0x631f59…347304 | 36 days agoSun, 12 Jul 2026 17:53:46 UTC | Transfer | [0] 0x000000000000…b6480f9b [1] 0x000000000000…d19ca8cc data: 0x000000000000000000…92000000 |
| 0xa538e9…173b62 | 36 days agoSun, 12 Jul 2026 17:53:37 UTC | 0x5a3358…d919 | [0] 0x000000000000…d19ca8cc data: 0x000000000000000000…6a528800 |
| 0xa538e9…173b62 | 36 days agoSun, 12 Jul 2026 17:53:37 UTC | Transfer | [0] 0x000000000000…b6480f9b [1] 0x000000000000…d19ca8cc data: 0x000000000000000000…ea000000 |
| 0x06aec8…5f59a9 | 36 days agoSun, 12 Jul 2026 17:44:03 UTC | 0x5a3358…d919 | [0] 0x000000000000…d19ca8cc data: 0x000000000000000000…6a528800 |
| 0x06aec8…5f59a9 | 36 days agoSun, 12 Jul 2026 17:44:03 UTC | Transfer | [0] 0x000000000000…b6480f9b [1] 0x000000000000…d19ca8cc data: 0x000000000000000000…ea000000 |
| 0x1f32b7…0d6371 | 36 days agoSun, 12 Jul 2026 17:43:54 UTC | 0x5a3358…d919 | [0] 0x000000000000…d19ca8cc data: 0x000000000000000000…6a528800 |
| 0x1f32b7…0d6371 | 36 days agoSun, 12 Jul 2026 17:43:54 UTC | Transfer | [0] 0x000000000000…b6480f9b [1] 0x000000000000…d19ca8cc data: 0x000000000000000000…ea000000 |
| 0xcdea23…5ddfd4 | 36 days agoSun, 12 Jul 2026 17:43:17 UTC | 0x5a3358…d919 | [0] 0x000000000000…d19ca8cc data: 0x000000000000000000…6a528800 |
| 0xcdea23…5ddfd4 | 36 days agoSun, 12 Jul 2026 17:43:17 UTC | Transfer | [0] 0x000000000000…b6480f9b [1] 0x000000000000…d19ca8cc data: 0x000000000000000000…ea000000 |
| 0xaec06f…a149be | 36 days agoSun, 12 Jul 2026 17:42:49 UTC | 0x5a3358…d919 | [0] 0x000000000000…d19ca8cc data: 0x000000000000000000…6a528800 |
| 0xaec06f…a149be | 36 days agoSun, 12 Jul 2026 17:42:49 UTC | Transfer | [0] 0x000000000000…b6480f9b [1] 0x000000000000…d19ca8cc data: 0x000000000000000000…ea000000 |
| 0x18eb27…3c1b29 | 36 days agoSun, 12 Jul 2026 17:02:39 UTC | 0x5a3358…d919 | [0] 0x000000000000…6bcb02d7 data: 0x000000000000000000…6a528800 |
| 0x18eb27…3c1b29 | 36 days agoSun, 12 Jul 2026 17:02:39 UTC | Transfer | [0] 0x000000000000…b6480f9b [1] 0x000000000000…6bcb02d7 data: 0x000000000000000000…ea000000 |
| 0x8c4993…86ddb0 | 36 days agoSun, 12 Jul 2026 16:48:10 UTC | 0x5a3358…d919 | [0] 0x000000000000…6bcb02d7 data: 0x000000000000000000…6a528800 |
| 0x8c4993…86ddb0 | 36 days agoSun, 12 Jul 2026 16:48:10 UTC | Transfer | [0] 0x000000000000…b6480f9b [1] 0x000000000000…6bcb02d7 data: 0x000000000000000000…ea000000 |
| 0x03bbcc…b2a939 | 36 days agoSun, 12 Jul 2026 16:20:52 UTC | 0x670bb7…a54a | [0] 0x000000000000…00000000 [1] 0x000000000000…00000001 |
| 0xa65212…5d15bd | 36 days agoSun, 12 Jul 2026 15:15:42 UTC | Transfer | [0] 0x000000000000…00000000 [1] 0x000000000000…6bcb02d7 data: 0x000000000000000000…c8000000 |
| 0xa65212…5d15bd | 36 days agoSun, 12 Jul 2026 15:15:42 UTC | Transfer | [0] 0x000000000000…00000000 [1] 0x000000000000…b6480f9b data: 0x000000000000000000…20000000 |
| 0xa65212…5d15bd | 36 days agoSun, 12 Jul 2026 15:15:42 UTC | 0x8be007…57e0 | [0] 0x000000000000…00000000 [1] 0x000000000000…6bcb02d7 |
| Transaction Hash | Method | Block | Age | From | To | Type | Item | ||
|---|---|---|---|---|---|---|---|---|---|
| no NFT transfers for this address yet | |||||||||
| Block | Age | Parent Transaction Hash | Type | Method | From | To | Value | |
|---|---|---|---|---|---|---|---|---|
| no internal transactions found for this address yet (traced blocks + on-demand) | ||||||||
| Transaction Hash | Method ? | Block | Age | From | To | Amount | Txn Fee ? | ||
|---|---|---|---|---|---|---|---|---|---|
| 0x631f59…347304 | mint | 7,999,940 | 36 days agoSun, 12 Jul 2026 17:53:46 UTC | 0xc93f…a8cc | IN | MintFlowTest | $0.000.00000 ETH | 0.00000260 | |
| 0xa538e9…173b62 | mint | 7,999,848 | 36 days agoSun, 12 Jul 2026 17:53:37 UTC | 0xc93f…a8cc | IN | MintFlowTest | $0.000.00000 ETH | 0.00000257 | |
| 0x06aec8…5f59a9 | mint | 7,994,093 | 36 days agoSun, 12 Jul 2026 17:44:03 UTC | 0xc93f…a8cc | IN | MintFlowTest | $0.000.00000 ETH | 0.00000256 | |
| 0x1f32b7…0d6371 | mint | 7,994,006 | 36 days agoSun, 12 Jul 2026 17:43:54 UTC | 0xc93f…a8cc | IN | MintFlowTest | $0.000.00000 ETH | 0.00000257 | |
| 0xcdea23…5ddfd4 | mint | 7,993,637 | 36 days agoSun, 12 Jul 2026 17:43:17 UTC | 0xc93f…a8cc | IN | MintFlowTest | $0.000.00000 ETH | 0.00000257 | |
| 0xaec06f…a149be | mint | 7,993,359 | 36 days agoSun, 12 Jul 2026 17:42:49 UTC | 0xc93f…a8cc | IN | MintFlowTest | $0.000.00000 ETH | 0.00000591 | |
| 0x18eb27…3c1b29 | mint | 7,969,264 | 36 days agoSun, 12 Jul 2026 17:02:39 UTC | 0xa586…02d7 | IN | MintFlowTest | $0.000.00000 ETH | 0.00000251 | |
| 0x8c4993…86ddb0 | mint | 7,960,583 | 36 days agoSun, 12 Jul 2026 16:48:10 UTC | 0xa586…02d7 | IN | MintFlowTest | $0.000.00000 ETH | 0.00000578 | |
| 0x03bbcc…b2a939 | startMint | 7,944,233 | 36 days agoSun, 12 Jul 2026 16:20:52 UTC | 0xa586…02d7 | IN | MintFlowTest | $0.000 ETH | 0.00000252 |
| Transaction Hash | Method | Block | Age | From | To | Amount | Token | ||
|---|---|---|---|---|---|---|---|---|---|
| 0x631f59ec…347304 | Transfer | 7,999,940 | 36 days agoSun, 12 Jul 2026 17:53:46 UTC | 0x8bb6…0f9b | OUT | 0xc93f…a8cc | 80,000 MFT | MintFlowTest (MFT) | |
| 0xa538e992…173b62 | Transfer | 7,999,848 | 36 days agoSun, 12 Jul 2026 17:53:37 UTC | 0x8bb6…0f9b | OUT | 0xc93f…a8cc | 16,000 MFT | MintFlowTest (MFT) | |
| 0x06aec8b2…5f59a9 | Transfer | 7,994,093 | 36 days agoSun, 12 Jul 2026 17:44:03 UTC | 0x8bb6…0f9b | OUT | 0xc93f…a8cc | 16,000 MFT | MintFlowTest (MFT) | |
| 0x1f32b780…0d6371 | Transfer | 7,994,006 | 36 days agoSun, 12 Jul 2026 17:43:54 UTC | 0x8bb6…0f9b | OUT | 0xc93f…a8cc | 16,000 MFT | MintFlowTest (MFT) | |
| 0xcdea23b0…5ddfd4 | Transfer | 7,993,637 | 36 days agoSun, 12 Jul 2026 17:43:17 UTC | 0x8bb6…0f9b | OUT | 0xc93f…a8cc | 16,000 MFT | MintFlowTest (MFT) | |
| 0xaec06f01…a149be | Transfer | 7,993,359 | 36 days agoSun, 12 Jul 2026 17:42:49 UTC | 0x8bb6…0f9b | OUT | 0xc93f…a8cc | 16,000 MFT | MintFlowTest (MFT) | |
| 0x18eb2751…3c1b29 | Transfer | 7,969,264 | 36 days agoSun, 12 Jul 2026 17:02:39 UTC | 0x8bb6…0f9b | OUT | 0xa586…02d7 | 16,000 MFT | MintFlowTest (MFT) | |
| 0x8c499360…86ddb0 | Transfer | 7,960,583 | 36 days agoSun, 12 Jul 2026 16:48:10 UTC | 0x8bb6…0f9b | OUT | 0xa586…02d7 | 16,000 MFT | MintFlowTest (MFT) | |
| 0xa652127a…5d15bd | Transfer | 7,905,189 | 36 days agoSun, 12 Jul 2026 15:15:42 UTC | 0x0000…0000 | IN | 0x8bb6…0f9b | 800,000,000.000000 MFT | MintFlowTest (MFT) |