// SPDX-License-Identifier: MIT
pragma solidity 0.8.24;
/**
* MINECAT — Proof-of-Luck NFT mining
* ----------------------------------
* 10,000 ASCII cats in 3D pixel. You don't buy them — you MINE them.
*
* 1. Anyone calls openRound() once per round (seed = blockhash anchor, can't be pre-mined).
* 2. Miners grind off-chain: h = keccak256(abi.encodePacked(seed, minerAddress, nonce))
* with any hardware: CPU, GPU, or an AI agent. The hash binds msg.sender,
* so a solution can never be stolen from the mempool (front-run proof).
* 3. submitWork(nonce):
* h < luckyTarget and round slots left -> LUCKY: voucher, claim instantly.
* h < ticketTarget -> BUST: ticket, guaranteed claim next round.
* 4. claim() payable (mintPriceWei ≈ $0.20) -> mints the NFT.
*
* Limits: 10 LUCKY slots per round (ROUND_CAP — instant-claim vouchers only; tickets
* from prior rounds are still claimable on top), 5 per wallet, 10,000 total supply.
* When it's gone, it's gone.
*
* Target network: Robinhood Chain MAINNET (EVM / Arbitrum Orbit stack)
* chainId 4663 · rpc https://rpc.mainnet.chain.robinhood.com
* explorer https://robinhoodchain.blockscout.com
* (dry-run first on testnet chainId 46630 · rpc.testnet.chain.robinhood.com)
*
* Deploy notes:
* - Deployer = owner = royalty receiver (5%). Deploy from YOUR wallet (0x25…);
* the deployer key never leaves your machine.
* - Self-contained: no imports, deployable straight from Remix.
* - "Luck" comes from the solution hash itself. Grinding for a luckier hash is
* not an exploit — it's literally the game (more work = more luck).
*/
contract MINECAT {
// ---------------- ERC-721 core ----------------
string public constant name = "MINECAT";
string public constant symbol = "MCAT";
uint256 public constant MAX_SUPPLY = 10000;
uint256 public constant ROUND_CAP = 10; // NFTs up for grabs per round
uint256 public constant WALLET_CAP = 5; // max mints per wallet
mapping(uint256 => address) private _ownerOf;
mapping(address => uint256) private _balanceOf;
mapping(uint256 => address) private _tokenApprovals;
mapping(address => mapping(address => bool)) public isApprovedForAll;
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
// ---------------- Proof-of-Luck state ----------------
address public owner;
address public royaltyReceiver;
string public baseURI;
string public contractMetadataURI; // collection-level metadata (OpenSea contractURI)
/* Royalty enforcement (operator allowlist, OperatorFilter-style):
* while enforced, approvals and operator-driven transfers only work for
* allowlisted marketplace contracts (MinecatMarket, OpenSea Seaport, …).
* Holders can always transfer their OWN tokens directly (gifts, wallet moves).
* Royalty itself is HARDCODED at 5% in royaltyInfo — no setter exists. */
bool public royaltyEnforced = true;
mapping(address => bool) public allowedOperator;
event OperatorAllowed(address indexed operator, bool allowed);
uint256 public mintPriceWei; // ≈ $0.20 in native coin; owner keeps it pegged
uint256 public diffTicket; // expected hashes per valid solution
uint256 public luckyDivisor = 6; // 1 of N solutions is LUCKY
uint256 public roundBlocks; // blocks per round
uint256 public totalMinted;
mapping(uint256 => bytes32) public roundSeed; // round => seed (0 = not opened)
mapping(uint256 => uint256) public roundMinted; // round => slots consumed
mapping(address => uint256) public mintedBy; // wallet => mints done
mapping(address => uint256) public voucher; // wallet => lucky wins awaiting claim (slot already locked)
mapping(address => uint256) public ticketFromRound; // wallet => round from which ticket is claimable (0 = none)
mapping(bytes32 => bool) public usedSolution; // replay guard
event RoundOpened(uint256 indexed round, bytes32 seed);
event WorkSubmitted(address indexed miner, uint256 indexed round, uint64 nonce, bytes32 hash, bool lucky);
event Claimed(address indexed miner, uint256 indexed tokenId, bool viaTicket);
modifier onlyOwner() { require(msg.sender == owner, "not owner"); _; }
constructor(uint256 _mintPriceWei, uint256 _diffTicket, uint256 _roundBlocks, string memory _baseURI) {
// guard deploy salah parameter: diff/roundBlocks = 0 => division-by-zero permanen
require(_diffTicket > 0, "diffTicket = 0");
require(_roundBlocks > 0, "roundBlocks = 0");
owner = msg.sender;
royaltyReceiver = msg.sender;
mintPriceWei = _mintPriceWei;
diffTicket = _diffTicket;
roundBlocks = _roundBlocks;
baseURI = _baseURI;
}
// ---------------- rounds ----------------
function currentRound() public view returns (uint256) {
return block.number / roundBlocks;
}
/// Anyone (miner, bot, AI agent) opens the round before mining it.
/// Seed anchors to the previous blockhash: unknowable in advance => no pre-mining.
/// Catatan ancaman: di L2 (Arbitrum Orbit) sequencer secara teori bisa memengaruhi
/// blockhash; dampak maksimalnya hanya "tahu seed beberapa detik lebih awal" —
/// solusi tetap terikat msg.sender, tidak ada jalur pencurian dana. Diterima
/// untuk game mint $0.20 (bandingkan: VRF menambah biaya per round).
function openRound() external returns (bytes32 seed) {
uint256 r = currentRound();
require(roundSeed[r] == bytes32(0), "already open");
seed = keccak256(abi.encodePacked(blockhash(block.number - 1), r, address(this)));
roundSeed[r] = seed;
emit RoundOpened(r, seed);
}
function ticketTarget() public view returns (uint256) {
return type(uint256).max / diffTicket;
}
function luckyTarget() public view returns (uint256) {
return ticketTarget() / luckyDivisor;
}
// ---------------- mining ----------------
function submitWork(uint64 nonce) external {
require(totalMinted < MAX_SUPPLY, "sold out");
require(
mintedBy[msg.sender] + voucher[msg.sender] + (ticketFromRound[msg.sender] != 0 ? 1 : 0) < WALLET_CAP,
"wallet cap"
);
uint256 r = currentRound();
bytes32 seed = roundSeed[r];
require(seed != bytes32(0), "round not opened");
bytes32 h = keccak256(abi.encodePacked(seed, msg.sender, nonce));
require(!usedSolution[h], "solution replayed");
usedSolution[h] = true;
uint256 hv = uint256(h);
require(hv < ticketTarget(), "hash above target");
bool lucky = hv < luckyTarget() && roundMinted[r] < ROUND_CAP;
if (lucky) {
roundMinted[r] += 1; // slot locked the moment you win it
voucher[msg.sender] += 1; // claimable any time
} else {
require(ticketFromRound[msg.sender] == 0, "already holding ticket");
ticketFromRound[msg.sender] = r + 1; // guaranteed claim from next round
}
emit WorkSubmitted(msg.sender, r, nonce, h, lucky);
}
// ---------------- claiming ----------------
/* Catatan desain (disengaja, anti-griefing): voucher/ticket TIDAK mereservasi
* supply. Di ujung penjualan (mendekati 10.000) sebuah voucher/ticket yang
* belum di-claim bisa hangus jika supply keburu habis — claim() revert dan
* TIDAK ADA dana yang hilang (pembayaran ikut revert). Alternatifnya
* (reservasi supply) membuka celah lebih buruk: satu ticket gratis yang
* sengaja tidak pernah di-claim akan mencegah totalMinted mencapai 10.000
* selamanya — membekukan gerbang sold-out MinecatMarket. */
function claim() external payable returns (uint256 tokenId) {
require(msg.value == mintPriceWei, "wrong price");
bool viaTicket;
if (voucher[msg.sender] > 0) {
voucher[msg.sender] -= 1;
} else if (ticketFromRound[msg.sender] != 0 && currentRound() >= ticketFromRound[msg.sender]) {
ticketFromRound[msg.sender] = 0;
viaTicket = true;
} else {
revert("nothing claimable");
}
tokenId = _mintNext(msg.sender);
emit Claimed(msg.sender, tokenId, viaTicket);
}
function _mintNext(address to) internal returns (uint256 tokenId) {
require(totalMinted < MAX_SUPPLY, "sold out");
require(mintedBy[to] < WALLET_CAP, "wallet cap");
mintedBy[to] += 1;
totalMinted += 1;
tokenId = totalMinted; // ids 1..10000
_ownerOf[tokenId] = to;
_balanceOf[to] += 1;
emit Transfer(address(0), to, tokenId);
}
// ---------------- ERC-721 ----------------
function balanceOf(address who) external view returns (uint256) {
require(who != address(0), "zero addr");
return _balanceOf[who];
}
function ownerOf(uint256 tokenId) public view returns (address o) {
o = _ownerOf[tokenId];
require(o != address(0), "not minted");
}
function approve(address to, uint256 tokenId) external {
address o = ownerOf(tokenId);
require(msg.sender == o || isApprovedForAll[o][msg.sender], "not authorized");
if (royaltyEnforced && to != address(0)) {
require(allowedOperator[to], "operator not royalty-approved");
}
_tokenApprovals[tokenId] = to;
emit Approval(o, to, tokenId);
}
/// ERC-721 compliant: revert untuk token yang belum pernah di-mint
function getApproved(uint256 tokenId) public view returns (address) {
require(_ownerOf[tokenId] != address(0), "not minted");
return _tokenApprovals[tokenId];
}
function setApprovalForAll(address op, bool ok) external {
if (royaltyEnforced && ok) {
require(allowedOperator[op], "operator not royalty-approved");
}
isApprovedForAll[msg.sender][op] = ok;
emit ApprovalForAll(msg.sender, op, ok);
}
function transferFrom(address from, address to, uint256 tokenId) public {
address o = ownerOf(tokenId);
require(o == from, "wrong from");
require(to != address(0), "zero addr");
require(
msg.sender == o || msg.sender == _tokenApprovals[tokenId] || isApprovedForAll[o][msg.sender],
"not authorized"
);
// penegakan royalti: transfer yang digerakkan operator harus lewat venue allowlisted
if (royaltyEnforced && msg.sender != o) {
require(allowedOperator[msg.sender], "operator not royalty-approved");
}
delete _tokenApprovals[tokenId];
_balanceOf[from] -= 1;
_balanceOf[to] += 1;
_ownerOf[tokenId] = to;
emit Transfer(from, to, tokenId);
}
function safeTransferFrom(address from, address to, uint256 tokenId) external {
safeTransferFrom(from, to, tokenId, "");
}
function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public {
transferFrom(from, to, tokenId);
if (to.code.length > 0) {
require(
IERC721Receiver(to).onERC721Received(msg.sender, from, tokenId, data)
== IERC721Receiver.onERC721Received.selector,
"unsafe receiver"
);
}
}
function tokenURI(uint256 tokenId) external view returns (string memory) {
require(_ownerOf[tokenId] != address(0), "not minted");
return string(abi.encodePacked(baseURI, _toString(tokenId), ".json"));
}
// ---------------- ERC-2981 royalties (5%, hardcoded — no setter) ----------------
function royaltyInfo(uint256, uint256 salePrice) external view returns (address, uint256) {
return (royaltyReceiver, (salePrice * 500) / 10000);
}
/// Collection-level metadata for OpenSea (name, image, seller_fee_basis_points: 500, …)
function contractURI() external view returns (string memory) {
return contractMetadataURI;
}
function supportsInterface(bytes4 id) external pure returns (bool) {
return id == 0x80ac58cd // ERC-721
|| id == 0x5b5e139f // ERC-721 Metadata
|| id == 0x2a55205a // ERC-2981
|| id == 0x01ffc9a7; // ERC-165
}
// ---------------- admin ----------------
function setMintPrice(uint256 wei_) external onlyOwner { mintPriceWei = wei_; }
function setDifficulty(uint256 diff, uint256 luckyDiv) external onlyOwner {
require(diff > 0 && luckyDiv > 0, "bad params");
diffTicket = diff;
luckyDivisor = luckyDiv;
}
function setBaseURI(string calldata uri) external onlyOwner { baseURI = uri; }
function setContractURI(string calldata uri) external onlyOwner { contractMetadataURI = uri; }
function setRoyaltyReceiver(address r) external onlyOwner {
require(r != address(0), "receiver = zero"); // F2: cegah royalti ETH terbakar
royaltyReceiver = r;
}
/// Allowlist venue yang menghormati royalti (MinecatMarket, OpenSea Seaport, …)
function setOperator(address op, bool ok) external onlyOwner {
allowedOperator[op] = ok;
emit OperatorAllowed(op, ok);
}
/// Sekring darurat: matikan enforcement kalau suatu saat merusak kompatibilitas
function setRoyaltyEnforced(bool on) external onlyOwner { royaltyEnforced = on; }
/* Two-step ownership (Ownable2Step): typo alamat tidak lagi fatal —
* owner baru harus acceptOwnership() dari wallet-nya sendiri. */
address public pendingOwner;
event OwnershipTransferStarted(address indexed from, address indexed to);
event OwnershipTransferred(address indexed from, address indexed to);
function transferOwnership(address n) external onlyOwner {
pendingOwner = n;
emit OwnershipTransferStarted(owner, n);
}
function acceptOwnership() external {
require(msg.sender == pendingOwner, "not pending owner");
emit OwnershipTransferred(owner, pendingOwner);
owner = pendingOwner;
pendingOwner = address(0);
}
function withdraw() external onlyOwner {
(bool ok, ) = owner.call{value: address(this).balance}("");
require(ok, "withdraw failed");
}
// ---------------- utils ----------------
function _toString(uint256 v) internal pure returns (string memory) {
if (v == 0) return "0";
uint256 t = v;
uint256 len;
while (t != 0) { len++; t /= 10; }
bytes memory b = new bytes(len);
while (v != 0) { len -= 1; b[len] = bytes1(uint8(48 + (v % 10))); v /= 10; }
return string(b);
}
}
interface IERC721Receiver {
function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data)
external returns (bytes4);
}[
{
"type": "constructor",
"inputs": [
{
"name": "_mintPriceWei",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "_diffTicket",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "_roundBlocks",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "_baseURI",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "nonpayable"
},
{
"name": "Approval",
"type": "event",
"inputs": [
{
"name": "owner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "approved",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "tokenId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "ApprovalForAll",
"type": "event",
"inputs": [
{
"name": "owner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "operator",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "approved",
"type": "bool",
"indexed": false,
"internalType": "bool"
}
],
"anonymous": false
},
{
"name": "Claimed",
"type": "event",
"inputs": [
{
"name": "miner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "tokenId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "viaTicket",
"type": "bool",
"indexed": false,
"internalType": "bool"
}
],
"anonymous": false
},
{
"name": "OperatorAllowed",
"type": "event",
"inputs": [
{
"name": "operator",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "allowed",
"type": "bool",
"indexed": false,
"internalType": "bool"
}
],
"anonymous": false
},
{
"name": "OwnershipTransferStarted",
"type": "event",
"inputs": [
{
"name": "from",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "to",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "OwnershipTransferred",
"type": "event",
"inputs": [
{
"name": "from",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "to",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "RoundOpened",
"type": "event",
"inputs": [
{
"name": "round",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "seed",
"type": "bytes32",
"indexed": false,
"internalType": "bytes32"
}
],
"anonymous": false
},
{
"name": "Transfer",
"type": "event",
"inputs": [
{
"name": "from",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "to",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "tokenId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "WorkSubmitted",
"type": "event",
"inputs": [
{
"name": "miner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "round",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "nonce",
"type": "uint64",
"indexed": false,
"internalType": "uint64"
},
{
"name": "hash",
"type": "bytes32",
"indexed": false,
"internalType": "bytes32"
},
{
"name": "lucky",
"type": "bool",
"indexed": false,
"internalType": "bool"
}
],
"anonymous": false
},
{
"name": "MAX_SUPPLY",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "ROUND_CAP",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "WALLET_CAP",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "acceptOwnership",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "allowedOperator",
"type": "function",
"inputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "approve",
"type": "function",
"inputs": [
{
"name": "to",
"type": "address",
"internalType": "address"
},
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "balanceOf",
"type": "function",
"inputs": [
{
"name": "who",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "baseURI",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "claim",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "payable"
},
{
"name": "contractMetadataURI",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "contractURI",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "currentRound",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "diffTicket",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "getApproved",
"type": "function",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "isApprovedForAll",
"type": "function",
"inputs": [
{
"name": "",
"type": "address",
"internalType": "address"
},
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "luckyDivisor",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "luckyTarget",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "mintPriceWei",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "mintedBy",
"type": "function",
"inputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "name",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "openRound",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "seed",
"type": "bytes32",
"internalType": "bytes32"
}
],
"stateMutability": "nonpayable"
},
{
"name": "owner",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "ownerOf",
"type": "function",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "o",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "pendingOwner",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "roundBlocks",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "roundMinted",
"type": "function",
"inputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "roundSeed",
"type": "function",
"inputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "bytes32",
"internalType": "bytes32"
}
],
"stateMutability": "view"
},
{
"name": "royaltyEnforced",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "royaltyInfo",
"type": "function",
"inputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "salePrice",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
},
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "royaltyReceiver",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "safeTransferFrom",
"type": "function",
"inputs": [
{
"name": "from",
"type": "address",
"internalType": "address"
},
{
"name": "to",
"type": "address",
"internalType": "address"
},
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "safeTransferFrom",
"type": "function",
"inputs": [
{
"name": "from",
"type": "address",
"internalType": "address"
},
{
"name": "to",
"type": "address",
"internalType": "address"
},
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "data",
"type": "bytes",
"internalType": "bytes"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setApprovalForAll",
"type": "function",
"inputs": [
{
"name": "op",
"type": "address",
"internalType": "address"
},
{
"name": "ok",
"type": "bool",
"internalType": "bool"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setBaseURI",
"type": "function",
"inputs": [
{
"name": "uri",
"type": "string",
"internalType": "string"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setContractURI",
"type": "function",
"inputs": [
{
"name": "uri",
"type": "string",
"internalType": "string"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setDifficulty",
"type": "function",
"inputs": [
{
"name": "diff",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "luckyDiv",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setMintPrice",
"type": "function",
"inputs": [
{
"name": "wei_",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setOperator",
"type": "function",
"inputs": [
{
"name": "op",
"type": "address",
"internalType": "address"
},
{
"name": "ok",
"type": "bool",
"internalType": "bool"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setRoyaltyEnforced",
"type": "function",
"inputs": [
{
"name": "on",
"type": "bool",
"internalType": "bool"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setRoyaltyReceiver",
"type": "function",
"inputs": [
{
"name": "r",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "submitWork",
"type": "function",
"inputs": [
{
"name": "nonce",
"type": "uint64",
"internalType": "uint64"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "supportsInterface",
"type": "function",
"inputs": [
{
"name": "id",
"type": "bytes4",
"internalType": "bytes4"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "pure"
},
{
"name": "symbol",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "ticketFromRound",
"type": "function",
"inputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "ticketTarget",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "tokenURI",
"type": "function",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "totalMinted",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "transferFrom",
"type": "function",
"inputs": [
{
"name": "from",
"type": "address",
"internalType": "address"
},
{
"name": "to",
"type": "address",
"internalType": "address"
},
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "transferOwnership",
"type": "function",
"inputs": [
{
"name": "n",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "usedSolution",
"type": "function",
"inputs": [
{
"name": "",
"type": "bytes32",
"internalType": "bytes32"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "voucher",
"type": "function",
"inputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "withdraw",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
}
]0x60806040526008805460ff191660011790556006600c5534801562000022575f80fd5b50604051620028eb380380620028eb83398101604081905262000045916200012c565b5f83116200008b5760405162461bcd60e51b815260206004820152600e60248201526d0646966665469636b6574203d20360941b60448201526064015b60405180910390fd5b5f8211620000ce5760405162461bcd60e51b815260206004820152600f60248201526e0726f756e64426c6f636b73203d203608c1b604482015260640162000082565b60048054336001600160a01b03199182168117909255600580549091169091179055600a849055600b839055600d82905560066200010d8282620002a2565b50505050506200036e565b634e487b7160e01b5f52604160045260245ffd5b5f805f806080858703121562000140575f80fd5b8451602080870151604088015160608901519397509095509350906001600160401b038082111562000170575f80fd5b818801915088601f83011262000184575f80fd5b81518181111562000199576200019962000118565b604051601f8201601f19908116603f01168101908382118183101715620001c457620001c462000118565b816040528281528b86848701011115620001dc575f80fd5b5f93505b82841015620001ff5784840186015181850187015292850192620001e0565b5f86848301015280965050505050505092959194509250565b600181811c908216806200022d57607f821691505b6020821081036200024c57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200029d57805f5260205f20601f840160051c81016020851015620002795750805b601f840160051c820191505b818110156200029a575f815560010162000285565b50505b505050565b81516001600160401b03811115620002be57620002be62000118565b620002d681620002cf845462000218565b8462000252565b602080601f8311600181146200030c575f8415620002f45750858301515b5f19600386901b1c1916600185901b17855562000366565b5f85815260208120601f198616915b828110156200033c578886015182559484019460019091019084016200031b565b50858210156200035a57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b61256f806200037c5f395ff3fe6080604052600436106102f3575f3560e01c806379ba509711610189578063a22cb465116100d8578063e562dfd911610092578063f2fde38b1161006d578063f2fde38b146108da578063f4a0a528146108f9578063fc1be7d514610918578063ff25a92414610946575f80fd5b8063e562dfd914610879578063e8a3d4851461088d578063e985e9c5146108a1575f80fd5b8063a22cb465146107d3578063a2309ff8146107f2578063b88d4fde14610807578063c87b56dd14610826578063cb2c972214610845578063e30c39781461085a575f80fd5b80638db095241161014357806395d89b411161011e57806395d89b411461074757806397e6af661461077657806398dc56f1146107955780639fbc8713146107b4575f80fd5b80638db09524146106f55780638dc251e314610709578063938e3d7b14610728575f80fd5b806379ba5097146106505780637f8c437614610664578063860d26cc146106835780638a19c8bc146106ae5780638c1db361146106c25780638da5cb5b146106d6575f80fd5b806335b542ab11610245578063558a7297116101ff5780636c0360eb116101da5780636c0360eb146105de57806370a08231146105f257806373e92784146106115780637858e82214610625575f80fd5b8063558a72971461058157806355f804b3146105a05780636352211e146105bf575f80fd5b806335b542ab146104ed5780633ccfd60b146105065780633cef28d21461051a57806342842e0e14610545578063494eb449146105645780634e71d92d14610579575f80fd5b806313d1dd2f116102b057806323b872dd1161028b57806323b872dd146104675780632a55205a146104865780632a764b47146104c457806332cb6b0c146104d8575f80fd5b806313d1dd2f14610413578063155c7a561461042857806318edfe201461043c575f80fd5b806301ffc9a7146102f757806306fdde031461032b578063081812fc1461036a578063095ea7b3146103a15780630962e5e0146103c2578063139ca256146103f0575b5f80fd5b348015610302575f80fd5b50610316610311366004611e98565b610971565b60405190151581526020015b60405180910390f35b348015610336575f80fd5b5061035d604051806040016040528060078152602001661352539150d05560ca1b81525081565b6040516103229190611f07565b348015610375575f80fd5b50610389610384366004611f19565b6109dd565b6040516001600160a01b039091168152602001610322565b3480156103ac575f80fd5b506103c06103bb366004611f46565b610a34565b005b3480156103cd575f80fd5b506103166103dc366004611f19565b60146020525f908152604090205460ff1681565b3480156103fb575f80fd5b50610405600d5481565b604051908152602001610322565b34801561041e575f80fd5b50610405600c5481565b348015610433575f80fd5b50610405610b67565b348015610447575f80fd5b50610405610456366004611f19565b600f6020525f908152604090205481565b348015610472575f80fd5b506103c0610481366004611f6e565b610b82565b348015610491575f80fd5b506104a56104a0366004611fa7565b610dd5565b604080516001600160a01b039093168352602083019190915201610322565b3480156104cf575f80fd5b50610405600a81565b3480156104e3575f80fd5b5061040561271081565b3480156104f8575f80fd5b506008546103169060ff1681565b348015610511575f80fd5b506103c0610e09565b348015610525575f80fd5b50610405610534366004611fc7565b60116020525f908152604090205481565b348015610550575f80fd5b506103c061055f366004611f6e565b610ec8565b34801561056f575f80fd5b50610405600b5481565b610405610ee7565b34801561058c575f80fd5b506103c061059b366004611fef565b611044565b3480156105ab575f80fd5b506103c06105ba366004612020565b6110cc565b3480156105ca575f80fd5b506103896105d9366004611f19565b611103565b3480156105e9575f80fd5b5061035d61113c565b3480156105fd575f80fd5b5061040561060c366004611fc7565b6111c8565b34801561061c575f80fd5b5061035d611226565b348015610630575f80fd5b5061040561063f366004611f19565b60106020525f908152604090205481565b34801561065b575f80fd5b506103c0611233565b34801561066f575f80fd5b506103c061067e366004611fa7565b6112e6565b34801561068e575f80fd5b5061040561069d366004611fc7565b60126020525f908152604090205481565b3480156106b9575f80fd5b50610405611362565b3480156106cd575f80fd5b50610405600581565b3480156106e1575f80fd5b50600454610389906001600160a01b031681565b348015610700575f80fd5b50610405611371565b348015610714575f80fd5b506103c0610723366004611fc7565b611381565b348015610733575f80fd5b506103c0610742366004612020565b611415565b348015610752575f80fd5b5061035d604051806040016040528060048152602001631350d05560e21b81525081565b348015610781575f80fd5b506103c061079036600461208c565b61144c565b3480156107a0575f80fd5b506103c06107af3660046120a5565b611489565b3480156107bf575f80fd5b50600554610389906001600160a01b031681565b3480156107de575f80fd5b506103c06107ed366004611fef565b6117f6565b3480156107fd575f80fd5b50610405600e5481565b348015610812575f80fd5b506103c06108213660046120e0565b6118ac565b348015610831575f80fd5b5061035d610840366004611f19565b61198a565b348015610850575f80fd5b50610405600a5481565b348015610865575f80fd5b50601554610389906001600160a01b031681565b348015610884575f80fd5b506104056119f2565b348015610898575f80fd5b5061035d611ade565b3480156108ac575f80fd5b506103166108bb3660046121b5565b600360209081525f928352604080842090915290825290205460ff1681565b3480156108e5575f80fd5b506103c06108f4366004611fc7565b611b6e565b348015610904575f80fd5b506103c0610913366004611f19565b611be9565b348015610923575f80fd5b50610316610932366004611fc7565b60096020525f908152604090205460ff1681565b348015610951575f80fd5b50610405610960366004611fc7565b60136020525f908152604090205481565b5f6380ac58cd60e01b6001600160e01b0319831614806109a15750635b5e139f60e01b6001600160e01b03198316145b806109bc575063152a902d60e11b6001600160e01b03198316145b806109d757506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f818152602081905260408120546001600160a01b0316610a195760405162461bcd60e51b8152600401610a10906121dd565b60405180910390fd5b505f908152600260205260409020546001600160a01b031690565b5f610a3e82611103565b9050336001600160a01b0382161480610a7957506001600160a01b0381165f90815260036020908152604080832033845290915290205460ff165b610ab65760405162461bcd60e51b815260206004820152600e60248201526d1b9bdd08185d5d1a1bdc9a5e995960921b6044820152606401610a10565b60085460ff168015610ad057506001600160a01b03831615155b15610b0c576001600160a01b0383165f9081526009602052604090205460ff16610b0c5760405162461bcd60e51b8152600401610a1090612201565b5f8281526002602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b5f600c54610b73611371565b610b7d9190612260565b905090565b5f610b8c82611103565b9050836001600160a01b0316816001600160a01b031614610bdc5760405162461bcd60e51b815260206004820152600a60248201526977726f6e672066726f6d60b01b6044820152606401610a10565b6001600160a01b038316610c1e5760405162461bcd60e51b81526020600482015260096024820152683d32b9379030b2323960b91b6044820152606401610a10565b336001600160a01b0382161480610c4a57505f828152600260205260409020546001600160a01b031633145b80610c7757506001600160a01b0381165f90815260036020908152604080832033845290915290205460ff165b610cb45760405162461bcd60e51b815260206004820152600e60248201526d1b9bdd08185d5d1a1bdc9a5e995960921b6044820152606401610a10565b60085460ff168015610ccf5750336001600160a01b03821614155b15610d0257335f9081526009602052604090205460ff16610d025760405162461bcd60e51b8152600401610a1090612201565b5f82815260026020908152604080832080546001600160a01b03191690556001600160a01b03871683526001918290528220805491929091610d45908490612273565b90915550506001600160a01b0383165f9081526001602081905260408220805491929091610d74908490612286565b90915550505f8281526020819052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918816917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a450505050565b6005545f9081906001600160a01b0316612710610df4856101f4612299565b610dfe9190612260565b915091509250929050565b6004546001600160a01b03163314610e335760405162461bcd60e51b8152600401610a10906122b0565b6004546040515f916001600160a01b03169047908381818185875af1925050503d805f8114610e7d576040519150601f19603f3d011682016040523d82523d5f602084013e610e82565b606091505b5050905080610ec55760405162461bcd60e51b815260206004820152600f60248201526e1dda5d1a191c985dc819985a5b1959608a1b6044820152606401610a10565b50565b610ee283838360405180602001604052805f8152506118ac565b505050565b5f600a543414610f275760405162461bcd60e51b815260206004820152600b60248201526a77726f6e6720707269636560a81b6044820152606401610a10565b335f9081526012602052604081205415610f6557335f908152601260205260408120805460019290610f5a908490612273565b90915550610fef9050565b335f9081526013602052604090205415801590610f975750335f90815260136020526040902054610f94611362565b10155b15610fb35750335f908152601360205260408120556001610fef565b60405162461bcd60e51b81526020600482015260116024820152706e6f7468696e6720636c61696d61626c6560781b6044820152606401610a10565b610ff833611c18565b915081336001600160a01b03167ffa8256f7c08bb01a03ea96f8b3a904a4450311c9725d1c52cdbe21ed3dc42dcc83604051611038911515815260200190565b60405180910390a35090565b6004546001600160a01b0316331461106e5760405162461bcd60e51b8152600401610a10906122b0565b6001600160a01b0382165f81815260096020908152604091829020805460ff191685151590811790915591519182527f5d9603027afffb9569796fb6d9fc189bbf68724bd0430924681595302758b4f0910160405180910390a25050565b6004546001600160a01b031633146110f65760405162461bcd60e51b8152600401610a10906122b0565b6006610ee2828483612356565b5f818152602081905260409020546001600160a01b0316806111375760405162461bcd60e51b8152600401610a10906121dd565b919050565b60068054611149906122d3565b80601f0160208091040260200160405190810160405280929190818152602001828054611175906122d3565b80156111c05780601f10611197576101008083540402835291602001916111c0565b820191905f5260205f20905b8154815290600101906020018083116111a357829003601f168201915b505050505081565b5f6001600160a01b03821661120b5760405162461bcd60e51b81526020600482015260096024820152683d32b9379030b2323960b91b6044820152606401610a10565b506001600160a01b03165f9081526001602052604090205490565b60078054611149906122d3565b6015546001600160a01b031633146112815760405162461bcd60e51b81526020600482015260116024820152703737ba103832b73234b7339037bbb732b960791b6044820152606401610a10565b6015546004546040516001600160a01b0392831692909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a360158054600480546001600160a01b03199081166001600160a01b03841617909155169055565b6004546001600160a01b031633146113105760405162461bcd60e51b8152600401610a10906122b0565b5f8211801561131e57505f81115b6113575760405162461bcd60e51b815260206004820152600a60248201526962616420706172616d7360b01b6044820152606401610a10565b600b91909155600c55565b5f600d5443610b7d9190612260565b5f600b545f19610b7d9190612260565b6004546001600160a01b031633146113ab5760405162461bcd60e51b8152600401610a10906122b0565b6001600160a01b0381166113f35760405162461bcd60e51b815260206004820152600f60248201526e7265636569766572203d207a65726f60881b6044820152606401610a10565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6004546001600160a01b0316331461143f5760405162461bcd60e51b8152600401610a10906122b0565b6007610ee2828483612356565b6004546001600160a01b031633146114765760405162461bcd60e51b8152600401610a10906122b0565b6008805460ff1916911515919091179055565b612710600e54106114c75760405162461bcd60e51b81526020600482015260086024820152671cdbdb19081bdd5d60c21b6044820152606401610a10565b335f90815260136020526040812054600591036114e4575f6114e7565b60015b335f9081526012602090815260408083205460119092529091205460ff92909216916115139190612286565b61151d9190612286565b106115575760405162461bcd60e51b815260206004820152600a602482015269077616c6c6574206361760b41b6044820152606401610a10565b5f611560611362565b5f818152600f6020526040902054909150806115b15760405162461bcd60e51b815260206004820152601060248201526f1c9bdd5b99081b9bdd081bdc195b995960821b6044820152606401610a10565b6040805160208082018490523360601b6bffffffffffffffffffffffff19168284015260c086901b6001600160c01b03191660548301528251603c818403018152605c90920183528151918101919091205f81815260149092529190205460ff16156116535760405162461bcd60e51b81526020600482015260116024820152701cdbdb1d5d1a5bdb881c995c1b185e5959607a1b6044820152606401610a10565b5f818152601460205260409020805460ff1916600117905580611674611371565b81106116b65760405162461bcd60e51b81526020600482015260116024820152701a185cda0818589bdd99481d185c99d95d607a1b6044820152606401610a10565b5f6116bf610b67565b821080156116da57505f85815260106020526040902054600a115b9050801561172f575f858152601060205260408120805460019290611700908490612286565b9091555050335f908152601260205260408120805460019290611724908490612286565b9091555061179f9050565b335f90815260136020526040902054156117845760405162461bcd60e51b8152602060048201526016602482015275185b1c9958591e481a1bdb191a5b99c81d1a58dad95d60521b6044820152606401610a10565b61178f856001612286565b335f908152601360205260409020555b6040805167ffffffffffffffff8816815260208101859052821515818301529051869133917f5d15643652c156f7a56f5697a9d8959402726efb0f243d5ea7e6deba2c337d5b9181900360600190a3505050505050565b60085460ff1680156118055750805b15611841576001600160a01b0382165f9081526009602052604090205460ff166118415760405162461bcd60e51b8152600401610a1090612201565b335f8181526003602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6118b7848484610b82565b6001600160a01b0383163b1561198457604051630a85bd0160e11b808252906001600160a01b0385169063150b7a02906118fb903390899088908890600401612410565b6020604051808303815f875af1158015611917573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061193b919061244c565b6001600160e01b031916146119845760405162461bcd60e51b815260206004820152600f60248201526e3ab739b0b332903932b1b2b4bb32b960891b6044820152606401610a10565b50505050565b5f818152602081905260409020546060906001600160a01b03166119c05760405162461bcd60e51b8152600401610a10906121dd565b60066119cb83611d7e565b6040516020016119dc929190612467565b6040516020818303038152906040529050919050565b5f806119fc611362565b5f818152600f602052604090205490915015611a495760405162461bcd60e51b815260206004820152600c60248201526b30b63932b0b23c9037b832b760a11b6044820152606401610a10565b611a54600143612273565b6040805191406020830152810182905230606090811b6bffffffffffffffffffffffff19169082015260740160408051808303601f1901815282825280516020918201205f858152600f83529290922082905581835290935082917f26b1cf93f00aaaad211df044d9e7369cb89a2fcd0a1a88f02f9eaa04c55d81dc910160405180910390a25090565b606060078054611aed906122d3565b80601f0160208091040260200160405190810160405280929190818152602001828054611b19906122d3565b8015611b645780601f10611b3b57610100808354040283529160200191611b64565b820191905f5260205f20905b815481529060010190602001808311611b4757829003601f168201915b5050505050905090565b6004546001600160a01b03163314611b985760405162461bcd60e51b8152600401610a10906122b0565b601580546001600160a01b0319166001600160a01b03838116918217909255600454604051919216907f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700905f90a350565b6004546001600160a01b03163314611c135760405162461bcd60e51b8152600401610a10906122b0565b600a55565b5f612710600e5410611c575760405162461bcd60e51b81526020600482015260086024820152671cdbdb19081bdd5d60c21b6044820152606401610a10565b6001600160a01b0382165f90815260116020526040902054600511611cab5760405162461bcd60e51b815260206004820152600a602482015269077616c6c6574206361760b41b6044820152606401610a10565b6001600160a01b0382165f908152601160205260408120805460019290611cd3908490612286565b925050819055506001600e5f828254611cec9190612286565b9091555050600e545f8181526020818152604080832080546001600160a01b0319166001600160a01b0388169081179091558352600191829052822080549394509092909190611d3d908490612286565b909155505060405181906001600160a01b038416905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4919050565b6060815f03611da45750506040805180820190915260018152600360fc1b602082015290565b815f5b8115611dcd5780611db7816124fa565b9150611dc69050600a83612260565b9150611da7565b5f8167ffffffffffffffff811115611de757611de76120cc565b6040519080825280601f01601f191660200182016040528015611e11576020820181803683370190505b5090505b8415611e7b57611e26600183612273565b9150611e33600a86612512565b611e3e906030612286565b60f81b818381518110611e5357611e53612525565b60200101906001600160f81b03191690815f1a905350611e74600a86612260565b9450611e15565b949350505050565b6001600160e01b031981168114610ec5575f80fd5b5f60208284031215611ea8575f80fd5b8135611eb381611e83565b9392505050565b5f5b83811015611ed4578181015183820152602001611ebc565b50505f910152565b5f8151808452611ef3816020860160208601611eba565b601f01601f19169290920160200192915050565b602081525f611eb36020830184611edc565b5f60208284031215611f29575f80fd5b5035919050565b80356001600160a01b0381168114611137575f80fd5b5f8060408385031215611f57575f80fd5b611f6083611f30565b946020939093013593505050565b5f805f60608486031215611f80575f80fd5b611f8984611f30565b9250611f9760208501611f30565b9150604084013590509250925092565b5f8060408385031215611fb8575f80fd5b50508035926020909101359150565b5f60208284031215611fd7575f80fd5b611eb382611f30565b80358015158114611137575f80fd5b5f8060408385031215612000575f80fd5b61200983611f30565b915061201760208401611fe0565b90509250929050565b5f8060208385031215612031575f80fd5b823567ffffffffffffffff80821115612048575f80fd5b818501915085601f83011261205b575f80fd5b813581811115612069575f80fd5b86602082850101111561207a575f80fd5b60209290920196919550909350505050565b5f6020828403121561209c575f80fd5b611eb382611fe0565b5f602082840312156120b5575f80fd5b813567ffffffffffffffff81168114611eb3575f80fd5b634e487b7160e01b5f52604160045260245ffd5b5f805f80608085870312156120f3575f80fd5b6120fc85611f30565b935061210a60208601611f30565b925060408501359150606085013567ffffffffffffffff8082111561212d575f80fd5b818701915087601f830112612140575f80fd5b813581811115612152576121526120cc565b604051601f8201601f19908116603f0116810190838211818310171561217a5761217a6120cc565b816040528281528a6020848701011115612192575f80fd5b826020860160208301375f60208483010152809550505050505092959194509250565b5f80604083850312156121c6575f80fd5b6121cf83611f30565b915061201760208401611f30565b6020808252600a90820152691b9bdd081b5a5b9d195960b21b604082015260600190565b6020808252601d908201527f6f70657261746f72206e6f7420726f79616c74792d617070726f766564000000604082015260600190565b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f8261226e5761226e612238565b500490565b818103818111156109d7576109d761224c565b808201808211156109d7576109d761224c565b80820281158282048414176109d7576109d761224c565b6020808252600990820152683737ba1037bbb732b960b91b604082015260600190565b600181811c908216806122e757607f821691505b60208210810361230557634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115610ee257805f5260205f20601f840160051c810160208510156123305750805b601f840160051c820191505b8181101561234f575f815560010161233c565b5050505050565b67ffffffffffffffff83111561236e5761236e6120cc565b6123828361237c83546122d3565b8361230b565b5f601f8411600181146123b3575f851561239c5750838201355b5f19600387901b1c1916600186901b17835561234f565b5f83815260208120601f198716915b828110156123e257868501358255602094850194600190920191016123c2565b50868210156123fe575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f9061244290830184611edc565b9695505050505050565b5f6020828403121561245c575f80fd5b8151611eb381611e83565b5f808454612474816122d3565b6001828116801561248c57600181146124a1576124cd565b60ff19841687528215158302870194506124cd565b885f526020805f205f5b858110156124c45781548a8201529084019082016124ab565b50505082870194505b5050505083516124e1818360208801611eba565b64173539b7b760d91b9101908152600501949350505050565b5f6001820161250b5761250b61224c565b5060010190565b5f8261252057612520612238565b500690565b634e487b7160e01b5f52603260045260245ffdfea26469706673582212202f113e82cf19abf01d6d4614b4e9064120206d3449b88a2aab8e06337159df1164736f6c63430008180033000000000000000000000000000000000000000000000000000060cb7f8e566d0000000000000000000000000000000000000000000000000000000ba43b7400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000
0x6080604052600436106102f3575f3560e01c806379ba509711610189578063a22cb465116100d8578063e562dfd911610092578063f2fde38b1161006d578063f2fde38b146108da578063f4a0a528146108f9578063fc1be7d514610918578063ff25a92414610946575f80fd5b8063e562dfd914610879578063e8a3d4851461088d578063e985e9c5146108a1575f80fd5b8063a22cb465146107d3578063a2309ff8146107f2578063b88d4fde14610807578063c87b56dd14610826578063cb2c972214610845578063e30c39781461085a575f80fd5b80638db095241161014357806395d89b411161011e57806395d89b411461074757806397e6af661461077657806398dc56f1146107955780639fbc8713146107b4575f80fd5b80638db09524146106f55780638dc251e314610709578063938e3d7b14610728575f80fd5b806379ba5097146106505780637f8c437614610664578063860d26cc146106835780638a19c8bc146106ae5780638c1db361146106c25780638da5cb5b146106d6575f80fd5b806335b542ab11610245578063558a7297116101ff5780636c0360eb116101da5780636c0360eb146105de57806370a08231146105f257806373e92784146106115780637858e82214610625575f80fd5b8063558a72971461058157806355f804b3146105a05780636352211e146105bf575f80fd5b806335b542ab146104ed5780633ccfd60b146105065780633cef28d21461051a57806342842e0e14610545578063494eb449146105645780634e71d92d14610579575f80fd5b806313d1dd2f116102b057806323b872dd1161028b57806323b872dd146104675780632a55205a146104865780632a764b47146104c457806332cb6b0c146104d8575f80fd5b806313d1dd2f14610413578063155c7a561461042857806318edfe201461043c575f80fd5b806301ffc9a7146102f757806306fdde031461032b578063081812fc1461036a578063095ea7b3146103a15780630962e5e0146103c2578063139ca256146103f0575b5f80fd5b348015610302575f80fd5b50610316610311366004611e98565b610971565b60405190151581526020015b60405180910390f35b348015610336575f80fd5b5061035d604051806040016040528060078152602001661352539150d05560ca1b81525081565b6040516103229190611f07565b348015610375575f80fd5b50610389610384366004611f19565b6109dd565b6040516001600160a01b039091168152602001610322565b3480156103ac575f80fd5b506103c06103bb366004611f46565b610a34565b005b3480156103cd575f80fd5b506103166103dc366004611f19565b60146020525f908152604090205460ff1681565b3480156103fb575f80fd5b50610405600d5481565b604051908152602001610322565b34801561041e575f80fd5b50610405600c5481565b348015610433575f80fd5b50610405610b67565b348015610447575f80fd5b50610405610456366004611f19565b600f6020525f908152604090205481565b348015610472575f80fd5b506103c0610481366004611f6e565b610b82565b348015610491575f80fd5b506104a56104a0366004611fa7565b610dd5565b604080516001600160a01b039093168352602083019190915201610322565b3480156104cf575f80fd5b50610405600a81565b3480156104e3575f80fd5b5061040561271081565b3480156104f8575f80fd5b506008546103169060ff1681565b348015610511575f80fd5b506103c0610e09565b348015610525575f80fd5b50610405610534366004611fc7565b60116020525f908152604090205481565b348015610550575f80fd5b506103c061055f366004611f6e565b610ec8565b34801561056f575f80fd5b50610405600b5481565b610405610ee7565b34801561058c575f80fd5b506103c061059b366004611fef565b611044565b3480156105ab575f80fd5b506103c06105ba366004612020565b6110cc565b3480156105ca575f80fd5b506103896105d9366004611f19565b611103565b3480156105e9575f80fd5b5061035d61113c565b3480156105fd575f80fd5b5061040561060c366004611fc7565b6111c8565b34801561061c575f80fd5b5061035d611226565b348015610630575f80fd5b5061040561063f366004611f19565b60106020525f908152604090205481565b34801561065b575f80fd5b506103c0611233565b34801561066f575f80fd5b506103c061067e366004611fa7565b6112e6565b34801561068e575f80fd5b5061040561069d366004611fc7565b60126020525f908152604090205481565b3480156106b9575f80fd5b50610405611362565b3480156106cd575f80fd5b50610405600581565b3480156106e1575f80fd5b50600454610389906001600160a01b031681565b348015610700575f80fd5b50610405611371565b348015610714575f80fd5b506103c0610723366004611fc7565b611381565b348015610733575f80fd5b506103c0610742366004612020565b611415565b348015610752575f80fd5b5061035d604051806040016040528060048152602001631350d05560e21b81525081565b348015610781575f80fd5b506103c061079036600461208c565b61144c565b3480156107a0575f80fd5b506103c06107af3660046120a5565b611489565b3480156107bf575f80fd5b50600554610389906001600160a01b031681565b3480156107de575f80fd5b506103c06107ed366004611fef565b6117f6565b3480156107fd575f80fd5b50610405600e5481565b348015610812575f80fd5b506103c06108213660046120e0565b6118ac565b348015610831575f80fd5b5061035d610840366004611f19565b61198a565b348015610850575f80fd5b50610405600a5481565b348015610865575f80fd5b50601554610389906001600160a01b031681565b348015610884575f80fd5b506104056119f2565b348015610898575f80fd5b5061035d611ade565b3480156108ac575f80fd5b506103166108bb3660046121b5565b600360209081525f928352604080842090915290825290205460ff1681565b3480156108e5575f80fd5b506103c06108f4366004611fc7565b611b6e565b348015610904575f80fd5b506103c0610913366004611f19565b611be9565b348015610923575f80fd5b50610316610932366004611fc7565b60096020525f908152604090205460ff1681565b348015610951575f80fd5b50610405610960366004611fc7565b60136020525f908152604090205481565b5f6380ac58cd60e01b6001600160e01b0319831614806109a15750635b5e139f60e01b6001600160e01b03198316145b806109bc575063152a902d60e11b6001600160e01b03198316145b806109d757506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f818152602081905260408120546001600160a01b0316610a195760405162461bcd60e51b8152600401610a10906121dd565b60405180910390fd5b505f908152600260205260409020546001600160a01b031690565b5f610a3e82611103565b9050336001600160a01b0382161480610a7957506001600160a01b0381165f90815260036020908152604080832033845290915290205460ff165b610ab65760405162461bcd60e51b815260206004820152600e60248201526d1b9bdd08185d5d1a1bdc9a5e995960921b6044820152606401610a10565b60085460ff168015610ad057506001600160a01b03831615155b15610b0c576001600160a01b0383165f9081526009602052604090205460ff16610b0c5760405162461bcd60e51b8152600401610a1090612201565b5f8281526002602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b5f600c54610b73611371565b610b7d9190612260565b905090565b5f610b8c82611103565b9050836001600160a01b0316816001600160a01b031614610bdc5760405162461bcd60e51b815260206004820152600a60248201526977726f6e672066726f6d60b01b6044820152606401610a10565b6001600160a01b038316610c1e5760405162461bcd60e51b81526020600482015260096024820152683d32b9379030b2323960b91b6044820152606401610a10565b336001600160a01b0382161480610c4a57505f828152600260205260409020546001600160a01b031633145b80610c7757506001600160a01b0381165f90815260036020908152604080832033845290915290205460ff165b610cb45760405162461bcd60e51b815260206004820152600e60248201526d1b9bdd08185d5d1a1bdc9a5e995960921b6044820152606401610a10565b60085460ff168015610ccf5750336001600160a01b03821614155b15610d0257335f9081526009602052604090205460ff16610d025760405162461bcd60e51b8152600401610a1090612201565b5f82815260026020908152604080832080546001600160a01b03191690556001600160a01b03871683526001918290528220805491929091610d45908490612273565b90915550506001600160a01b0383165f9081526001602081905260408220805491929091610d74908490612286565b90915550505f8281526020819052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918816917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a450505050565b6005545f9081906001600160a01b0316612710610df4856101f4612299565b610dfe9190612260565b915091509250929050565b6004546001600160a01b03163314610e335760405162461bcd60e51b8152600401610a10906122b0565b6004546040515f916001600160a01b03169047908381818185875af1925050503d805f8114610e7d576040519150601f19603f3d011682016040523d82523d5f602084013e610e82565b606091505b5050905080610ec55760405162461bcd60e51b815260206004820152600f60248201526e1dda5d1a191c985dc819985a5b1959608a1b6044820152606401610a10565b50565b610ee283838360405180602001604052805f8152506118ac565b505050565b5f600a543414610f275760405162461bcd60e51b815260206004820152600b60248201526a77726f6e6720707269636560a81b6044820152606401610a10565b335f9081526012602052604081205415610f6557335f908152601260205260408120805460019290610f5a908490612273565b90915550610fef9050565b335f9081526013602052604090205415801590610f975750335f90815260136020526040902054610f94611362565b10155b15610fb35750335f908152601360205260408120556001610fef565b60405162461bcd60e51b81526020600482015260116024820152706e6f7468696e6720636c61696d61626c6560781b6044820152606401610a10565b610ff833611c18565b915081336001600160a01b03167ffa8256f7c08bb01a03ea96f8b3a904a4450311c9725d1c52cdbe21ed3dc42dcc83604051611038911515815260200190565b60405180910390a35090565b6004546001600160a01b0316331461106e5760405162461bcd60e51b8152600401610a10906122b0565b6001600160a01b0382165f81815260096020908152604091829020805460ff191685151590811790915591519182527f5d9603027afffb9569796fb6d9fc189bbf68724bd0430924681595302758b4f0910160405180910390a25050565b6004546001600160a01b031633146110f65760405162461bcd60e51b8152600401610a10906122b0565b6006610ee2828483612356565b5f818152602081905260409020546001600160a01b0316806111375760405162461bcd60e51b8152600401610a10906121dd565b919050565b60068054611149906122d3565b80601f0160208091040260200160405190810160405280929190818152602001828054611175906122d3565b80156111c05780601f10611197576101008083540402835291602001916111c0565b820191905f5260205f20905b8154815290600101906020018083116111a357829003601f168201915b505050505081565b5f6001600160a01b03821661120b5760405162461bcd60e51b81526020600482015260096024820152683d32b9379030b2323960b91b6044820152606401610a10565b506001600160a01b03165f9081526001602052604090205490565b60078054611149906122d3565b6015546001600160a01b031633146112815760405162461bcd60e51b81526020600482015260116024820152703737ba103832b73234b7339037bbb732b960791b6044820152606401610a10565b6015546004546040516001600160a01b0392831692909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a360158054600480546001600160a01b03199081166001600160a01b03841617909155169055565b6004546001600160a01b031633146113105760405162461bcd60e51b8152600401610a10906122b0565b5f8211801561131e57505f81115b6113575760405162461bcd60e51b815260206004820152600a60248201526962616420706172616d7360b01b6044820152606401610a10565b600b91909155600c55565b5f600d5443610b7d9190612260565b5f600b545f19610b7d9190612260565b6004546001600160a01b031633146113ab5760405162461bcd60e51b8152600401610a10906122b0565b6001600160a01b0381166113f35760405162461bcd60e51b815260206004820152600f60248201526e7265636569766572203d207a65726f60881b6044820152606401610a10565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6004546001600160a01b0316331461143f5760405162461bcd60e51b8152600401610a10906122b0565b6007610ee2828483612356565b6004546001600160a01b031633146114765760405162461bcd60e51b8152600401610a10906122b0565b6008805460ff1916911515919091179055565b612710600e54106114c75760405162461bcd60e51b81526020600482015260086024820152671cdbdb19081bdd5d60c21b6044820152606401610a10565b335f90815260136020526040812054600591036114e4575f6114e7565b60015b335f9081526012602090815260408083205460119092529091205460ff92909216916115139190612286565b61151d9190612286565b106115575760405162461bcd60e51b815260206004820152600a602482015269077616c6c6574206361760b41b6044820152606401610a10565b5f611560611362565b5f818152600f6020526040902054909150806115b15760405162461bcd60e51b815260206004820152601060248201526f1c9bdd5b99081b9bdd081bdc195b995960821b6044820152606401610a10565b6040805160208082018490523360601b6bffffffffffffffffffffffff19168284015260c086901b6001600160c01b03191660548301528251603c818403018152605c90920183528151918101919091205f81815260149092529190205460ff16156116535760405162461bcd60e51b81526020600482015260116024820152701cdbdb1d5d1a5bdb881c995c1b185e5959607a1b6044820152606401610a10565b5f818152601460205260409020805460ff1916600117905580611674611371565b81106116b65760405162461bcd60e51b81526020600482015260116024820152701a185cda0818589bdd99481d185c99d95d607a1b6044820152606401610a10565b5f6116bf610b67565b821080156116da57505f85815260106020526040902054600a115b9050801561172f575f858152601060205260408120805460019290611700908490612286565b9091555050335f908152601260205260408120805460019290611724908490612286565b9091555061179f9050565b335f90815260136020526040902054156117845760405162461bcd60e51b8152602060048201526016602482015275185b1c9958591e481a1bdb191a5b99c81d1a58dad95d60521b6044820152606401610a10565b61178f856001612286565b335f908152601360205260409020555b6040805167ffffffffffffffff8816815260208101859052821515818301529051869133917f5d15643652c156f7a56f5697a9d8959402726efb0f243d5ea7e6deba2c337d5b9181900360600190a3505050505050565b60085460ff1680156118055750805b15611841576001600160a01b0382165f9081526009602052604090205460ff166118415760405162461bcd60e51b8152600401610a1090612201565b335f8181526003602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6118b7848484610b82565b6001600160a01b0383163b1561198457604051630a85bd0160e11b808252906001600160a01b0385169063150b7a02906118fb903390899088908890600401612410565b6020604051808303815f875af1158015611917573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061193b919061244c565b6001600160e01b031916146119845760405162461bcd60e51b815260206004820152600f60248201526e3ab739b0b332903932b1b2b4bb32b960891b6044820152606401610a10565b50505050565b5f818152602081905260409020546060906001600160a01b03166119c05760405162461bcd60e51b8152600401610a10906121dd565b60066119cb83611d7e565b6040516020016119dc929190612467565b6040516020818303038152906040529050919050565b5f806119fc611362565b5f818152600f602052604090205490915015611a495760405162461bcd60e51b815260206004820152600c60248201526b30b63932b0b23c9037b832b760a11b6044820152606401610a10565b611a54600143612273565b6040805191406020830152810182905230606090811b6bffffffffffffffffffffffff19169082015260740160408051808303601f1901815282825280516020918201205f858152600f83529290922082905581835290935082917f26b1cf93f00aaaad211df044d9e7369cb89a2fcd0a1a88f02f9eaa04c55d81dc910160405180910390a25090565b606060078054611aed906122d3565b80601f0160208091040260200160405190810160405280929190818152602001828054611b19906122d3565b8015611b645780601f10611b3b57610100808354040283529160200191611b64565b820191905f5260205f20905b815481529060010190602001808311611b4757829003601f168201915b5050505050905090565b6004546001600160a01b03163314611b985760405162461bcd60e51b8152600401610a10906122b0565b601580546001600160a01b0319166001600160a01b03838116918217909255600454604051919216907f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700905f90a350565b6004546001600160a01b03163314611c135760405162461bcd60e51b8152600401610a10906122b0565b600a55565b5f612710600e5410611c575760405162461bcd60e51b81526020600482015260086024820152671cdbdb19081bdd5d60c21b6044820152606401610a10565b6001600160a01b0382165f90815260116020526040902054600511611cab5760405162461bcd60e51b815260206004820152600a602482015269077616c6c6574206361760b41b6044820152606401610a10565b6001600160a01b0382165f908152601160205260408120805460019290611cd3908490612286565b925050819055506001600e5f828254611cec9190612286565b9091555050600e545f8181526020818152604080832080546001600160a01b0319166001600160a01b0388169081179091558352600191829052822080549394509092909190611d3d908490612286565b909155505060405181906001600160a01b038416905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4919050565b6060815f03611da45750506040805180820190915260018152600360fc1b602082015290565b815f5b8115611dcd5780611db7816124fa565b9150611dc69050600a83612260565b9150611da7565b5f8167ffffffffffffffff811115611de757611de76120cc565b6040519080825280601f01601f191660200182016040528015611e11576020820181803683370190505b5090505b8415611e7b57611e26600183612273565b9150611e33600a86612512565b611e3e906030612286565b60f81b818381518110611e5357611e53612525565b60200101906001600160f81b03191690815f1a905350611e74600a86612260565b9450611e15565b949350505050565b6001600160e01b031981168114610ec5575f80fd5b5f60208284031215611ea8575f80fd5b8135611eb381611e83565b9392505050565b5f5b83811015611ed4578181015183820152602001611ebc565b50505f910152565b5f8151808452611ef3816020860160208601611eba565b601f01601f19169290920160200192915050565b602081525f611eb36020830184611edc565b5f60208284031215611f29575f80fd5b5035919050565b80356001600160a01b0381168114611137575f80fd5b5f8060408385031215611f57575f80fd5b611f6083611f30565b946020939093013593505050565b5f805f60608486031215611f80575f80fd5b611f8984611f30565b9250611f9760208501611f30565b9150604084013590509250925092565b5f8060408385031215611fb8575f80fd5b50508035926020909101359150565b5f60208284031215611fd7575f80fd5b611eb382611f30565b80358015158114611137575f80fd5b5f8060408385031215612000575f80fd5b61200983611f30565b915061201760208401611fe0565b90509250929050565b5f8060208385031215612031575f80fd5b823567ffffffffffffffff80821115612048575f80fd5b818501915085601f83011261205b575f80fd5b813581811115612069575f80fd5b86602082850101111561207a575f80fd5b60209290920196919550909350505050565b5f6020828403121561209c575f80fd5b611eb382611fe0565b5f602082840312156120b5575f80fd5b813567ffffffffffffffff81168114611eb3575f80fd5b634e487b7160e01b5f52604160045260245ffd5b5f805f80608085870312156120f3575f80fd5b6120fc85611f30565b935061210a60208601611f30565b925060408501359150606085013567ffffffffffffffff8082111561212d575f80fd5b818701915087601f830112612140575f80fd5b813581811115612152576121526120cc565b604051601f8201601f19908116603f0116810190838211818310171561217a5761217a6120cc565b816040528281528a6020848701011115612192575f80fd5b826020860160208301375f60208483010152809550505050505092959194509250565b5f80604083850312156121c6575f80fd5b6121cf83611f30565b915061201760208401611f30565b6020808252600a90820152691b9bdd081b5a5b9d195960b21b604082015260600190565b6020808252601d908201527f6f70657261746f72206e6f7420726f79616c74792d617070726f766564000000604082015260600190565b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f8261226e5761226e612238565b500490565b818103818111156109d7576109d761224c565b808201808211156109d7576109d761224c565b80820281158282048414176109d7576109d761224c565b6020808252600990820152683737ba1037bbb732b960b91b604082015260600190565b600181811c908216806122e757607f821691505b60208210810361230557634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115610ee257805f5260205f20601f840160051c810160208510156123305750805b601f840160051c820191505b8181101561234f575f815560010161233c565b5050505050565b67ffffffffffffffff83111561236e5761236e6120cc565b6123828361237c83546122d3565b8361230b565b5f601f8411600181146123b3575f851561239c5750838201355b5f19600387901b1c1916600186901b17835561234f565b5f83815260208120601f198716915b828110156123e257868501358255602094850194600190920191016123c2565b50868210156123fe575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f9061244290830184611edc565b9695505050505050565b5f6020828403121561245c575f80fd5b8151611eb381611e83565b5f808454612474816122d3565b6001828116801561248c57600181146124a1576124cd565b60ff19841687528215158302870194506124cd565b885f526020805f205f5b858110156124c45781548a8201529084019082016124ab565b50505082870194505b5050505083516124e1818360208801611eba565b64173539b7b760d91b9101908152600501949350505050565b5f6001820161250b5761250b61224c565b5060010190565b5f8261252057612520612238565b500690565b634e487b7160e01b5f52603260045260245ffdfea26469706673582212202f113e82cf19abf01d6d4614b4e9064120206d3449b88a2aab8e06337159df1164736f6c63430008180033
| Token | Symbol | Balance | Price | Value |
|---|---|---|---|---|
| no token holdings | ||||
| Transaction Hash | Method | Block | Age | From | To | Type | Item | ||
|---|---|---|---|---|---|---|---|---|---|
| no NFT transfers for this address yet | |||||||||
| Type | Age | Block | Details |
|---|---|---|---|
| no cross-chain L1↔L2 transactions for this address | |||
| 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 | Token | ||
|---|---|---|---|---|---|---|---|---|---|
| no token transfers for this address yet | |||||||||
| Txn Hash | Age | Event | Topics / Data |
|---|---|---|---|
| 0xa411f4…137788 | 15 hrs agoMon, 17 Aug 2026 14:07:36 UTC | 0x26b1cf…81dc | [0] 0x000000000000…00312998 data: 0x77f28eb969ae1be118…a12c4f32 |
| 0x3f714e…0abf40 | 15 hrs agoMon, 17 Aug 2026 14:06:12 UTC | 0x26b1cf…81dc | [0] 0x000000000000…00312997 data: 0xbe97c4d1addb9585a4…f8da3f37 |
| 0xbdd2ab…3c8242 | 15 hrs agoMon, 17 Aug 2026 14:04:22 UTC | 0x26b1cf…81dc | [0] 0x000000000000…00312996 data: 0x36d37965509283dc1d…de1c8cee |
| 0xc86fec…200181 | 15 hrs agoMon, 17 Aug 2026 14:02:57 UTC | 0x26b1cf…81dc | [0] 0x000000000000…00312995 data: 0x01cc38466468efe327…4f9cd266 |
| 0x795e40…a574c6 | 15 hrs agoMon, 17 Aug 2026 14:01:08 UTC | 0x26b1cf…81dc | [0] 0x000000000000…00312994 data: 0x88652d440d9480df88…a2373e2c |
| 0x41cda3…9a1e98 | 15 hrs agoMon, 17 Aug 2026 13:59:48 UTC | 0x26b1cf…81dc | [0] 0x000000000000…00312993 data: 0xf91f8be10b15a67331…24f406af |
| 0x503ea9…f6ed41 | 15 hrs agoMon, 17 Aug 2026 13:58:06 UTC | 0x26b1cf…81dc | [0] 0x000000000000…00312992 data: 0x04988952f522fe2fd4…ce7457c1 |
| 0xb49cbc…e6fab1 | 15 hrs agoMon, 17 Aug 2026 13:56:24 UTC | 0x26b1cf…81dc | [0] 0x000000000000…00312991 data: 0xde1b7df53e8dddbd35…51703f4b |
| 0x618979…11bad5 | 15 hrs agoMon, 17 Aug 2026 13:54:56 UTC | 0x26b1cf…81dc | [0] 0x000000000000…00312990 data: 0x393764fe400a6aa2c9…83b090f2 |
| 0x3a5142…32b523 | 15 hrs agoMon, 17 Aug 2026 13:53:21 UTC | 0x26b1cf…81dc | [0] 0x000000000000…0031298f data: 0xed80eee38b85ea6186…3cd19576 |
| 0x6c4c0b…704c87 | 15 hrs agoMon, 17 Aug 2026 13:51:43 UTC | 0x26b1cf…81dc | [0] 0x000000000000…0031298e data: 0xea78b3f5502b36aabd…d06f5154 |
| 0xfadb98…440c2e | 15 hrs agoMon, 17 Aug 2026 13:50:07 UTC | 0x26b1cf…81dc | [0] 0x000000000000…0031298d data: 0x37da0eb442476c7ab1…bb298542 |
| 0x6cf314…f26c89 | 15 hrs agoMon, 17 Aug 2026 13:48:25 UTC | 0x26b1cf…81dc | [0] 0x000000000000…0031298c data: 0xbfd0ae6d85a4d180fc…ede70f0b |
| 0xdbf74f…b26a83 | 15 hrs agoMon, 17 Aug 2026 13:46:54 UTC | 0x26b1cf…81dc | [0] 0x000000000000…0031298b data: 0xdbb524d572a14f8fd1…2aeee308 |
| 0xf5bf43…00298b | 15 hrs agoMon, 17 Aug 2026 13:45:22 UTC | 0x26b1cf…81dc | [0] 0x000000000000…0031298a data: 0xd19484830eab5d594c…1ab61da7 |
| 0xf6b69e…020110 | 15 hrs agoMon, 17 Aug 2026 13:44:11 UTC | 0x26b1cf…81dc | [0] 0x000000000000…00312989 data: 0x0b4a03270f7b037571…92aa0b0e |
| 0xb55891…f4295b | 15 hrs agoMon, 17 Aug 2026 13:42:13 UTC | 0x26b1cf…81dc | [0] 0x000000000000…00312988 data: 0xac71ceb85134248052…9d56c74f |
| 0xb9f0ef…4a5c11 | 15 hrs agoMon, 17 Aug 2026 13:40:26 UTC | 0x26b1cf…81dc | [0] 0x000000000000…00312987 data: 0x4b300a93155d4e787c…1d1aaf6f |
| 0x5c8001…b7cf5c | 15 hrs agoMon, 17 Aug 2026 13:38:50 UTC | 0x26b1cf…81dc | [0] 0x000000000000…00312986 data: 0xe026ccc450695b852c…7779178a |
| 0x62a1a6…3bc6c2 | 15 hrs agoMon, 17 Aug 2026 13:37:30 UTC | 0x26b1cf…81dc | [0] 0x000000000000…00312985 data: 0x4c736c690f2c80f05d…1f9e6922 |
| 0x00de27…6f4a90 | 15 hrs agoMon, 17 Aug 2026 13:35:36 UTC | 0x26b1cf…81dc | [0] 0x000000000000…00312984 data: 0x3933902044be96771d…520f2b51 |
| 0x44879d…87f43c | 15 hrs agoMon, 17 Aug 2026 13:34:13 UTC | 0x26b1cf…81dc | [0] 0x000000000000…00312983 data: 0xef988398b29d0bd624…5763725f |
| 0xf06766…49a3f9 | 15 hrs agoMon, 17 Aug 2026 13:32:26 UTC | 0x26b1cf…81dc | [0] 0x000000000000…00312982 data: 0x6447855788f8d21538…a94e8829 |
| 0x61ea00…c96853 | 15 hrs agoMon, 17 Aug 2026 13:30:55 UTC | 0x26b1cf…81dc | [0] 0x000000000000…00312981 data: 0xc9617af6d01c154f60…147c1218 |
| 0xe6c024…fd282f | 15 hrs agoMon, 17 Aug 2026 13:29:19 UTC | 0x26b1cf…81dc | [0] 0x000000000000…00312980 data: 0x3acebb790dcc3a60ea…4d9b9428 |
| Transaction Hash | Method ? | Block | Age | From | To | Amount | Txn Fee ? | ||
|---|---|---|---|---|---|---|---|---|---|
| 0xa411f4…137788 | openRound | 38,896,024 | 15 hrs agoMon, 17 Aug 2026 14:07:36 UTC | 0x797e…6591 | IN | MINECAT | $0.000 ETH | 0.00000096 | |
| 0x3f714e…0abf40 | openRound | 38,895,188 | 15 hrs agoMon, 17 Aug 2026 14:06:12 UTC | 0x797e…6591 | IN | MINECAT | $0.000 ETH | 0.00000096 | |
| 0xbdd2ab…3c8242 | openRound | 38,894,091 | 15 hrs agoMon, 17 Aug 2026 14:04:22 UTC | 0x797e…6591 | IN | MINECAT | $0.000 ETH | 0.00000096 | |
| 0xc86fec…200181 | openRound | 38,893,243 | 15 hrs agoMon, 17 Aug 2026 14:02:57 UTC | 0x797e…6591 | IN | MINECAT | $0.000 ETH | 0.00000097 | |
| 0x795e40…a574c6 | openRound | 38,892,141 | 15 hrs agoMon, 17 Aug 2026 14:01:08 UTC | 0x797e…6591 | IN | MINECAT | $0.000 ETH | 0.00000096 | |
| 0x41cda3…9a1e98 | openRound | 38,891,341 | 15 hrs agoMon, 17 Aug 2026 13:59:48 UTC | 0x797e…6591 | IN | MINECAT | $0.000 ETH | 0.00000095 | |
| 0x503ea9…f6ed41 | openRound | 38,890,329 | 15 hrs agoMon, 17 Aug 2026 13:58:06 UTC | 0x797e…6591 | IN | MINECAT | $0.000 ETH | 0.00000096 | |
| 0xb49cbc…e6fab1 | openRound | 38,889,311 | 15 hrs agoMon, 17 Aug 2026 13:56:24 UTC | 0x797e…6591 | IN | MINECAT | $0.000 ETH | 0.00000096 | |
| 0x618979…11bad5 | openRound | 38,888,416 | 15 hrs agoMon, 17 Aug 2026 13:54:56 UTC | 0x797e…6591 | IN | MINECAT | $0.000 ETH | 0.00000096 | |
| 0x3a5142…32b523 | openRound | 38,887,473 | 15 hrs agoMon, 17 Aug 2026 13:53:21 UTC | 0x797e…6591 | IN | MINECAT | $0.000 ETH | 0.00000096 | |
| 0x6c4c0b…704c87 | openRound | 38,886,497 | 15 hrs agoMon, 17 Aug 2026 13:51:43 UTC | 0x797e…6591 | IN | MINECAT | $0.000 ETH | 0.00000096 | |
| 0xfadb98…440c2e | openRound | 38,885,542 | 15 hrs agoMon, 17 Aug 2026 13:50:07 UTC | 0x797e…6591 | IN | MINECAT | $0.000 ETH | 0.00000095 | |
| 0x6cf314…f26c89 | openRound | 38,884,501 | 15 hrs agoMon, 17 Aug 2026 13:48:25 UTC | 0x797e…6591 | IN | MINECAT | $0.000 ETH | 0.00000097 | |
| 0xdbf74f…b26a83 | openRound | 38,883,599 | 15 hrs agoMon, 17 Aug 2026 13:46:54 UTC | 0x797e…6591 | IN | MINECAT | $0.000 ETH | 0.00000097 | |
| 0xf5bf43…00298b | openRound | 38,882,683 | 15 hrs agoMon, 17 Aug 2026 13:45:22 UTC | 0x797e…6591 | IN | MINECAT | $0.000 ETH | 0.00000096 | |
| 0xf6b69e…020110 | openRound | 38,881,979 | 15 hrs agoMon, 17 Aug 2026 13:44:11 UTC | 0x797e…6591 | IN | MINECAT | $0.000 ETH | 0.00000098 | |
| 0xb55891…f4295b | openRound | 38,880,776 | 15 hrs agoMon, 17 Aug 2026 13:42:13 UTC | 0x797e…6591 | IN | MINECAT | $0.000 ETH | 0.00000099 | |
| 0xb9f0ef…4a5c11 | openRound | 38,879,717 | 15 hrs agoMon, 17 Aug 2026 13:40:26 UTC | 0x797e…6591 | IN | MINECAT | $0.000 ETH | 0.00000100 | |
| 0x5c8001…b7cf5c | openRound | 38,878,756 | 15 hrs agoMon, 17 Aug 2026 13:38:50 UTC | 0x797e…6591 | IN | MINECAT | $0.000 ETH | 0.00000099 | |
| 0x62a1a6…3bc6c2 | openRound | 38,877,963 | 15 hrs agoMon, 17 Aug 2026 13:37:30 UTC | 0x797e…6591 | IN | MINECAT | $0.000 ETH | 0.00000099 | |
| 0x00de27…6f4a90 | openRound | 38,876,807 | 15 hrs agoMon, 17 Aug 2026 13:35:36 UTC | 0x797e…6591 | IN | MINECAT | $0.000 ETH | 0.00000096 | |
| 0x44879d…87f43c | openRound | 38,875,984 | 15 hrs agoMon, 17 Aug 2026 13:34:13 UTC | 0x797e…6591 | IN | MINECAT | $0.000 ETH | 0.00000097 | |
| 0xf06766…49a3f9 | openRound | 38,874,919 | 15 hrs agoMon, 17 Aug 2026 13:32:26 UTC | 0x797e…6591 | IN | MINECAT | $0.000 ETH | 0.00000097 | |
| 0x61ea00…c96853 | openRound | 38,874,007 | 15 hrs agoMon, 17 Aug 2026 13:30:55 UTC | 0x797e…6591 | IN | MINECAT | $0.000 ETH | 0.00000099 | |
| 0xe6c024…fd282f | openRound | 38,873,026 | 15 hrs agoMon, 17 Aug 2026 13:29:19 UTC | 0x797e…6591 | IN | MINECAT | $0.000 ETH | 0.00000098 |