// SPDX-License-Identifier: MIT
pragma solidity ^0.8.28;
import {ReentrancyGuard} from "@openzeppelin/contracts/utils/ReentrancyGuard.sol";
import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
import {LunaToken} from "./LunaToken.sol";
import {LunaStaking} from "./LunaStaking.sol";
import {DrandBeacon} from "./DrandBeacon.sol";
/// @title LunaGame
/// @notice The LUNA mining game: a 5x5 field of 25 blocks. Each round, miners
/// deploy ETH onto blocks; when the 60-second round ends, a drand
/// beacon (BLS-verified on-chain) picks exactly one winning block.
///
/// ETH split per round (of total deployed):
/// 88% winners | 8% stakers | 2% motherlode | 1% eclipse | 1% admin
/// If nobody mined the winning block, the winners' 88% rolls into the
/// motherlode instead.
///
/// Emissions per round: 1 LUNA to the winning block (50% chance pro-rata
/// split, 50% chance one weighted-random miner takes it all), plus
/// 0.075 LUNA into the motherlode. Motherlode strikes 1-in-500, paying its
/// entire ETH+LUNA pool to the winning block pro-rata.
///
/// Mined LUNA claims: 10% fee, redistributed pro-rata ("Passive LUNA") to
/// miners still holding unclaimed mined LUNA. Claiming ETH only, or sending
/// mined LUNA straight into a permanent 4x stake ("Stake/Burn"), is free.
contract LunaGame is ReentrancyGuard, Ownable {
// ---------------- constants ----------------
uint256 public constant SQUARES = 25;
uint64 public constant ROUND_DURATION = 60;
uint256 public constant BPS = 10_000;
uint256 public constant WINNERS_BPS = 8_800;
uint256 public constant STAKERS_BPS = 800;
uint256 public constant MOTHERLODE_BPS = 200;
/// A slice of every mining round seeds the ECLIPSE pot. Taken out of what
/// used to be the Motherlode's 3% - winners' 88% and stakers' 8% are
/// untouched, so miners see no change in what they can win here.
uint256 public constant ECLIPSE_BPS = 100;
uint256 public constant ADMIN_BPS = 100;
uint256 public constant LUNA_PER_ROUND = 1 ether;
uint256 public constant MOTHERLODE_LUNA_PER_ROUND = 0.075 ether;
uint256 public constant MOTHERLODE_ODDS = 500; // 1-in-500
uint256 public constant CLAIM_FEE_BPS = 1_000; // 10% on mined-LUNA claims
uint256 public constant MIN_DEPLOY_PER_SQUARE = 0.0001 ether;
/// @notice Breather between rounds so the draw reveal can play out
/// before the next round's clock starts.
uint64 public constant INTERMISSION = 15;
/// @notice One full round cycle. Rounds run on this clock 24/7 from
/// genesisTime - they never stop, even with zero miners.
uint64 public constant CYCLE = ROUND_DURATION + INTERMISSION; // 75s
uint256 private constant PRECISION = 1e27;
// ---------------- external contracts ----------------
LunaToken public immutable luna;
LunaStaking public immutable staking;
DrandBeacon public immutable beacon;
/// ECLIPSE side-game, seeded by ECLIPSE_BPS of every settled round.
/// Immutable: an owner-settable target would let a future key redirect a
/// slice of every round's ETH. Deploy Eclipse first, then this contract.
address public immutable eclipse;
/// Eclipse funding that has been taken out of rounds but not yet delivered.
/// Non-zero only if a push failed; anyone can retry with flushEclipse().
uint256 public eclipseOwed;
address public adminFeeCollector;
// ---------------- round state ----------------
struct Round {
uint64 startTime; // 0 until first deploy of the round
uint64 endTime; // startTime + ROUND_DURATION
uint64 drandRound; // drand round used for settlement randomness
bool settled;
uint8 winningSquare;
bool splitEmission; // true: 1 LUNA split pro-rata; false: single winner
bool motherlodeHit;
bool emptyWin; // nobody was on the winning square
address singleWinner; // resolved lazily via resolveSingleWinner
uint256 singleTarget; // rng % deployed[winningSquare]
uint256 totalDeployed;
uint256 winnersPot; // 88% of totalDeployed (0 if emptyWin)
uint256 motherlodeEthPaid; // snapshot paid to winners if motherlodeHit
uint256 motherlodeLunaPaid;
uint256 lunaEmission; // actual LUNA emitted to the winning block
// (< LUNA_PER_ROUND only as MAX_SUPPLY is reached)
}
/// @dev A single deploy onto one square, recorded with the square's
/// cumulative total after it — lets us prove which deposit range a
/// weighted-random target falls into without on-chain iteration.
struct Deposit {
address miner;
uint96 _pad;
uint256 cumEnd;
}
/// @notice Unix time round 1's mining window opened. The clock never stops.
uint64 public immutable genesisTime;
/// @notice Rounds that ever received a deploy (for empty-round accounting).
uint256 public playedRoundsStarted;
uint256 public lastPlayedRoundId;
/// @notice Completed empty rounds whose emissions were already minted.
uint256 public emptyRoundsAccrued;
mapping(uint256 => Round) public rounds;
mapping(uint256 => uint256[SQUARES]) internal _deployed; // ETH per square
mapping(uint256 => uint256[SQUARES]) internal _minerCount;
mapping(uint256 => mapping(uint256 => Deposit[])) internal _deposits; // round => square => deposits
mapping(uint256 => mapping(address => mapping(uint256 => uint256))) public minerSquareAmount;
mapping(uint256 => mapping(address => uint256)) public minerTotal; // per round
mapping(uint256 => mapping(address => bool)) public roundClaimed;
// ---------------- motherlode ----------------
uint256 public motherlodeEth;
uint256 public motherlodeLuna;
// ---------------- reward balances ----------------
mapping(address => uint256) public unclaimedEth;
/// @notice "Mined LUNA": credited at checkpoint, held by the game until
/// claimed / staked. Earns Passive LUNA while it sits here.
mapping(address => uint256) public minedLuna;
uint256 public totalMinedOutstanding;
uint256 public passiveAccPerLuna; // scaled by PRECISION
mapping(address => uint256) public passiveDebt;
mapping(address => uint256) public passiveLuna; // settled passive credit
// ---------------- automation ----------------
struct Automation {
uint128 amountPerSquare;
uint32 squaresMask;
uint16 roundsLeft;
bool loopWinnings; // pull from unclaimedEth when budget runs dry
uint256 budget;
uint256 lastRoundPlayed;
}
mapping(address => Automation) public automations;
// ---------------- events ----------------
event RoundStarted(uint256 indexed roundId, uint64 startTime, uint64 endTime, uint64 drandRound);
event Deployed(uint256 indexed roundId, address indexed miner, uint32 squaresMask, uint256 amountPerSquare, uint256 total, bool viaAutomation);
event RoundSettled(uint256 indexed roundId, uint8 winningSquare, bool splitEmission, bool motherlodeHit, bool emptyWin, uint256 totalDeployed, uint256 winnersPot, bytes32 randomness);
event SingleWinnerResolved(uint256 indexed roundId, address indexed winner);
event Checkpointed(uint256 indexed roundId, address indexed miner, uint256 ethShare, uint256 lunaShare, uint256 motherlodeEthShare, uint256 motherlodeLunaShare);
event EthClaimed(address indexed miner, uint256 amount);
event LunaClaimed(address indexed miner, uint256 gross, uint256 fee);
event LunaStakeBurned(address indexed miner, uint256 amount);
event PassiveClaimed(address indexed miner, uint256 amount);
event MotherlodeGrew(uint256 eth, uint256 lunaTokens);
event EclipseFunded(uint256 amount);
/// Eclipse could not take the funding; it stays accrued and is retried.
event EclipseFundingDeferred(uint256 amount);
event AutomationSet(address indexed miner, uint128 amountPerSquare, uint32 squaresMask, uint16 roundsQueued, bool loopWinnings, uint256 budget);
event AutomationCancelled(address indexed miner, uint256 refund);
event AutomationExhausted(address indexed miner, uint256 leftoverToUnclaimed);
// ---------------- errors ----------------
error RoundNotActive();
error RoundStillActive();
error AlreadySettled();
error NotSettled();
error BadValue();
error NoSquares();
error AlreadyClaimed();
error NothingToClaim();
error NotWinner();
error SingleWinnerUnresolved();
error BadProof();
error NoAutomation();
error AutomationSpent();
error EthTransferFailed();
error AlreadyDeployedThisRound();
error ZeroAddress();
error BadGenesis();
constructor(
LunaToken luna_,
LunaStaking staking_,
DrandBeacon beacon_,
address eclipse_,
address adminFeeCollector_,
/// When round 1 begins. Pass 0 for "right now"; pass a future
/// timestamp to schedule the launch and give yourself room to verify
/// and wire everything up before the clock starts.
uint64 genesisTime_
) Ownable(msg.sender) {
// both are permanent: a zero collector burns every admin fee, and a
// zero eclipse would send its slice nowhere on every settled round
if (adminFeeCollector_ == address(0)) revert ZeroAddress();
if (eclipse_ == address(0)) revert ZeroAddress();
luna = luna_;
staking = staking_;
beacon = beacon_;
eclipse = eclipse_;
adminFeeCollector = adminFeeCollector_;
// A start time in the PAST would mean the game is born already several
// rounds deep, with unplayable history behind it - refuse it outright.
if (genesisTime_ != 0 && genesisTime_ < block.timestamp) revert BadGenesis();
genesisTime = genesisTime_ == 0 ? uint64(block.timestamp) : genesisTime_;
}
// =========================================================
// THE ROUND CLOCK (24/7)
// =========================================================
/// @notice True once the scheduled start time has arrived.
///
/// genesisTime is chosen at deployment and may be in the FUTURE, so the
/// clock can be scheduled rather than started by the act of deploying.
/// Deploying is not instant - contracts have to be verified, the backend
/// and frontend repointed, the indexer's database cleared - and with the
/// clock running from deployment the game was already several rounds deep
/// by the time anyone could see it. Now round 1 begins exactly when it is
/// meant to, with everything in place and pointed at it.
function started() public view returns (bool) {
return block.timestamp >= genesisTime;
}
/// @notice The round whose cycle contains this moment. Never stops.
///
/// Before the scheduled start this is round 1 - the round about to begin,
/// not a round zero. There is no such thing as round 0 anywhere in the
/// game, and inventing one would put it on screen during the countdown.
/// roundStartTime(1) is the genesis moment, so the UI gets a real
/// countdown target for free, and miningOpen() stays false until it lands.
function currentRoundId() public view returns (uint256) {
if (!started()) return 1;
return (block.timestamp - genesisTime) / CYCLE + 1;
}
function roundStartTime(uint256 roundId) public view returns (uint64) {
if (roundId == 0) return genesisTime; // defensive: no caller should ask
return genesisTime + uint64(roundId - 1) * CYCLE;
}
function roundEndTime(uint256 roundId) public view returns (uint64) {
return roundStartTime(roundId) + ROUND_DURATION;
}
/// @notice True during the current round's 60s mining window (deploys
/// allowed); false during the 15s intermission, and false before
/// the scheduled start.
function miningOpen() public view returns (bool) {
if (!started()) return false;
return (block.timestamp - genesisTime) % CYCLE < ROUND_DURATION;
}
/// @notice The most recent round whose mining window has closed.
function lastCompletedRoundId() public view returns (uint256) {
// Nothing has completed before the start. Without this, the pre-launch
// round 1 combined with miningOpen()==false reports round 1 as already
// finished - and the keeper would try to settle a round that has not
// happened yet.
if (!started()) return 0;
uint256 cur = currentRoundId();
return miningOpen() ? cur - 1 : cur;
}
/// @notice Empty-round emissions not yet minted into the motherlode.
function pendingEmptyEmissions() public view returns (uint256) {
uint256 completed = lastCompletedRoundId();
uint256 playedCompleted = playedRoundsStarted;
if (lastPlayedRoundId > completed) playedCompleted -= 1; // one in-flight max
uint256 emptyCompleted = completed - playedCompleted;
if (emptyCompleted <= emptyRoundsAccrued) return 0;
uint256 owed = (emptyCompleted - emptyRoundsAccrued) *
(LUNA_PER_ROUND + MOTHERLODE_LUNA_PER_ROUND);
uint256 remaining = luna.remainingMintable();
return owed > remaining ? remaining : owed;
}
/// @notice Mint the emissions of all completed empty rounds into the
/// motherlode. Rounds with zero miners can't pay a winner and the
/// motherlode can't strike (nobody to pay) - their whole emission
/// feeds the pot instead. Called automatically on deploys and
/// settles; callable by anyone.
function accrueEmptyEmissions() public {
uint256 completed = lastCompletedRoundId();
uint256 playedCompleted = playedRoundsStarted;
if (lastPlayedRoundId > completed) playedCompleted -= 1;
uint256 emptyCompleted = completed - playedCompleted;
if (emptyCompleted <= emptyRoundsAccrued) return;
uint256 owed = (emptyCompleted - emptyRoundsAccrued) *
(LUNA_PER_ROUND + MOTHERLODE_LUNA_PER_ROUND);
emptyRoundsAccrued = emptyCompleted;
uint256 remaining = luna.remainingMintable();
if (owed > remaining) owed = remaining;
if (owed > 0) {
luna.mint(address(this), owed);
motherlodeLuna += owed;
emit MotherlodeGrew(0, owed);
}
}
function setAdminFeeCollector(address collector) external onlyOwner {
if (collector == address(0)) revert ZeroAddress();
adminFeeCollector = collector;
}
// =========================================================
// MINING
// =========================================================
/// @notice Deploy `msg.value` ETH split evenly across the squares set in
/// `squaresMask` (bits 0..24). Starts the round if it hasn't begun.
function deploy(uint32 squaresMask) external payable nonReentrant {
_deploy(msg.sender, squaresMask, msg.value, false);
}
function _deploy(address miner, uint32 squaresMask, uint256 value, bool viaAutomation) internal {
uint256 nSquares = _popcount(squaresMask);
if (nSquares == 0 || squaresMask >= (1 << SQUARES)) revert NoSquares();
if (value == 0 || value % nSquares != 0) revert BadValue();
uint256 amountPerSquare = value / nSquares;
if (amountPerSquare < MIN_DEPLOY_PER_SQUARE) revert BadValue();
// rounds run on a fixed 24/7 clock; deploys only land inside the
// current round's 60s mining window (intermission rejects)
if (!miningOpen()) revert RoundNotActive();
uint256 roundId = currentRoundId();
// one deploy per miner per round - enforced on-chain for everyone
if (minerTotal[roundId][miner] > 0) revert AlreadyDeployedThisRound();
// settle up all elapsed empty rounds before this one opens for play
accrueEmptyEmissions();
Round storage r = rounds[roundId];
if (r.startTime == 0) {
// first deploy of this clock slot: record its fixed schedule
r.startTime = roundStartTime(roundId);
r.endTime = roundEndTime(roundId);
r.drandRound = beacon.roundAtTime(r.endTime);
playedRoundsStarted += 1;
lastPlayedRoundId = roundId;
emit RoundStarted(roundId, r.startTime, r.endTime, r.drandRound);
}
uint256[SQUARES] storage dep = _deployed[roundId];
uint256[SQUARES] storage cnt = _minerCount[roundId];
for (uint256 sq = 0; sq < SQUARES; sq++) {
if (squaresMask & (1 << sq) == 0) continue;
if (minerSquareAmount[roundId][miner][sq] == 0) cnt[sq] += 1;
dep[sq] += amountPerSquare;
minerSquareAmount[roundId][miner][sq] += amountPerSquare;
_deposits[roundId][sq].push(Deposit({miner: miner, _pad: 0, cumEnd: dep[sq]}));
}
minerTotal[roundId][miner] += value;
r.totalDeployed += value;
emit Deployed(roundId, miner, squaresMask, amountPerSquare, value, viaAutomation);
}
/// @notice Settle a played round with the drand beacon signature for its
/// assigned drand round. Permissionless. Empty rounds never need
/// settling - accrueEmptyEmissions() covers them.
function settle(uint256 roundId, uint256[2] calldata signature) external nonReentrant {
Round storage r = rounds[roundId];
if (r.startTime == 0 || block.timestamp < r.endTime) revert RoundStillActive();
if (r.settled) revert AlreadySettled();
accrueEmptyEmissions();
bytes32 randomness = beacon.verify(r.drandRound, signature);
uint256 rng = uint256(randomness);
uint8 win = uint8(rng % SQUARES);
r.winningSquare = win;
r.settled = true;
uint256 total = r.totalDeployed;
uint256 winDeployed = _deployed[roundId][win];
// ETH splits
uint256 adminCut = (total * ADMIN_BPS) / BPS;
uint256 stakersCut = (total * STAKERS_BPS) / BPS;
uint256 lodeCut = (total * MOTHERLODE_BPS) / BPS;
uint256 eclipseCut = (total * ECLIPSE_BPS) / BPS;
uint256 winnersPot = total - adminCut - stakersCut - lodeCut - eclipseCut; // 88%
// accrued now, pushed at the end of settle - never in the middle,
// and never in a way that can revert. See _flushEclipse().
eclipseOwed += eclipseCut;
// Emission mode + motherlode roll come from independent bits of rng.
r.splitEmission = (uint256(keccak256(abi.encodePacked(randomness, "split"))) & 1) == 0;
bool lodeHit = total > 0 && winDeployed > 0 &&
uint256(keccak256(abi.encodePacked(randomness, "lode"))) % MOTHERLODE_ODDS == 0;
// Emissions shrink gracefully as the 500k MAX_SUPPLY is reached:
// fill the round emission first, then the motherlode drip.
uint256 remaining = luna.remainingMintable();
uint256 emission = remaining >= LUNA_PER_ROUND ? LUNA_PER_ROUND : remaining;
remaining -= emission;
uint256 lodeDrip = remaining >= MOTHERLODE_LUNA_PER_ROUND ? MOTHERLODE_LUNA_PER_ROUND : remaining;
r.lunaEmission = emission;
if (winDeployed == 0) {
r.emptyWin = true;
// Nobody home: the winners' ETH pot and the round's LUNA emission
// both feed the motherlode instead of being stranded.
motherlodeEth += winnersPot;
motherlodeLuna += emission;
r.winnersPot = 0;
} else {
r.winnersPot = winnersPot;
if (!r.splitEmission) {
r.singleTarget = uint256(keccak256(abi.encodePacked(randomness, "single"))) % winDeployed;
}
}
// Mint this round's emissions to the game (held until claimed).
if (total > 0) {
if (emission + lodeDrip > 0) {
luna.mint(address(this), emission + lodeDrip);
}
motherlodeLuna += lodeDrip;
motherlodeEth += lodeCut;
emit MotherlodeGrew(lodeCut, lodeDrip);
}
if (lodeHit) {
r.motherlodeHit = true;
r.motherlodeEthPaid = motherlodeEth;
r.motherlodeLunaPaid = motherlodeLuna;
motherlodeEth = 0;
motherlodeLuna = 0;
}
if (stakersCut > 0) staking.notifyReward{value: stakersCut}();
if (adminCut > 0) _sendEth(adminFeeCollector, adminCut);
_flushEclipse();
emit RoundSettled(roundId, win, r.splitEmission, r.motherlodeHit, r.emptyWin, total, r.winnersPot, randomness);
// the clock advances rounds on its own - nothing to open here
}
/// Deliver accrued Eclipse funding. NEVER reverts.
///
/// This is the whole reason the funding is accrued rather than sent inline.
/// settle() is the heartbeat of the mining game: if a call to another
/// contract could revert inside it, then an Eclipse that is paused, buggy,
/// out of gas or simply replaced would stop every round from settling and
/// take the main game down with it. So the call is made with a raw `call`
/// whose result is checked but never enforced - on failure the money stays
/// accrued and goes out with the next round, or whenever anyone calls
/// flushEclipse(). Mining continues regardless.
function _flushEclipse() internal {
uint256 owed = eclipseOwed;
if (owed == 0) return;
eclipseOwed = 0; // zero BEFORE the call: no reentrant double-spend
(bool ok, ) = eclipse.call{value: owed}(abi.encodeWithSignature('fundPot()'));
if (!ok) {
eclipseOwed = owed; // undelivered - try again next settle
emit EclipseFundingDeferred(owed);
} else {
emit EclipseFunded(owed);
}
}
/// @notice Retry delivering Eclipse funding that a previous push could not
/// hand over. Permissionless - the money already belongs to
/// Eclipse, so anyone should be able to unstick it.
function flushEclipse() external nonReentrant {
_flushEclipse();
}
/// @notice Resolve the weighted-random single LUNA winner for a settled
/// round by pointing at the deposit whose cumulative range covers
/// the target. Permissionless; the proof is verified on-chain.
function resolveSingleWinner(uint256 roundId, uint256 depositIndex) external {
Round storage r = rounds[roundId];
if (!r.settled) revert NotSettled();
if (r.splitEmission || r.emptyWin) revert BadProof();
if (r.singleWinner != address(0)) return; // already resolved
Deposit[] storage deps = _deposits[roundId][r.winningSquare];
Deposit storage d = deps[depositIndex];
uint256 cumStart = depositIndex == 0 ? 0 : deps[depositIndex - 1].cumEnd;
if (r.singleTarget < cumStart || r.singleTarget >= d.cumEnd) revert BadProof();
r.singleWinner = d.miner;
emit SingleWinnerResolved(roundId, d.miner);
}
// =========================================================
// CHECKPOINT
// =========================================================
/// @notice Credit a miner's winnings for a settled round into their
/// reward balances. Callable by anyone (keeper bots included) on
/// behalf of any miner.
function checkpoint(uint256 roundId, address miner) public nonReentrant {
_checkpoint(roundId, miner);
}
function checkpointMany(uint256[] calldata roundIds, address miner) external nonReentrant {
for (uint256 i = 0; i < roundIds.length; i++) {
_checkpoint(roundIds[i], miner);
}
}
function _checkpoint(uint256 roundId, address miner) internal {
Round storage r = rounds[roundId];
if (!r.settled) revert NotSettled();
if (roundClaimed[roundId][miner]) revert AlreadyClaimed();
uint256 amt = minerSquareAmount[roundId][miner][r.winningSquare];
if (amt == 0) revert NotWinner();
roundClaimed[roundId][miner] = true;
uint256 winDeployed = _deployed[roundId][r.winningSquare];
uint256 ethShare = (amt * r.winnersPot) / winDeployed;
uint256 lunaShare;
if (r.splitEmission) {
lunaShare = (amt * r.lunaEmission) / winDeployed;
} else {
if (r.singleWinner == address(0) && r.lunaEmission > 0) revert SingleWinnerUnresolved();
if (r.singleWinner == miner) lunaShare = r.lunaEmission;
}
uint256 mlEth;
uint256 mlLuna;
if (r.motherlodeHit) {
mlEth = (amt * r.motherlodeEthPaid) / winDeployed;
mlLuna = (amt * r.motherlodeLunaPaid) / winDeployed;
}
if (ethShare + mlEth > 0) {
// Loop Rewards: while an automation with loopWinnings is running,
// ETH winnings feed the auto-miner's budget directly so mining
// continues without a claim step.
Automation storage a = automations[miner];
if (a.loopWinnings && a.roundsLeft > 0) {
a.budget += ethShare + mlEth;
} else {
unclaimedEth[miner] += ethShare + mlEth;
}
}
if (lunaShare + mlLuna > 0) _creditMined(miner, lunaShare + mlLuna);
emit Checkpointed(roundId, miner, ethShare, lunaShare, mlEth, mlLuna);
}
// =========================================================
// PASSIVE LUNA POOL
// =========================================================
function _settlePassive(address miner) internal {
uint256 owed = (minedLuna[miner] * passiveAccPerLuna) / PRECISION - passiveDebt[miner];
if (owed > 0) passiveLuna[miner] += owed;
}
function _creditMined(address miner, uint256 amount) internal {
_settlePassive(miner);
minedLuna[miner] += amount;
totalMinedOutstanding += amount;
passiveDebt[miner] = (minedLuna[miner] * passiveAccPerLuna) / PRECISION;
}
function _debitMined(address miner) internal returns (uint256 amount) {
_settlePassive(miner);
amount = minedLuna[miner];
minedLuna[miner] = 0;
totalMinedOutstanding -= amount;
passiveDebt[miner] = 0;
}
function pendingPassive(address miner) public view returns (uint256) {
return passiveLuna[miner] +
(minedLuna[miner] * passiveAccPerLuna) / PRECISION - passiveDebt[miner];
}
// =========================================================
// CLAIMS
// =========================================================
/// @notice Claim accumulated ETH winnings. No fee.
function claimEth() external nonReentrant {
uint256 amount = unclaimedEth[msg.sender];
if (amount == 0) revert NothingToClaim();
unclaimedEth[msg.sender] = 0;
_sendEth(msg.sender, amount);
emit EthClaimed(msg.sender, amount);
}
/// @notice Claim ETH plus all mined + passive LUNA to the wallet.
/// The 10% fee on mined LUNA feeds the Passive pool.
function claimAll() external nonReentrant {
uint256 ethAmount = unclaimedEth[msg.sender];
if (ethAmount > 0) {
unclaimedEth[msg.sender] = 0;
}
uint256 mined = _debitMined(msg.sender);
uint256 passive = passiveLuna[msg.sender];
passiveLuna[msg.sender] = 0;
if (ethAmount == 0 && mined == 0 && passive == 0) revert NothingToClaim();
uint256 fee = (mined * CLAIM_FEE_BPS) / BPS;
uint256 net = mined - fee + passive;
if (fee > 0) {
if (totalMinedOutstanding > 0) {
// multiply first, divide once - same money, less dust left
// stranded (same fix as EclipseGame.buyBeacons)
passiveAccPerLuna +=
(mined * CLAIM_FEE_BPS * PRECISION) / (BPS * totalMinedOutstanding);
} else {
// nobody left holding: the fee enriches the motherlode
motherlodeLuna += fee;
}
}
if (net > 0) luna.transfer(msg.sender, net);
if (ethAmount > 0) {
_sendEth(msg.sender, ethAmount);
emit EthClaimed(msg.sender, ethAmount);
}
emit LunaClaimed(msg.sender, mined + passive, fee);
}
/// @notice Send all MINED LUNA into a permanent 4x stake. No fee.
/// Cannot be undone. Passive LUNA is untouched - it stays
/// accruing and is only collected via claimAll.
function stakeBurnMined() external nonReentrant {
uint256 amount = _debitMined(msg.sender);
if (amount == 0) revert NothingToClaim();
luna.approve(address(staking), amount);
staking.stakeFor(msg.sender, amount, staking.TIER_BURN());
emit LunaStakeBurned(msg.sender, amount);
}
// =========================================================
// AUTOMATION
// =========================================================
/// @notice Configure auto-mining: `roundsQueued` rounds of
/// `amountPerSquare` on `squaresMask`, funded by `msg.value`.
/// With `loopWinnings`, unclaimed ETH tops the budget up.
function setAutomation(
uint128 amountPerSquare,
uint32 squaresMask,
uint16 roundsQueued,
bool loopWinnings
) external payable nonReentrant {
if (_popcount(squaresMask) == 0 || squaresMask >= (1 << SQUARES)) revert NoSquares();
if (amountPerSquare < MIN_DEPLOY_PER_SQUARE) revert BadValue();
if (!loopWinnings && roundsQueued == 0) revert BadValue();
Automation storage a = automations[msg.sender];
a.amountPerSquare = amountPerSquare;
a.squaresMask = squaresMask;
// with Loop Rewards the rounds count is meaningless: the automation
// runs until its budget (refilled by wins) can't fund the next round
a.roundsLeft = loopWinnings ? 1 : roundsQueued;
a.loopWinnings = loopWinnings;
a.budget += msg.value;
emit AutomationSet(msg.sender, amountPerSquare, squaresMask, roundsQueued, loopWinnings, a.budget);
}
function cancelAutomation() external nonReentrant {
Automation storage a = automations[msg.sender];
uint256 refund = a.budget;
delete automations[msg.sender];
if (refund > 0) _sendEth(msg.sender, refund);
emit AutomationCancelled(msg.sender, refund);
}
/// @notice Execute a miner's automation for the current round.
/// Permissionless so keeper bots can run it.
function executeAutomation(address miner) external nonReentrant {
Automation storage a = automations[miner];
// active: has config AND (looping forever, or rounds remaining)
if (a.amountPerSquare == 0 || (!a.loopWinnings && a.roundsLeft == 0)) revert NoAutomation();
uint256 roundId = currentRoundId();
if (a.lastRoundPlayed == roundId) revert AutomationSpent();
uint256 cost = uint256(a.amountPerSquare) * _popcount(a.squaresMask);
if (a.budget < cost && a.loopWinnings) {
uint256 topUp = cost - a.budget;
uint256 avail = unclaimedEth[miner];
if (avail >= topUp) {
unclaimedEth[miner] = avail - topUp;
a.budget += topUp;
}
}
if (a.budget < cost) {
// Can't afford the next round (fees drained the budget): the
// automation stops itself and the leftover becomes claimable ETH.
uint256 leftover = a.budget;
if (leftover > 0) unclaimedEth[miner] += leftover;
emit AutomationExhausted(miner, leftover);
delete automations[miner];
return;
}
a.budget -= cost;
a.lastRoundPlayed = roundId;
if (!a.loopWinnings) {
// fixed-length run: count down, sweep leftover when done
a.roundsLeft -= 1;
if (a.roundsLeft == 0 && a.budget > 0) {
unclaimedEth[miner] += a.budget;
a.budget = 0;
}
}
// (looping runs never count down - they end via exhaustion or cancel)
_deploy(miner, a.squaresMask, cost, true);
}
// =========================================================
// VIEWS
// =========================================================
function roundDeployed(uint256 roundId) external view returns (uint256[SQUARES] memory) {
return _deployed[roundId];
}
function roundMinerCounts(uint256 roundId) external view returns (uint256[SQUARES] memory) {
return _minerCount[roundId];
}
function depositCount(uint256 roundId, uint256 square) external view returns (uint256) {
return _deposits[roundId][square].length;
}
function depositAt(uint256 roundId, uint256 square, uint256 index)
external view returns (address miner, uint256 cumEnd)
{
Deposit storage d = _deposits[roundId][square][index];
return (d.miner, d.cumEnd);
}
function _popcount(uint32 x) internal pure returns (uint256 c) {
while (x != 0) {
x &= x - 1;
c++;
}
}
function _sendEth(address to, uint256 amount) internal {
(bool ok, ) = to.call{value: amount}("");
if (!ok) revert EthTransferFailed();
}
}[
{
"type": "constructor",
"inputs": [
{
"name": "luna_",
"type": "address",
"internalType": "contract LunaToken"
},
{
"name": "staking_",
"type": "address",
"internalType": "contract LunaStaking"
},
{
"name": "beacon_",
"type": "address",
"internalType": "contract DrandBeacon"
},
{
"name": "eclipse_",
"type": "address",
"internalType": "address"
},
{
"name": "adminFeeCollector_",
"type": "address",
"internalType": "address"
},
{
"name": "genesisTime_",
"type": "uint64",
"internalType": "uint64"
}
],
"stateMutability": "nonpayable"
},
{
"name": "AlreadyClaimed",
"type": "error",
"inputs": []
},
{
"name": "AlreadyDeployedThisRound",
"type": "error",
"inputs": []
},
{
"name": "AlreadySettled",
"type": "error",
"inputs": []
},
{
"name": "AutomationSpent",
"type": "error",
"inputs": []
},
{
"name": "BadGenesis",
"type": "error",
"inputs": []
},
{
"name": "BadProof",
"type": "error",
"inputs": []
},
{
"name": "BadValue",
"type": "error",
"inputs": []
},
{
"name": "EthTransferFailed",
"type": "error",
"inputs": []
},
{
"name": "NoAutomation",
"type": "error",
"inputs": []
},
{
"name": "NoSquares",
"type": "error",
"inputs": []
},
{
"name": "NotSettled",
"type": "error",
"inputs": []
},
{
"name": "NotWinner",
"type": "error",
"inputs": []
},
{
"name": "NothingToClaim",
"type": "error",
"inputs": []
},
{
"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": "RoundNotActive",
"type": "error",
"inputs": []
},
{
"name": "RoundStillActive",
"type": "error",
"inputs": []
},
{
"name": "SingleWinnerUnresolved",
"type": "error",
"inputs": []
},
{
"name": "ZeroAddress",
"type": "error",
"inputs": []
},
{
"name": "AutomationCancelled",
"type": "event",
"inputs": [
{
"name": "miner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "refund",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "AutomationExhausted",
"type": "event",
"inputs": [
{
"name": "miner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "leftoverToUnclaimed",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "AutomationSet",
"type": "event",
"inputs": [
{
"name": "miner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "amountPerSquare",
"type": "uint128",
"indexed": false,
"internalType": "uint128"
},
{
"name": "squaresMask",
"type": "uint32",
"indexed": false,
"internalType": "uint32"
},
{
"name": "roundsQueued",
"type": "uint16",
"indexed": false,
"internalType": "uint16"
},
{
"name": "loopWinnings",
"type": "bool",
"indexed": false,
"internalType": "bool"
},
{
"name": "budget",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "Checkpointed",
"type": "event",
"inputs": [
{
"name": "roundId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "miner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "ethShare",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "lunaShare",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "motherlodeEthShare",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "motherlodeLunaShare",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "Deployed",
"type": "event",
"inputs": [
{
"name": "roundId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "miner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "squaresMask",
"type": "uint32",
"indexed": false,
"internalType": "uint32"
},
{
"name": "amountPerSquare",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "total",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "viaAutomation",
"type": "bool",
"indexed": false,
"internalType": "bool"
}
],
"anonymous": false
},
{
"name": "EclipseFunded",
"type": "event",
"inputs": [
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "EclipseFundingDeferred",
"type": "event",
"inputs": [
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "EthClaimed",
"type": "event",
"inputs": [
{
"name": "miner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "LunaClaimed",
"type": "event",
"inputs": [
{
"name": "miner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "gross",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "fee",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "LunaStakeBurned",
"type": "event",
"inputs": [
{
"name": "miner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "MotherlodeGrew",
"type": "event",
"inputs": [
{
"name": "eth",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "lunaTokens",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"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": "PassiveClaimed",
"type": "event",
"inputs": [
{
"name": "miner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "RoundSettled",
"type": "event",
"inputs": [
{
"name": "roundId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "winningSquare",
"type": "uint8",
"indexed": false,
"internalType": "uint8"
},
{
"name": "splitEmission",
"type": "bool",
"indexed": false,
"internalType": "bool"
},
{
"name": "motherlodeHit",
"type": "bool",
"indexed": false,
"internalType": "bool"
},
{
"name": "emptyWin",
"type": "bool",
"indexed": false,
"internalType": "bool"
},
{
"name": "totalDeployed",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "winnersPot",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "randomness",
"type": "bytes32",
"indexed": false,
"internalType": "bytes32"
}
],
"anonymous": false
},
{
"name": "RoundStarted",
"type": "event",
"inputs": [
{
"name": "roundId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "startTime",
"type": "uint64",
"indexed": false,
"internalType": "uint64"
},
{
"name": "endTime",
"type": "uint64",
"indexed": false,
"internalType": "uint64"
},
{
"name": "drandRound",
"type": "uint64",
"indexed": false,
"internalType": "uint64"
}
],
"anonymous": false
},
{
"name": "SingleWinnerResolved",
"type": "event",
"inputs": [
{
"name": "roundId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "winner",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "ADMIN_BPS",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "BPS",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "CLAIM_FEE_BPS",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "CYCLE",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint64",
"internalType": "uint64"
}
],
"stateMutability": "view"
},
{
"name": "ECLIPSE_BPS",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "INTERMISSION",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint64",
"internalType": "uint64"
}
],
"stateMutability": "view"
},
{
"name": "LUNA_PER_ROUND",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "MIN_DEPLOY_PER_SQUARE",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "MOTHERLODE_BPS",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "MOTHERLODE_LUNA_PER_ROUND",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "MOTHERLODE_ODDS",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "ROUND_DURATION",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint64",
"internalType": "uint64"
}
],
"stateMutability": "view"
},
{
"name": "SQUARES",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "STAKERS_BPS",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "WINNERS_BPS",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "accrueEmptyEmissions",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "adminFeeCollector",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "automations",
"type": "function",
"inputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "amountPerSquare",
"type": "uint128",
"internalType": "uint128"
},
{
"name": "squaresMask",
"type": "uint32",
"internalType": "uint32"
},
{
"name": "roundsLeft",
"type": "uint16",
"internalType": "uint16"
},
{
"name": "loopWinnings",
"type": "bool",
"internalType": "bool"
},
{
"name": "budget",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "lastRoundPlayed",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "beacon",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "contract DrandBeacon"
}
],
"stateMutability": "view"
},
{
"name": "cancelAutomation",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "checkpoint",
"type": "function",
"inputs": [
{
"name": "roundId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "miner",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "checkpointMany",
"type": "function",
"inputs": [
{
"name": "roundIds",
"type": "uint256[]",
"internalType": "uint256[]"
},
{
"name": "miner",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "claimAll",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "claimEth",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "currentRoundId",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "deploy",
"type": "function",
"inputs": [
{
"name": "squaresMask",
"type": "uint32",
"internalType": "uint32"
}
],
"outputs": [],
"stateMutability": "payable"
},
{
"name": "depositAt",
"type": "function",
"inputs": [
{
"name": "roundId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "square",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "index",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "miner",
"type": "address",
"internalType": "address"
},
{
"name": "cumEnd",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "depositCount",
"type": "function",
"inputs": [
{
"name": "roundId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "square",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "eclipse",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "eclipseOwed",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "emptyRoundsAccrued",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "executeAutomation",
"type": "function",
"inputs": [
{
"name": "miner",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "flushEclipse",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "genesisTime",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint64",
"internalType": "uint64"
}
],
"stateMutability": "view"
},
{
"name": "lastCompletedRoundId",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "lastPlayedRoundId",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "luna",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "contract LunaToken"
}
],
"stateMutability": "view"
},
{
"name": "minedLuna",
"type": "function",
"inputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "minerSquareAmount",
"type": "function",
"inputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "",
"type": "address",
"internalType": "address"
},
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "minerTotal",
"type": "function",
"inputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "miningOpen",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "motherlodeEth",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "motherlodeLuna",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "owner",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "passiveAccPerLuna",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "passiveDebt",
"type": "function",
"inputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "passiveLuna",
"type": "function",
"inputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "pendingEmptyEmissions",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "pendingPassive",
"type": "function",
"inputs": [
{
"name": "miner",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "playedRoundsStarted",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "renounceOwnership",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "resolveSingleWinner",
"type": "function",
"inputs": [
{
"name": "roundId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "depositIndex",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "roundClaimed",
"type": "function",
"inputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "roundDeployed",
"type": "function",
"inputs": [
{
"name": "roundId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "uint256[25]",
"internalType": "uint256[25]"
}
],
"stateMutability": "view"
},
{
"name": "roundEndTime",
"type": "function",
"inputs": [
{
"name": "roundId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "uint64",
"internalType": "uint64"
}
],
"stateMutability": "view"
},
{
"name": "roundMinerCounts",
"type": "function",
"inputs": [
{
"name": "roundId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "uint256[25]",
"internalType": "uint256[25]"
}
],
"stateMutability": "view"
},
{
"name": "roundStartTime",
"type": "function",
"inputs": [
{
"name": "roundId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "uint64",
"internalType": "uint64"
}
],
"stateMutability": "view"
},
{
"name": "rounds",
"type": "function",
"inputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "startTime",
"type": "uint64",
"internalType": "uint64"
},
{
"name": "endTime",
"type": "uint64",
"internalType": "uint64"
},
{
"name": "drandRound",
"type": "uint64",
"internalType": "uint64"
},
{
"name": "settled",
"type": "bool",
"internalType": "bool"
},
{
"name": "winningSquare",
"type": "uint8",
"internalType": "uint8"
},
{
"name": "splitEmission",
"type": "bool",
"internalType": "bool"
},
{
"name": "motherlodeHit",
"type": "bool",
"internalType": "bool"
},
{
"name": "emptyWin",
"type": "bool",
"internalType": "bool"
},
{
"name": "singleWinner",
"type": "address",
"internalType": "address"
},
{
"name": "singleTarget",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "totalDeployed",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "winnersPot",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "motherlodeEthPaid",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "motherlodeLunaPaid",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "lunaEmission",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "setAdminFeeCollector",
"type": "function",
"inputs": [
{
"name": "collector",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setAutomation",
"type": "function",
"inputs": [
{
"name": "amountPerSquare",
"type": "uint128",
"internalType": "uint128"
},
{
"name": "squaresMask",
"type": "uint32",
"internalType": "uint32"
},
{
"name": "roundsQueued",
"type": "uint16",
"internalType": "uint16"
},
{
"name": "loopWinnings",
"type": "bool",
"internalType": "bool"
}
],
"outputs": [],
"stateMutability": "payable"
},
{
"name": "settle",
"type": "function",
"inputs": [
{
"name": "roundId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "signature",
"type": "uint256[2]",
"internalType": "uint256[2]"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "stakeBurnMined",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "staking",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "contract LunaStaking"
}
],
"stateMutability": "view"
},
{
"name": "started",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "totalMinedOutstanding",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "transferOwnership",
"type": "function",
"inputs": [
{
"name": "newOwner",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "unclaimedEth",
"type": "function",
"inputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
}
]0x6101203461027c57601f613c1938819003918201601f19168301916001600160401b038311848410176102815780849260c09460405283398101031261027c5780516001600160a01b038116810361027c5760208201516001600160a01b038116810361027c576040830151916001600160a01b038316830361027c5761008860608501610297565b60a061009660808701610297565b950151936001600160401b0385169384860361027c5760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005533156102665760008054336001600160a01b0319821681178355604051999290916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a36001600160a01b0316938415610255576001600160a01b038416156102555760805260a05260c05260e052600280546001600160a01b0319169190911790558015908115908161024b575b5061023a57156102355750426001600160401b03165b6101005261396d90816102ac82396080518181816106f501528181610aa001528181611b0a0152818161239a015281816127660152612904015260a051818181610a530152818161179c0152611cbb015260c05181818161151d01528181611702015281816119230152613019015260e051818181612485015261343f015261010051818181611846015281816123df01528181612671015281816126c4015281816129e001528181612bbd0152612bf30152f35b610180565b6306e0dabd60e11b60005260046000fd5b905042113861016a565b63d92e233d60e01b60005260046000fd5b631e4fbdf760e01b600052600060045260246000fd5b600080fd5b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b038216820361027c5756fe608080604052600436101561001357600080fd5b600090813560e01c9081630553d86d146124665750806313bc10491461243f57806317a7ee65146124225780631aed5aee146124065780631f2698ab146123be578063234a4c3e1461237a578063249d39e91461235d57806324bba0a51461233f57806325434b7414612144578063259b6145146120d057806326a8ce2f146120695780632846ca4d14610f0b5780632b6761a1146120265780632feea63c1461188d5780633a4a0e911461186a57806342c6498a146118255780634666ad461461180857806349e96ae7146117e35780634bf77d05146117c05780634cf088d91461177c5780634d7c05eb14611744578063587aef7d1461172657806359659e90146116e25780635b0fe120146116b55780635ce564f41461115f5780635f1349171461113e578063642d77ea1461109e57806364f89db9146110805780636641ea0814611064578063671ce5881461102c578063694cf4fc14610fdf57806370117a3214610fc1578063715018a614610f6857806371adb77014610f4d57806372d74ae814610f3157806377b581ef14610f105780637bedc51114610f0b5780637c68079014610eed5780638a1c0eac14610ed45780638acea26214610e9c5780638c65c81f14610da45780638da5cb5b14610d7e5780639778d8e314610d6357806399e91ab214610d065780639c70665814610cea5780639cbe5efd14610cc75780639da2444114610cac5780639dcd02b914610c7f5780639e8d48d014610c625780639f86b66314610c45578063a04941a214610c28578063a4ee8b6314610c01578063ac59c12e14610a1c578063ae78a08a146109e4578063b0139664146109c6578063b2104deb146109a8578063b7cdddcb14610914578063b9ad435714610888578063c137a60f14610857578063d1058e591461059b578063db326efc1461055c578063e23c710b1461053e578063e7498e10146104c7578063e941027e14610473578063f01e31f714610424578063f2fde38b1461039e5763f4d987db1461030257600080fd5b3461039b578060031936011261039b5761031a613328565b338152601560205260016040822001543382526015602052600060026040842082815582600182015501558061038c575b6040519081527ff322950842a5d99c257096f486ed4a9bf2fe0fecc76f450371039c31faa762a960203392a260016000805160206139188339815191525580f35b61039681336133de565b61034b565b80fd5b503461039b57602036600319011261039b576001600160a01b036103c06124a9565b6103c8613832565b168015610410576001600160a01b038254826001600160a01b03198216178455167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b631e4fbdf760e01b82526004829052602482fd5b503461039b57606036600319011261039b5760406020916104436124c4565b6004358252600a84526001600160a01b038383209116600052835281600020604435825283522054604051908152f35b503461039b57602036600319011261039b576001600160a01b036104956124a9565b61049d613832565b1680156104b8576001600160a01b0319600254161760025580f35b63d92e233d60e01b8252600482fd5b503461039b57602036600319011261039b5761032090816040516104eb8282612614565b369037600435815260076020526040808220905191825b6019821061052857610524846105188782612614565b604051918291826124da565b0390f35b6001602081928554815201930191019091610502565b503461039b578060031936011261039b576020600154604051908152f35b503461039b57602036600319011261039b576105866105796124a9565b610581613328565b612c15565b60016000805160206139188339815191525580f35b503461039b578060031936011261039b576105b4613328565b338152600f602052604081205480159081159182610844575b6105d63361385b565b338552601460205260408520549133865260146020528560408120558061083c575b80610834575b610825576103e88102928184046103e81482151715610811576127108404946106308461062b88866125d5565b612571565b948661076f575b50846106d1575b61064e9450610695575b50612571565b9060405191825260208201527f4b605ce31d813b2cad8f9b40063105724d5493b885c42e09ef37f561866e10dc60403392a260016000805160206139188339815191525580f35b61069f81336133de565b6040519081527f0d7976053781e071cecf47e898ad2a6dc87621ca33734e96eb4b92453319e8c960203392a238610648565b60405163a9059cbb60e01b815233600482015260248101959095526020856044818a7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af19485156107645761064e95610735575b5061063e565b6107569060203d60201161075d575b61074e8183612614565b810190612b6f565b503861072f565b503d610744565b6040513d89823e3d90fd5b601154156107fc576c0c9f2c9cd04674edea400000008402908082046b033b2e3c9fd0803ce800000014901517156107e857601154908161271002916127108304036107d4576107ca916107c2916125b5565b601254612571565b6012555b38610637565b634e487b7160e01b89526011600452602489fd5b634e487b7160e01b88526011600452602488fd5b5061080986600e54612571565b600e556107ce565b634e487b7160e01b86526011600452602486fd5b6312d37ee560e31b8552600485fd5b5081156105fe565b5080156105f8565b338452600f6020528360408120556105cd565b503461039b57602036600319011261039b576020610876600435612b87565b67ffffffffffffffff60405191168152f35b503461039b57602036600319011261039b57604060c0916001600160a01b036108af6124a9565b168152601560205220805490600260018201549101549060ff604051936fffffffffffffffffffffffffffffffff8116855263ffffffff8160801c16602086015261ffff8160a01c16604086015260b01c1615156060840152608083015260a0820152f35b503461039b578060031936011261039b5761092d613328565b338152600f6020526040812054801561099957338252600f60205281604081205561095881336133de565b6040519081527f0d7976053781e071cecf47e898ad2a6dc87621ca33734e96eb4b92453319e8c960203392a260016000805160206139188339815191525580f35b6312d37ee560e31b8252600482fd5b503461039b578060031936011261039b576020601254604051908152f35b503461039b578060031936011261039b576020600454604051908152f35b503461039b57602036600319011261039b5760406020916001600160a01b03610a0b6124a9565b168152600f83522054604051908152f35b503461039b578060031936011261039b57610a35613328565b610a3e3361385b565b80156109995760405163095ea7b360e01b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166004820181905260248201839052839160208180604481010381866001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af18015610bd957610be4575b506040516316cc4b7160e31b8152602081600481855afa908115610bd9578391610b9d575b50813b15610b995760ff60648492836040519586948593633e14422d60e11b85523360048601528a60248601521660448401525af18015610b8e57610b75575b50506040519081527f5fbbbd6d644d0fa6e2ad181f1d2b0e16d9ebfdcf920e453e808fbc7a3d0e1cc360203392a260016000805160206139188339815191525580f35b81610b7f91612614565b610b8a578138610b32565b5080fd5b6040513d84823e3d90fd5b8280fd5b90506020813d602011610bd1575b81610bb860209383612614565b81010312610b99575160ff81168103610b995738610af2565b3d9150610bab565b6040513d85823e3d90fd5b610bfc9060203d60201161075d5761074e8183612614565b610acd565b503461039b57602036600319011261039b576020610876610c23600435612b87565b61253b565b503461039b578060031936011261039b5760206040516103208152f35b503461039b578060031936011261039b5760206040516122608152f35b503461039b578060031936011261039b57604051604b8152602090f35b503461039b576040602091610c9336612525565b9082526009845282822090825283522054604051908152f35b503461039b57610cc4610cbe36612525565b90612a30565b80f35b503461039b578060031936011261039b576020610ce26129d5565b604051908152f35b503461039b578060031936011261039b576020604051600f8152f35b503461039b57606036600319011261039b57610d3e9060043581526009602052604081206024358252602052604060443591206129b9565b508054600190910154604080516001600160a01b039093168352602083019190915290f35b503461039b578060031936011261039b576020610ce26128b5565b503461039b578060031936011261039b576001600160a01b036020915416604051908152f35b503461039b57602036600319011261039b5760406101e09160043581526006602052208054906001600160a01b036001820154169060028101546003820154600483015490600584015492600760068601549501549560ff6040519867ffffffffffffffff81168a5267ffffffffffffffff8160401c1660208b015267ffffffffffffffff8160801c1660408b0152818160c01c16151560608b0152818160c81c1660808b0152818160d01c16151560a08b0152818160d81c16151560c08b015260e01c16151560e08901526101008801526101208701526101408601526101608501526101808401526101a08301526101c0820152f35b503461039b57602036600319011261039b5760406020916001600160a01b03610ec36124a9565b168152601483522054604051908152f35b503461039b578060031936011261039b57610cc4612716565b503461039b578060031936011261039b576020600354604051908152f35b612509565b503461039b578060031936011261039b576020604051655af3107a40008152f35b503461039b578060031936011261039b57602060405160c88152f35b503461039b578060031936011261039b576020610ce26126b9565b503461039b578060031936011261039b57610f81613832565b806001600160a01b0381546001600160a01b031981168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b503461039b578060031936011261039b576020600d54604051908152f35b503461039b57604036600319011261039b576001600160a01b0360406110036124c4565b926004358152600c602052209116600052602052602060ff604060002054166040519015158152f35b503461039b57602036600319011261039b5760406020916001600160a01b036110536124a9565b168152601083522054604051908152f35b503461039b578060031936011261039b576020604051603c8152f35b503461039b578060031936011261039b576020601154604051908152f35b503461039b57604036600319011261039b5760043567ffffffffffffffff8111610b8a5736602382011215610b8a5780600401359067ffffffffffffffff8211610b99573660248360051b83010111610b99576110f96124c4565b90611102613328565b835b83811015611128576001906111228460248360051b860101356134ce565b01611104565b8460016000805160206139188339815191525580f35b503461039b578060031936011261039b57611157613328565b610586613408565b50602036600319011261039b5760043563ffffffff811690818103610b9957611186613328565b61118f81613364565b801580156116a7575b6116985734158015611686575b611677576111b390346125b5565b655af3107a40008110611677576111c8612666565b15611668576111d56129d5565b91828552600b602052604085206001600160a01b03331660005260205260406000205461165957611204612716565b82855260066020526040852090815467ffffffffffffffff81161561149d575b508386526007602052604086208487526008602052604087209187926001600160a01b033316935b601981106112e1575050505090600391848752600b6020526040872090600052602052604060002061127f348254612571565b90550161128d348254612571565b905560405192835260208301523460408301528260608301527fc2a8d39d02fdca53d0a7e042397098921d1edda067ea291a8dea0bcf79c53c8c60803393a360016000805160206139188339815191525580f35b63ffffffff6001821b8416161561149557878a52600a6020526040808b2060009087825260205220818b5260205260408a205415611443575b61134e6113278286612640565b6113378a83548360031b1c612571565b825460001960039390931b92831b1916911b179055565b878a52600a6020526040808b2060009087825260205220818b5260205260408a2061137a888254612571565b9055878a52600960205260408a20818b5260205260408a2061139c8286612640565b90549060031b1c604051916113b0836125e2565b33835260208301908d8252604084019283528054906801000000000000000082101561142f57906113e6916001820181556129b9565b93909361141b5751905160a01b6001600160a01b0319166001600160a01b039190911617825551600191820155905b0161124c565b634e487b7160e01b8e5260048e905260248efd5b634e487b7160e01b8f52604160045260248ffd5b61144d8183612640565b81548160031b1c9160018301809311611481579061147c929082549060031b91821b91600019901b1916179055565b61131a565b634e487b7160e01b8d52601160045260248dfd5b600190611415565b67ffffffffffffffff6114af86612b87565b166fffffffffffffffff00000000000000006114cd610c2388612b87565b60401b169081816fffffffffffffffffffffffffffffffff198516171780865567ffffffffffffffff60405191630bb51adf60e31b835260401c1660048201526020816024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa90811561164e578a916115fc575b5067ffffffffffffffff60801b77ffffffffffffffffffffffffffffffffffffffffffffffff199160801b1693161717178255600354600181018091116115e85760035583600455837fd67eba8a4c2b19f4cdb9d2016cc2bc1b080b6b3f12d1b8717cf8de2eac0e517d6060845467ffffffffffffffff604051918181168352818160401c16602084015260801c166040820152a238611224565b634e487b7160e01b87526011600452602487fd5b90506020813d602011611646575b8161161760209383612614565b81010312611642575167ffffffffffffffff811681036116425767ffffffffffffffff60801b61154d565b8980fd5b3d915061160a565b6040513d8c823e3d90fd5b6325b23b7360e01b8552600485fd5b633df07da560e01b8452600484fd5b630bba69fb60e01b8452600484fd5b506116918134612636565b15156111a5565b633c5889a160e01b8452600484fd5b506302000000831015611198565b503461039b57604036600319011261039b576105866116d26124c4565b6116da613328565b6004356134ce565b503461039b578060031936011261039b5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461039b578060031936011261039b576020600e54604051908152f35b503461039b57602036600319011261039b5760406020916001600160a01b0361176b6124a9565b168152601383522054604051908152f35b503461039b578060031936011261039b5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461039b578060031936011261039b576020604051670de0b6b3a76400008152f35b503461039b578060031936011261039b5760206117fe612666565b6040519015158152f35b503461039b578060031936011261039b5760206040516101f48152f35b503461039b578060031936011261039b57602060405167ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461039b578060031936011261039b57602060405167010a741a462780008152f35b503461039b57606036600319011261039b5760043536606411610b8a576118b2613328565b808252600660205260408220805467ffffffffffffffff8116158015612010575b6120015760c01c60ff16611ff3576118e9612716565b805460405163d1b8e9d960e01b815267ffffffffffffffff8260801c16600482015260406024808301376020816064816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa908115611fe8578591611fb2575b50780100000000000000000000000000000000000000000000000060198206927fffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff79ff0000000000000000000000000000000000000000000000000060ff86169560c81b1691161717835560038301549284865260076020526119d98360408820612640565b90549060031b1c606485028515908681046064148217156107d457612710900491610320870287810461032014831715611f9e5761271090049160c8880288810460c814821715611f8a57839291611a4b86611a468c8f98611a4690611a466127108699049889946125d5565b6125d5565b611a5787600154612571565b600155600160405160208101908b82527f73706c6974000000000000000000000000000000000000000000000000000000604082015260258152611a9c604582612614565b51902089547fffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffff1691161560d01b7aff000000000000000000000000000000000000000000000000000016178089559115938480611f80575b85611f49575b60405163f76e95e560e01b8152927f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169290602085600481875afa801561164e578c958b91611f0e575b5094959394611b779490670de0b6b3a76400008110611f0457670de0b6b3a7640000958680926125d5565b67010a741a462780008110611efb5750600767010a741a46278000985b01558c83611e8c5750508b547fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16600160e01b178c55600d54611bd79250612571565b600d55611be682600e54612571565b600e558760048b01555b611d86575b50505050611d25575b80611cb1575b5050907fa232e401cb7c434637e4b86df3c32ecd0b4e114aeebd1dbdd8933e3036d9d135948260e0959493611c96575b50611c3d613408565b60ff6004835493015492604051958652818160d01c1615156020870152818160d81c1615156040870152861c1615156060850152608084015260a083015260c0820152a260016000805160206139188339815191525580f35b611cab906001600160a01b03600254166133de565b38611c34565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016803b15610b995782906004604051809481936317552f6960e21b83525af18015610b8e5715611c045781611d13919695949396612614565b611d21579091928638611c04565b8680fd5b7b010000000000000000000000000000000000000000000000000000007fffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffff855416178455600d546005850155600e54600685015581600d5581600e55611bfe565b611d908382612571565b611dee575b50507ffe79398a294db5a97fc6fe923987aca54f952ee644c76c226b590995769cbee59181611dc8604093600e54612571565b600e55611dd782600d54612571565b600d5582519182526020820152a138808080611bf5565b82611dfe91979394959697612571565b813b15610b99576040516340c10f1960e01b8152306004820152602481019190915291908290604490829084905af18015611e8157611e44575b90818c95949392611d95565b8b611e767ffe79398a294db5a97fc6fe923987aca54f952ee644c76c226b590995769cbee5939695949d604093612614565b9b9293949150611e38565b6040513d8e823e3d90fd5b91600460ff93015560d01c1615611ea4575b50611bf0565b611ef0908c604051602081019182527f73696e676c650000000000000000000000000000000000000000000000000000604082015260268152611ee8604682612614565b519020612636565b60028b015538611e9e565b60079098611b94565b80958680926125d5565b949550506020843d602011611f41575b81611f2b60209383612614565b810103126116425792518b949390611b77611b4c565b3d9150611f1e565b94506101f460405160208101908c8252636c6f646560e01b604082015260248152611f75604482612614565b519020061594611afa565b8115159550611af4565b634e487b7160e01b8b52601160045260248bfd5b634e487b7160e01b8a52601160045260248afd5b90506020813d602011611fe0575b81611fcd60209383612614565b81010312611fdc575138611953565b8480fd5b3d9150611fc0565b6040513d87823e3d90fd5b62560ff960e81b8352600483fd5b63280ae12160e21b8452600484fd5b5067ffffffffffffffff8160401c1642106118d3565b503461039b57604036600319011261039b5760406020916120456124c4565b6004358252600b84526001600160a01b038383209116825283522054604051908152f35b503461039b57602036600319011261039b57610320908160405161208d8282612614565b369037600435815260086020526040808220905191825b601982106120ba57610524846105188782612614565b60016020819285548152019301910190916120a4565b503461039b57602036600319011261039b57610ce260209160406001600160a01b036120fa6124a9565b16918281526014855261213582822054848352601087526b033b2e3c9fd0803ce800000061212e85852054601254906125a2565b0490612571565b928152601385522054906125d5565b50608036600319011261039b576004356fffffffffffffffffffffffffffffffff8116809103610b8a5760243563ffffffff81169081810361233b576044359061ffff8216908183036123375760643592831593841594858203612333576121aa613328565b6121b384613364565b158015612325575b61231657655af3107a4000881061230757806122ff575b6122f057906001929133895260156020526040892092886001600160a01b031973ffffffff0000000000000000000000000000000086549360801b169216171783556000146122e7575061223d825b825461ffff60a01b191660a09190911b61ffff60a01b16178255565b80547fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff76ff000000000000000000000000000000000000000000008660b01b169116178155019261228f348554612571565b80945560405194855260208501526040840152606083015260808201527faac0eb231685d4d13ca529563f1a72a2d049659a348c6725f0402c974b9319c860a03392a260016000805160206139188339815191525580f35b61223d90612221565b630bba69fb60e01b8852600488fd5b5083156121d2565b630bba69fb60e01b8952600489fd5b633c5889a160e01b8952600489fd5b5063020000008710156121bb565b8880fd5b8580fd5b8380fd5b503461039b578060031936011261039b576020600554604051908152f35b503461039b578060031936011261039b5760206040516127108152f35b503461039b578060031936011261039b5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461039b578060031936011261039b57602060405167ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000164210158152f35b503461039b578060031936011261039b57602060405160198152f35b503461039b578060031936011261039b5760206040516103e88152f35b503461039b578060031936011261039b5760206001600160a01b0360025416604051908152f35b905034610b8a5781600319360112610b8a576020906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b600435906001600160a01b03821682036124bf57565b600080fd5b602435906001600160a01b03821682036124bf57565b91906103208301926000905b601982106124f357505050565b60208060019285518152019301910190916124e6565b346124bf5760003660031901126124bf57602060405160648152f35b60409060031901126124bf576004359060243590565b67ffffffffffffffff603c9116019067ffffffffffffffff821161255b57565b634e487b7160e01b600052601160045260246000fd5b9190820180921161255b57565b90670eeb2acded8b8000820291808304670eeb2acded8b8000149015171561255b57565b8181029291811591840414171561255b57565b81156125bf570490565b634e487b7160e01b600052601260045260246000fd5b9190820391821161255b57565b6060810190811067ffffffffffffffff8211176125fe57604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff8211176125fe57604052565b81156125bf570690565b6019821015612650570190600090565b634e487b7160e01b600052603260045260246000fd5b67ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168042106126b3576126af6126a7603c92426125d5565b604b90612636565b1090565b50600090565b67ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000164210612711576126f26129d5565b6126fa612666565b1561270e57600019810190811161255b5790565b90565b600090565b61271e6126b9565b6003549060009180826004541161288c575b5061273a916125d5565b90600554808311156128875761275361275891846125d5565b61257e565b916005556001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660405163f76e95e560e01b8152602081600481855afa908115610bd9578391612855575b5080841161284d575b50826127be57505050565b803b15610b8a576040516340c10f1960e01b8152306004820152602481018490529082908290604490829084905af18015610b8e57917ffe79398a294db5a97fc6fe923987aca54f952ee644c76c226b590995769cbee5939160409361283d575b509061282d81600e54612571565b600e5582519182526020820152a1565b8161284791612614565b3861281f565b9250386127b3565b90506020813d60201161287f575b8161287060209383612614565b81010312610b995751386127aa565b3d9150612863565b505050565b6000198101915081116128a15761273a612730565b634e487b7160e01b83526011600452602483fd5b6128bd6126b9565b600354908060045411612996575b906128d5916125d5565b600554908181111561298f576128ee91612753916125d5565b60405163f76e95e560e01b8152906020826004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa9182156129835760009261294f575b508181111561294a575090565b905090565b90916020823d60201161297b575b8161296a60209383612614565b8101031261039b575051903861293d565b3d915061295d565b6040513d6000823e3d90fd5b5050600090565b6000198201918211156128cb57634e487b7160e01b600052601160045260246000fd5b80548210156126505760005260206000209060011b0190600090565b67ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016804210612a2a57612a14612a1c91426125d5565b604b906125b5565b6001810180911161255b5790565b50600190565b9081600052600660205260406000209081549160ff8360c01c1615612b5e5760ff8360d01c168015612b51575b612b075760018101926001600160a01b03845416612b4a5784600052600960205260ff60406000209160c81c166000526020526040600020612a9f83826129b9565b509280612b2757505060026000915b0154908110908115612b18575b50612b0757805482546001600160a01b0319166001600160a01b03918216179092555416907f99a47c8231fb62dbbdf1d3a13aef8a659e5e794d1a6e4633a0c4ad07f5dbb00b600080a3565b637ca55c7760e01b60005260046000fd5b90506001820154111538612abb565b600019810190811161255b57612b416001916002936129b9565b50015491612aae565b5050505050565b5060ff8360e01c16612a5d565b63ba329a9b60e01b60005260046000fd5b908160209103126124bf575180151581036124bf5790565b8015612bf057600019810190811161255b5767ffffffffffffffff908116604b0290811690810361255b5767ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000160167ffffffffffffffff811161255b5790565b507f000000000000000000000000000000000000000000000000000000000000000090565b6001600160a01b031680600052601560205260406000208054906fffffffffffffffffffffffffffffffff8216918215801561330a575b6132f957612c586129d5565b6002830193818554146132e857612c8190612c7b63ffffffff8560801c16613364565b906125a2565b93600184019283549086821090816132da575b50613285575b50858354868110613210575050612cb28584546125d5565b835555815460ff8160b01c1615613197575b50505460801c9063ffffffff821690612cdc82613364565b80158015613189575b6131785781158015613166575b61315557612d0090826125b5565b655af3107a4000811061315557612d15612666565b1561314457612d226129d5565b9384600052600b60205260406000208660005260205260406000205461313357612d4a612716565b846000526006602052604060002090815467ffffffffffffffff811615612f99575b50856000526007602052604060002090866000526008602052604060002060005b60198110612e115750505050917fc2a8d39d02fdca53d0a7e042397098921d1edda067ea291a8dea0bcf79c53c8c9391600360809487600052600b6020526040600020896000526020526040600020612de7858254612571565b905501612df5838254612571565b90556040519283526020830152604082015260016060820152a3565b6001811b831663ffffffff1615612f915788600052600a6020526040806000206000908c8252602052208160005260205260406000205415612f59575b612e6b612e5b8286612640565b6113378983548360031b1c612571565b88600052600a6020526040806000206000908c825260205220816000526020526040600020612e9b878254612571565b9055886000526009602052604060002081600052602052604060002090612ec28186612640565b90549060031b1c604051612ed5816125e2565b8c8152602081019360008552604082019283528054680100000000000000008110156125fe57612f0a916001820181556129b9565b929092612f43579051935160a01b6001600160a01b0319166001600160a01b039490941693909317815591516001928301555b01612d8d565b634e487b7160e01b600052600060045260246000fd5b612f638183612640565b81548160031b1c906001820180921161255b57825460001960039290921b91821b191691901b179055612e4e565b600190612f3d565b67ffffffffffffffff612fab88612b87565b166fffffffffffffffff0000000000000000612fc9610c238a612b87565b60401b169081816fffffffffffffffffffffffffffffffff198516171780865567ffffffffffffffff60405191630bb51adf60e31b835260401c1660048201526020816024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa908115612983576000916130e5575b5067ffffffffffffffff60801b77ffffffffffffffffffffffffffffffffffffffffffffffff199160801b16931617171782556003546001810180911161255b5760035585600455857fd67eba8a4c2b19f4cdb9d2016cc2bc1b080b6b3f12d1b8717cf8de2eac0e517d6060845467ffffffffffffffff604051918181168352818160401c16602084015260801c166040820152a238612d6c565b6020813d60201161312b575b816130fe60209383612614565b81010312610b8a57519067ffffffffffffffff8216820361039b575067ffffffffffffffff60801b61304a565b3d91506130f1565b6325b23b7360e01b60005260046000fd5b633df07da560e01b60005260046000fd5b630bba69fb60e01b60005260046000fd5b506131718183612636565b1515612cf2565b633c5889a160e01b60005260046000fd5b506302000000831015612ce5565b61ffff6000199160a01c160161ffff811161255b57825461ffff60a01b191660a09190911b61ffff60a01b1617825561ffff825460a01c161580613206575b6131e1575b80612cc4565b8060009154858352600f6020526131fd60408420918254612571565b905555386131db565b50805415156131d6565b92509450507f99705f2e210b74d415205c8e3813a5b132b9bb7fceb451a3542f8b90f93fd39c92506020915080613266575b604051908152a2600052601560205260006002604082208281558260018201550155565b83600052600f8252604060002061327e828254612571565b9055613242565b61328f90866125d5565b86600052600f60205260406000205490808210156132ae575b50612c9a565b6132bb816132d1936125d5565b88600052600f6020526040600020558454612571565b835538806132a8565b60ff915060b01c1638612c94565b6370237c6d60e11b60005260046000fd5b634faed9cf60e11b60005260046000fd5b5060ff8160b01c16158015612c4c575061ffff8160a01c1615612c4c565b6002600080516020613918833981519152541461335357600260008051602061391883398151915255565b633ee5aeb560e01b60005260046000fd5b6000905b63ffffffff8116801561339957600019019063ffffffff821161255b571690600019811461255b5760010190613368565b505090565b3d156133d9573d9067ffffffffffffffff82116125fe57604051916133cd601f8201601f191660200184612614565b82523d6000602084013e565b606090565b600080809381935af16133ef61339e565b50156133f757565b630db2c7f160e31b60005260046000fd5b60015480156134cb5760006001556000806040516020810190639c737e8f60e01b82526004815261343a602482612614565b5190847f00000000000000000000000000000000000000000000000000000000000000005af161346861339e565b5061349e576020817f88687ceef70199999121b2aa6204f7005c93d9a3036a7810b1af1dd8393c408f92600155604051908152a1565b60207fab6d245487fe791f781e700647cd8e9f7b7897347f93340eb9055bfa26e46dd791604051908152a1565b50565b8060005260066020526040600020805460ff8160c01c1615612b5e5782600052600c60205260406000206001600160a01b03851660005260205260ff604060002054166138215782600052600a60205260406000206001600160a01b03851660005260205260ff60406000209160c81c166000526020526040600020549283156138105782600052600c60205260406000206001600160a01b0382166000526020526040600020600160ff1982541617905582600052600760205260406000206135a183549160ff8360c81c1690612640565b90549060031b1c946135c0866135bb6004870154846125a2565b6125b5565b95600060ff8460d01c166000146137915750916080939183866136146001600160a01b03966135bb60077ff57f986038c10bbf10533c7ae7dd8f88f3098ded553e68ea02e921495965b6479b0154866125a2565b915b60009360ff60009660d81c1661375e575b505050613634828a612571565b6136df575b6136438382612571565b613662575b6040519889526020890152604088015260608701521693a3565b61366c8382612571565b613675856138a7565b61369f868616918260005260106020526040600020613695828254612571565b9055601154612571565b6011558060005260106020526b033b2e3c9fd0803ce80000006136ca604060002054601254906125a2565b04906000526013602052604060002055613648565b848416806000526015602052604060002090815460ff8160b01c16908161374d575b501561372857506137216001613717858d612571565b9201918254612571565b9055613639565b9050613734838b612571565b90600052600f6020526137216040600020918254612571565b61ffff915060a01c16151538613701565b613788939550829450600661377f836135bb60056135bb96970154856125a2565b950154906125a2565b91388080613627565b929093916001600160a01b0360018701541693841580613803575b6137f2577ff57f986038c10bbf10533c7ae7dd8f88f3098ded553e68ea02e921495965b647966080966001600160a01b0396878716036136165760078201549250613616565b631912786560e21b60005260046000fd5b50600787015415156137ac565b6330c6392160e11b60005260046000fd5b630c8d9eab60e31b60005260046000fd5b6001600160a01b0360005416330361384657565b63118cdaa760e01b6000523360045260246000fd5b6001600160a01b039061386d816138a7565b1660008181526010602052604081208054919055601154909291906138939084906125d5565b601155600052601360205260006040812055565b6001600160a01b03168060005260106020526138f16b033b2e3c9fd0803ce80000006138db604060002054601254906125a2565b04826000526013602052604060002054906125d5565b90816138fb575050565b60005260146020526139136040600020918254612571565b905556fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a26469706673582212202f8f661666e106d84997260a3a85b5d28319d9285c73ac0651a7670020a3de6764736f6c634300081c0033000000000000000000000000a6bd7d0dc2d3f4c0babe6ab06ccd5f090ffc80890000000000000000000000005705e86776e220a0f256a7ea8a9ea80672dd141f0000000000000000000000005a9eb5a13cd8214df878f7155391b730ab74de420000000000000000000000006103b8c107217dc4da94f977487a02bd75940f4f00000000000000000000000043596fa76bc79a3f1484187fe3912550fcaf8a3b000000000000000000000000000000000000000000000000000000006a67a9d7
0x608080604052600436101561001357600080fd5b600090813560e01c9081630553d86d146124665750806313bc10491461243f57806317a7ee65146124225780631aed5aee146124065780631f2698ab146123be578063234a4c3e1461237a578063249d39e91461235d57806324bba0a51461233f57806325434b7414612144578063259b6145146120d057806326a8ce2f146120695780632846ca4d14610f0b5780632b6761a1146120265780632feea63c1461188d5780633a4a0e911461186a57806342c6498a146118255780634666ad461461180857806349e96ae7146117e35780634bf77d05146117c05780634cf088d91461177c5780634d7c05eb14611744578063587aef7d1461172657806359659e90146116e25780635b0fe120146116b55780635ce564f41461115f5780635f1349171461113e578063642d77ea1461109e57806364f89db9146110805780636641ea0814611064578063671ce5881461102c578063694cf4fc14610fdf57806370117a3214610fc1578063715018a614610f6857806371adb77014610f4d57806372d74ae814610f3157806377b581ef14610f105780637bedc51114610f0b5780637c68079014610eed5780638a1c0eac14610ed45780638acea26214610e9c5780638c65c81f14610da45780638da5cb5b14610d7e5780639778d8e314610d6357806399e91ab214610d065780639c70665814610cea5780639cbe5efd14610cc75780639da2444114610cac5780639dcd02b914610c7f5780639e8d48d014610c625780639f86b66314610c45578063a04941a214610c28578063a4ee8b6314610c01578063ac59c12e14610a1c578063ae78a08a146109e4578063b0139664146109c6578063b2104deb146109a8578063b7cdddcb14610914578063b9ad435714610888578063c137a60f14610857578063d1058e591461059b578063db326efc1461055c578063e23c710b1461053e578063e7498e10146104c7578063e941027e14610473578063f01e31f714610424578063f2fde38b1461039e5763f4d987db1461030257600080fd5b3461039b578060031936011261039b5761031a613328565b338152601560205260016040822001543382526015602052600060026040842082815582600182015501558061038c575b6040519081527ff322950842a5d99c257096f486ed4a9bf2fe0fecc76f450371039c31faa762a960203392a260016000805160206139188339815191525580f35b61039681336133de565b61034b565b80fd5b503461039b57602036600319011261039b576001600160a01b036103c06124a9565b6103c8613832565b168015610410576001600160a01b038254826001600160a01b03198216178455167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b631e4fbdf760e01b82526004829052602482fd5b503461039b57606036600319011261039b5760406020916104436124c4565b6004358252600a84526001600160a01b038383209116600052835281600020604435825283522054604051908152f35b503461039b57602036600319011261039b576001600160a01b036104956124a9565b61049d613832565b1680156104b8576001600160a01b0319600254161760025580f35b63d92e233d60e01b8252600482fd5b503461039b57602036600319011261039b5761032090816040516104eb8282612614565b369037600435815260076020526040808220905191825b6019821061052857610524846105188782612614565b604051918291826124da565b0390f35b6001602081928554815201930191019091610502565b503461039b578060031936011261039b576020600154604051908152f35b503461039b57602036600319011261039b576105866105796124a9565b610581613328565b612c15565b60016000805160206139188339815191525580f35b503461039b578060031936011261039b576105b4613328565b338152600f602052604081205480159081159182610844575b6105d63361385b565b338552601460205260408520549133865260146020528560408120558061083c575b80610834575b610825576103e88102928184046103e81482151715610811576127108404946106308461062b88866125d5565b612571565b948661076f575b50846106d1575b61064e9450610695575b50612571565b9060405191825260208201527f4b605ce31d813b2cad8f9b40063105724d5493b885c42e09ef37f561866e10dc60403392a260016000805160206139188339815191525580f35b61069f81336133de565b6040519081527f0d7976053781e071cecf47e898ad2a6dc87621ca33734e96eb4b92453319e8c960203392a238610648565b60405163a9059cbb60e01b815233600482015260248101959095526020856044818a7f000000000000000000000000a6bd7d0dc2d3f4c0babe6ab06ccd5f090ffc80896001600160a01b03165af19485156107645761064e95610735575b5061063e565b6107569060203d60201161075d575b61074e8183612614565b810190612b6f565b503861072f565b503d610744565b6040513d89823e3d90fd5b601154156107fc576c0c9f2c9cd04674edea400000008402908082046b033b2e3c9fd0803ce800000014901517156107e857601154908161271002916127108304036107d4576107ca916107c2916125b5565b601254612571565b6012555b38610637565b634e487b7160e01b89526011600452602489fd5b634e487b7160e01b88526011600452602488fd5b5061080986600e54612571565b600e556107ce565b634e487b7160e01b86526011600452602486fd5b6312d37ee560e31b8552600485fd5b5081156105fe565b5080156105f8565b338452600f6020528360408120556105cd565b503461039b57602036600319011261039b576020610876600435612b87565b67ffffffffffffffff60405191168152f35b503461039b57602036600319011261039b57604060c0916001600160a01b036108af6124a9565b168152601560205220805490600260018201549101549060ff604051936fffffffffffffffffffffffffffffffff8116855263ffffffff8160801c16602086015261ffff8160a01c16604086015260b01c1615156060840152608083015260a0820152f35b503461039b578060031936011261039b5761092d613328565b338152600f6020526040812054801561099957338252600f60205281604081205561095881336133de565b6040519081527f0d7976053781e071cecf47e898ad2a6dc87621ca33734e96eb4b92453319e8c960203392a260016000805160206139188339815191525580f35b6312d37ee560e31b8252600482fd5b503461039b578060031936011261039b576020601254604051908152f35b503461039b578060031936011261039b576020600454604051908152f35b503461039b57602036600319011261039b5760406020916001600160a01b03610a0b6124a9565b168152600f83522054604051908152f35b503461039b578060031936011261039b57610a35613328565b610a3e3361385b565b80156109995760405163095ea7b360e01b81527f0000000000000000000000005705e86776e220a0f256a7ea8a9ea80672dd141f6001600160a01b03166004820181905260248201839052839160208180604481010381866001600160a01b037f000000000000000000000000a6bd7d0dc2d3f4c0babe6ab06ccd5f090ffc8089165af18015610bd957610be4575b506040516316cc4b7160e31b8152602081600481855afa908115610bd9578391610b9d575b50813b15610b995760ff60648492836040519586948593633e14422d60e11b85523360048601528a60248601521660448401525af18015610b8e57610b75575b50506040519081527f5fbbbd6d644d0fa6e2ad181f1d2b0e16d9ebfdcf920e453e808fbc7a3d0e1cc360203392a260016000805160206139188339815191525580f35b81610b7f91612614565b610b8a578138610b32565b5080fd5b6040513d84823e3d90fd5b8280fd5b90506020813d602011610bd1575b81610bb860209383612614565b81010312610b99575160ff81168103610b995738610af2565b3d9150610bab565b6040513d85823e3d90fd5b610bfc9060203d60201161075d5761074e8183612614565b610acd565b503461039b57602036600319011261039b576020610876610c23600435612b87565b61253b565b503461039b578060031936011261039b5760206040516103208152f35b503461039b578060031936011261039b5760206040516122608152f35b503461039b578060031936011261039b57604051604b8152602090f35b503461039b576040602091610c9336612525565b9082526009845282822090825283522054604051908152f35b503461039b57610cc4610cbe36612525565b90612a30565b80f35b503461039b578060031936011261039b576020610ce26129d5565b604051908152f35b503461039b578060031936011261039b576020604051600f8152f35b503461039b57606036600319011261039b57610d3e9060043581526009602052604081206024358252602052604060443591206129b9565b508054600190910154604080516001600160a01b039093168352602083019190915290f35b503461039b578060031936011261039b576020610ce26128b5565b503461039b578060031936011261039b576001600160a01b036020915416604051908152f35b503461039b57602036600319011261039b5760406101e09160043581526006602052208054906001600160a01b036001820154169060028101546003820154600483015490600584015492600760068601549501549560ff6040519867ffffffffffffffff81168a5267ffffffffffffffff8160401c1660208b015267ffffffffffffffff8160801c1660408b0152818160c01c16151560608b0152818160c81c1660808b0152818160d01c16151560a08b0152818160d81c16151560c08b015260e01c16151560e08901526101008801526101208701526101408601526101608501526101808401526101a08301526101c0820152f35b503461039b57602036600319011261039b5760406020916001600160a01b03610ec36124a9565b168152601483522054604051908152f35b503461039b578060031936011261039b57610cc4612716565b503461039b578060031936011261039b576020600354604051908152f35b612509565b503461039b578060031936011261039b576020604051655af3107a40008152f35b503461039b578060031936011261039b57602060405160c88152f35b503461039b578060031936011261039b576020610ce26126b9565b503461039b578060031936011261039b57610f81613832565b806001600160a01b0381546001600160a01b031981168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b503461039b578060031936011261039b576020600d54604051908152f35b503461039b57604036600319011261039b576001600160a01b0360406110036124c4565b926004358152600c602052209116600052602052602060ff604060002054166040519015158152f35b503461039b57602036600319011261039b5760406020916001600160a01b036110536124a9565b168152601083522054604051908152f35b503461039b578060031936011261039b576020604051603c8152f35b503461039b578060031936011261039b576020601154604051908152f35b503461039b57604036600319011261039b5760043567ffffffffffffffff8111610b8a5736602382011215610b8a5780600401359067ffffffffffffffff8211610b99573660248360051b83010111610b99576110f96124c4565b90611102613328565b835b83811015611128576001906111228460248360051b860101356134ce565b01611104565b8460016000805160206139188339815191525580f35b503461039b578060031936011261039b57611157613328565b610586613408565b50602036600319011261039b5760043563ffffffff811690818103610b9957611186613328565b61118f81613364565b801580156116a7575b6116985734158015611686575b611677576111b390346125b5565b655af3107a40008110611677576111c8612666565b15611668576111d56129d5565b91828552600b602052604085206001600160a01b03331660005260205260406000205461165957611204612716565b82855260066020526040852090815467ffffffffffffffff81161561149d575b508386526007602052604086208487526008602052604087209187926001600160a01b033316935b601981106112e1575050505090600391848752600b6020526040872090600052602052604060002061127f348254612571565b90550161128d348254612571565b905560405192835260208301523460408301528260608301527fc2a8d39d02fdca53d0a7e042397098921d1edda067ea291a8dea0bcf79c53c8c60803393a360016000805160206139188339815191525580f35b63ffffffff6001821b8416161561149557878a52600a6020526040808b2060009087825260205220818b5260205260408a205415611443575b61134e6113278286612640565b6113378a83548360031b1c612571565b825460001960039390931b92831b1916911b179055565b878a52600a6020526040808b2060009087825260205220818b5260205260408a2061137a888254612571565b9055878a52600960205260408a20818b5260205260408a2061139c8286612640565b90549060031b1c604051916113b0836125e2565b33835260208301908d8252604084019283528054906801000000000000000082101561142f57906113e6916001820181556129b9565b93909361141b5751905160a01b6001600160a01b0319166001600160a01b039190911617825551600191820155905b0161124c565b634e487b7160e01b8e5260048e905260248efd5b634e487b7160e01b8f52604160045260248ffd5b61144d8183612640565b81548160031b1c9160018301809311611481579061147c929082549060031b91821b91600019901b1916179055565b61131a565b634e487b7160e01b8d52601160045260248dfd5b600190611415565b67ffffffffffffffff6114af86612b87565b166fffffffffffffffff00000000000000006114cd610c2388612b87565b60401b169081816fffffffffffffffffffffffffffffffff198516171780865567ffffffffffffffff60405191630bb51adf60e31b835260401c1660048201526020816024816001600160a01b037f0000000000000000000000005a9eb5a13cd8214df878f7155391b730ab74de42165afa90811561164e578a916115fc575b5067ffffffffffffffff60801b77ffffffffffffffffffffffffffffffffffffffffffffffff199160801b1693161717178255600354600181018091116115e85760035583600455837fd67eba8a4c2b19f4cdb9d2016cc2bc1b080b6b3f12d1b8717cf8de2eac0e517d6060845467ffffffffffffffff604051918181168352818160401c16602084015260801c166040820152a238611224565b634e487b7160e01b87526011600452602487fd5b90506020813d602011611646575b8161161760209383612614565b81010312611642575167ffffffffffffffff811681036116425767ffffffffffffffff60801b61154d565b8980fd5b3d915061160a565b6040513d8c823e3d90fd5b6325b23b7360e01b8552600485fd5b633df07da560e01b8452600484fd5b630bba69fb60e01b8452600484fd5b506116918134612636565b15156111a5565b633c5889a160e01b8452600484fd5b506302000000831015611198565b503461039b57604036600319011261039b576105866116d26124c4565b6116da613328565b6004356134ce565b503461039b578060031936011261039b5760206040516001600160a01b037f0000000000000000000000005a9eb5a13cd8214df878f7155391b730ab74de42168152f35b503461039b578060031936011261039b576020600e54604051908152f35b503461039b57602036600319011261039b5760406020916001600160a01b0361176b6124a9565b168152601383522054604051908152f35b503461039b578060031936011261039b5760206040516001600160a01b037f0000000000000000000000005705e86776e220a0f256a7ea8a9ea80672dd141f168152f35b503461039b578060031936011261039b576020604051670de0b6b3a76400008152f35b503461039b578060031936011261039b5760206117fe612666565b6040519015158152f35b503461039b578060031936011261039b5760206040516101f48152f35b503461039b578060031936011261039b57602060405167ffffffffffffffff7f000000000000000000000000000000000000000000000000000000006a67a9d7168152f35b503461039b578060031936011261039b57602060405167010a741a462780008152f35b503461039b57606036600319011261039b5760043536606411610b8a576118b2613328565b808252600660205260408220805467ffffffffffffffff8116158015612010575b6120015760c01c60ff16611ff3576118e9612716565b805460405163d1b8e9d960e01b815267ffffffffffffffff8260801c16600482015260406024808301376020816064816001600160a01b037f0000000000000000000000005a9eb5a13cd8214df878f7155391b730ab74de42165afa908115611fe8578591611fb2575b50780100000000000000000000000000000000000000000000000060198206927fffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff79ff0000000000000000000000000000000000000000000000000060ff86169560c81b1691161717835560038301549284865260076020526119d98360408820612640565b90549060031b1c606485028515908681046064148217156107d457612710900491610320870287810461032014831715611f9e5761271090049160c8880288810460c814821715611f8a57839291611a4b86611a468c8f98611a4690611a466127108699049889946125d5565b6125d5565b611a5787600154612571565b600155600160405160208101908b82527f73706c6974000000000000000000000000000000000000000000000000000000604082015260258152611a9c604582612614565b51902089547fffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffff1691161560d01b7aff000000000000000000000000000000000000000000000000000016178089559115938480611f80575b85611f49575b60405163f76e95e560e01b8152927f000000000000000000000000a6bd7d0dc2d3f4c0babe6ab06ccd5f090ffc80896001600160a01b03169290602085600481875afa801561164e578c958b91611f0e575b5094959394611b779490670de0b6b3a76400008110611f0457670de0b6b3a7640000958680926125d5565b67010a741a462780008110611efb5750600767010a741a46278000985b01558c83611e8c5750508b547fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16600160e01b178c55600d54611bd79250612571565b600d55611be682600e54612571565b600e558760048b01555b611d86575b50505050611d25575b80611cb1575b5050907fa232e401cb7c434637e4b86df3c32ecd0b4e114aeebd1dbdd8933e3036d9d135948260e0959493611c96575b50611c3d613408565b60ff6004835493015492604051958652818160d01c1615156020870152818160d81c1615156040870152861c1615156060850152608084015260a083015260c0820152a260016000805160206139188339815191525580f35b611cab906001600160a01b03600254166133de565b38611c34565b6001600160a01b037f0000000000000000000000005705e86776e220a0f256a7ea8a9ea80672dd141f16803b15610b995782906004604051809481936317552f6960e21b83525af18015610b8e5715611c045781611d13919695949396612614565b611d21579091928638611c04565b8680fd5b7b010000000000000000000000000000000000000000000000000000007fffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffff855416178455600d546005850155600e54600685015581600d5581600e55611bfe565b611d908382612571565b611dee575b50507ffe79398a294db5a97fc6fe923987aca54f952ee644c76c226b590995769cbee59181611dc8604093600e54612571565b600e55611dd782600d54612571565b600d5582519182526020820152a138808080611bf5565b82611dfe91979394959697612571565b813b15610b99576040516340c10f1960e01b8152306004820152602481019190915291908290604490829084905af18015611e8157611e44575b90818c95949392611d95565b8b611e767ffe79398a294db5a97fc6fe923987aca54f952ee644c76c226b590995769cbee5939695949d604093612614565b9b9293949150611e38565b6040513d8e823e3d90fd5b91600460ff93015560d01c1615611ea4575b50611bf0565b611ef0908c604051602081019182527f73696e676c650000000000000000000000000000000000000000000000000000604082015260268152611ee8604682612614565b519020612636565b60028b015538611e9e565b60079098611b94565b80958680926125d5565b949550506020843d602011611f41575b81611f2b60209383612614565b810103126116425792518b949390611b77611b4c565b3d9150611f1e565b94506101f460405160208101908c8252636c6f646560e01b604082015260248152611f75604482612614565b519020061594611afa565b8115159550611af4565b634e487b7160e01b8b52601160045260248bfd5b634e487b7160e01b8a52601160045260248afd5b90506020813d602011611fe0575b81611fcd60209383612614565b81010312611fdc575138611953565b8480fd5b3d9150611fc0565b6040513d87823e3d90fd5b62560ff960e81b8352600483fd5b63280ae12160e21b8452600484fd5b5067ffffffffffffffff8160401c1642106118d3565b503461039b57604036600319011261039b5760406020916120456124c4565b6004358252600b84526001600160a01b038383209116825283522054604051908152f35b503461039b57602036600319011261039b57610320908160405161208d8282612614565b369037600435815260086020526040808220905191825b601982106120ba57610524846105188782612614565b60016020819285548152019301910190916120a4565b503461039b57602036600319011261039b57610ce260209160406001600160a01b036120fa6124a9565b16918281526014855261213582822054848352601087526b033b2e3c9fd0803ce800000061212e85852054601254906125a2565b0490612571565b928152601385522054906125d5565b50608036600319011261039b576004356fffffffffffffffffffffffffffffffff8116809103610b8a5760243563ffffffff81169081810361233b576044359061ffff8216908183036123375760643592831593841594858203612333576121aa613328565b6121b384613364565b158015612325575b61231657655af3107a4000881061230757806122ff575b6122f057906001929133895260156020526040892092886001600160a01b031973ffffffff0000000000000000000000000000000086549360801b169216171783556000146122e7575061223d825b825461ffff60a01b191660a09190911b61ffff60a01b16178255565b80547fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff76ff000000000000000000000000000000000000000000008660b01b169116178155019261228f348554612571565b80945560405194855260208501526040840152606083015260808201527faac0eb231685d4d13ca529563f1a72a2d049659a348c6725f0402c974b9319c860a03392a260016000805160206139188339815191525580f35b61223d90612221565b630bba69fb60e01b8852600488fd5b5083156121d2565b630bba69fb60e01b8952600489fd5b633c5889a160e01b8952600489fd5b5063020000008710156121bb565b8880fd5b8580fd5b8380fd5b503461039b578060031936011261039b576020600554604051908152f35b503461039b578060031936011261039b5760206040516127108152f35b503461039b578060031936011261039b5760206040516001600160a01b037f000000000000000000000000a6bd7d0dc2d3f4c0babe6ab06ccd5f090ffc8089168152f35b503461039b578060031936011261039b57602060405167ffffffffffffffff7f000000000000000000000000000000000000000000000000000000006a67a9d7164210158152f35b503461039b578060031936011261039b57602060405160198152f35b503461039b578060031936011261039b5760206040516103e88152f35b503461039b578060031936011261039b5760206001600160a01b0360025416604051908152f35b905034610b8a5781600319360112610b8a576020906001600160a01b037f0000000000000000000000006103b8c107217dc4da94f977487a02bd75940f4f168152f35b600435906001600160a01b03821682036124bf57565b600080fd5b602435906001600160a01b03821682036124bf57565b91906103208301926000905b601982106124f357505050565b60208060019285518152019301910190916124e6565b346124bf5760003660031901126124bf57602060405160648152f35b60409060031901126124bf576004359060243590565b67ffffffffffffffff603c9116019067ffffffffffffffff821161255b57565b634e487b7160e01b600052601160045260246000fd5b9190820180921161255b57565b90670eeb2acded8b8000820291808304670eeb2acded8b8000149015171561255b57565b8181029291811591840414171561255b57565b81156125bf570490565b634e487b7160e01b600052601260045260246000fd5b9190820391821161255b57565b6060810190811067ffffffffffffffff8211176125fe57604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff8211176125fe57604052565b81156125bf570690565b6019821015612650570190600090565b634e487b7160e01b600052603260045260246000fd5b67ffffffffffffffff7f000000000000000000000000000000000000000000000000000000006a67a9d7168042106126b3576126af6126a7603c92426125d5565b604b90612636565b1090565b50600090565b67ffffffffffffffff7f000000000000000000000000000000000000000000000000000000006a67a9d7164210612711576126f26129d5565b6126fa612666565b1561270e57600019810190811161255b5790565b90565b600090565b61271e6126b9565b6003549060009180826004541161288c575b5061273a916125d5565b90600554808311156128875761275361275891846125d5565b61257e565b916005556001600160a01b037f000000000000000000000000a6bd7d0dc2d3f4c0babe6ab06ccd5f090ffc80891660405163f76e95e560e01b8152602081600481855afa908115610bd9578391612855575b5080841161284d575b50826127be57505050565b803b15610b8a576040516340c10f1960e01b8152306004820152602481018490529082908290604490829084905af18015610b8e57917ffe79398a294db5a97fc6fe923987aca54f952ee644c76c226b590995769cbee5939160409361283d575b509061282d81600e54612571565b600e5582519182526020820152a1565b8161284791612614565b3861281f565b9250386127b3565b90506020813d60201161287f575b8161287060209383612614565b81010312610b995751386127aa565b3d9150612863565b505050565b6000198101915081116128a15761273a612730565b634e487b7160e01b83526011600452602483fd5b6128bd6126b9565b600354908060045411612996575b906128d5916125d5565b600554908181111561298f576128ee91612753916125d5565b60405163f76e95e560e01b8152906020826004817f000000000000000000000000a6bd7d0dc2d3f4c0babe6ab06ccd5f090ffc80896001600160a01b03165afa9182156129835760009261294f575b508181111561294a575090565b905090565b90916020823d60201161297b575b8161296a60209383612614565b8101031261039b575051903861293d565b3d915061295d565b6040513d6000823e3d90fd5b5050600090565b6000198201918211156128cb57634e487b7160e01b600052601160045260246000fd5b80548210156126505760005260206000209060011b0190600090565b67ffffffffffffffff7f000000000000000000000000000000000000000000000000000000006a67a9d716804210612a2a57612a14612a1c91426125d5565b604b906125b5565b6001810180911161255b5790565b50600190565b9081600052600660205260406000209081549160ff8360c01c1615612b5e5760ff8360d01c168015612b51575b612b075760018101926001600160a01b03845416612b4a5784600052600960205260ff60406000209160c81c166000526020526040600020612a9f83826129b9565b509280612b2757505060026000915b0154908110908115612b18575b50612b0757805482546001600160a01b0319166001600160a01b03918216179092555416907f99a47c8231fb62dbbdf1d3a13aef8a659e5e794d1a6e4633a0c4ad07f5dbb00b600080a3565b637ca55c7760e01b60005260046000fd5b90506001820154111538612abb565b600019810190811161255b57612b416001916002936129b9565b50015491612aae565b5050505050565b5060ff8360e01c16612a5d565b63ba329a9b60e01b60005260046000fd5b908160209103126124bf575180151581036124bf5790565b8015612bf057600019810190811161255b5767ffffffffffffffff908116604b0290811690810361255b5767ffffffffffffffff7f000000000000000000000000000000000000000000000000000000006a67a9d7160167ffffffffffffffff811161255b5790565b507f000000000000000000000000000000000000000000000000000000006a67a9d790565b6001600160a01b031680600052601560205260406000208054906fffffffffffffffffffffffffffffffff8216918215801561330a575b6132f957612c586129d5565b6002830193818554146132e857612c8190612c7b63ffffffff8560801c16613364565b906125a2565b93600184019283549086821090816132da575b50613285575b50858354868110613210575050612cb28584546125d5565b835555815460ff8160b01c1615613197575b50505460801c9063ffffffff821690612cdc82613364565b80158015613189575b6131785781158015613166575b61315557612d0090826125b5565b655af3107a4000811061315557612d15612666565b1561314457612d226129d5565b9384600052600b60205260406000208660005260205260406000205461313357612d4a612716565b846000526006602052604060002090815467ffffffffffffffff811615612f99575b50856000526007602052604060002090866000526008602052604060002060005b60198110612e115750505050917fc2a8d39d02fdca53d0a7e042397098921d1edda067ea291a8dea0bcf79c53c8c9391600360809487600052600b6020526040600020896000526020526040600020612de7858254612571565b905501612df5838254612571565b90556040519283526020830152604082015260016060820152a3565b6001811b831663ffffffff1615612f915788600052600a6020526040806000206000908c8252602052208160005260205260406000205415612f59575b612e6b612e5b8286612640565b6113378983548360031b1c612571565b88600052600a6020526040806000206000908c825260205220816000526020526040600020612e9b878254612571565b9055886000526009602052604060002081600052602052604060002090612ec28186612640565b90549060031b1c604051612ed5816125e2565b8c8152602081019360008552604082019283528054680100000000000000008110156125fe57612f0a916001820181556129b9565b929092612f43579051935160a01b6001600160a01b0319166001600160a01b039490941693909317815591516001928301555b01612d8d565b634e487b7160e01b600052600060045260246000fd5b612f638183612640565b81548160031b1c906001820180921161255b57825460001960039290921b91821b191691901b179055612e4e565b600190612f3d565b67ffffffffffffffff612fab88612b87565b166fffffffffffffffff0000000000000000612fc9610c238a612b87565b60401b169081816fffffffffffffffffffffffffffffffff198516171780865567ffffffffffffffff60405191630bb51adf60e31b835260401c1660048201526020816024816001600160a01b037f0000000000000000000000005a9eb5a13cd8214df878f7155391b730ab74de42165afa908115612983576000916130e5575b5067ffffffffffffffff60801b77ffffffffffffffffffffffffffffffffffffffffffffffff199160801b16931617171782556003546001810180911161255b5760035585600455857fd67eba8a4c2b19f4cdb9d2016cc2bc1b080b6b3f12d1b8717cf8de2eac0e517d6060845467ffffffffffffffff604051918181168352818160401c16602084015260801c166040820152a238612d6c565b6020813d60201161312b575b816130fe60209383612614565b81010312610b8a57519067ffffffffffffffff8216820361039b575067ffffffffffffffff60801b61304a565b3d91506130f1565b6325b23b7360e01b60005260046000fd5b633df07da560e01b60005260046000fd5b630bba69fb60e01b60005260046000fd5b506131718183612636565b1515612cf2565b633c5889a160e01b60005260046000fd5b506302000000831015612ce5565b61ffff6000199160a01c160161ffff811161255b57825461ffff60a01b191660a09190911b61ffff60a01b1617825561ffff825460a01c161580613206575b6131e1575b80612cc4565b8060009154858352600f6020526131fd60408420918254612571565b905555386131db565b50805415156131d6565b92509450507f99705f2e210b74d415205c8e3813a5b132b9bb7fceb451a3542f8b90f93fd39c92506020915080613266575b604051908152a2600052601560205260006002604082208281558260018201550155565b83600052600f8252604060002061327e828254612571565b9055613242565b61328f90866125d5565b86600052600f60205260406000205490808210156132ae575b50612c9a565b6132bb816132d1936125d5565b88600052600f6020526040600020558454612571565b835538806132a8565b60ff915060b01c1638612c94565b6370237c6d60e11b60005260046000fd5b634faed9cf60e11b60005260046000fd5b5060ff8160b01c16158015612c4c575061ffff8160a01c1615612c4c565b6002600080516020613918833981519152541461335357600260008051602061391883398151915255565b633ee5aeb560e01b60005260046000fd5b6000905b63ffffffff8116801561339957600019019063ffffffff821161255b571690600019811461255b5760010190613368565b505090565b3d156133d9573d9067ffffffffffffffff82116125fe57604051916133cd601f8201601f191660200184612614565b82523d6000602084013e565b606090565b600080809381935af16133ef61339e565b50156133f757565b630db2c7f160e31b60005260046000fd5b60015480156134cb5760006001556000806040516020810190639c737e8f60e01b82526004815261343a602482612614565b5190847f0000000000000000000000006103b8c107217dc4da94f977487a02bd75940f4f5af161346861339e565b5061349e576020817f88687ceef70199999121b2aa6204f7005c93d9a3036a7810b1af1dd8393c408f92600155604051908152a1565b60207fab6d245487fe791f781e700647cd8e9f7b7897347f93340eb9055bfa26e46dd791604051908152a1565b50565b8060005260066020526040600020805460ff8160c01c1615612b5e5782600052600c60205260406000206001600160a01b03851660005260205260ff604060002054166138215782600052600a60205260406000206001600160a01b03851660005260205260ff60406000209160c81c166000526020526040600020549283156138105782600052600c60205260406000206001600160a01b0382166000526020526040600020600160ff1982541617905582600052600760205260406000206135a183549160ff8360c81c1690612640565b90549060031b1c946135c0866135bb6004870154846125a2565b6125b5565b95600060ff8460d01c166000146137915750916080939183866136146001600160a01b03966135bb60077ff57f986038c10bbf10533c7ae7dd8f88f3098ded553e68ea02e921495965b6479b0154866125a2565b915b60009360ff60009660d81c1661375e575b505050613634828a612571565b6136df575b6136438382612571565b613662575b6040519889526020890152604088015260608701521693a3565b61366c8382612571565b613675856138a7565b61369f868616918260005260106020526040600020613695828254612571565b9055601154612571565b6011558060005260106020526b033b2e3c9fd0803ce80000006136ca604060002054601254906125a2565b04906000526013602052604060002055613648565b848416806000526015602052604060002090815460ff8160b01c16908161374d575b501561372857506137216001613717858d612571565b9201918254612571565b9055613639565b9050613734838b612571565b90600052600f6020526137216040600020918254612571565b61ffff915060a01c16151538613701565b613788939550829450600661377f836135bb60056135bb96970154856125a2565b950154906125a2565b91388080613627565b929093916001600160a01b0360018701541693841580613803575b6137f2577ff57f986038c10bbf10533c7ae7dd8f88f3098ded553e68ea02e921495965b647966080966001600160a01b0396878716036136165760078201549250613616565b631912786560e21b60005260046000fd5b50600787015415156137ac565b6330c6392160e11b60005260046000fd5b630c8d9eab60e31b60005260046000fd5b6001600160a01b0360005416330361384657565b63118cdaa760e01b6000523360045260246000fd5b6001600160a01b039061386d816138a7565b1660008181526010602052604081208054919055601154909291906138939084906125d5565b601155600052601360205260006040812055565b6001600160a01b03168060005260106020526138f16b033b2e3c9fd0803ce80000006138db604060002054601254906125a2565b04826000526013602052604060002054906125d5565b90816138fb575050565b60005260146020526139136040600020918254612571565b905556fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a26469706673582212202f8f661666e106d84997260a3a85b5d28319d9285c73ac0651a7670020a3de6764736f6c634300081c0033
| Token | Symbol | Balance | Price | Value |
|---|---|---|---|---|
| LUNA | 739.357453 | $0.319 | $236.07 | |
| ViralHOOD (ViralHOOD) | ViralHOOD | 0.000000 | — | — |
| Type | Age | Block | Details |
|---|---|---|---|
| no cross-chain L1↔L2 transactions for this address | |||
| Txn Hash | Age | Event | Topics / Data |
|---|---|---|---|
| 0x2714ed…fb24fa | 14 days agoSat, 01 Aug 2026 16:30:42 UTC | 0x4b605c…10dc | [0] 0x000000000000…06592ec8 data: 0x000000000000000000…5d8a0000 |
| 0x2714ed…fb24fa | 14 days agoSat, 01 Aug 2026 16:30:42 UTC | 0x0d7976…e8c9 | [0] 0x000000000000…06592ec8 data: 0x000000000000000000…6a818000 |
| 0x2f80d5…070d69 | 14 days agoSat, 01 Aug 2026 16:30:32 UTC | 0xf57f98…b647 | [0] 0x000000000000…0000160b [1] 0x000000000000…06592ec8 data: 0x000000000000000000…00000000 |
| 0xed7a82…cff32b | 14 days agoSat, 01 Aug 2026 16:30:23 UTC | 0xa232e4…d135 | [0] 0x000000000000…0000160b data: 0x000000000000000000…e9107cf2 |
| 0xed7a82…cff32b | 14 days agoSat, 01 Aug 2026 16:30:23 UTC | 0xab6d24…6dd7 | data: 0x000000000000000000…c41e9000 |
| 0xed7a82…cff32b | 14 days agoSat, 01 Aug 2026 16:30:23 UTC | 0xfe7939…bee5 | data: 0x000000000000000000…46278000 |
| 0x61a685…a42d28 | 14 days agoSat, 01 Aug 2026 16:29:48 UTC | 0xc2a8d3…3c8c | [0] 0x000000000000…0000160b [1] 0x000000000000…06592ec8 data: 0x000000000000000000…00000000 |
| 0x61a685…a42d28 | 14 days agoSat, 01 Aug 2026 16:29:48 UTC | 0xd67eba…517d | [0] 0x000000000000…0000160b data: 0x000000000000000000…012769f1 |
| 0x6dbfc1…7eb5a7 | 14 days agoSat, 01 Aug 2026 16:29:17 UTC | 0x4b605c…10dc | [0] 0x000000000000…06592ec8 data: 0x000000000000000000…5d8a0000 |
| 0x6dbfc1…7eb5a7 | 14 days agoSat, 01 Aug 2026 16:29:17 UTC | 0x0d7976…e8c9 | [0] 0x000000000000…06592ec8 data: 0x000000000000000000…6a818000 |
| 0x0cad71…669683 | 14 days agoSat, 01 Aug 2026 16:29:16 UTC | 0xf57f98…b647 | [0] 0x000000000000…0000160a [1] 0x000000000000…06592ec8 data: 0x000000000000000000…00000000 |
| 0xfdfab6…f18eed | 14 days agoSat, 01 Aug 2026 16:29:07 UTC | 0xa232e4…d135 | [0] 0x000000000000…0000160a data: 0x000000000000000000…674d63d0 |
| 0xfdfab6…f18eed | 14 days agoSat, 01 Aug 2026 16:29:07 UTC | 0xab6d24…6dd7 | data: 0x000000000000000000…c41e9000 |
| 0xfdfab6…f18eed | 14 days agoSat, 01 Aug 2026 16:29:07 UTC | 0xfe7939…bee5 | data: 0x000000000000000000…46278000 |
| 0xa386c4…38cc45 | 14 days agoSat, 01 Aug 2026 16:28:32 UTC | 0xc2a8d3…3c8c | [0] 0x000000000000…0000160a [1] 0x000000000000…06592ec8 data: 0x000000000000000000…00000000 |
| 0xa386c4…38cc45 | 14 days agoSat, 01 Aug 2026 16:28:32 UTC | 0xd67eba…517d | [0] 0x000000000000…0000160a data: 0x000000000000000000…012769d8 |
| 0xf0580a…74c7c8 | 14 days agoSat, 01 Aug 2026 16:27:28 UTC | 0x4b605c…10dc | [0] 0x000000000000…06592ec8 data: 0x000000000000000000…5d8a0000 |
| 0xf0580a…74c7c8 | 14 days agoSat, 01 Aug 2026 16:27:28 UTC | 0x0d7976…e8c9 | [0] 0x000000000000…06592ec8 data: 0x000000000000000000…6a818000 |
| 0xadc7d1…7fe4ae | 14 days agoSat, 01 Aug 2026 16:27:27 UTC | 0xf57f98…b647 | [0] 0x000000000000…00001609 [1] 0x000000000000…06592ec8 data: 0x000000000000000000…00000000 |
| 0xf0eff2…75cead | 14 days agoSat, 01 Aug 2026 16:27:27 UTC | 0x99a47c…b00b | [0] 0x000000000000…00001609 [1] 0x000000000000…06592ec8 |
| 0x6ff389…eaebda | 14 days agoSat, 01 Aug 2026 16:27:26 UTC | 0xa232e4…d135 | [0] 0x000000000000…00001609 data: 0x000000000000000000…678210b1 |
| 0x6ff389…eaebda | 14 days agoSat, 01 Aug 2026 16:27:26 UTC | 0xab6d24…6dd7 | data: 0x000000000000000000…c41e9000 |
| 0x6ff389…eaebda | 14 days agoSat, 01 Aug 2026 16:27:26 UTC | 0xfe7939…bee5 | data: 0x000000000000000000…46278000 |
| 0x63af13…146b33 | 14 days agoSat, 01 Aug 2026 16:27:17 UTC | 0xc2a8d3…3c8c | [0] 0x000000000000…00001609 [1] 0x000000000000…06592ec8 data: 0x000000000000000000…00000000 |
| 0x63af13…146b33 | 14 days agoSat, 01 Aug 2026 16:27:17 UTC | 0xd67eba…517d | [0] 0x000000000000…00001609 data: 0x000000000000000000…012769bf |
| Transaction Hash | Method ? | Block | Age | From | To | Amount | Txn Fee ? | ||
|---|---|---|---|---|---|---|---|---|---|
| 0x2714ed…fb24fa | claimAll | 25,183,951 | 14 days agoSat, 01 Aug 2026 16:30:42 UTC | 0xa9a7…2ec8 | IN | LunaGame | $0.000 ETH | 0.00000166 | |
| 0x2f80d5…070d69 | checkpoint | 25,183,852 | 14 days agoSat, 01 Aug 2026 16:30:32 UTC | 0xa9a7…2ec8 | IN | LunaGame | $0.000 ETH | 0.00000280 | |
| 0xed7a82…cff32b | settle | 25,183,758 | 14 days agoSat, 01 Aug 2026 16:30:23 UTC | 0xa9a7…2ec8 | IN | LunaGame | $0.000 ETH | 0.00000692 | |
| 0x61a685…a42d28 | deploy | 25,183,407 | 14 days agoSat, 01 Aug 2026 16:29:48 UTC | 0xa9a7…2ec8 | IN | LunaGame | $4.710.0025 ETH | 0.00007058 | |
| 0x6dbfc1…7eb5a7 | claimAll | 25,183,093 | 14 days agoSat, 01 Aug 2026 16:29:17 UTC | 0xa9a7…2ec8 | IN | LunaGame | $0.000 ETH | 0.00000166 | |
| 0x0cad71…669683 | checkpoint | 25,183,086 | 14 days agoSat, 01 Aug 2026 16:29:16 UTC | 0xa9a7…2ec8 | IN | LunaGame | $0.000 ETH | 0.00000280 | |
| 0xfdfab6…f18eed | settle | 25,182,997 | 14 days agoSat, 01 Aug 2026 16:29:07 UTC | 0xa9a7…2ec8 | IN | LunaGame | $0.000 ETH | 0.00000705 | |
| 0xa386c4…38cc45 | deploy | 25,182,648 | 14 days agoSat, 01 Aug 2026 16:28:32 UTC | 0xa9a7…2ec8 | IN | LunaGame | $4.710.0025 ETH | 0.00007016 | |
| 0xf0580a…74c7c8 | claimAll | 25,182,007 | 14 days agoSat, 01 Aug 2026 16:27:28 UTC | 0xa9a7…2ec8 | IN | LunaGame | $0.000 ETH | 0.00000165 | |
| 0xadc7d1…7fe4ae | checkpoint | 25,182,002 | 14 days agoSat, 01 Aug 2026 16:27:27 UTC | 0xa9a7…2ec8 | IN | LunaGame | $0.000 ETH | 0.00000284 | |
| 0xf0eff2…75cead | resolveSingleWinner | 25,181,998 | 14 days agoSat, 01 Aug 2026 16:27:27 UTC | 0xa9a7…2ec8 | IN | LunaGame | $0.000 ETH | 0.00000115 | |
| 0x6ff389…eaebda | settle | 25,181,989 | 14 days agoSat, 01 Aug 2026 16:27:26 UTC | 0xa9a7…2ec8 | IN | LunaGame | $0.000 ETH | 0.00000749 | |
| 0x63af13…146b33 | deploy | 25,181,903 | 14 days agoSat, 01 Aug 2026 16:27:17 UTC | 0xa9a7…2ec8 | IN | LunaGame | $4.710.0025 ETH | 0.00007052 | |
| 0x498288…b846b6 | claimAll | 25,181,731 | 14 days agoSat, 01 Aug 2026 16:27:00 UTC | 0xa9a7…2ec8 | IN | LunaGame | $0.000 ETH | 0.00000166 | |
| 0x973dc6…2b0638 | checkpoint | 25,181,637 | 14 days agoSat, 01 Aug 2026 16:26:51 UTC | 0xa9a7…2ec8 | IN | LunaGame | $0.000 ETH | 0.00000281 | |
| 0xc5f3aa…558577 | resolveSingleWinner | 25,181,631 | 14 days agoSat, 01 Aug 2026 16:26:50 UTC | 0xa9a7…2ec8 | IN | LunaGame | $0.000 ETH | 0.00000115 | |
| 0xeb562d…572d64 | settle | 25,181,537 | 14 days agoSat, 01 Aug 2026 16:26:41 UTC | 0xa9a7…2ec8 | IN | LunaGame | $0.000 ETH | 0.00000726 | |
| 0xb999f0…ebb98c | deploy | 25,181,159 | 14 days agoSat, 01 Aug 2026 16:26:03 UTC | 0xa9a7…2ec8 | IN | LunaGame | $4.710.0025 ETH | 0.00006967 | |
| 0x0e00dd…c14a4e | claimAll | 25,180,875 | 14 days agoSat, 01 Aug 2026 16:25:34 UTC | 0xa9a7…2ec8 | IN | LunaGame | $0.000 ETH | 0.00000165 | |
| 0x827f96…d29587 | checkpoint | 25,180,822 | 14 days agoSat, 01 Aug 2026 16:25:29 UTC | 0xa9a7…2ec8 | IN | LunaGame | $0.000 ETH | 0.00000277 | |
| 0xdbe5c1…a0831c | settle | 25,180,729 | 14 days agoSat, 01 Aug 2026 16:25:19 UTC | 0xa9a7…2ec8 | IN | LunaGame | $0.000 ETH | 0.00000708 | |
| 0xec7a82…470199 | deploy | 25,180,414 | 14 days agoSat, 01 Aug 2026 16:24:48 UTC | 0xa9a7…2ec8 | IN | LunaGame | $4.710.0025 ETH | 0.00006967 | |
| 0x3558a0…1d4c4b | claimAll | 25,180,175 | 14 days agoSat, 01 Aug 2026 16:24:24 UTC | 0xa9a7…2ec8 | IN | LunaGame | $0.000 ETH | 0.00000165 | |
| 0x989808…782545 | checkpoint | 25,180,170 | 14 days agoSat, 01 Aug 2026 16:24:23 UTC | 0xa9a7…2ec8 | IN | LunaGame | $0.000 ETH | 0.00000279 | |
| 0x627542…1e8c65 | settle | 25,180,076 | 14 days agoSat, 01 Aug 2026 16:24:14 UTC | 0xa9a7…2ec8 | IN | LunaGame | $0.000 ETH | 0.00000682 |
| Block | Age | Parent Transaction Hash | Type | Method | From | To | Value | |
|---|---|---|---|---|---|---|---|---|
| 25,183,951 | 14 days agoSat, 01 Aug 2026 16:30:42 UTC | 0x2714ed…fb24fa | CALL | claimAll | 0xd1b6…f4ff | OUT | 0xa9a7…2ec8 | 0.0022 ETH |
| 25,183,758 | 14 days agoSat, 01 Aug 2026 16:30:23 UTC | 0xed7a82…cff32b | CALL | settle | 0xd1b6…f4ff | OUT | 0x6103…0f4f | 0.00002 ETH |
| 25,183,758 | 14 days agoSat, 01 Aug 2026 16:30:23 UTC | 0xed7a82…cff32b | CALL | settle | 0xd1b6…f4ff | OUT | 0x4359…8a3b | 0.00002 ETH |
| 25,183,758 | 14 days agoSat, 01 Aug 2026 16:30:23 UTC | 0xed7a82…cff32b | CALL | settle | 0xd1b6…f4ff | OUT | 0x5705…141f | 0.0002 ETH |
| 25,183,093 | 14 days agoSat, 01 Aug 2026 16:29:17 UTC | 0x6dbfc1…7eb5a7 | CALL | claimAll | 0xd1b6…f4ff | OUT | 0xa9a7…2ec8 | 0.0022 ETH |
| 25,182,997 | 14 days agoSat, 01 Aug 2026 16:29:07 UTC | 0xfdfab6…f18eed | CALL | settle | 0xd1b6…f4ff | OUT | 0x6103…0f4f | 0.00002 ETH |
| 25,182,997 | 14 days agoSat, 01 Aug 2026 16:29:07 UTC | 0xfdfab6…f18eed | CALL | settle | 0xd1b6…f4ff | OUT | 0x4359…8a3b | 0.00002 ETH |
| 25,182,997 | 14 days agoSat, 01 Aug 2026 16:29:07 UTC | 0xfdfab6…f18eed | CALL | settle | 0xd1b6…f4ff | OUT | 0x5705…141f | 0.0002 ETH |
| 25,182,007 | 14 days agoSat, 01 Aug 2026 16:27:28 UTC | 0xf0580a…74c7c8 | CALL | claimAll | 0xd1b6…f4ff | OUT | 0xa9a7…2ec8 | 0.0022 ETH |
| 25,181,989 | 14 days agoSat, 01 Aug 2026 16:27:26 UTC | 0x6ff389…eaebda | CALL | settle | 0xd1b6…f4ff | OUT | 0x6103…0f4f | 0.00002 ETH |
| 25,181,989 | 14 days agoSat, 01 Aug 2026 16:27:26 UTC | 0x6ff389…eaebda | CALL | settle | 0xd1b6…f4ff | OUT | 0x4359…8a3b | 0.00002 ETH |
| 25,181,989 | 14 days agoSat, 01 Aug 2026 16:27:26 UTC | 0x6ff389…eaebda | CALL | settle | 0xd1b6…f4ff | OUT | 0x5705…141f | 0.0002 ETH |
| 25,181,731 | 14 days agoSat, 01 Aug 2026 16:27:00 UTC | 0x498288…b846b6 | CALL | claimAll | 0xd1b6…f4ff | OUT | 0xa9a7…2ec8 | 0.0022 ETH |
| 25,181,537 | 14 days agoSat, 01 Aug 2026 16:26:41 UTC | 0xeb562d…572d64 | CALL | settle | 0xd1b6…f4ff | OUT | 0x6103…0f4f | 0.00002 ETH |
| 25,181,537 | 14 days agoSat, 01 Aug 2026 16:26:41 UTC | 0xeb562d…572d64 | CALL | settle | 0xd1b6…f4ff | OUT | 0x4359…8a3b | 0.00002 ETH |
| 25,181,537 | 14 days agoSat, 01 Aug 2026 16:26:41 UTC | 0xeb562d…572d64 | CALL | settle | 0xd1b6…f4ff | OUT | 0x5705…141f | 0.0002 ETH |
| 25,180,875 | 14 days agoSat, 01 Aug 2026 16:25:34 UTC | 0x0e00dd…c14a4e | CALL | claimAll | 0xd1b6…f4ff | OUT | 0xa9a7…2ec8 | 0.0022 ETH |
| 25,180,729 | 14 days agoSat, 01 Aug 2026 16:25:19 UTC | 0xdbe5c1…a0831c | CALL | settle | 0xd1b6…f4ff | OUT | 0x6103…0f4f | 0.00002 ETH |
| 25,180,729 | 14 days agoSat, 01 Aug 2026 16:25:19 UTC | 0xdbe5c1…a0831c | CALL | settle | 0xd1b6…f4ff | OUT | 0x4359…8a3b | 0.00002 ETH |
| 25,180,729 | 14 days agoSat, 01 Aug 2026 16:25:19 UTC | 0xdbe5c1…a0831c | CALL | settle | 0xd1b6…f4ff | OUT | 0x5705…141f | 0.0002 ETH |
| 25,180,175 | 14 days agoSat, 01 Aug 2026 16:24:24 UTC | 0x3558a0…1d4c4b | CALL | claimAll | 0xd1b6…f4ff | OUT | 0xa9a7…2ec8 | 0.0022 ETH |
| 25,180,076 | 14 days agoSat, 01 Aug 2026 16:24:14 UTC | 0x627542…1e8c65 | CALL | settle | 0xd1b6…f4ff | OUT | 0x6103…0f4f | 0.00002 ETH |
| 25,180,076 | 14 days agoSat, 01 Aug 2026 16:24:14 UTC | 0x627542…1e8c65 | CALL | settle | 0xd1b6…f4ff | OUT | 0x4359…8a3b | 0.00002 ETH |
| 25,180,076 | 14 days agoSat, 01 Aug 2026 16:24:14 UTC | 0x627542…1e8c65 | CALL | settle | 0xd1b6…f4ff | OUT | 0x5705…141f | 0.0002 ETH |
| 25,179,296 | 14 days agoSat, 01 Aug 2026 16:22:55 UTC | 0xa1daab…77cc1e | CALL | claimAll | 0xd1b6…f4ff | OUT | 0xa9a7…2ec8 | 0.0022 ETH |
| Transaction Hash | Method | Block | Age | From | To | Type | Item | ||
|---|---|---|---|---|---|---|---|---|---|
| no NFT transfers for this address yet | |||||||||
| Transaction Hash | Method | Block | Age | From | To | Amount | Token | ||
|---|---|---|---|---|---|---|---|---|---|
| 0x2714ed76…fb24fa | Transfer | 25,183,951 | 14 days agoSat, 01 Aug 2026 16:30:42 UTC | 0xd1b6…f4ff | OUT | 0xa9a7…2ec8 | $0.290.9 LUNA | ||
| 0xed7a8263…cff32b | Transfer | 25,183,758 | 14 days agoSat, 01 Aug 2026 16:30:23 UTC | 0x0000…0000 | IN | 0xd1b6…f4ff | $0.341.075 LUNA | ||
| 0x6dbfc127…7eb5a7 | Transfer | 25,183,093 | 14 days agoSat, 01 Aug 2026 16:29:17 UTC | 0xd1b6…f4ff | OUT | 0xa9a7…2ec8 | $0.290.9 LUNA | ||
| 0xfdfab62a…f18eed | Transfer | 25,182,997 | 14 days agoSat, 01 Aug 2026 16:29:07 UTC | 0x0000…0000 | IN | 0xd1b6…f4ff | $0.341.075 LUNA | ||
| 0xf0580a4a…74c7c8 | Transfer | 25,182,007 | 14 days agoSat, 01 Aug 2026 16:27:28 UTC | 0xd1b6…f4ff | OUT | 0xa9a7…2ec8 | $0.290.9 LUNA | ||
| 0x6ff389c1…eaebda | Transfer | 25,181,989 | 14 days agoSat, 01 Aug 2026 16:27:26 UTC | 0x0000…0000 | IN | 0xd1b6…f4ff | $0.341.075 LUNA | ||
| 0x49828874…b846b6 | Transfer | 25,181,731 | 14 days agoSat, 01 Aug 2026 16:27:00 UTC | 0xd1b6…f4ff | OUT | 0xa9a7…2ec8 | $0.290.9 LUNA | ||
| 0xeb562da4…572d64 | Transfer | 25,181,537 | 14 days agoSat, 01 Aug 2026 16:26:41 UTC | 0x0000…0000 | IN | 0xd1b6…f4ff | $0.341.075 LUNA | ||
| 0x0e00dd29…c14a4e | Transfer | 25,180,875 | 14 days agoSat, 01 Aug 2026 16:25:34 UTC | 0xd1b6…f4ff | OUT | 0xa9a7…2ec8 | $0.290.9 LUNA | ||
| 0xdbe5c190…a0831c | Transfer | 25,180,729 | 14 days agoSat, 01 Aug 2026 16:25:19 UTC | 0x0000…0000 | IN | 0xd1b6…f4ff | $0.341.075 LUNA | ||
| 0x3558a0be…1d4c4b | Transfer | 25,180,175 | 14 days agoSat, 01 Aug 2026 16:24:24 UTC | 0xd1b6…f4ff | OUT | 0xa9a7…2ec8 | $0.290.9 LUNA | ||
| 0x627542d5…1e8c65 | Transfer | 25,180,076 | 14 days agoSat, 01 Aug 2026 16:24:14 UTC | 0x0000…0000 | IN | 0xd1b6…f4ff | $0.341.075 LUNA | ||
| 0xa1daab0b…77cc1e | Transfer | 25,179,296 | 14 days agoSat, 01 Aug 2026 16:22:55 UTC | 0xd1b6…f4ff | OUT | 0xa9a7…2ec8 | $0.290.9 LUNA | ||
| 0x764dd937…d52ce5 | Transfer | 25,179,273 | 14 days agoSat, 01 Aug 2026 16:22:53 UTC | 0x0000…0000 | IN | 0xd1b6…f4ff | $0.341.075 LUNA | ||
| 0x99ad88ba…b52060 | Transfer | 25,178,577 | 14 days agoSat, 01 Aug 2026 16:21:44 UTC | 0xd1b6…f4ff | OUT | 0xa9a7…2ec8 | $0.290.9 LUNA | ||
| 0xcd61d271…431df6 | Transfer | 25,178,558 | 14 days agoSat, 01 Aug 2026 16:21:42 UTC | 0x0000…0000 | IN | 0xd1b6…f4ff | $0.341.075 LUNA | ||
| 0x3639baaa…2b532e | Transfer | 25,177,854 | 14 days agoSat, 01 Aug 2026 16:20:31 UTC | 0xd1b6…f4ff | OUT | 0xa9a7…2ec8 | $0.290.9 LUNA | ||
| 0xf86f31a5…3caa30 | Transfer | 25,177,751 | 14 days agoSat, 01 Aug 2026 16:20:21 UTC | 0x0000…0000 | IN | 0xd1b6…f4ff | $0.341.075 LUNA | ||
| 0xae66684c…efb871 | Transfer | 25,177,071 | 14 days agoSat, 01 Aug 2026 16:19:12 UTC | 0xd1b6…f4ff | OUT | 0xa9a7…2ec8 | $0.290.9 LUNA | ||
| 0xe4b4a7cb…44b404 | Transfer | 25,177,051 | 14 days agoSat, 01 Aug 2026 16:19:10 UTC | 0x0000…0000 | IN | 0xd1b6…f4ff | $0.341.075 LUNA | ||
| 0xd343a426…cc0508 | Transfer | 25,176,309 | 14 days agoSat, 01 Aug 2026 16:17:56 UTC | 0xd1b6…f4ff | OUT | 0xa9a7…2ec8 | $0.290.9 LUNA | ||
| 0xbf019e65…33b0b6 | Transfer | 25,176,292 | 14 days agoSat, 01 Aug 2026 16:17:54 UTC | 0x0000…0000 | IN | 0xd1b6…f4ff | $0.341.075 LUNA | ||
| 0x5414b159…97faff | Transfer | 25,175,734 | 14 days agoSat, 01 Aug 2026 16:16:58 UTC | 0xd1b6…f4ff | OUT | 0xa9a7…2ec8 | $0.290.9 LUNA | ||
| 0x37068691…36cde4 | Transfer | 25,175,641 | 14 days agoSat, 01 Aug 2026 16:16:49 UTC | 0x0000…0000 | IN | 0xd1b6…f4ff | $0.341.075 LUNA | ||
| 0x2a6082c5…2a8c36 | Transfer | 25,174,972 | 14 days agoSat, 01 Aug 2026 16:15:42 UTC | 0xd1b6…f4ff | OUT | 0xa9a7…2ec8 | $0.290.9 LUNA |