diff --git a/.gitleaks.toml b/.gitleaks.toml index c59a66b9..b594cdc3 100644 --- a/.gitleaks.toml +++ b/.gitleaks.toml @@ -5,6 +5,14 @@ useDefault = true [allowlist] description = "Accepted false positives" regexTarget = "line" +# Archived third-party source pages in the research record (checksummed, reviewed on archive): +# hex example IDs in the p2pool.observer API docs and page-chrome tokens in saved GitHub HTML +# pattern-match crypto-token rules. The archives must stay byte-identical to their recorded +# checksums, so the redaction that would normally fix a finding is impossible by design. +paths = [ + # both path forms exist in history: pre-move (research/...) and current (docs/research/...) + '''(docs/)?research/xvb-delivery-study/data/sources/.*''', +] # curl auth assembled from shell ENV VARS (e.g. `-u "${USER:-}:${PASS:-wallet}"`) is not a hardcoded # secret — the upstream `curl-auth-user` rule can't distinguish `${VAR}` from a literal credential. # Both sides must be `${VAR:-default}` expansions (default optional), so a real `-u "admin:hunter2"` diff --git a/.markdownlint-cli2.jsonc b/.markdownlint-cli2.jsonc index 9b2159d5..db84ebc5 100644 --- a/.markdownlint-cli2.jsonc +++ b/.markdownlint-cli2.jsonc @@ -16,6 +16,7 @@ "**/node_modules/**", "**/.venv/**", "build/dashboard/mining_dashboard/client/tari/generated/**", - "docs/dev/test-inventory.md" // generated by `make test-inventory`; not hand-edited + "docs/dev/test-inventory.md", // generated by `make test-inventory`; not hand-edited + "docs/research/**" // verbatim research records (numbered audit trails, quoted material) — reviewed as research, not house prose ] } diff --git a/CHANGELOG.md b/CHANGELOG.md index d4d66beb..d1768c95 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,49 @@ Pithead ships as **one product, one version** — the version lives in the top-l [`VERSION`](VERSION) file and every released image is tagged with it. Releases are cut per the process in [`docs/dev/releasing.md`](docs/dev/releasing.md). +## [1.18.0] - 2026-08-13 + +### Added + +- **The XvB calculator is a decision table with measured estimates (#900).** One row per tier: + the odds of a win per day at your hashrate, the donation cost, what XvB's published bonus + figure implies, and a study estimate that tempers the published figure by what winners + measurably receive on-chain — 33% of face value (95% CI 28–39%), from a 25-round delivery + study run against this stack's own wallet and the public winners feed. The yearly net shows + as a band, and a tier is coloured profitable or unprofitable only when the whole band agrees. + Once the dashboard has confirmed enough local wins, your own measured realization replaces + the study band. The expected-vs-actual card's XvB expectation is tempered the same way. +- **The dashboard stands down XvB when it is disabled.** The hero raffle KPIs, the Overview + tiles, and the stats panel disappear instead of showing dashes. When XvB is on, the win + forecast follows the tier the donation actually targets, not only the tier already held. +- **The XvB delivery study ships in the repo + ([docs/research/xvb-delivery-study](docs/research/xvb-delivery-study/PAPER.md)).** The full + paper — methods, per-round data, figures, analysis scripts, and checksummed source archives — + documents how the measured band was derived and how to reproduce it. + +### Fixed + +- **The donation cap holds during catch-up (#898).** After an under-tier hour, catch-up aimed + at the tier target even when the configured donation cap could never reach it, so the + algorithm donated at the cap ceiling indefinitely. Catch-up now aims at the achievable + ceiling — the lesser of the tier target and the cap times stable hashrate — so a cap set + below the tier target holds. +- **The e2e upgrade test seeds from the live release bundle (#880),** not the canonical + checkout, so the pre-cut bench run exercises the same starting state an operator upgrades + from. + +### Changed + +- **The repository is reorganized (#907).** The research record lives under `docs/research/`, + root-level files are pruned or moved to their subject directories, and the dev docs got an + accuracy pass — release branch mechanics, withdrawing a bad release, the operator-run + pre-cut e2e gate, service and config-key counts. + +### Dependencies + +- Python (dashboard): diff-cover 10.5.0, hypothesis 6.165.2, ruff refresh. Docker: refreshed + the pinned `ubuntu` base digest in the monero, p2pool, and xmrig-proxy images. + ## [1.17.0] - 2026-08-02 ### Added diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d2d774b2..bb2becfb 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -29,7 +29,8 @@ runs `ruff` (plus a few hygiene hooks) on your changed files. If you change depe ## Development workflow 1. Fork the repo and create a branch off `develop` (the integration branch; `main` holds released - commits only). + commits only — how releases move `develop` → `main` and back is in + [Releasing › Branch mechanics](docs/dev/releasing.md#branch-mechanics)). 2. Make your change. Keep it focused: one logical change per PR. 3. Run the full test suite locally: diff --git a/Makefile b/Makefile index 570e1ef1..308cd544 100644 --- a/Makefile +++ b/Makefile @@ -44,7 +44,7 @@ lint: lint-sh lint-py lint-js lint-yaml lint-md lint-docs-voice lint-operator-st lint-sh: ## shellcheck + shfmt over the CLI, build/* container scripts, release + test scripts shellcheck --severity=warning pithead pithead-completion.bash scripts/*.sh build/*/*.sh tests/stack/run.sh tests/stack/test_compose.sh \ tests/inventory.sh tests/integration/*.sh tests/integration/mini-stack/*.sh - shfmt -i 4 -d pithead pithead-completion.bash $(shell git ls-files '*.sh') + shfmt -i 4 -d pithead pithead-completion.bash $(shell git ls-files '*.sh' | grep -v '^docs/research/') lint-py: ## ruff lint + format check on all repo Python (ruff runs via uv from the locked dev extra) uv run --locked --project build/dashboard --extra dev ruff check . diff --git a/README.md b/README.md index bc4a4b15..9f9b34da 100644 --- a/README.md +++ b/README.md @@ -46,7 +46,7 @@ a Tor daemon. The `pithead` script renders config, provisions Tor, and drives do [The Dashboard](docs/dashboard.md). - ⚙️ **One config, tuned to your setup.** A local or remote Monero node, pruned or full; the P2Pool tier (`main`, `mini`, or `nano`); XvB donation strategy; per-worker power and API settings; four - alert channels; timezone, memory limits, and every privacy toggle — around 94 keys across 13 + alert channels; timezone, memory limits, and every privacy toggle — around 113 keys across 13 sections, all in one `config.json` and validated on every `apply`. Most have defaults you'll never touch. See [Configuration](docs/configuration.md). - 💡 **Energy-aware earnings.** Set your electricity cost and coin prices — typed in, or fetched @@ -119,7 +119,7 @@ Full walkthrough: [docs/getting-started.md](docs/getting-started.md) | **[Configuration](docs/configuration.md)** | Every `config.json` key, applying changes safely, reusing an existing node, and remote Monero nodes. | | **[The Dashboard](docs/dashboard.md)** | Sync Mode, a tour of the live operational view, and the opt-in control channel: editing config, one-click upgrades, and the audit logs from the browser. | | **[Connecting Miners](docs/workers.md)** | Point any existing rig at the stack, or spin up a tuned miner with [RigForge](https://github.com/p2pool-starter-stack/rigforge). | -| **[Architecture](docs/architecture.md)** | The nine services, the privacy model, and the algorithmic XvB switching engine. | +| **[Architecture](docs/architecture.md)** | The eleven services, the privacy model, and the algorithmic XvB switching engine. | | **[Privacy & Network Egress](docs/privacy.md)** | Every off-box connection: what's Tor-routed, what's clearnet today, and how to harden it. | | **[Operations & Maintenance](docs/operations.md)** | Full command reference, upgrades, backups, and troubleshooting. | @@ -129,10 +129,10 @@ Browse the full index at **[docs/](docs/README.md)**. ## 🏗️ How it works -The stack orchestrates nine services via Docker Compose: a Monero full node, P2Pool, a Tari base +The stack orchestrates eleven services via Docker Compose: a Monero full node, P2Pool, a Tari base node, an XMRig proxy (your single worker endpoint), Tor for anonymity, the dashboard plus switching -engine, a read-only Docker socket proxy (plus a tiny start/stop-only control proxy), and Caddy for -HTTPS. +engine, a read-only Docker socket proxy (plus a tiny start/stop-only control proxy), Caddy for +HTTPS, and two opt-in view-only wallets that confirm payouts on-chain. ```mermaid flowchart TB diff --git a/VERSION b/VERSION index 092afa15..84cc5294 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.17.0 +1.18.0 diff --git a/build/dashboard/mining_dashboard/client/xmrig_proxy_client.py b/build/dashboard/mining_dashboard/client/xmrig_proxy_client.py index 2da5923e..50c4be7d 100644 --- a/build/dashboard/mining_dashboard/client/xmrig_proxy_client.py +++ b/build/dashboard/mining_dashboard/client/xmrig_proxy_client.py @@ -1,4 +1,3 @@ -import json import logging import requests @@ -166,41 +165,3 @@ def update_config(self, config_data): if response.status_code == 204 or not response.content: return {} return response.json() - - -if __name__ == "__main__": - # Configuration - # Ensure xmrig-proxy is running with API enabled: - # ./xmrig-proxy --http-port=8080 --http-access-token=SECRET - - HOST = "127.0.0.1" - PORT = 8080 - TOKEN = "SECRET" # noqa: S105 — placeholder for this __main__ usage example, not a real secret - - client = XMRigProxyClient(HOST, PORT, TOKEN) - - try: - # 1. Get Summary - print("--- Summary ---") - summary = client.get_summary() - print(json.dumps(summary, indent=4)) - - # 2. Get Workers - print("\n--- Worker Details ---") - workers = client.get_workers() - print(json.dumps(workers, indent=4)) - - # 3. Get Config - print("\n--- Current Config ---") - config = client.get_config() - print(json.dumps(config, indent=4)) - - # 4. Update Config (Example: changing donate level) - # print("\n--- Updating Config ---") - # updated_config = client.update_config({"donate-level": 1}) - # print(json.dumps(updated_config, indent=4)) - - except requests.exceptions.RequestException as e: - print(f"HTTP Request failed: {e}") - except Exception as e: - print(f"An error occurred: {e}") diff --git a/build/dashboard/mining_dashboard/client/xvb_client.py b/build/dashboard/mining_dashboard/client/xvb_client.py index 03337d18..a45ab8bf 100644 --- a/build/dashboard/mining_dashboard/client/xvb_client.py +++ b/build/dashboard/mining_dashboard/client/xvb_client.py @@ -101,6 +101,47 @@ def parse_winners(text, wallet_address): return wins +def parse_round_stats(text): + """Aggregate EVERY round in ``winners_recent_full_pub.txt`` — not just ours (#866/#872). + + The file's ``players`` column is the qualifier count for each round, which makes two honest + figures computable that XvB's published estimates gloss over: how often a tier is drawn + (rounds of that type per day) and against how many qualifiers (players average). Returns + ``{"types": {round_type: {"rounds": n, "players_avg": x}}, "span_days": d}`` — an empty + ``types`` dict for a garbage/empty file, never a raise (same tolerance and input bounds as + ``parse_winners``; the two parse the SAME fetched body, one request).""" + types = {} + first_ts = last_ts = None + for line in (text or "").splitlines()[:_WINNERS_MAX_LINES]: + fields = line.split() + if len(fields) != _WINNERS_FIELD_COUNT: + continue + try: + ts = ( + datetime.strptime(f"{fields[1]} {fields[2]}", "%Y-%m-%d %H:%M:%S") + .replace(tzinfo=UTC) + .timestamp() + ) + players = int(fields[7]) + except ValueError: + continue + if players <= 0: + continue + first_ts = ts if first_ts is None else max(first_ts, ts) + last_ts = ts if last_ts is None else min(last_ts, ts) + agg = types.setdefault(fields[8], {"rounds": 0, "players_sum": 0}) + agg["rounds"] += 1 + agg["players_sum"] += players + span_days = (first_ts - last_ts) / 86400.0 if first_ts is not None else 0.0 + return { + "types": { + t: {"rounds": a["rounds"], "players_avg": a["players_sum"] / a["rounds"]} + for t, a in types.items() + }, + "span_days": span_days, + } + + # register() outcomes (#263). The endpoint returns plaintext "ERROR: ..." with a 422 for the error # cases (not a 200/JSON contract), so success/failure is classified from status + body, not status # alone. The caller maps these to dashboard state + retry behaviour. @@ -206,10 +247,11 @@ def get_reward_estimates(self): return None def get_recent_wins(self): - """Fetch XvB's public raffle-winners log over Tor and return THIS wallet's wins, - oldest first. + """Fetch XvB's public raffle-winners log over Tor — ONE request, both parses. - An empty list is a normal, successful read (no wins in the file's ~4-day window); + Returns ``{"wins": [...], "round_stats": {...}}``: ``wins`` is THIS wallet's wins oldest + first (``parse_winners``; an empty list is a normal read — no wins in the file's ~4-day + window), ``round_stats`` the all-rounds aggregate (``parse_round_stats``, #866/#872). ``None`` means the fetch failed — same "None means keep what you have" contract as ``get_stats``, so the caller writes nothing and retries later. The file carries only masked wallets and the request carries none, so there's no IP<->wallet correlation @@ -228,7 +270,10 @@ def get_recent_wins(self): f"XvB winners fetch failed with status code: {response.status_code}" ) return None - return parse_winners(response.text, self.wallet_address) + return { + "wins": parse_winners(response.text, self.wallet_address), + "round_stats": parse_round_stats(response.text), + } except requests.RequestException as e: self.logger.error(f"Network error while fetching XvB winners: {e}") return None diff --git a/build/dashboard/mining_dashboard/helper/utils.py b/build/dashboard/mining_dashboard/helper/utils.py index ab38244b..7ab99b70 100644 --- a/build/dashboard/mining_dashboard/helper/utils.py +++ b/build/dashboard/mining_dashboard/helper/utils.py @@ -94,14 +94,11 @@ def format_disk_size(used_gb, total_gb): return f"{used:.1f}", f"{total:.1f}", "GB" -def format_xmr(amount): - """Format an XMR amount with magnitude-adaptive precision — 4 decimal places at >= 1 XMR, - 6 at >= 0.001, 8 below that — so a small daily estimate isn't truncated to zeros. - - Mirrors ``formatXmr`` in ``web/static/logic.mjs`` (the dashboard earnings card) so the same - estimate reads the same on every surface (#387). Returns "0 XMR" for zero and an em dash for - non-numeric input. - """ +def _format_coin(amount, symbol): + """Magnitude-adaptive coin formatting — 4 decimal places at >= 1, 6 at >= 0.001, 8 below — + so a small daily estimate isn't truncated to zeros. Mirrors ``formatXmr``/``formatXtm`` in + ``web/static/logic.mjs`` so the same estimate reads the same on every surface (#387). + Returns "0 " for zero and an em dash for non-numeric input.""" try: val = float(amount) except (ValueError, TypeError): @@ -109,27 +106,19 @@ def format_xmr(amount): if not math.isfinite(val): return "—" if val == 0: - return "0 XMR" + return f"0 {symbol}" dp = 4 if val >= 1 else 6 if val >= 0.001 else 8 - return f"{val:.{dp}f} XMR" + return f"{val:.{dp}f} {symbol}" -def format_xtm(amount): - """Format an XTM amount, the Tari sibling of :func:`format_xmr` — same magnitude-adaptive - precision, same "0 XTM" / em-dash edge cases. +def format_xmr(amount): + """XMR face of :func:`_format_coin`.""" + return _format_coin(amount, "XMR") - Mirrors ``formatXtm`` in ``web/static/logic.mjs`` so a confirmed Tari total reads identically - in the bot and on the dashboard card (#387).""" - try: - val = float(amount) - except (ValueError, TypeError): - return "—" - if not math.isfinite(val): - return "—" - if val == 0: - return "0 XTM" - dp = 4 if val >= 1 else 6 if val >= 0.001 else 8 - return f"{val:.{dp}f} XTM" + +def format_xtm(amount): + """XTM (Tari) face of :func:`_format_coin`.""" + return _format_coin(amount, "XTM") def format_duration(seconds): diff --git a/build/dashboard/mining_dashboard/service/algo_service.py b/build/dashboard/mining_dashboard/service/algo_service.py index b0f59516..8e1b2193 100644 --- a/build/dashboard/mining_dashboard/service/algo_service.py +++ b/build/dashboard/mining_dashboard/service/algo_service.py @@ -427,10 +427,17 @@ def _dwell_should_end( # effective split far past the computed fraction. A *changed* decision # still ends the dwell — only the avg-driven override pauses. target_hr = self._get_target_donation_hr(stable_hr) + # Catch up only toward what the donation cap allows (#898). Against an explicit target + # the fleet cannot sustain, the raw target comparison reads avg_1h as permanently + # "under tier", ends every p2pool dwell at its first check tick, and the actuated + # donation pins near 100% of allowed time — the cap never binds (measured live: + # ~94% of the fleet routed under a 0.65 cap). The achievable donation is the ceiling + # worth catching up to; beyond it, cutting dwells short only burns the p2pool side. + achievable_hr = min(target_hr, stable_hr * self.max_donation_fraction) under_tier = ( not self._stats_are_stale(xvb_stats) - and target_hr > 0 - and xvb_stats.get("avg_1h", 0) < target_hr + and achievable_hr > 0 + and xvb_stats.get("avg_1h", 0) < achievable_hr ) return decision != held_decision or under_tier diff --git a/build/dashboard/mining_dashboard/service/data_service.py b/build/dashboard/mining_dashboard/service/data_service.py index b01270da..c5709ea6 100644 --- a/build/dashboard/mining_dashboard/service/data_service.py +++ b/build/dashboard/mining_dashboard/service/data_service.py @@ -888,11 +888,16 @@ async def _sync_xvb_winners(self): now = time.time() if now - self._last_xvb_winners_sync < _XVB_WINNERS_SYNC_SEC: return - wins = await asyncio.to_thread(self.xvb_client.get_recent_wins) - if wins is None: + result = await asyncio.to_thread(self.xvb_client.get_recent_wins) + if result is None: return # fetch failed — retry next eligible poll; don't stamp the gate self._last_xvb_winners_sync = now - new_wins = await asyncio.to_thread(self.state_manager.add_raffle_wins, wins) + # Same fetched body, second parse (#866/#872): the all-rounds aggregate that makes win + # odds and realized-reward figures computable. Written only when it parsed to something, + # so a format change degrades to stale (detectable) rather than an empty-implied-fresh. + if (result.get("round_stats") or {}).get("types"): + await asyncio.to_thread(self.state_manager.set_xvb_round_stats, result["round_stats"]) + new_wins = await asyncio.to_thread(self.state_manager.add_raffle_wins, result["wins"]) for win in new_wins: logger.info( f"XvB raffle WIN: {win['tier']} round won at " diff --git a/build/dashboard/mining_dashboard/service/storage_service.py b/build/dashboard/mining_dashboard/service/storage_service.py index 289a585d..eafa76c6 100644 --- a/build/dashboard/mining_dashboard/service/storage_service.py +++ b/build/dashboard/mining_dashboard/service/storage_service.py @@ -105,6 +105,9 @@ def __init__(self, db_path: str = None): # losing it on restart just costs one refetch. ``last_update`` bumps only on a genuine fetch, # so the same staleness check as the stats (``xvb_stats_are_stale``) applies to it (#311). self._xvb_rewards = {"estimates": {}, "last_update": 0.0} + # All-rounds aggregate from the same winners file (#866/#872): round-type frequencies + + # qualifier counts. Same memory-only, refetch-on-restart, staleness-by-last_update rules. + self._xvb_round_stats = {"stats": {}, "last_update": 0.0} # Initialize persistent DB connection # check_same_thread=False allows the connection to be used by multiple threads @@ -1374,6 +1377,20 @@ def set_xvb_reward_estimates(self, estimates: dict[str, float]): with self._lock: self._xvb_rewards = {"estimates": dict(estimates or {}), "last_update": time.time()} + def get_xvb_round_stats(self) -> dict[str, Any]: + """The cached all-rounds raffle aggregate (#866/#872): + ``{"stats": {"types": {...}, "span_days": d}, "last_update": ts}``.""" + with self._lock: + return { + "stats": dict(self._xvb_round_stats["stats"]), + "last_update": self._xvb_round_stats["last_update"], + } + + def set_xvb_round_stats(self, stats: dict[str, Any]): + """Replace the cached round aggregate and stamp ``last_update`` (only on a genuine fetch).""" + with self._lock: + self._xvb_round_stats = {"stats": dict(stats or {}), "last_update": time.time()} + def update_xvb_stats( self, mode: str | None = None, diff --git a/build/dashboard/mining_dashboard/web/static/components.mjs b/build/dashboard/mining_dashboard/web/static/components.mjs index 7c5e6c72..da6af50d 100644 --- a/build/dashboard/mining_dashboard/web/static/components.mjs +++ b/build/dashboard/mining_dashboard/web/static/components.mjs @@ -32,7 +32,7 @@ import { THEME_ORDER, uptimeCell, WORKER_COLUMNS, - xvbTierComparison, + xvbDecisionRows, } from "./logic.mjs"; import { MineCartTrain } from "./minecart.mjs"; import { Component, Fragment, html } from "./preact.mjs"; @@ -255,7 +255,13 @@ function Header({ state }) {
Last Update: ${state.last_update}
P2Pool (routed): ${hr.p2p_1h} (1h) / ${hr.p2p_24h} (24h)
-
XvB (routed): ${hr.xvb_routed_1h} (1h) / ${hr.xvb_routed_24h} (24h)
+ ${ + // The XvB split line earns its header slot only while donation is on — off, it's a + // permanent row of zeros advertising a feature the operator turned off. + state.xvb_calc && state.xvb_calc.enabled + ? html`
XvB (routed): ${hr.xvb_routed_1h} (1h) / ${hr.xvb_routed_24h} (24h)
` + : null + }
`; } @@ -324,7 +330,8 @@ function SyncView({ sync }) { function Overview({ state }) { const hr = state.hashrate, st = state.stratum, - t = state.tari; + t = state.tari, + xvbOn = !!(state.xvb_calc && state.xvb_calc.enabled); // Stat order (#159): fleet headline (total / mode / workers) → raffle status (tier / VIP / // shares / target) → routed split → reference (last share / Tari / wallets). return html` @@ -334,14 +341,27 @@ function Overview({ state }) { <${StatCard} label="Total Hashrate" value=${hr.total} cls="text-accent" /> <${StatCard} label="Mining Mode" value=${hr.mode_name} cls=${cVar(hr.mode_variant)} /> <${StatCard} label="Workers Alive" value=${state.proxy_workers} /> + ${ + // Five of these tiles are raffle/split state — on a non-donating box they'd all + // read None / N/A / zeros, a third of the Overview spent saying "off" five ways. + // The mode tile already says it once. + xvbOn + ? html` <${StatCard} label="Current Tier" value=${hr.tier} /> - <${StatCard} label="Raffle Eligible" value=${state.raffle_eligible.label} cls=${raffleCls(state.raffle_eligible)} /> + <${StatCard} label="Raffle Eligible" value=${state.raffle_eligible.label} cls=${raffleCls(state.raffle_eligible)} />` + : null + } <${SharesStat} sw=${state.shares_window} /> - <${StatCard} label="Target Tier" value=${hr.target_tier} /> + ${xvbOn ? html`<${StatCard} label="Target Tier" value=${hr.target_tier} />` : null} <${StatCard} label="P2Pool 1h (routed)" value=${hr.p2p_1h} cls=${cVar(hr.p2p_variant)} /> <${StatCard} label="P2Pool 24h (routed)" value=${hr.p2p_24h} cls=${cVar(hr.p2p_variant)} /> + ${ + xvbOn + ? html` <${StatCard} label="XvB 1h (routed)" value=${hr.xvb_routed_1h} cls=${cVar(hr.xvb_variant)} /> - <${StatCard} label="XvB 24h (routed)" value=${hr.xvb_routed_24h} cls=${cVar(hr.xvb_variant)} /> + <${StatCard} label="XvB 24h (routed)" value=${hr.xvb_routed_24h} cls=${cVar(hr.xvb_variant)} />` + : null + } <${StatCard} label="Last Share" value=${st.last_share} />
Tari Mining
<${TariStatus} tari=${t} />
<${StatCard} label="Wallet XMR" value=${st.wallet_short} cls="font-mono text-xs" /> @@ -408,6 +428,9 @@ function GlobalStats({ state }) { function XvBStats({ state }) { const hr = state.hashrate; + // A non-donating box gets no XvB stats card at all — every figure in it would be a zero or a + // "None", and the tier calculator alongside already hides itself the same way. + if (!(state.xvb_calc && state.xvb_calc.enabled)) return null; // When the xmrvsbeast.com fetch is stale (#311) the CREDITED figures are frozen — // grey them and tag the label so they don't read as live. Routed (our own proxy // history) is unaffected. Tooltip explains why. @@ -431,6 +454,7 @@ function XvBStats({ state }) {
Raffle Wins
+
${ (state.raffle_wins || []).length ? state.raffle_wins.map( @@ -439,6 +463,7 @@ function XvBStats({ state }) { ) : html`
No wins recorded yet — a win lands here and as a gold star on the chart.
` } +
${hr.xvb_stale ? "⚠ Stale — last successful fetch from xmrvsbeast.com: " : "Stats fetched from xmrvsbeast.com (Updated: "}${hr.xvb_updated}${hr.xvb_stale ? "" : ")"} @@ -467,90 +492,88 @@ function NetworkCard({ state }) {
`; } -// XvB per-tier payout comparison dropdown (#118). Picks one of the four donor tiers and weighs XvB's -// OWN published expected reward for it (server-fetched over Tor) against the P2Pool earnings donating -// that tier costs, and the net. Defaults to the operator's target tier. When XvB's estimate is -// stale/unavailable it shows the tier cost with an "estimate unavailable" note — never a fabricated -// number. Selection is local UI state; the whole block is a raffle comparison, not a claim that -// donating above a tier threshold pays more (it does not — the draw is random among qualifiers). -class XvbComparison extends Component { - constructor(props) { - super(props); - this.state = { selected: null }; - this.onSelect = (e) => this.setState({ selected: e.target.value }); - } - - render() { - const { calc, coeffDay, hr, energy } = this.props; - const tiers = (calc && calc.tiers) || []; - if (!tiers.length) return null; - const { selected } = this.state; - // Default the dropdown to the operator's configured target tier; fall back to the lowest. - const sel = - tiers.find((t) => t.name === selected) || - tiers.find((t) => t.name === calc.target_tier) || - tiers[0]; - const cmp = xvbTierComparison(sel, coeffDay); - // The same sustains rule the tier block states: donating the threshold must fit inside the - // donateable share of the what-if hashrate. An unsustainable tier's Net is "—" — showing, - // say, Mega's +56 XMR/yr to a 269 kH/s fleet would imply an unreachable payout. - const sustainable = hr > 0 && sel.threshold <= hr * (calc.max_fraction || 0); - const expected = - calc.estimates_available && cmp.expected !== null - ? formatXmr(cmp.expected) - : "estimate unavailable"; - return html` +// XvB tier decision table (#872, study-final): the analytical tool a miner decides with. Every +// donor tier on one row — draw odds (live winners feed), cost at YOUR hashrate, XvB's published +// face value AND the study estimate (face x the measured on-chain delivery band) side by side, +// and a coloured net verdict. This wallet's own measured wins supersede the study band when they +// exist. Unsustainable tiers stay visible but grayed with the net withheld. No dropdown: the +// comparison IS the decision, so all tiers show at once. +function XvbDecisionTable({ calc, coeffDay, hr, energy }) { + const rows = xvbDecisionRows(calc, coeffDay, hr); + if (!rows.length) return null; + const measured = calc.realization_pct !== null && calc.realization_pct !== undefined; + const fmtRange = (r) => + r === null ? "—" : r[0] === r[1] ? formatXmr(r[0]) : `${formatXmr(r[0])} … ${formatXmr(r[1])}`; + const estHeader = measured + ? `Yours (${calc.realization_pct}% × ${calc.realization_wins} wins)` + : "Study est. / yr"; + // Fiat mirror (#520) for the best sustainable net only — one line, never a fiat number whose + // XMR figure is hidden. + const best = rows.filter((r) => r.sustainable && r.net).sort((a, b) => b.net[1] - a.net[1])[0]; + return html`
- - -
- <${StatCard} label="Expected (XvB)" value=${expected} cls="c-purple" - title="XvB's own published expected reward for this tier per year (their reward_calc figures, fetched over Tor). This is the raffle expectation across all qualifiers — donating above the tier threshold does NOT raise it." /> - <${StatCard} label="Cost / yr" value=${cmp.cost !== null ? formatXmr(cmp.cost) : "—"} - title="P2Pool earnings foregone by donating the tier threshold for a year (threshold × the P2Pool daily rate × 365)." /> - <${StatCard} label="Net / yr" value=${sustainable && cmp.net !== null ? formatXmr(cmp.net) : "—"} - cls=${sustainable && cmp.net !== null ? netCls(cmp.net) : ""} - title=${ - sustainable - ? "Expected XvB reward minus the P2Pool earnings given up. Shown only when XvB's estimate is available." - : "Not shown — this tier isn't sustainable at your hashrate, so its payout isn't reachable." -} /> + +

+ XvB's figures are face value. A 25-round single-wallet on-chain audit (Jun–Aug + 2026, all three sidechains) measured winners receiving 33% of face (95% CI + 28–39%), with at most a small margin effect; a 14-winner public crawl + corroborates (no winner near face value). The + ${measured ? "Yours" : "Study"} column prices that in; the Net verdict uses it. +

+
+ + + + + + + + + + + ${rows.map((r) => { + const est = r.yours !== null ? [r.yours, r.yours] : r.study; + return html` + + + + + + + `; + })} + +
TierOdds / 30dCost / yrXvB says / yr${estHeader}Net / yr
${r.name}${r.sustainable ? "" : " ⚠"}${r.oddsPer30d ? `≈ ${Number(r.oddsPer30d.toPrecision(2))} wins · ${Number((r.players || 0).toPrecision(2))} players` : "—"}${r.cost !== null ? formatXmr(r.cost) : "—"}${r.xvbSays !== null ? formatXmr(r.xvbSays) : "—"}${fmtRange(est)}${r.sustainable ? fmtRange(r.net) : "—"}
${ - // Fiat mirror of the XMR/yr figures (#520): same visibility guards as the cards - // above (never a fiat number whose XMR figure is hidden), at the XMR price in use. - energy && energy.xmr_price > 0 + energy && energy.xmr_price > 0 && best ? html`

- ≈ ${calc.estimates_available ? formatFiat(coinFiat(cmp.expected, energy.xmr_price), energy.currency) : "—"} expected · - ${formatFiat(coinFiat(cmp.cost, energy.xmr_price), energy.currency)} cost · - ${sustainable ? formatFiat(coinFiat(cmp.net, energy.xmr_price), energy.currency) : "—"} net, per year -

` - : null - } - ${ - !sustainable - ? html`

Not sustainable at your hashrate — holding this tier needs about ${fmtHashrate(sel.threshold)} donated continuously, more than your hashrate can spare.

` + ${best.name}: net ≈ ${formatFiat(coinFiat(best.net[0], energy.xmr_price), energy.currency)} + … ${formatFiat(coinFiat(best.net[1], energy.xmr_price), energy.currency)} per year at the current XMR price

` : null }

${ calc.estimates_available - ? "From XvB's published per-tier estimate, fetched over Tor." - : "Expected reward estimate unavailable — showing tier cost only." + ? "XvB figures fetched over Tor from the operator's published estimates; odds from the public winners feed; the draw is random among qualifiers — donating above a threshold buys no extra odds." + : "Expected reward estimate unavailable — tier costs only." }

`; - } } // XvB tier / raffle block (#118), inside the earnings card and driven by the same what-if // hashrate: the highest XMRvsBeast tier that hashrate sustains (computeXvbTier — the server's // own auto rule), what holding it costs, and the current vs target tier for context. Labelled -// raffle status, never a payout; deliberately no entry counts or win odds — the draw is random -// above the threshold. Hidden entirely while XvB is disabled. `coeffDay` (earnings.coeff_day) -// feeds the per-tier payout comparison dropdown below. +// raffle status, never a payout. The draw is random above the threshold — donating more within +// a tier buys nothing — but the odds themselves ARE knowable (#872: qualifier counts from XvB's +// winners file), so the comparison dropdown shows them. Hidden entirely while XvB is disabled. +// `coeffDay` (earnings.coeff_day) feeds the per-tier payout comparison dropdown below. function XvbTierBlock({ calc, hr, coeffDay, energy, est }) { if (!calc || !calc.enabled) return null; const t = computeXvbTier(hr, calc); @@ -580,7 +603,7 @@ function XvbTierBlock({ calc, hr, coeffDay, energy, est }) { price=${energy ? energy.xmr_price : 0} currency=${energy ? energy.currency : "USD"} />` : null } - <${XvbComparison} calc=${calc} coeffDay=${coeffDay} hr=${hr} energy=${energy} /> + <${XvbDecisionTable} calc=${calc} coeffDay=${coeffDay} hr=${hr} energy=${energy} />

${calc.note}${calc.mode_note ? " " + calc.mode_note : ""}

`; } @@ -615,10 +638,17 @@ function ExpectedVsActualCard({ summary }) { dim: !xmr.enabled, title: xmr.includes_xvb ? "Confirmed on-chain payouts over the trailing 30 days vs the P2Pool linear expectation " + - "at your 30-day average hashrate PLUS XvB's published estimate for your tier — combined " + + "at your 30-day average hashrate PLUS XvB's estimate for your tier — combined " + "on both sides, because an XvB win pays out through ordinary payouts that cannot be " + - "told apart from P2Pool payouts. Payouts swing with luck; a sustained gap is the " + - "signal worth checking, not one window." + "told apart from P2Pool payouts. " + + (xmr.xvb_realization_pct !== null + ? `The XvB share is tempered to this wallet's measured win payouts — ` + + `${xmr.xvb_realization_pct}% of XvB's published face value over the last ` + + `${xmr.xvb_wins_measured} wins. ` + : "The XvB share is XvB's published face-value estimate — an upper bound: it prices " + + "every bonus hash at full block reward and assumes every won round runs to " + + "completion. ") + + "Payouts swing with luck; a sustained gap is the signal worth checking, not one window." : "Confirmed on-chain payouts over the trailing 30 days vs the linear expectation at " + "your 30-day average P2Pool hashrate. Any XvB win payouts land in the actual too — " + "they cannot be told apart from P2Pool payouts. Payouts swing with luck; a sustained " + @@ -645,15 +675,23 @@ function ExpectedVsActualCard({ summary }) { if (xvb.enabled) { rows.push({ label: "XvB wins (30d)", - expected: "—", + // Forecast from XvB's own winners file (#866): round-type frequency ÷ qualifier count for + // the held tier. Two significant digits, same honesty rule as the Tari row. "—" while the + // aggregate is missing or stale — never a guess. + expected: + xvb.expected_wins_30d != null + ? `≈ ${Number(xvb.expected_wins_30d.toPrecision(2))} wins` + : "—", actual: `${xvb.wins_30d} win${xvb.wins_30d === 1 ? "" : "s"}` + (xvb.last_win_ts ? ` · last ${formatAgo(xvb.last_win_ts)}` : ""), dim: false, title: "Raffle wins recorded in the last 30 days (last-win recency can predate the window). " + - "A win's XMR arrives through ordinary payouts, so its value is counted in the " + - "Monero + XvB row above — this row tracks only that wins keep landing.", + "Expected is computed from XvB's public winners file: how often your tier's rounds are " + + "drawn ÷ how many qualifiers they have — for the tier you hold, or the tier you're " + + "targeting while none is held yet. A win's XMR arrives through ordinary payouts, " + + "so its value is counted in the Monero + XvB row above — this row tracks the draw.", }); } return html` diff --git a/build/dashboard/mining_dashboard/web/static/dashboard.css b/build/dashboard/mining_dashboard/web/static/dashboard.css index a86ea51a..d0a05087 100644 --- a/build/dashboard/mining_dashboard/web/static/dashboard.css +++ b/build/dashboard/mining_dashboard/web/static/dashboard.css @@ -545,6 +545,14 @@ tr:last-child td { padding: 24px 12px; text-align: center; } +/* The wins log is capped at 20 rows of data, but even a dozen rows made the XvB card the tallest + * thing in its grid row — and grid rows are as tall as their tallest card, so every neighbour + * trailed white space (#817's align-items:start stops the stretch, not the row height). Cap the + * list at roughly six rows and scroll the rest. */ +.raffle-wins-list { + max-height: 120px; + overflow-y: auto; +} .workers-empty code { font-family: monospace; } diff --git a/build/dashboard/mining_dashboard/web/static/logic.mjs b/build/dashboard/mining_dashboard/web/static/logic.mjs index f9921cdf..f249f784 100644 --- a/build/dashboard/mining_dashboard/web/static/logic.mjs +++ b/build/dashboard/mining_dashboard/web/static/logic.mjs @@ -51,15 +51,19 @@ export function heroKpis(state) { const hr = state.hashrate, sw = state.shares_window, p = state.pool, - raffle = state.raffle_eligible || {}; + raffle = state.raffle_eligible || {}, + // On a box that isn't donating, two raffle KPI slots ("Raffle Eligible: N/A", "XvB Tier: + // None") are dead weight in the most prominent strip on the page — the mode badge already + // says XvB is off, once. Dropped entirely; they return the moment XvB is enabled. + xvbOn = !!(state.xvb_calc && state.xvb_calc.enabled); return [ { label: "Total Hashrate", value: hr.total, cls: "text-accent" }, { label: "Shares in Window", value: sw.count, cls: sw.ok ? "status-ok" : "status-bad" }, // Raffle Eligible (#158): Yes only when you'd WIN and COLLECT — in a donor tier AND holding a - // PPLNS share. Muted "N/A" when XvB is off; red "No" when donating but a gate is unmet. - { label: "Raffle Eligible", value: raffle.label, cls: raffleCls(raffle) }, + // PPLNS share. Red "No" when donating but a gate is unmet. + ...(xvbOn ? [{ label: "Raffle Eligible", value: raffle.label, cls: raffleCls(raffle) }] : []), { label: "Blocks Found", value: p.blocks, cls: "" }, - { label: "XvB Tier", value: hr.tier, cls: "" }, + ...(xvbOn ? [{ label: "XvB Tier", value: hr.tier, cls: "" }] : []), { label: "Mining Mode", value: hr.mode_name, cls: "c-" + hr.mode_variant }, ]; } @@ -302,19 +306,61 @@ export function computeXvbTier(hashrateHs, calc) { return best && { tier: best.name, threshold: best.threshold, cost: best.threshold }; } -// XvB per-tier payout comparison (#118). Weighs XvB's own published expected reward for a tier -// (`expected_reward_year`, XMR/year, fetched server-side over Tor) against what donating that tier -// costs in foregone P2Pool earnings: cost = threshold H/s × the daily P2Pool rate (`coeffDay`, -// same `earnings.coeff_day` the card already uses) × 365. Net = expected − cost. `expected` is null -// when the estimate is unavailable/stale — cost still stands, but net is null: we never fabricate -// the reward. This is a raffle-tier comparison, NOT a claim that donating more within a tier helps. -export function xvbTierComparison(tier, coeffDay) { - const cost = - tier && tier.threshold > 0 && coeffDay > 0 ? tier.threshold * coeffDay * DAYS_PER_YEAR : null; - const expected = - tier && Number.isFinite(tier.expected_reward_year) ? tier.expected_reward_year : null; - const net = expected !== null && cost !== null ? expected - cost : null; - return { expected, cost, net }; +// XvB tier decision rows (#872, study-final). ONE row per donor tier with everything a miner +// needs to choose a direction, all from measured or operator-published data: +// odds — how often this tier's rounds pay out and among how many qualifiers (live feed) +// cost — P2Pool earnings forgone donating the threshold (threshold x coeffDay x 365) +// xvbSays — XvB's published face-value reward (their number, shown as theirs) +// study — [lo, hi]: xvbSays x the measured delivery band (server-emitted; on-chain study +// constant, 25 rounds: 32% of face, CI 27-38%, margin-invariant) +// yours — xvbSays x THIS wallet's measured realization, when >=5 wins exist (supersedes) +// net — the actionable verdict: (yours ?? study ?? face) minus cost; [lo,hi] when a band +// A tier the what-if hashrate cannot sustain is flagged, its net withheld (an unreachable payout +// must not render as reachable). Pure + unit-tested; the component only renders these rows. +export function xvbDecisionRows(calc, coeffDay, hr) { + if (!calc || !calc.enabled) return []; + const rows = []; + for (const t of calc.tiers || []) { + const cost = t.threshold > 0 && coeffDay > 0 ? t.threshold * coeffDay * DAYS_PER_YEAR : null; + const xvbSays = Number.isFinite(t.expected_reward_year) ? t.expected_reward_year : null; + const yours = Number.isFinite(t.realized_reward_year) ? t.realized_reward_year : null; + const study = + Array.isArray(t.assumed_reward_year_range) && + t.assumed_reward_year_range.every(Number.isFinite) + ? t.assumed_reward_year_range + : null; + const sustainable = hr > 0 && t.threshold <= hr * (calc.max_fraction || 0); + let mode = "none"; + let net = null; + if (cost !== null && yours !== null) { + mode = "yours"; + net = [yours - cost, yours - cost]; + } else if (cost !== null && study !== null) { + mode = "study"; + net = [study[0] - cost, study[1] - cost]; + } else if (cost !== null && xvbSays !== null) { + mode = "face"; + net = [xvbSays - cost, xvbSays - cost]; + } + // Verdict colour: red only when even the optimistic end loses; green only when even the + // pessimistic end profits; a zero-spanning band stays neutral. + const cls = net === null ? "" : net[1] < 0 ? "status-bad" : net[0] > 0 ? "status-ok" : ""; + rows.push({ + name: t.name, + threshold: t.threshold, + sustainable, + oddsPer30d: t.win_odds_day > 0 ? t.win_odds_day * 30 : null, + players: t.players_avg > 0 ? t.players_avg : null, + cost, + xvbSays, + study, + yours, + net, + mode, + cls, + }); + } + return rows; } // Decimal places for a coin amount: more for small amounts (a day's earnings can be a tiny diff --git a/build/dashboard/mining_dashboard/web/views.py b/build/dashboard/mining_dashboard/web/views.py index 0466bf8b..9e0379f4 100644 --- a/build/dashboard/mining_dashboard/web/views.py +++ b/build/dashboard/mining_dashboard/web/views.py @@ -1482,14 +1482,7 @@ def xvb_current_tier_reward_day(metrics, state_mgr): if not metrics.xvb_enabled: return None tiers = state_mgr.get_tiers() - # Round-type key of the current tier: the highest-threshold key the credited average clears — - # the same selection get_tier_info makes, but we need the key (not the display name) to look up - # the estimate. None => below the lowest donor tier (nothing published to credit). - hr = min(metrics.xvb_1h, metrics.xvb_24h) - key, best = None, 0.0 - for k, threshold in tiers.items(): - if threshold > 0 and hr >= threshold and threshold > best: - key, best = k, threshold + key = xvb_current_tier_key(metrics, tiers) if key is None: return None est_state = state_mgr.get_xvb_reward_estimates() @@ -1502,6 +1495,122 @@ def xvb_current_tier_reward_day(metrics, state_mgr): return float(reward_year) / 365 if reward_year and reward_year > 0 else None +def xvb_current_tier_key(metrics, tiers): + """Round-type key of the tier the fleet is CURRENTLY credited for, or None below the lowest. + + The highest-threshold key that ``min(xvb_1h, xvb_24h)`` clears — the same lower-of-two rule as + ``metrics.current_tier``, but yielding the KEY (``donor``/``donor_vip``/…) the estimate and + round-stats tables are indexed by.""" + hr = min(metrics.xvb_1h, metrics.xvb_24h) + key, best = None, 0.0 + for k, threshold in tiers.items(): + if threshold > 0 and hr >= threshold and threshold > best: + key, best = k, threshold + return key + + +# Measuring what a raffle win actually pays (#866/#872). A win's bonus round mines for up to an +# hour and its shares then ride the PPLNS window — a baseline-subtracted stream measurement on a +# production wallet (17 wins, two eras) put ~90% of the attributable excess inside 6h of the win +# timestamp, front-loaded in the first two hours. A win younger than the settle window may still +# have payouts in flight, so it is left out of the sample rather than dragging the factor down. +# Below the minimum sample the factor is noise — callers fall back to the published figure and +# the UI labels it face value. +_XVB_WIN_PAYOUT_WINDOW_S = 6 * 3600 +_XVB_WIN_SETTLE_S = 12 * 3600 +_XVB_REALIZATION_MIN_WINS = 5 +_XVB_REALIZATION_WINDOW_S = 45 * SECONDS_PER_DAY + +# Measured delivery PRIOR for boxes with no local measurement (#872): the fraction of the +# advertised prize a winner's wallet actually receives, measured ON-CHAIN (p2pool.observer, +# all three sidechains) across 25 audited won rounds, Jun–Aug 2026: point 0.33, bootstrap 95% +# CI (0.28, 0.39). At most a small margin effect (a controlled experiment pinning the credited +# margin at 2.1–2.5x the round minimum measured +5pp with overlapping CIs), so ONE band serves +# every tier and regime. Payout of delivered work measured complete, so delivery == realization. +# Supersedes the earlier (0.24, 0.42) two-era payout-window band, whose upper endpoint did not +# survive on-chain recount. A local measurement (xvb_realization) still supersedes this prior. +# ponytail: single-wallet study constant — recalibrate from the public-winners generalization. +XVB_REALIZATION_PRIOR = (0.28, 0.39) + + +def xvb_forecast_tier_key(metrics, tiers): + """The tier the expected-wins forecast should speak to: held, else targeted (#866). + + Before any tier is held — a fleet still ramping its credited average, or an operator weighing + whether donating is worth enabling at all — the honest forecast is for the TARGET tier: "what + would this buy", rather than a dash that reads as unknowable.""" + key = xvb_current_tier_key(metrics, tiers) + if key is None and metrics.target_threshold > 0: + key = next((k for k, t in tiers.items() if t == metrics.target_threshold), None) + return key + + +def xvb_expected_wins_day(round_stats_state, tier_key, tiers): + """Expected raffle wins per day for the held tier (#866), from XvB's own winners file. + + The file's players column is the qualifier count per round, so the honest forecast is + mechanical: for each donor round type the fleet qualifies for (threshold at or under the held + tier's), rounds-per-day ÷ average qualifiers, summed. Verified against production: predicted + 0.84 whale wins/day, measured 0.84/day over the same stretch. None when the aggregate is + missing, stale (#311 rule), or spans no measurable time — the card shows "—", never a guess.""" + if not tier_key: + return None + stats = (round_stats_state or {}).get("stats") or {} + types = stats.get("types") or {} + span_days = stats.get("span_days") or 0.0 + if xvb_stats_are_stale(round_stats_state) or not types or span_days <= 0: + return None + held = tiers.get(tier_key, 0.0) + total = 0.0 + for key, threshold in tiers.items(): + if 0 < threshold <= held: + agg = types.get(key) + if agg and agg.get("players_avg", 0) > 0 and agg.get("rounds", 0) > 0: + total += (agg["rounds"] / span_days) / agg["players_avg"] + return total if total > 0 else None + + +def xvb_realization(payouts, raffle_wins, xvb_day, expected_wins_day, now=None, p2pool_day=None): + """Measured fraction of XvB's published expectation this wallet actually collects (#866/#872). + + Numerator: mean confirmed XMR landing within the attribution window after each settled win in + the trailing measurement window. Denominator: face value per win — the published per-day figure + spread over the expected win rate. Production measured ~0.19 on a Whale-tier box whose credited + average rode the round minimum; the published figures assume 1.0. Returns + ``(fraction clamped to [0, 1], wins measured)``, or None (callers fall back to the published + number, labeled face value) when either side is missing or fewer than + ``_XVB_REALIZATION_MIN_WINS`` wins are measurable.""" + # ponytail: one factor across tiers and eras — per-tier factors if a tier change muddies it. + if not payouts or not raffle_wins or not xvb_day or not expected_wins_day: + return None + now = now if now is not None else time.time() + lo = now - _XVB_REALIZATION_WINDOW_S + stamps = [ + t for t in ((w.get("ts") or 0) for w in raffle_wins) if lo <= t <= now - _XVB_WIN_SETTLE_S + ] + if len(stamps) < _XVB_REALIZATION_MIN_WINS: + return None + face_per_win = xvb_day / expected_wins_day + if face_per_win <= 0: + return None + # Each payout counts once even when two win windows overlap (back-to-back wins). + realized = ( + sum( + (p.get("amount_atomic") or 0) + for p in payouts + if any(0 <= (p.get("ts") or 0) - t <= _XVB_WIN_PAYOUT_WINDOW_S for t in stamps) + ) + / ATOMIC_PER_XMR + ) + # Ordinary P2Pool payouts also land inside the attribution windows; left in, they inflate the + # factor (the failure mode this whole measurement exists to prevent). Subtract the expected + # baseline: the box's own linear P2Pool rate over the windowed hours. + if p2pool_day and p2pool_day > 0: + realized -= p2pool_day * (_XVB_WIN_PAYOUT_WINDOW_S / SECONDS_PER_DAY) * len(stamps) + frac = (realized / len(stamps)) / face_per_win + return (max(0.0, min(1.0, frac)), len(stamps)) + + def build_earnings(data, metrics, payouts=None, tari_payouts=None, xvb_day=None): """Expected-XMR-from-P2Pool calculator inputs for the Advanced view (Issue #12). @@ -1571,7 +1680,9 @@ def build_earnings(data, metrics, payouts=None, tari_payouts=None, xvb_day=None) } -def build_earnings_vs_actual(metrics, earnings, raffle_wins, now=None): +def build_earnings_vs_actual( + metrics, earnings, raffle_wins, now=None, expected_wins_day=None, realization=None +): """Expected-vs-actual summary — one row per income stream, for both views (#808). The comparison the operator otherwise assembles by hand across the Earnings tabs: the linear @@ -1588,7 +1699,9 @@ def build_earnings_vs_actual(metrics, earnings, raffle_wins, now=None): expected = the P2Pool linear model + XvB's published per-day estimate × 30 (folded only when fresh; ``includes_xvb`` tells the client which label to draw), actual = every confirmed payout; ``pct`` compares like with like, and ``partial`` carries the confirmed window's - may-be-incomplete flag. **Tari** compares BLOCK COUNTS: solo merge-mining pays whole blocks, + may-be-incomplete flag. The XvB addend is TEMPERED by this wallet's measured win realization + when enough wins exist to measure it (#866 — see ``xvb_realization``); the published face + value stays in the tooltip via ``xvb_realization_pct``/``xvb_wins_measured``. **Tari** compares BLOCK COUNTS: solo merge-mining pays whole blocks, so the honest unit is blocks (expected = hashrate × window ÷ aux difficulty; actual = confirmed payout count, each payout being a found block), with the XTM sum alongside — no percent, a count that small is luck either way. **XvB** keeps only its win count and last-win @@ -1605,6 +1718,16 @@ def build_earnings_vs_actual(metrics, earnings, raffle_wins, now=None): # the combined expectation to <= 0 while `available` stays True — an inverted pct at best, a # zero denominator at worst. A negative estimate is meaningless, so it folds as 0. expected_xvb = max(0.0, earnings["xvb_day"] or 0.0) * 30 if metrics.xvb_enabled else 0.0 + # Temper the XvB leg by what THIS wallet's wins measurably paid (#866): the published figure + # prices bonus hashes at face value, which a production wallet realized ~19% of — folding it + # untempered made the combined pct blame the P2Pool leg for XvB's optimism. With enough + # measured wins (``realization``, computed once in build_state via ``xvb_realization``) the + # leg scales down to the measured fraction; without them the published figure stands and the + # client labels it face value. + if realization and expected_xvb > 0: + expected_xvb *= realization[0] + else: + realization = None xmr = { "available": expected_p2pool > 0, "expected_30d": expected_p2pool + expected_xvb, @@ -1612,6 +1735,10 @@ def build_earnings_vs_actual(metrics, earnings, raffle_wins, now=None): # actual ALWAYS contains any win payouts; when XvB is on but the published figure is # stale, the tooltip owns the asymmetry rather than a fabricated estimate filling it. "includes_xvb": expected_xvb > 0, + # Tempering context for the tooltip: the measured fraction and its sample size, or None + # when the leg is the untempered published figure (or XvB is off). + "xvb_realization_pct": round(realization[0] * 100) if realization else None, + "xvb_wins_measured": realization[1] if realization else None, "enabled": bool(conf.get("enabled")), "actual_30d": conf.get("xmr_30d") if conf.get("enabled") else None, "partial": bool((conf.get("partial") or {}).get("30d")), @@ -1639,6 +1766,10 @@ def build_earnings_vs_actual(metrics, earnings, raffle_wins, now=None): "enabled": metrics.xvb_enabled, "wins_30d": sum(1 for t in stamps if t >= now - 30 * SECONDS_PER_DAY), "last_win_ts": max(stamps, default=0), + # The forecast the "—" used to stand in for (#866): win odds are computable from XvB's + # own winners file (round-type frequency ÷ qualifier count), so publish them. None while + # the aggregate is missing/stale — the client keeps the dash. + "expected_wins_30d": expected_wins_day * 30 if expected_wins_day else None, } return {"xmr": xmr, "tari": tari, "xvb": xvb} @@ -1659,7 +1790,7 @@ def build_earnings_vs_actual(metrics, earnings, raffle_wins, now=None): ) -def build_xvb_calc(metrics, state_mgr): +def build_xvb_calc(metrics, state_mgr, realization=None): """XvB tier/raffle calculator inputs for the Advanced view (Issue #118). Same pattern as ``build_earnings``'s ``coeff_day``: the server publishes the tier table and @@ -1669,12 +1800,31 @@ def build_xvb_calc(metrics, state_mgr): ``resolve_target_threshold``'s auto rule). Current/target tier state comes straight off ``Metrics`` — no tier math is re-derived here. - Deliberately carries NO raffle-entry or win-probability figures: the raffle draw is random - among qualifiers, so tier + threshold + cost is everything the operator can act on. Returns - ``{"enabled": False}`` alone when XvB is off — there is no tier to calculate.""" + The draw is random among qualifiers, but the winners file publishes the qualifier count per + round (#872), so each tier carries its measurable draw context: ``win_odds_day`` (that round + type's frequency ÷ its average qualifiers — per-round-type, unlike the earnings card's + cumulative forecast) and ``players_avg`` (which also makes a single-qualifier artifact like + Mega's self-evident). ``realized_reward_year`` scales the published figure by this wallet's + measured win realization (``realization``, from ``xvb_realization``) — None when unmeasured, + so the client falls back to the study band; face value shows only in its own column. Returns ``{"enabled": False}`` alone when + XvB is off — there is no tier to calculate.""" if not metrics.xvb_enabled: return {"enabled": False} tiers = state_mgr.get_tiers() + round_state = state_mgr.get_xvb_round_stats() + round_types = ( + {} + if xvb_stats_are_stale(round_state) + else ((round_state.get("stats") or {}).get("types") or {}) + ) + span_days = ((round_state.get("stats") or {}).get("span_days") or 0.0) if round_types else 0.0 + + def _odds_day(key): + agg = round_types.get(key) + if not agg or span_days <= 0 or agg.get("players_avg", 0) <= 0: + return None + return (agg["rounds"] / span_days) / agg["players_avg"] + # XvB's published per-tier expected reward (XMR/year), fetched over Tor and cached (#118). The # tier KEY is exactly the round-type in the file (donor / donor_vip / donor_whale / donor_mega), # so a tier maps to its estimate by key. A stale or empty cache degrades to None per tier + @@ -1697,6 +1847,27 @@ def build_xvb_calc(metrics, state_mgr): "expected_reward_year": ( float(estimates[key]) if estimates_available and key in estimates else None ), + # Published figure × measured realization (#872) — the net the panel can + # honestly act on. None until enough wins measure the factor. + "realized_reward_year": ( + float(estimates[key]) * realization[0] + if estimates_available and key in estimates and realization + else None + ), + # Unmeasured boxes still get a calculable band (#872): the published figure + # scaled by the measured realization PRIOR below. None once a local + # measurement exists (realized_reward_year supersedes it) or estimates are + # stale — the two never show together. + "assumed_reward_year_range": ( + [ + float(estimates[key]) * XVB_REALIZATION_PRIOR[0], + float(estimates[key]) * XVB_REALIZATION_PRIOR[1], + ] + if estimates_available and key in estimates and not realization + else None + ), + "win_odds_day": _odds_day(key), + "players_avg": (round_types.get(key) or {}).get("players_avg"), } for key, t in tiers.items() if t > 0 @@ -1705,6 +1876,10 @@ def build_xvb_calc(metrics, state_mgr): ), "estimates_available": estimates_available, "estimates_stale": estimates_stale, + # Measurement context for the realized figures: the factor and its sample size, or None + # while unmeasured (the client then labels the published number face value). + "realization_pct": round(realization[0] * 100) if realization else None, + "realization_wins": realization[1] if realization else None, "max_fraction": XVB_MAX_DONATION_FRACTION, # donation headroom rule (sustainability) "current_tier": metrics.current_tier, "target_tier": metrics.target_tier, @@ -1847,6 +2022,23 @@ def build_state(data, state_mgr, range_arg, window=None, avg_window=DEFAULT_HASH xvb_day=xvb_current_tier_reward_day(metrics, state_mgr), ) + # XvB honesty figures (#866/#872), computed once and shared by the earnings summary and the + # tier calculator so the two can never disagree: the forecast win rate from XvB's own winners + # file, and the measured fraction of the published reward this wallet's wins actually paid. + xvb_wins_day = xvb_realized = None + if metrics.xvb_enabled: + xvb_tiers = state_mgr.get_tiers() + xvb_wins_day = xvb_expected_wins_day( + state_mgr.get_xvb_round_stats(), xvb_forecast_tier_key(metrics, xvb_tiers), xvb_tiers + ) + xvb_realized = xvb_realization( + monero_payouts, + raffle_wins, + earnings["xvb_day"], + xvb_wins_day, + p2pool_day=earnings["coeff_day"] * metrics.p2pool_30d, + ) + egress = egress_posture_from_config() # per-component egress route + privacy roll-up (#170) topology = ( topology_from_config() @@ -1898,8 +2090,14 @@ def build_state(data, state_mgr, range_arg, window=None, avg_window=DEFAULT_HASH # (feature off → earnings shows only the estimate). Built above, before the payload. "earnings": earnings, # Expected vs actual, one row per stream (#808) — the Simple view's earnings figure. - "earnings_summary": build_earnings_vs_actual(metrics, earnings, raffle_wins), - "xvb_calc": build_xvb_calc(metrics, state_mgr), + "earnings_summary": build_earnings_vs_actual( + metrics, + earnings, + raffle_wins, + expected_wins_day=xvb_wins_day, + realization=xvb_realized, + ), + "xvb_calc": build_xvb_calc(metrics, state_mgr, realization=xvb_realized), # On a backup stack, the XvB controller state last pulled from the primary (#249) — held as # standby, adopted only at failover. None on a single stack (nothing pulls). Inspectable so # an operator can confirm the backup is warm before it takes over. diff --git a/build/dashboard/pyproject.toml b/build/dashboard/pyproject.toml index 3f4ca47b..68d3d3ef 100644 --- a/build/dashboard/pyproject.toml +++ b/build/dashboard/pyproject.toml @@ -7,7 +7,7 @@ name = "mining-dashboard" # Keep in lockstep with the top-level VERSION file — the single source of truth for the stack version # (#44). A shell test (tests/stack/run.sh) fails if these drift; the dashboard *displays* the version # from VERSION (baked in as PITHEAD_VERSION, #58), so this is packaging metadata only. -version = "1.17.0" +version = "1.18.0" description = "Monitoring dashboard and XvB switching engine for Pithead" readme = "README.md" requires-python = ">=3.11" @@ -32,13 +32,13 @@ test = [ "pytest-cov>=5", "pytest-aiohttp>=1.0", # diff-cover (#286): patch-coverage gate — new/changed lines must be >=90% covered. - "diff-cover>=10.4.1", + "diff-cover>=10.5.0", # hypothesis (#284): property-based tests asserting invariants on the money/numeric logic. - "hypothesis>=6.163.0", + "hypothesis>=6.165.2", ] # Developer tooling (Wave 7, #280). Pinned so local, pre-commit, and CI all run the SAME ruff # — lint output is version-sensitive, so a floor would let CI and a contributor disagree. -dev = ["ruff==0.16.0", "pre-commit>=4.6.1"] +dev = ["ruff==0.16.2", "pre-commit>=4.6.1"] [tool.setuptools.packages.find] include = ["mining_dashboard*"] @@ -70,7 +70,10 @@ exclude_also = ["if __name__ == .__main__.:", "raise NotImplementedError"] target-version = "py311" line-length = 100 # Generated Tari gRPC stubs aren't ours to style — already omitted from coverage too. -extend-exclude = ["mining_dashboard/client/tari/generated"] +extend-exclude = [ + "mining_dashboard/client/tari/generated", + "../../docs/research", +] # research/: verbatim study-record scripts, kept byte-identical to the archived raw copy [tool.ruff.lint] # E/F/W pycodestyle+pyflakes · I import-sort · B bugbear · UP pyupgrade · diff --git a/build/dashboard/tests/client/test_xvb_client.py b/build/dashboard/tests/client/test_xvb_client.py index 99360583..71790851 100644 --- a/build/dashboard/tests/client/test_xvb_client.py +++ b/build/dashboard/tests/client/test_xvb_client.py @@ -1,5 +1,6 @@ from unittest.mock import MagicMock, patch +import pytest import requests import mining_dashboard.client.xvb_client as xvb_mod @@ -12,6 +13,7 @@ XvbClient, mask_wallet, parse_reward_estimates, + parse_round_stats, parse_winners, ) @@ -205,12 +207,43 @@ def test_parse_winners_bounds_hostile_input(): assert parse_winners(tail, _WIN_WALLET) == [] +def test_parse_round_stats_aggregates_every_round(): + stats = parse_round_stats(SAMPLE_WINNERS_TXT) + # ALL valid rows count — other wallets included (that is the point: the aggregate is the + # raffle's shape, not ours). Garbage and bad-date rows are skipped like parse_winners. + assert stats["types"] == { + "donor_mega": {"rounds": 1, "players_avg": 1.0}, + "donor_vip": {"rounds": 1, "players_avg": 27.0}, + "donor_whale": {"rounds": 1, "players_avg": 10.0}, + } + # Span: newest (20:41:38) minus oldest (15:40:26) of the valid rows, in days. + assert stats["span_days"] == pytest.approx((1784407298.0 - 1784389226.0) / 86400.0) + + +def test_parse_round_stats_garbage_or_empty_yields_no_types(): + assert parse_round_stats("")["types"] == {} + assert parse_round_stats(None)["types"] == {} + assert parse_round_stats("no\ttabs here\n\n???")["types"] == {} + # A zero/negative players column is meaningless for odds — the row is skipped. + bad = "48M2j8Gj...d8KgGBwa\t2026-07-18 20:41:38\t1kH/s\t1\t\tb1\t1/1\t0\tdonor\n" + assert parse_round_stats(bad)["types"] == {} + + +def test_parse_round_stats_bounds_hostile_input(): + # Same line cap as parse_winners: rows beyond it are never scanned. + row = "48M2j8Gj...d8KgGBwa 2026-07-18 15:40:26 1kH/s 1 blk 1/1 5 donor" + tail = ("junk\n" * 9_999) + row + assert parse_round_stats(tail)["types"] == {} + + def test_get_recent_wins_success_routes_over_tor(): client = XvbClient(_WIN_WALLET) resp = MagicMock(status_code=200, text=SAMPLE_WINNERS_TXT) with patch.object(xvb_mod, "bounded_get", return_value=resp) as mock_get: - wins = client.get_recent_wins() - assert len(wins) == 2 + result = client.get_recent_wins() + assert len(result["wins"]) == 2 + # The SAME fetched body yields the all-rounds aggregate (#866) — one request, two parses. + assert result["round_stats"]["types"]["donor_vip"]["rounds"] == 1 assert mock_get.call_args.args[0].endswith("winners_recent_full_pub.txt") assert mock_get.call_args.kwargs["proxies"]["https"].startswith("socks5h://") @@ -220,7 +253,7 @@ def test_get_recent_wins_no_wins_is_empty_list_not_none(): client = XvbClient("49abcSOMEOTHERWALLETxyz99") resp = MagicMock(status_code=200, text=SAMPLE_WINNERS_TXT) with patch.object(xvb_mod, "bounded_get", return_value=resp): - assert client.get_recent_wins() == [] + assert client.get_recent_wins()["wins"] == [] def test_get_recent_wins_failures_return_none(): diff --git a/build/dashboard/tests/frontend/components.test.mjs b/build/dashboard/tests/frontend/components.test.mjs index 74094224..36d85c93 100644 --- a/build/dashboard/tests/frontend/components.test.mjs +++ b/build/dashboard/tests/frontend/components.test.mjs @@ -593,75 +593,71 @@ test('EarningsCard provenance line reflects the live price feed (#520)', () => { assert.match(html, /USD 0\.000400/); // tiny XTM price keeps its precision }); -test('XvB comparison dropdown shows Expected/Cost/Net per tier, degrades on a stale estimate (#118)', () => { +test('XvB decision table: all tiers at once, study column, coloured net verdict (#872)', () => { const base = clone(); base.earnings.available = true; - base.earnings.coeff_day = 1e-7; // XMR per H/s per day → cost = threshold × this × 365 - // A Whale-capable what-if default (200k × 0.85 ≥ 100k threshold) so the target tier's Net shows; - // the unsustainable path is asserted separately below. + base.earnings.coeff_day = 1e-7; base.earnings.p2pool_hr = 200000; base.earnings.p2pool_hr_str = '200.00 kH/s'; base.xvb_calc = { - enabled: true, - max_fraction: 0.85, - estimates_available: true, - estimates_stale: false, - current_tier: 'None', - target_tier: 'Whale (100.00 kH/s+)', - target_threshold: 100000, - sustainable: true, - note: 'An XvB tier is raffle status, not an XMR payout.', - mode_note: null, + enabled: true, max_fraction: 0.85, estimates_available: true, estimates_stale: false, + current_tier: 'None', target_tier: 'Whale (100.00 kH/s+)', target_threshold: 100000, + sustainable: true, note: 'An XvB tier is raffle status, not an XMR payout.', + mode_note: null, realization_pct: null, realization_wins: null, tiers: [ - { name: 'Donor (1.00 kH/s+)', threshold: 1000, expected_reward_year: 0.06 }, - { name: 'Vip (10.00 kH/s+)', threshold: 10000, expected_reward_year: 0.81 }, - { name: 'Whale (100.00 kH/s+)', threshold: 100000, expected_reward_year: 6.17 }, - { name: 'Mega (1.00 MH/s+)', threshold: 1000000, expected_reward_year: 56.9 }, + { name: 'Vip (10.00 kH/s+)', threshold: 10000, expected_reward_year: 0.81, + realized_reward_year: null, assumed_reward_year_range: [0.81 * 0.27, 0.81 * 0.38], + win_odds_day: 0.12, players_avg: 31.4 }, + { name: 'Whale (100.00 kH/s+)', threshold: 100000, expected_reward_year: 6.17, + realized_reward_year: null, assumed_reward_year_range: [6.17 * 0.27, 6.17 * 0.38], + win_odds_day: 0.84, players_avg: 8.2 }, + { name: 'Mega (1.00 MH/s+)', threshold: 1000000, expected_reward_year: 56.9, + realized_reward_year: null, assumed_reward_year_range: [56.9 * 0.27, 56.9 * 0.38], + win_odds_day: 9.4, players_avg: 1.0 }, ], }; const up = renderApp({ state: base }); - // The dropdown renders all four tiers as options. - assert.match(up, /id="xvb-tier-select"/); - for (const name of ['Donor', 'Vip', 'Whale', 'Mega']) { - assert.match(up, new RegExp(`]*>${name}`), `missing tier option: ${name}`); - } - // Default selection = the target tier (Whale): Expected is XvB's figure, Cost = 100000 × 1e-7 × - // 365 = 3.65 XMR/yr, Net = 6.17 − 3.65 = 2.52. - assert.match(up, /Expected \(XvB\)/); - assert.match(up, /6\.1700 XMR/); // expected - assert.match(up, /3\.6500 XMR/); // cost - assert.match(up, /2\.5200 XMR/); // net - assert.match(up, /From XvB's published per-tier estimate/); - assert.doesNotMatch(up, /estimate unavailable/); - - // Stale/unavailable estimate: the note replaces the Expected number, cost still shows. - const stale = clone(); - stale.earnings.available = true; - stale.earnings.coeff_day = 1e-7; - stale.xvb_calc = { - ...base.xvb_calc, - estimates_available: false, - estimates_stale: true, - tiers: base.xvb_calc.tiers.map((t) => ({ ...t, expected_reward_year: null })), + // One table, no dropdown, every tier a row with odds, both estimates and a verdict. + assert.match(up, /id="xvb-decision-table"/); + assert.doesNotMatch(up, /id="xvb-tier-select"/); + assert.match(up, /XvB says \/ yr/); + assert.match(up, /Study est\. \/ yr/); + assert.match(up, /winners receiving 33% of face/); + // Whale row: cost 3.65; study band 1.6659…2.3446; net band negative at both ends -> red. + assert.match(up, /1\.6659[0-9]* XMR … 2\.3446[0-9]* XMR/); + assert.match(up, /-1\.98[0-9]* XMR … -1\.30[0-9]* XMR/); + // Mega is unsustainable at 200k×0.85: flagged, net withheld. + assert.match(up, /Mega \(1\.00 MH\/s\+\) ⚠/); + // Draw odds render per row. + assert.match(up, /≈ 25 wins · 8\.2 players/); + // XvB's face value stays visible as XvB's own number. + assert.match(up, /6\.1700 XMR/); +}); + +test('XvB decision table: local measured wins supersede the study column (#872)', () => { + const base = clone(); + base.earnings.available = true; + base.earnings.coeff_day = 1e-7; + base.earnings.p2pool_hr = 200000; + base.earnings.p2pool_hr_str = '200.00 kH/s'; + base.xvb_calc = { + enabled: true, max_fraction: 0.85, estimates_available: true, estimates_stale: false, + current_tier: 'Whale (100.00 kH/s+)', target_tier: 'Whale (100.00 kH/s+)', + target_threshold: 100000, sustainable: true, note: 'raffle status', mode_note: null, + realization_pct: 32, realization_wins: 9, + tiers: [ + { name: 'Whale (100.00 kH/s+)', threshold: 100000, expected_reward_year: 6.17, + realized_reward_year: 6.17 * 0.32, assumed_reward_year_range: null, + win_odds_day: 0.84, players_avg: 8.2 }, + ], }; - const sHtml = renderApp({ state: stale }); - assert.match(sHtml, /estimate unavailable/); - assert.match(sHtml, /Expected reward estimate unavailable/); - assert.match(sHtml, /3\.6500 XMR/); // cost still stands - - // Unsustainable tier: at the fixture's small default hashrate (~8 kH/s), the Whale target - // can't be held (8k × 0.85 < 100k) — the comparison must SAY so and withhold the Net rather - // than imply an unreachable +2.52 XMR/yr payout. - const small = clone(); - small.earnings.available = true; - small.earnings.coeff_day = 1e-7; - small.xvb_calc = { ...base.xvb_calc }; - const uHtml = renderApp({ state: small }); - assert.match(uHtml, /Not sustainable at your hashrate/); - assert.match(uHtml, /6\.1700 XMR/); // XvB's expected figure still shown (it's their number) - assert.doesNotMatch(uHtml, /2\.5200 XMR/); // but no reachable-looking Net + const up = renderApp({ state: base }); + assert.match(up, /Yours \(32% × 9 wins\)/); + assert.match(up, /1\.9744[0-9]* XMR/); // 6.17 × 0.32 + assert.match(up, /-1\.6756[0-9]* XMR/); // net = 1.9744 − 3.65, single point }); + test('CadenceCard shows the — placeholders on a cold stack, real figures when available (#84)', () => { // The base fixture has no pool difficulty → cadence.available === false → server-sent dashes. const cold = renderApp(); @@ -683,6 +679,44 @@ test('CadenceCard shows the — placeholders on a cold stack, real figures when assert.match(up, /1,234,567/); }); +test('XvB decision table: verdict colours cover green and zero-spanning bands, stale degrades honestly (#872)', () => { + const base = clone(); + base.earnings.available = true; + base.earnings.coeff_day = 1e-9; // tiny cost so a positive band is constructible + base.earnings.p2pool_hr = 200000; + base.earnings.p2pool_hr_str = '200.00 kH/s'; + base.xvb_calc = { + enabled: true, max_fraction: 0.85, estimates_available: true, estimates_stale: false, + current_tier: 'None', target_tier: 'Vip (10.00 kH/s+)', target_threshold: 10000, + sustainable: true, note: 'raffle status', mode_note: null, + realization_pct: null, realization_wins: null, + tiers: [ + // cost = 10000 × 1e-9 × 365 = 0.00365; band well above -> green at both ends + { name: 'Vip (10.00 kH/s+)', threshold: 10000, expected_reward_year: 0.81, + realized_reward_year: null, assumed_reward_year_range: [0.22, 0.31], + win_odds_day: 0.12, players_avg: 31.4 }, + // band straddles cost -> neutral (no class) + { name: 'Whale (100.00 kH/s+)', threshold: 100000, expected_reward_year: 6.17, + realized_reward_year: null, assumed_reward_year_range: [0.03, 0.05], + win_odds_day: 0.84, players_avg: 8.2 }, + ], + }; + const up = renderApp({ state: base }); + assert.match(up, /class="status-ok">0\.21635/); // green: even pessimistic end profits + assert.match(up, /class="">-0\.0065/); // zero-spanning: neutral cell class + // Stale estimates: costs still render, estimate/net columns dash, footer says costs only. + const stale = clone(); + stale.earnings.available = true; + stale.earnings.coeff_day = 1e-7; + stale.earnings.p2pool_hr = 200000; + stale.xvb_calc = { ...base.xvb_calc, estimates_available: false, estimates_stale: true, + tiers: base.xvb_calc.tiers.map((t) => ({ ...t, expected_reward_year: null, + assumed_reward_year_range: null, realized_reward_year: null })) }; + const sh = renderApp({ state: stale }); + assert.match(sh, /tier costs only/); + assert.match(sh, /0\.365\d* XMR/); // vip cost at 1e-7 +}); + test('XvBStats greys the credited figures and flags the footer when the fetch is stale (#311)', () => { // Fresh (base fixture, xvb_stale false): the normal "Stats fetched" footer, no stale marks. const fresh = renderApp(); @@ -1057,3 +1091,45 @@ test('ExpectedVsActualCard counts Tari blocks and windows XvB wins (#808)', () = s.earnings_summary.xvb = { enabled: false, wins_30d: 0, last_win_ts: 0 }; assert.doesNotMatch(renderApp({ state: s }), /XvB wins \(30d\)/); }); + +test('disabled XvB de-emphasizes: no stats card, no header split line, no hero raffle slots', () => { + // One mention — the mode badge — is enough on a non-donating box. The stats card, the + // header's routed-split line, and the two hero raffle KPIs all stand down with it. + const s = clone(); + assert.match(renderApp({ state: s }), /XvB Donation Stats/); // fixture has XvB on + assert.match(renderApp({ state: s }), /XvB \(routed\):/); + s.xvb_calc = { enabled: false }; + const off = renderApp({ state: s }); + assert.doesNotMatch(off, /XvB Donation Stats/); + assert.doesNotMatch(off, /XvB \(routed\):/); + assert.doesNotMatch(off, /Raffle Eligible/); + assert.doesNotMatch(off, /XvB Tier { + // The wins log is what made the XvB card the tallest in its grid row (whitespace under every + // neighbour) — the wrapper carries the max-height cap. + assert.match(renderApp({ state: clone() }), /class="raffle-wins-list"/); +}); + +test('ExpectedVsActualCard forecasts XvB wins from the winners feed, dash when unmeasured (#866)', () => { + const s = clone(); + s.earnings_summary.xvb = { + enabled: true, wins_30d: 13, last_win_ts: 1735689000, expected_wins_30d: 25.2, + }; + assert.match(renderApp({ state: s }), /≈ 25 wins/); // two significant digits + // No aggregate (missing/stale) → the dash, never a guess. + s.earnings_summary.xvb.expected_wins_30d = null; + assert.doesNotMatch(renderApp({ state: s }), /≈ .* wins<\/td>/); +}); + +test('ExpectedVsActualCard tooltip owns the tempered vs face-value XvB share (#866)', () => { + const s = clone(); + s.earnings_summary.xmr.includes_xvb = true; + s.earnings_summary.xmr.xvb_realization_pct = 19; + s.earnings_summary.xmr.xvb_wins_measured = 15; + assert.match(renderApp({ state: s }), /19% of XvB(?:'|')s published face value/); + s.earnings_summary.xmr.xvb_realization_pct = null; + s.earnings_summary.xmr.xvb_wins_measured = null; + assert.match(renderApp({ state: s }), /face-value estimate — an upper bound/); +}); diff --git a/build/dashboard/tests/frontend/fixtures/_gen_state.py b/build/dashboard/tests/frontend/fixtures/_gen_state.py index 83de5d39..af5fe245 100644 --- a/build/dashboard/tests/frontend/fixtures/_gen_state.py +++ b/build/dashboard/tests/frontend/fixtures/_gen_state.py @@ -80,6 +80,19 @@ def _state_mgr(): "estimates": {"donor": 0.06, "donor_vip": 0.81, "donor_whale": 6.17, "donor_mega": 56.9}, "last_update": NOW, } + # All-rounds raffle aggregate (#866/#872): enough for draw odds + the expected-wins cell. + sm.get_xvb_round_stats.return_value = { + "stats": { + "types": { + "donor": {"rounds": 7, "players_avg": 70.0}, + "donor_vip": {"rounds": 28, "players_avg": 28.0}, + "donor_whale": {"rounds": 56, "players_avg": 8.0}, + "donor_mega": {"rounds": 63, "players_avg": 1.0}, + }, + "span_days": 7.0, + }, + "last_update": NOW, + } # One recorded XvB raffle win (inside the chart window) so the fixture carries both the # chart's gold-star marker and the XvB card's wins-log row. sm.get_raffle_wins.return_value = [ diff --git a/build/dashboard/tests/frontend/fixtures/state.json b/build/dashboard/tests/frontend/fixtures/state.json index 1c97da9f..5c3f9137 100644 --- a/build/dashboard/tests/frontend/fixtures/state.json +++ b/build/dashboard/tests/frontend/fixtures/state.json @@ -115,10 +115,13 @@ "expected_30d": 0.0, "includes_xvb": false, "partial": false, - "pct": null + "pct": null, + "xvb_realization_pct": null, + "xvb_wins_measured": null }, "xvb": { "enabled": true, + "expected_wins_30d": null, "last_win_ts": 1735689000, "wins_30d": 1 } @@ -746,6 +749,8 @@ "max_fraction": 0.85, "mode_note": null, "note": "An XvB tier is raffle status, not an XMR payout. Donated hashrate earns no P2Pool shares; holding a tier costs about its threshold in continuous donation (XvB qualifies a tier on both the 1h and 24h credited averages), and donating above the threshold adds nothing \u2014 the raffle winner is drawn at random among qualifiers.", + "realization_pct": null, + "realization_wins": null, "sustainable": true, "target_threshold": 1000.0, "target_tier": "Donor (1.00 kH/s+)", @@ -753,22 +758,34 @@ { "expected_reward_year": 0.06, "name": "Donor (1.00 kH/s+)", - "threshold": 1000.0 + "players_avg": 70.0, + "realized_reward_year": null, + "threshold": 1000.0, + "win_odds_day": 0.014285714285714285 }, { "expected_reward_year": 0.81, "name": "Vip (10.00 kH/s+)", - "threshold": 10000.0 + "players_avg": 28.0, + "realized_reward_year": null, + "threshold": 10000.0, + "win_odds_day": 0.14285714285714285 }, { "expected_reward_year": 6.17, "name": "Whale (100.00 kH/s+)", - "threshold": 100000.0 + "players_avg": 8.0, + "realized_reward_year": null, + "threshold": 100000.0, + "win_odds_day": 1.0 }, { "expected_reward_year": 56.9, "name": "Mega (1.00 MH/s+)", - "threshold": 1000000.0 + "players_avg": 1.0, + "realized_reward_year": null, + "threshold": 1000000.0, + "win_odds_day": 9.0 } ] }, diff --git a/build/dashboard/tests/frontend/logic.test.mjs b/build/dashboard/tests/frontend/logic.test.mjs index 2a3d8f16..620f88c3 100644 --- a/build/dashboard/tests/frontend/logic.test.mjs +++ b/build/dashboard/tests/frontend/logic.test.mjs @@ -17,7 +17,7 @@ import { normalizeChoice, normalizeSort, loadPref, savePref, AVG_WINDOWS, DEFAULT_AVG_WINDOW, normalizeAvgWindow, heroKpis, raffleCls, - parseHashrate, fmtHashrate, computeEarnings, computeXvbTier, xvbTierComparison, formatXmr, formatXtm, formatTimeToShare, formatAgo, + parseHashrate, fmtHashrate, computeEarnings, computeXvbTier, xvbDecisionRows, formatXmr, formatXtm, formatTimeToShare, formatAgo, computeEnergy, formatFiat, formatFiatAmount, formatUnit, coinTriplet, coinFiat, formatFiatPrice, priceSourceLabel, DAYS_PER_MONTH, DAYS_PER_YEAR, @@ -347,32 +347,61 @@ test('computeXvbTier: null when disabled, calc missing, empty tiers, or bad hash assert.equal(computeXvbTier(null, XVB_CALC), null); }); -// --- xvbTierComparison (#118) — per-tier expected vs cost vs net ------------------------- +// --- xvbDecisionRows (#872) — the per-tier decision table's pure math ------------------- -test('xvbTierComparison: expected − cost = net when the estimate is present', () => { - const tier = { name: 'Whale', threshold: 100_000, expected_reward_year: 6.17 }; - const c = xvbTierComparison(tier, 1e-7); // cost = 100000 × 1e-7 × 365 = 3.65 - assert.equal(c.expected, 6.17); - assert.ok(Math.abs(c.cost - 3.65) < 1e-9); - assert.ok(Math.abs(c.net - 2.52) < 1e-9); -}); - -test('xvbTierComparison: null expected (stale) keeps cost, nulls net — never fabricates a reward', () => { - const tier = { name: 'Whale', threshold: 100_000, expected_reward_year: null }; - const c = xvbTierComparison(tier, 1e-7); - assert.equal(c.expected, null); - assert.ok(Math.abs(c.cost - 3.65) < 1e-9); - assert.equal(c.net, null); -}); +const _CALC = { + enabled: true, max_fraction: 0.85, realization_pct: null, realization_wins: null, + tiers: [ + { name: 'Vip (10.00 kH/s+)', threshold: 10_000, expected_reward_year: 0.81, + realized_reward_year: null, assumed_reward_year_range: [0.81 * 0.27, 0.81 * 0.38], + win_odds_day: 0.12, players_avg: 31.4 }, + { name: 'Whale (100.00 kH/s+)', threshold: 100_000, expected_reward_year: 6.17, + realized_reward_year: null, assumed_reward_year_range: [6.17 * 0.27, 6.17 * 0.38], + win_odds_day: 0.84, players_avg: 8.2 }, + ], +}; -test('xvbTierComparison: no coeff_day (network stats down) → cost and net null', () => { - const tier = { name: 'Whale', threshold: 100_000, expected_reward_year: 6.17 }; - const c = xvbTierComparison(tier, 0); - assert.equal(c.cost, null); - assert.equal(c.net, null); - assert.equal(c.expected, 6.17); +test('xvbDecisionRows: study band prices the measured delivery into the net verdict', () => { + const rows = xvbDecisionRows(_CALC, 1e-7, 200_000); // whale cost 3.65, vip cost 0.365 + const whale = rows[1]; + assert.equal(whale.mode, 'study'); + assert.ok(Math.abs(whale.cost - 3.65) < 1e-9); + assert.ok(Math.abs(whale.net[0] - (6.17 * 0.27 - 3.65)) < 1e-9); + assert.ok(Math.abs(whale.net[1] - (6.17 * 0.38 - 3.65)) < 1e-9); + assert.equal(whale.cls, 'status-bad'); // even the optimistic end loses + assert.equal(whale.sustainable, true); + assert.ok(Math.abs(whale.oddsPer30d - 25.2) < 1e-9); +}); + +test('xvbDecisionRows: a wallet\'s own measured wins supersede the study band', () => { + const calc = structuredClone(_CALC); + calc.realization_pct = 32; calc.realization_wins = 9; + calc.tiers[1].realized_reward_year = 6.17 * 0.32; + const whale = xvbDecisionRows(calc, 1e-7, 200_000)[1]; + assert.equal(whale.mode, 'yours'); + assert.ok(Math.abs(whale.net[0] - (6.17 * 0.32 - 3.65)) < 1e-9); + assert.equal(whale.net[0], whale.net[1]); // a point, not a band +}); + +test('xvbDecisionRows: unsustainable tiers are flagged; face-only falls back labeled', () => { + const rows = xvbDecisionRows(_CALC, 1e-7, 20_000); // whale needs 100k > 20k x 0.85 + assert.equal(rows[1].sustainable, false); + assert.equal(rows[0].sustainable, true); + // no band and no measured -> face-value mode, net still computed (component labels it) + const calc = structuredClone(_CALC); + calc.tiers[1].assumed_reward_year_range = null; + const whale = xvbDecisionRows(calc, 1e-7, 200_000)[1]; + assert.equal(whale.mode, 'face'); + assert.ok(Math.abs(whale.net[0] - (6.17 - 3.65)) < 1e-9); +}); + +test('xvbDecisionRows: no coeff (network stats down) -> no cost, no net, never a guess', () => { + const whale = xvbDecisionRows(_CALC, 0, 200_000)[1]; + assert.equal(whale.cost, null); + assert.equal(whale.net, null); + assert.equal(whale.mode, 'none'); + assert.equal(xvbDecisionRows({ enabled: false }, 1e-7, 200_000).length, 0); }); - test('formatXmr: precision scales with magnitude; "—" for null/invalid', () => { assert.equal(formatXmr(2.5), '2.5000 XMR'); // >= 1 -> 4 dp assert.equal(formatXmr(0.1234567), '0.123457 XMR'); // >= 0.001 -> 6 dp @@ -406,6 +435,7 @@ const _heroState = (over = {}) => ({ shares_window: { count: 5, ok: true, ...over.shares_window }, raffle_eligible: { applies: true, eligible: true, label: 'Yes', ...over.raffle_eligible }, pool: { blocks: 42, ...over.pool }, + xvb_calc: 'xvb_calc' in over ? over.xvb_calc : { enabled: true }, }); const _byLabel = (state) => Object.fromEntries(heroKpis(state).map((k) => [k.label, k])); @@ -416,6 +446,19 @@ test('heroKpis: surfaces the six headline numbers under stable labels, in order' ); }); +test('heroKpis: the raffle slots vanish while XvB is disabled — no N/A dead weight', () => { + // The mode badge says XvB is off, once; the band should not repeat it as two empty KPIs. + assert.deepEqual( + heroKpis(_heroState({ xvb_calc: { enabled: false } })).map((k) => k.label), + ['Total Hashrate', 'Shares in Window', 'Blocks Found', 'Mining Mode'], + ); + // A payload without the section at all (old server) behaves like disabled — never a crash. + assert.deepEqual( + heroKpis(_heroState({ xvb_calc: undefined })).map((k) => k.label), + ['Total Hashrate', 'Shares in Window', 'Blocks Found', 'Mining Mode'], + ); +}); + test('heroKpis: wires each KPI to its build_state field', () => { const k = _byLabel(_heroState()); assert.equal(k['Total Hashrate'].value, '10.50 kH/s'); // hashrate.total diff --git a/build/dashboard/tests/service/test_algo_service.py b/build/dashboard/tests/service/test_algo_service.py index 18814d40..e1f29604 100644 --- a/build/dashboard/tests/service/test_algo_service.py +++ b/build/dashboard/tests/service/test_algo_service.py @@ -519,6 +519,50 @@ async def test_xvb_tor_opt_out_no_socks5(self, algo): assert all("socks5" not in p for p in pools) +class TestDwellCatchUpCap: + """#898: the under-tier catch-up must chase the ACHIEVABLE donation (stable_hr x cap), not + the raw tier target — an unreachable explicit target otherwise ends every p2pool dwell at + its first check tick and the cap never binds (measured live: ~94% routed under a 0.65 cap).""" + + def _fresh(self, avg_1h): + return {"avg_1h": avg_1h, "avg_24h": avg_1h, "last_update": time.time()} + + def test_unreachable_target_does_not_end_dwell_once_cap_is_met(self, algo): + # mega target on a 268k fleet with cap 0.65: achievable = 174.2k. Credited 200k is + # under the 1M target but ABOVE achievable — the dwell must run its course. + algo.donation_level = "mega" + algo.max_donation_fraction = 0.65 + with patch.object(algo, "get_decision", return_value=("SPLIT", 1000)): + assert ( + algo._dwell_should_end("SPLIT", 268_000, 268_000, {}, {}, self._fresh(200_000), []) + is False + ) + + def test_catch_up_still_fires_below_the_achievable_ceiling(self, algo): + algo.donation_level = "mega" + algo.max_donation_fraction = 0.65 + with patch.object(algo, "get_decision", return_value=("SPLIT", 1000)): + assert ( + algo._dwell_should_end("SPLIT", 268_000, 268_000, {}, {}, self._fresh(150_000), []) + is True + ) + + def test_reachable_target_keeps_the_original_behaviour(self, algo): + # whale on the same fleet: target 100k < achievable 174.2k — the raw-tier comparison + # is unchanged (under 100k ends the dwell, above it does not). + algo.donation_level = "whale" + algo.max_donation_fraction = 0.65 + with patch.object(algo, "get_decision", return_value=("SPLIT", 1000)): + assert ( + algo._dwell_should_end("SPLIT", 268_000, 268_000, {}, {}, self._fresh(90_000), []) + is True + ) + assert ( + algo._dwell_should_end("SPLIT", 268_000, 268_000, {}, {}, self._fresh(105_000), []) + is False + ) + + class TestSmartSleep: LATEST = {"total_live_h15": 15_000, "total_live_h10": 15_000, "pool": {}, "shares": []} diff --git a/build/dashboard/tests/service/test_data_service.py b/build/dashboard/tests/service/test_data_service.py index a1a17a8f..10ff492c 100644 --- a/build/dashboard/tests/service/test_data_service.py +++ b/build/dashboard/tests/service/test_data_service.py @@ -1727,6 +1727,11 @@ class TestXvbWinnersSync: — and additionally does NOT stamp the gate, so a failure retries on the next eligible poll.""" _WIN = {"ts": 1000.0, "hashrate": 4.2e6, "height": 100, "block_id": "aa11", "tier": "donor"} + # get_recent_wins' one-fetch-two-parses shape (#866): wins + the all-rounds aggregate. + _STATS = {"types": {"donor": {"rounds": 4, "players_avg": 70.0}}, "span_days": 4.0} + + def _fetch(self, wins, stats=None): + return {"wins": wins, "round_stats": stats if stats is not None else self._STATS} def _svc(self): sm = MagicMock() @@ -1736,29 +1741,43 @@ def _svc(self): async def test_successful_fetch_persists_wins(self): svc, sm, xvb = self._svc() - xvb.get_recent_wins.return_value = [self._WIN] + xvb.get_recent_wins.return_value = self._fetch([self._WIN]) await svc._sync_xvb_winners() sm.add_raffle_wins.assert_called_once_with([self._WIN]) + # The same fetched body also refreshes the all-rounds aggregate (#866). + sm.set_xvb_round_stats.assert_called_once_with(self._STATS) assert svc._last_xvb_winners_sync > 0 # gate stamped on success + async def test_unparseable_round_stats_do_not_overwrite_the_cached_aggregate(self): + # A file that yields wins but no round aggregate (format drift) must not blank the + # cache — the stale-by-last_update rule owns degradation, never an empty-implied-fresh. + svc, sm, xvb = self._svc() + xvb.get_recent_wins.return_value = self._fetch( + [self._WIN], stats={"types": {}, "span_days": 0.0} + ) + await svc._sync_xvb_winners() + sm.set_xvb_round_stats.assert_not_called() + sm.add_raffle_wins.assert_called_once_with([self._WIN]) + async def test_failed_fetch_writes_nothing_and_leaves_the_gate_open(self): svc, sm, xvb = self._svc() xvb.get_recent_wins.return_value = None await svc._sync_xvb_winners() sm.add_raffle_wins.assert_not_called() + sm.set_xvb_round_stats.assert_not_called() # Gate NOT stamped: the next eligible poll retries instead of waiting out 30 min. assert svc._last_xvb_winners_sync == 0.0 async def test_wallclock_gate_suppresses_a_too_soon_second_fetch(self): svc, sm, xvb = self._svc() - xvb.get_recent_wins.return_value = [] + xvb.get_recent_wins.return_value = self._fetch([]) await svc._sync_xvb_winners() await svc._sync_xvb_winners() assert xvb.get_recent_wins.call_count == 1 async def test_gate_reopens_once_the_cadence_elapses(self): svc, sm, xvb = self._svc() - xvb.get_recent_wins.return_value = [] + xvb.get_recent_wins.return_value = self._fetch([]) await svc._sync_xvb_winners() svc._last_xvb_winners_sync -= 1801 # simulate 30+ minutes having passed await svc._sync_xvb_winners() @@ -1774,7 +1793,7 @@ async def test_a_new_win_round_trips_through_real_storage(self): svc = DataService(sm, MagicMock(), MagicMock()) svc.alert_service = AsyncMock() try: - svc.xvb_client.get_recent_wins.return_value = [self._WIN] + svc.xvb_client.get_recent_wins.return_value = self._fetch([self._WIN]) await svc._sync_xvb_winners() rows = sm.get_raffle_wins() assert len(rows) == 1 diff --git a/build/dashboard/tests/service/test_storage_service.py b/build/dashboard/tests/service/test_storage_service.py index 641ae0af..b3e9e602 100644 --- a/build/dashboard/tests/service/test_storage_service.py +++ b/build/dashboard/tests/service/test_storage_service.py @@ -117,6 +117,17 @@ def test_set_reward_estimates_stamps_last_update_and_copies(self, state_manager) got["estimates"]["donor"] = 99 assert state_manager.get_xvb_reward_estimates()["estimates"]["donor"] == 0.06 + def test_round_stats_default_empty_then_set_stamps_and_copies(self, state_manager): + # #866: same memory-only, stamp-on-genuine-fetch, copy-out contract as the estimates. + assert state_manager.get_xvb_round_stats() == {"stats": {}, "last_update": 0.0} + stats = {"types": {"donor_whale": {"rounds": 62, "players_avg": 9.8}}, "span_days": 7.0} + state_manager.set_xvb_round_stats(stats) + got = state_manager.get_xvb_round_stats() + assert got["stats"] == stats + assert got["last_update"] > 0.0 + got["stats"]["span_days"] = 99 + assert state_manager.get_xvb_round_stats()["stats"]["span_days"] == 7.0 + def test_local_only_writes_do_not_set_last_update(self, state_manager): # The algo controller writes mode / donation_fraction / fail_count every cycle; none is an # xmrvsbeast.com fetch, so the "Updated" freshness timestamp must NOT bump on them (#136) — diff --git a/build/dashboard/tests/web/test_views.py b/build/dashboard/tests/web/test_views.py index 9ffabf69..88700e64 100644 --- a/build/dashboard/tests/web/test_views.py +++ b/build/dashboard/tests/web/test_views.py @@ -59,6 +59,8 @@ rigforge_update_for, visible_update, xvb_current_tier_reward_day, + xvb_expected_wins_day, + xvb_realization, ) # --- Metrics fixtures for the presentation builders ----------------------------------- @@ -1858,6 +1860,176 @@ def test_frontend_fixture_carries_every_payload_key(self): ) +# --- XvB honest economics: forecast win rate + measured realization (#866/#872) ------- + + +_WINS_TIERS = {"donor": 1_000.0, "donor_vip": 10_000.0, "donor_whale": 100_000.0} +_WINS_STATS = { + "stats": { + "types": { + "donor": {"rounds": 7, "players_avg": 70.0}, + "donor_vip": {"rounds": 28, "players_avg": 28.0}, + "donor_whale": {"rounds": 56, "players_avg": 8.0}, + }, + "span_days": 7.0, + }, + "last_update": None, # set fresh per test +} + + +def _round_state(stale=False): + ts = time.time() - (XVB_STATS_STALE_AFTER_S + 1 if stale else 0) + return {**_WINS_STATS, "last_update": ts} + + +class TestXvbExpectedWinsDay: + def test_sums_every_donor_round_type_the_held_tier_qualifies_for(self): + # A whale qualifier also plays the vip and donor rounds beneath it: the forecast is the + # sum of each round type's frequency ÷ its qualifier count, not the whale rounds alone. + out = xvb_expected_wins_day(_round_state(), "donor_whale", _WINS_TIERS) + assert out == pytest.approx((56 / 7.0) / 8.0 + (28 / 7.0) / 28.0 + (7 / 7.0) / 70.0) + # A donor-tier fleet only plays the donor rounds. + assert xvb_expected_wins_day(_round_state(), "donor", _WINS_TIERS) == pytest.approx( + (7 / 7.0) / 70.0 + ) + + def test_missing_stale_or_empty_aggregate_yields_none(self): + assert xvb_expected_wins_day(None, "donor_whale", _WINS_TIERS) is None + assert xvb_expected_wins_day(_round_state(stale=True), "donor_whale", _WINS_TIERS) is None + empty = {"stats": {"types": {}, "span_days": 0.0}, "last_update": time.time()} + assert xvb_expected_wins_day(empty, "donor_whale", _WINS_TIERS) is None + assert xvb_expected_wins_day(_round_state(), None, _WINS_TIERS) is None + + +_REALIZATION_NOW = 1_760_000_000 + + +class TestXvbForecastTierKey: + def test_held_tier_wins_over_target(self): + m = _metrics(xvb_1h=100_000.0, xvb_24h=100_000.0, target_threshold=10_000.0) + assert views.xvb_forecast_tier_key(m, _WINS_TIERS) == "donor_whale" + + def test_falls_back_to_the_target_tier_while_none_is_held(self): + # A fleet still ramping (or weighing whether to enable donation at all) has zero credited + # average — the forecast speaks to the TARGET tier instead of dashing out (#866). + m = _metrics(xvb_1h=0.0, xvb_24h=0.0, target_threshold=1_000.0) + assert views.xvb_forecast_tier_key(m, _WINS_TIERS) == "donor" + + def test_none_when_neither_held_nor_targeted(self): + m = _metrics(xvb_1h=0.0, xvb_24h=0.0, target_threshold=0.0) + assert views.xvb_forecast_tier_key(m, _WINS_TIERS) is None + # A target threshold matching no tier (drifted config) stays None, never a KeyError. + m = _metrics(xvb_1h=0.0, xvb_24h=0.0, target_threshold=123.0) + assert views.xvb_forecast_tier_key(m, _WINS_TIERS) is None + + +class TestXvbRealization: + NOW = _REALIZATION_NOW + # 6 settled wins, hourly; face value 0.016 XMR/day at 1 expected win/day => 16 mXMR face/win. + WINS = [{"ts": _REALIZATION_NOW - 86_400 - i * 3_600} for i in range(6)] + + def _payouts(self, per_win_atomic): + # One payout landing 30 min after each win — squarely inside the attribution window. + return [{"ts": w["ts"] + 1_800, "amount_atomic": per_win_atomic} for w in self.WINS] + + def test_measures_the_fraction_of_face_value_wins_actually_paid(self): + # 3.2 mXMR realized per win against a 16 mXMR face => 0.2, with the sample size. + out = xvb_realization(self._payouts(3_200_000_000), self.WINS, 0.016, 1.0, now=self.NOW) + assert out == (pytest.approx(0.2), 6) + + def test_clamps_at_face_value_and_floors_at_zero(self): + # A lucky window can overshoot face value — the factor is a discount, never a bonus. + out = xvb_realization(self._payouts(32_000_000_000), self.WINS, 0.016, 1.0, now=self.NOW) + assert out[0] == 1.0 + + def test_too_few_wins_is_none_not_noise(self): + out = xvb_realization(self._payouts(3_200_000_000), self.WINS[:4], 0.016, 1.0, now=self.NOW) + assert out is None + + def test_unsettled_wins_are_left_out_of_the_sample(self): + # A win still inside the settle window has payouts in flight — counting it would drag + # the factor down for no reason. With it excluded the sample drops below the minimum. + fresh = [{"ts": self.NOW - 600}] + self.WINS[:4] + assert ( + xvb_realization(self._payouts(3_200_000_000), fresh, 0.016, 1.0, now=self.NOW) is None + ) + + def test_a_payout_in_two_overlapping_windows_counts_once(self): + # Back-to-back wins share attribution windows; the payout sum iterates payouts, not + # windows, so an overlapped payout cannot double-count. + payout = {"ts": self.WINS[0]["ts"] + 900, "amount_atomic": 3_200_000_000} + out = xvb_realization([payout], self.WINS, 0.016, 1.0, now=self.NOW) + assert out == (pytest.approx(3.2e-3 / 6 / 0.016), 6) + + def test_missing_inputs_yield_none(self): + assert xvb_realization(None, self.WINS, 0.016, 1.0, now=self.NOW) is None + assert xvb_realization([], self.WINS, 0.016, 1.0, now=self.NOW) is None + assert xvb_realization(self._payouts(1), None, 0.016, 1.0, now=self.NOW) is None + assert xvb_realization(self._payouts(1), self.WINS, None, 1.0, now=self.NOW) is None + assert xvb_realization(self._payouts(1), self.WINS, 0.016, None, now=self.NOW) is None + assert xvb_realization(self._payouts(1), self.WINS, 0.016, 0.0, now=self.NOW) is None + # A hostile/corrupt negative published figure gives a negative face value — no factor. + assert xvb_realization(self._payouts(1), self.WINS, -0.016, 1.0, now=self.NOW) is None + + def test_baseline_subtraction_removes_ordinary_p2pool_leak(self): + # Ordinary P2Pool payouts land inside win windows too; the box's linear rate over the + # windowed hours is subtracted so the factor measures only the wins' excess. Here the + # 4.8 mXMR gross per win contains 1.6 mXMR of baseline (6.4 mXMR/day × 6h): excess + # 3.2 mXMR against a 16 mXMR face => 0.2, not the inflated 0.3. + out = xvb_realization( + self._payouts(4_800_000_000), self.WINS, 0.016, 1.0, now=self.NOW, p2pool_day=0.0064 + ) + assert out == (pytest.approx(0.2), 6) + + +class TestEarningsVsActualTempering: + NOW = 1_760_000_000 + + def _e(self): + return _summary_earnings( + coeff_day=1e-8, + xvb_day=0.016, + confirmed={"enabled": True, "xmr_30d": 0.28, "partial": {"30d": False}}, + ) + + def test_measured_realization_tempers_the_xvb_leg(self): + # The published leg (0.016 × 30 = 0.48) scales to the measured fraction; the factor and + # its sample ride along for the tooltip. The P2Pool leg is untouched. + s = build_earnings_vs_actual( + _metrics(p2pool_30d=8000.0), self._e(), [], now=self.NOW, realization=(0.19, 15) + ) + assert s["xmr"]["expected_30d"] == pytest.approx(1e-8 * 8000.0 * 30 + 0.016 * 30 * 0.19) + assert s["xmr"]["xvb_realization_pct"] == 19 + assert s["xmr"]["xvb_wins_measured"] == 15 + assert s["xmr"]["includes_xvb"] is True + + def test_without_a_measured_factor_the_published_figure_stands(self): + s = build_earnings_vs_actual(_metrics(p2pool_30d=8000.0), self._e(), [], now=self.NOW) + assert s["xmr"]["expected_30d"] == pytest.approx(1e-8 * 8000.0 * 30 + 0.016 * 30) + assert s["xmr"]["xvb_realization_pct"] is None + assert s["xmr"]["xvb_wins_measured"] is None + + def test_realization_without_an_xvb_leg_is_ignored(self): + # XvB off (or no fresh estimate): there is no leg to temper — the factor must not leak + # into the payload as if one existed. + s = build_earnings_vs_actual( + _metrics(p2pool_30d=8000.0, xvb_enabled=False), + self._e(), + [], + now=self.NOW, + realization=(0.19, 15), + ) + assert s["xmr"]["xvb_realization_pct"] is None + + def test_expected_wins_fill_the_xvb_row(self): + s = build_earnings_vs_actual( + _metrics(p2pool_30d=8000.0), self._e(), [], now=self.NOW, expected_wins_day=0.84 + ) + assert s["xvb"]["expected_wins_30d"] == pytest.approx(25.2) + s = build_earnings_vs_actual(_metrics(p2pool_30d=8000.0), self._e(), [], now=self.NOW) + assert s["xvb"]["expected_wins_30d"] is None + + # --- Host address beside the hostname (Issue #119) ------------------------------------ @@ -2038,12 +2210,29 @@ class TestXvbCalc: # XvB's published per-tier expected rewards, keyed by round-type == tier key (#118). _ESTIMATES = {"donor": 0.06, "donor_vip": 0.81, "donor_whale": 6.17, "donor_mega": 56.9} - def _sm(self, estimates=None, last_update=None): + # All-rounds aggregate from the winners file (#872): frequencies + qualifier counts over + # a one-week span, shaped like parse_round_stats' output. + _ROUND_STATS = { + "types": { + "donor": {"rounds": 7, "players_avg": 70.0}, + "donor_vip": {"rounds": 28, "players_avg": 28.0}, + "donor_whale": {"rounds": 56, "players_avg": 8.0}, + "donor_mega": {"rounds": 63, "players_avg": 1.0}, + }, + "span_days": 7.0, + } + + def _sm(self, estimates=None, last_update=None, round_stats=None, round_ts=None): sm = MagicMock() sm.get_tiers.return_value = self._TIERS est = self._ESTIMATES if estimates is None else estimates ts = time.time() if last_update is None else last_update sm.get_xvb_reward_estimates.return_value = {"estimates": est, "last_update": ts} + stats = self._ROUND_STATS if round_stats is None else round_stats + sm.get_xvb_round_stats.return_value = { + "stats": stats, + "last_update": time.time() if round_ts is None else round_ts, + } return sm def test_disabled_returns_enabled_false_only(self): @@ -2102,6 +2291,57 @@ def test_stale_estimates_flagged_and_reward_nulled(self): assert out["estimates_stale"] is True assert all(t["expected_reward_year"] is None for t in out["tiers"]) + def test_round_stats_expose_per_tier_draw_odds(self): + # #872: the winners file's players column makes the draw knowable — each tier carries its + # OWN round type's frequency ÷ qualifiers (the earnings card's forecast, by contrast, + # sums the lower tiers a qualifier also plays in). + out = build_xvb_calc(_metrics(), self._sm()) + by_threshold = {t["threshold"]: t for t in out["tiers"]} + assert by_threshold[100_000]["win_odds_day"] == pytest.approx((56 / 7.0) / 8.0) + assert by_threshold[100_000]["players_avg"] == 8.0 + # The single-qualifier artifact is self-evident: one Mega player, one win per draw. + assert by_threshold[1_000_000]["players_avg"] == 1.0 + + def test_stale_or_missing_round_stats_null_the_odds(self): + stale = self._sm(round_ts=time.time() - XVB_STATS_STALE_AFTER_S - 1) + assert all(t["win_odds_day"] is None for t in build_xvb_calc(_metrics(), stale)["tiers"]) + empty = self._sm(round_stats={"types": {}, "span_days": 0.0}, round_ts=0.0) + assert all(t["win_odds_day"] is None for t in build_xvb_calc(_metrics(), empty)["tiers"]) + + def test_realization_scales_published_rewards_into_realized(self): + # #872: with a measured factor, every tier carries published × factor — the figure whose + # net can honestly be acted on — plus the factor and its sample size for the label. + out = build_xvb_calc(_metrics(), self._sm(), realization=(0.19, 15)) + by_threshold = {t["threshold"]: t for t in out["tiers"]} + assert by_threshold[100_000]["realized_reward_year"] == pytest.approx(6.17 * 0.19) + assert out["realization_pct"] == 19 + assert out["realization_wins"] == 15 + + def test_unmeasured_boxes_get_the_prior_band_measured_boxes_do_not(self): + # #872: no local measurement -> published × the measured prior band, so "should I enable + # this" is answerable everywhere. A measured factor supersedes it (never both), and stale + # estimates null both — a band cannot resurrect a stale face value. + out = build_xvb_calc(_metrics(), self._sm()) + whale = next(t for t in out["tiers"] if t["threshold"] == 100_000) + lo, hi = views.XVB_REALIZATION_PRIOR + assert whale["assumed_reward_year_range"] == pytest.approx([6.17 * lo, 6.17 * hi]) + out = build_xvb_calc(_metrics(), self._sm(), realization=(0.19, 15)) + assert all(t["assumed_reward_year_range"] is None for t in out["tiers"]) + stale = self._sm(last_update=time.time() - XVB_STATS_STALE_AFTER_S - 1) + out = build_xvb_calc(_metrics(), stale) + assert all(t["assumed_reward_year_range"] is None for t in out["tiers"]) + + def test_no_realization_leaves_realized_none(self): + # Unmeasured (too few wins / payout confirmation off): realized stays None so the client + # falls back to face value AND says so — never a fabricated factor. + out = build_xvb_calc(_metrics(), self._sm()) + assert all(t["realized_reward_year"] is None for t in out["tiers"]) + assert out["realization_pct"] is None + # Stale estimates null realized too — a factor cannot resurrect a stale face value. + sm = self._sm(last_update=time.time() - XVB_STATS_STALE_AFTER_S - 1) + out = build_xvb_calc(_metrics(), sm, realization=(0.5, 9)) + assert all(t["realized_reward_year"] is None for t in out["tiers"]) + def test_empty_estimates_available_false_no_crash(self): # Never fetched / unparseable cache: available False, not "stale" (last_update 0), rewards None. sm = self._sm(estimates={}, last_update=0.0) @@ -2167,6 +2407,7 @@ def _state_mgr( sm.get_xvb_stats.return_value = {"current_mode": mode} sm.get_tiers.return_value = {} sm.get_xvb_reward_estimates.return_value = {"estimates": {}, "last_update": 0.0} + sm.get_xvb_round_stats.return_value = {"stats": {}, "last_update": 0.0} sm.get_share_stats.return_value = share_stats or [] sm.get_raffle_wins.return_value = [] sm.get_xvb_standby.return_value = None # no backup standby held (#249) diff --git a/build/dashboard/uv.lock b/build/dashboard/uv.lock index 821f65bf..775437f3 100644 --- a/build/dashboard/uv.lock +++ b/build/dashboard/uv.lock @@ -419,7 +419,7 @@ toml = [ [[package]] name = "diff-cover" -version = "10.4.1" +version = "10.5.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "chardet" }, @@ -427,9 +427,9 @@ dependencies = [ { name = "pluggy" }, { name = "pygments" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/85/f9/9f49b333bd03e9bbc1bcc3cde14b4927239195f374cb88e8f4aee57550be/diff_cover-10.4.1.tar.gz", hash = "sha256:0ec566955c9ee7da2f6cc48fa16fac7f97ad1fc4e50a887ffb9cfe5eb1e831df", size = 108279, upload-time = "2026-07-24T03:58:08.376Z" } +sdist = { url = "https://files.pythonhosted.org/packages/35/c7/b2883d341261dfa1cdc4386929e967ff4af9c201405f6f72275abefd5f2a/diff_cover-10.5.0.tar.gz", hash = "sha256:a1734543baaaa7d0860a6526016d487be24a0ffe9efb4eca0824c391d4a09d06", size = 110762, upload-time = "2026-08-08T17:25:19.494Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f5/71/bce893908031195b86a8222ac46ebf689c69b0ca10670c1893c56eb87d77/diff_cover-10.4.1-py3-none-any.whl", hash = "sha256:dc8f2654c485ec4f16e679b5af6e205783cde71185d4ceb8157662dca2d531e9", size = 59875, upload-time = "2026-07-24T03:58:07.163Z" }, + { url = "https://files.pythonhosted.org/packages/63/c8/5345dfb7c955639454fffc767c3eaf9863d79a1cdb0081392a71102fedfa/diff_cover-10.5.0-py3-none-any.whl", hash = "sha256:5619f924e838b8f8c4c7b243b32a6068d8c449c1766c6f6a1110b152195ed9b9", size = 61184, upload-time = "2026-08-08T17:25:18.337Z" }, ] [[package]] @@ -608,67 +608,67 @@ wheels = [ [[package]] name = "hypothesis" -version = "6.163.0" +version = "6.165.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "sortedcontainers" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/61/08/4cbfa0327e9df00f57fc67f91847add2f0dd6c23408935273b095ee9a9f1/hypothesis-6.163.0.tar.gz", hash = "sha256:520480d4bd3a17557616c25923640953e360332c89d012fffcebd69857e674a9", size = 490145, upload-time = "2026-07-28T07:16:46.026Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ea/73/fc3743243603dc49911a1ec073a3a524ea8e1c7d48218d3c2a3faa9a8709/hypothesis-6.165.2.tar.gz", hash = "sha256:680a1adf523ac792b46064f425b112ce6c08a7a8f50e65d08e029de6aa11df95", size = 502277, upload-time = "2026-08-05T21:32:43.713Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/89/b1/3eea7a422de342bd0095a9672c3e03fe0466e4561a55499a1e01b4a9f098/hypothesis-6.163.0-cp310-abi3-macosx_10_12_x86_64.whl", hash = "sha256:331906cb029b6b360b8ebac3ec00c3cfa720037fe2efb294a503a1979c9a9a8f", size = 769898, upload-time = "2026-07-28T07:15:19.323Z" }, - { url = "https://files.pythonhosted.org/packages/bc/24/45b5c948c76c16ecf1e4ad1ca4a4a3fce55b3317ee172bc8230ff2956ae1/hypothesis-6.163.0-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:b4ad2134405d5345434c22dea96bbc12c85abcfc3c253a8063dbc9ff01164555", size = 765438, upload-time = "2026-07-28T07:16:04.69Z" }, - { url = "https://files.pythonhosted.org/packages/0f/72/7725039a75b3679dc445a169026b11860a0e67a600c4ffed49a42040a000/hypothesis-6.163.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50073f8e63c1e7d3403899755657a990d8bba7b5b5bff66b1c56796d4969bb28", size = 1094699, upload-time = "2026-07-28T07:15:56.668Z" }, - { url = "https://files.pythonhosted.org/packages/dd/fa/bcfa3879f303a302ec6e5f4d35b583924867a0821b42fa275f440f3b8dab/hypothesis-6.163.0-cp310-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8c5d1e6bad47edf6fb1d7406cf6d67314ac08325c63a49550d782a4596ea302b", size = 1123315, upload-time = "2026-07-28T07:16:40.381Z" }, - { url = "https://files.pythonhosted.org/packages/5f/7f/e7fe2f0658db5182bb1d4b266d17f8f81cf3db82eeba27677ddfea13ac09/hypothesis-6.163.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ec3b709508ccd835d8ded1db025b7800618f2289a22a6bfd4927da5f4eb33c", size = 1144220, upload-time = "2026-07-28T07:15:20.617Z" }, - { url = "https://files.pythonhosted.org/packages/90/14/c26f93a4693bfd83d7ba14b7043d986458026f6635d1b157bc2f1c56a59e/hypothesis-6.163.0-cp310-abi3-manylinux_2_31_riscv64.whl", hash = "sha256:7cb3d927360fe73f9a06d646e6082237142ee39c24679c7133d22bf06dd03b45", size = 1099527, upload-time = "2026-07-28T07:16:17.955Z" }, - { url = "https://files.pythonhosted.org/packages/ea/f5/4c1dde28d2e18e169dd6c471ef4bcf12abf3c6a3f4a1744bdabdbdf411ba/hypothesis-6.163.0-cp310-abi3-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3f3cceb4720a39127622fbf3bcebe1775b894372c53b5edddfdef10bbdeef9ec", size = 1136272, upload-time = "2026-07-28T07:16:38.182Z" }, - { url = "https://files.pythonhosted.org/packages/3a/5b/54153509ed42cc17e1b65efe34a0c781f42fb04c902dc5f25486c537ec88/hypothesis-6.163.0-cp310-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:59f5fdb8addb44c17520a60d50542d9db6ceba577bbf54efefa9c10ee20be140", size = 1268518, upload-time = "2026-07-28T07:15:42.991Z" }, - { url = "https://files.pythonhosted.org/packages/81/86/f86f0d15d91b9cbff3546c1b8891950b2b08c0527e7494133fb2180e1b8b/hypothesis-6.163.0-cp310-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:f1fe222f50a1898e87a1e7323ab35f9e956278efabe4dd55a1342808206d05ad", size = 1396357, upload-time = "2026-07-28T07:15:26.696Z" }, - { url = "https://files.pythonhosted.org/packages/46/3a/c096b6b272f15e17e8e65c6ccfb2e1d167456ff5bbd9db33dca3185199f6/hypothesis-6.163.0-cp310-abi3-musllinux_1_2_riscv64.whl", hash = "sha256:56ed585baab75cb98462c57ca88bbdc6a9d935a14118dd572fb476c3ecec2a06", size = 1269128, upload-time = "2026-07-28T07:16:11.902Z" }, - { url = "https://files.pythonhosted.org/packages/bb/9f/0807445874b3083a22c9a14a0ffc31bd0060ef3b408ce4cb31c20779cdf8/hypothesis-6.163.0-cp310-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:2849c23b2e0fe2eef4c1ec336b01eac7ad7397c49fca43c264f59ec1e6046eac", size = 1311189, upload-time = "2026-07-28T07:16:08.545Z" }, - { url = "https://files.pythonhosted.org/packages/d6/de/3319aa8fcffd1641defc1c5eea1ad646a33d1b62528ef487a89752bc8079/hypothesis-6.163.0-cp310-abi3-win32.whl", hash = "sha256:b2ddcdaf6691101e06dc4a5add7b8c8fdf1e68daba599255a281f3f3550d3331", size = 655743, upload-time = "2026-07-28T07:16:30.966Z" }, - { url = "https://files.pythonhosted.org/packages/8e/48/36bc72910451e6e88b75e59a6ddbf0db34ff61a3b11c9439801dfd5fec20/hypothesis-6.163.0-cp310-abi3-win_amd64.whl", hash = "sha256:4ab0dadc09c537d4ac57e564039dfe7daf09c98375306d54bfc0fd6c218efcca", size = 661902, upload-time = "2026-07-28T07:16:34.407Z" }, - { url = "https://files.pythonhosted.org/packages/63/80/796ac61dddb3ede550ea127e28e027a57a4ea481581c0bb27701fefd655a/hypothesis-6.163.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:213527755f0fc2b1f3721e73fd60023e2752a48f914e3e2df8d35111956ae5c8", size = 770366, upload-time = "2026-07-28T07:15:22.003Z" }, - { url = "https://files.pythonhosted.org/packages/eb/87/53924f322922bcfc05e40c79d432978333827b335fa9efa5fd1e8cbf3c90/hypothesis-6.163.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ca1b48bde68c528a79dec2a2859e05035802e5b1c9c3579f388c9de6ed6d0148", size = 766150, upload-time = "2026-07-28T07:15:16.151Z" }, - { url = "https://files.pythonhosted.org/packages/f3/fb/b62480e6510052139d7b2a0219d4ae8bd52ccad0ed74db15dd61330a6962/hypothesis-6.163.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7a3db868a943c814cc557104712d43bf609adfe5ea9f708f38377d366b4855f8", size = 1095046, upload-time = "2026-07-28T07:15:45.796Z" }, - { url = "https://files.pythonhosted.org/packages/4d/d7/fa8aac7b47f41d0fe30fa270c5026f37a0c0c60d7b9a1a93dcc8fcfc50ce/hypothesis-6.163.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4159a1c2560e10de51b1c14956e277eb1b37526c9abef9e87c1e531760486448", size = 1144516, upload-time = "2026-07-28T07:16:32.662Z" }, - { url = "https://files.pythonhosted.org/packages/4f/26/c543c76d8a8b8f58f2d7adf0cb42e4928be3464e95f4fa9d7221b42ea9ce/hypothesis-6.163.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ffdda3006a383a48f71a23b4f2b3fae3fe1b09af67925d885985f7ec34d66bcb", size = 1268886, upload-time = "2026-07-28T07:16:36.102Z" }, - { url = "https://files.pythonhosted.org/packages/d9/54/3613ef980cfa60f5c6bfbc533989d6c67b6b5f4e9e638fc6d010a5dd852f/hypothesis-6.163.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3b6cee2afe6c67b31a4a64b63a876e0b020befdc61daabea80f7a0e14f19203a", size = 1311472, upload-time = "2026-07-28T07:16:13.707Z" }, - { url = "https://files.pythonhosted.org/packages/af/0c/cbaebc49fd5807a4b4286dea6e60d5330951e43115d002371bdfc99e70f8/hypothesis-6.163.0-cp311-cp311-win_amd64.whl", hash = "sha256:0a933aca9ebf9daf951d07cf01200c94c321b6ee0b42cc7b67675c9686d914c2", size = 661580, upload-time = "2026-07-28T07:15:32.939Z" }, - { url = "https://files.pythonhosted.org/packages/8f/2c/74e989557efc429b28282cbe754c17fc74495467a72a1c94b5eb734fe374/hypothesis-6.163.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a57352efa938889ea9992667a5014c0fc870d03945de71918574d1cf28276378", size = 771445, upload-time = "2026-07-28T07:16:44.2Z" }, - { url = "https://files.pythonhosted.org/packages/fd/08/3ed2089d8cbeae125ea92879e82b99ea3a8b676c837710019249ccab379f/hypothesis-6.163.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0a0c396244c13805edcb73ff467c4c8178ccefc41c4ef5ed00a68e612fd773e9", size = 763070, upload-time = "2026-07-28T07:15:34.318Z" }, - { url = "https://files.pythonhosted.org/packages/e5/1e/4e85a11f15e8ebd730f3b3e4a5d83653f7da482a4e81fa36958951d89b4a/hypothesis-6.163.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28a6cc1c25a6cc9b6ec079eaabd32ac769994831ecddd57123ce43c9056dcf34", size = 1093500, upload-time = "2026-07-28T07:15:49.539Z" }, - { url = "https://files.pythonhosted.org/packages/1f/29/c4790d2a5e6f48e6be5f868124a0d3c7e1d0102e2ca50503a0718e51289c/hypothesis-6.163.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bd312b15044b1c1a0920a5827a830559b2d1fa380851cedf509f8b835309c5b9", size = 1143541, upload-time = "2026-07-28T07:15:44.393Z" }, - { url = "https://files.pythonhosted.org/packages/da/a8/01b72694e758449e9b530b72ecaf5f3625c80a3968de0d12ee6e784de22e/hypothesis-6.163.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b839dfd1342bb50570cb0c66b80322307cdb468abf14faf5df4dab022bc1b9ce", size = 1266326, upload-time = "2026-07-28T07:15:12.604Z" }, - { url = "https://files.pythonhosted.org/packages/c5/a3/b3997add991e2fc6123b3c8dde3631f9f633db67ba23f5b2567736b50b9e/hypothesis-6.163.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c4f5be1482189c7b0a1dcac269fffe97a7d18cc04ac9a9a4d6613212dd87f38b", size = 1310536, upload-time = "2026-07-28T07:15:17.798Z" }, - { url = "https://files.pythonhosted.org/packages/5d/fe/36f576185d63ee0b4d94ed9564415de08baed4937e785b3695c8dd665c9c/hypothesis-6.163.0-cp312-cp312-win_amd64.whl", hash = "sha256:7ca7b20bf38d51e15f7808b0239791c4792b1709ce0c63093acaff56a09c31e6", size = 659021, upload-time = "2026-07-28T07:15:53.143Z" }, - { url = "https://files.pythonhosted.org/packages/58/69/c474a3fa1c33d9a6e059e820221275d9c60eb10085f6164212c291856157/hypothesis-6.163.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:a16ebce774755a7a652bd44c62101dc914372ed1a98935969624848c9627b4a4", size = 771335, upload-time = "2026-07-28T07:15:14.988Z" }, - { url = "https://files.pythonhosted.org/packages/54/27/8951688de58314780ba0af5bf2675709009dcc1fb568d244f2a03c4de8e9/hypothesis-6.163.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:40dfab6fe6a02a80abef81aebf88e53cd529e3f2f6ba3486b674a67b1f4a3512", size = 763020, upload-time = "2026-07-28T07:15:25.218Z" }, - { url = "https://files.pythonhosted.org/packages/8b/d7/9eb7451400507f4b5c972c81c2bc57d0009597ea37295519a9645963a50e/hypothesis-6.163.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f28ad27193c1fbcfb52ef2ee63d2b721563525089e80962b4268b306dac45507", size = 1093415, upload-time = "2026-07-28T07:16:27.408Z" }, - { url = "https://files.pythonhosted.org/packages/24/cc/c12c780676c7a4a4051d05e7b278a94bf1bb496ef31882881160f16866c9/hypothesis-6.163.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8aac96db8a6c7ee43aba2ee0d3c43893da1fb7c38ed54790c1be2b6d8fd87b96", size = 1143356, upload-time = "2026-07-28T07:16:01.571Z" }, - { url = "https://files.pythonhosted.org/packages/4b/c1/61c5ebdb77a3f259803e60a12f56de35f8b6d641a6219f798dcfa69dece3/hypothesis-6.163.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9d23f0f3a14bb6e6f99c793d340196dba4af95ba25bfcab624d1794f540f5e27", size = 1266375, upload-time = "2026-07-28T07:15:11.353Z" }, - { url = "https://files.pythonhosted.org/packages/a2/53/f3a89b4d21d89098d1dec749632aa0fece04f5d17a9e7e91c7f10596d55a/hypothesis-6.163.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b123b4995a7612f1130e2b2362c9a5d0568df887bf7e7bdb45c23af8cd5423c9", size = 1310257, upload-time = "2026-07-28T07:16:42.213Z" }, - { url = "https://files.pythonhosted.org/packages/06/e7/88e71c4cec0df68aa7a2fb251083c544f30697bd90fb4b1ed19de493ab81/hypothesis-6.163.0-cp313-cp313-win_amd64.whl", hash = "sha256:b268211e625cd550e361fc387bf1db5deb1e9cae0ce4041116f0a0aafeef7c06", size = 658983, upload-time = "2026-07-28T07:16:10.289Z" }, - { url = "https://files.pythonhosted.org/packages/71/df/e3b2f0419cebcc86bba96a357d7ef37790538ed6b09f3183ae01f1fc3d23/hypothesis-6.163.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:9105c66ea8dbc108adc42058bb7b65bd953f53ee178bf63bf9ebb0cded6c8c96", size = 771564, upload-time = "2026-07-28T07:15:28.017Z" }, - { url = "https://files.pythonhosted.org/packages/f1/f8/a6f75e61ecd983029f8463bf007498155c4ed33114e6931e7aa3fbaf651e/hypothesis-6.163.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:e165f6cc2075059b7c95dac1612bfb25494f72d90f56880e84c288b089f8a896", size = 763164, upload-time = "2026-07-28T07:15:29.973Z" }, - { url = "https://files.pythonhosted.org/packages/5e/07/5193812567f6ca46c1f0cd02dabfd47c85d7c9e3287b8a870fc8150ee462/hypothesis-6.163.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0cba5202f74e7e4cdb676d86f26e8cc1b4fdc88f7f58ba73c8ac45b6b22f3070", size = 1093916, upload-time = "2026-07-28T07:16:25.626Z" }, - { url = "https://files.pythonhosted.org/packages/e4/0c/9d61f0e306499d734dc63ebe374b01c5f50be7072fd5e76eed25cc0b86ac/hypothesis-6.163.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7f706df6839dcc53f20833f2933cbcd126fd2fdee7c312e053de49df4b64e44", size = 1143547, upload-time = "2026-07-28T07:15:07.311Z" }, - { url = "https://files.pythonhosted.org/packages/60/b4/2a9eb04c9847ddf7e6b30bba8bc27b7efe5511d368335b6a41657b3f02dd/hypothesis-6.163.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:487ab8ec2f01a225d6a1e2ceadc5290cde2c691952bd2e7f76199cf82e06fb25", size = 1266755, upload-time = "2026-07-28T07:15:41.457Z" }, - { url = "https://files.pythonhosted.org/packages/d2/f3/8d1903fbfcbf48b90bb5590826821afc9b4fc494391ab1fdfab9df23e928/hypothesis-6.163.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6ae63dec6d1d467b7f4737455f81a7a82f14a41c14510937fcfbc726a085b5f8", size = 1310560, upload-time = "2026-07-28T07:15:58.419Z" }, - { url = "https://files.pythonhosted.org/packages/47/2b/1a8c0457b44775d0aad369f21cbae8026b772a71aa917d1b956b7349b2a4/hypothesis-6.163.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl", hash = "sha256:31dc46c48aa53c3ec92d03120978ca7f19b9cf96d195ed3fc93503f1433c94a6", size = 603067, upload-time = "2026-07-28T07:16:06.697Z" }, - { url = "https://files.pythonhosted.org/packages/10/56/a9cd947064043035457dec0124ac2437ca72acf358b30cf203a229ad831b/hypothesis-6.163.0-cp314-cp314-win_amd64.whl", hash = "sha256:320b076bf6436f971f1c73ee651e60001226d1b4e341f2c4a1ca87248261ca03", size = 658931, upload-time = "2026-07-28T07:15:37.174Z" }, - { url = "https://files.pythonhosted.org/packages/77/37/2d16317fda0ecd915cb094be9a9e8911106e693ed03a4d680de314711854/hypothesis-6.163.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:ab34c61d9249f1a8129cb4276062c04e3e47b5be8de6446e7c7fe11362d6fe43", size = 770142, upload-time = "2026-07-28T07:16:21.827Z" }, - { url = "https://files.pythonhosted.org/packages/3f/65/d80a9bfb7868f2c6c072a684993548391c56e0afa1972f79ee1fe168d91b/hypothesis-6.163.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:f2f1b67a48da86d3e41c9445367b49a49f7efdb60fc8b5e3593f05e6afb2efbe", size = 761694, upload-time = "2026-07-28T07:15:31.36Z" }, - { url = "https://files.pythonhosted.org/packages/a7/01/c1f2515c638d2637300bb2fd6af129319eae75cdf2ed7804644535f64fb2/hypothesis-6.163.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c084749c115ea7918cf7efa144682783da17eec70d1276689182b871126e715", size = 1092511, upload-time = "2026-07-28T07:15:51.503Z" }, - { url = "https://files.pythonhosted.org/packages/cd/f8/b3cd946308b5a09e52b075792610da310c0b7972bb1e8aa673400b86540c/hypothesis-6.163.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21e72e8d5818e5ef8cd6a2191c386e3fd1a6d9e3739cf97289b4d9b5dbc8e38d", size = 1142425, upload-time = "2026-07-28T07:16:15.626Z" }, - { url = "https://files.pythonhosted.org/packages/85/96/b122859e6f7335b54aff759f573a813158d2249488450a75e76462ddaf61/hypothesis-6.163.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:5a3ac6c62d49f7fe518dfe7fa924fa03aac839993702207802b0e45f9e1b0dab", size = 1264946, upload-time = "2026-07-28T07:15:23.848Z" }, - { url = "https://files.pythonhosted.org/packages/ba/2e/e0226e8c904b8b4788eb52dacd303c91acbd260904abf64e8f9bad03c88a/hypothesis-6.163.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:e568a3d766b7ba8df00e0c33efc4c6530cde14fbc72daabe4824eed211ed7596", size = 1309320, upload-time = "2026-07-28T07:16:29.218Z" }, - { url = "https://files.pythonhosted.org/packages/8c/48/e8bd29fed17c9608524b6a39db4a27b6eec7ce85bda78bba3ee0deebd80e/hypothesis-6.163.0-cp314-cp314t-win_amd64.whl", hash = "sha256:b8f22fb8218ba6a452bf9000fc656e1ed57625d17cc8a3871a0fcea3b1b69ebf", size = 659064, upload-time = "2026-07-28T07:16:00.075Z" }, - { url = "https://files.pythonhosted.org/packages/39/db/d4e877b8639bbebedeff4a0511f5fc459c06a31d79a79bf75584eddda8da/hypothesis-6.163.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:002a9709345892279fb0e81b5a05b72d08cfe81f937339827be0d588607ca9b0", size = 771252, upload-time = "2026-07-28T07:15:08.694Z" }, - { url = "https://files.pythonhosted.org/packages/ea/28/3492490e997e5c8c9244a56728a623ca817577af3462fca5d1def060a066/hypothesis-6.163.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:52f16840add2eb02c2416f3b83cec4f527b6c19699f2d31eff4859233c715526", size = 767161, upload-time = "2026-07-28T07:15:54.972Z" }, - { url = "https://files.pythonhosted.org/packages/51/73/37a4d4a6f3f0789fb2fddc851da957075fbe223706d1148ccc4dda825171/hypothesis-6.163.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:34fc895691a2420595506eb17f3a104f2fa9039f013c0770a6cc2743ccaf6fed", size = 1096016, upload-time = "2026-07-28T07:15:09.821Z" }, - { url = "https://files.pythonhosted.org/packages/48/46/20bc7801f8b539334dc0439c28753632a078c96d6732eccf1bd4880644d2/hypothesis-6.163.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ef8954e37c80e0c46e6161eef1c72c71059b95250e620a77bd646f6c7a52a2d", size = 1145797, upload-time = "2026-07-28T07:15:39.864Z" }, - { url = "https://files.pythonhosted.org/packages/94/c2/4d5c8feb78ed86e698d4e0665d3179eb657ae66d3606ffe096d8055aaa82/hypothesis-6.163.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:d0838a28e9943d5b834ebae59b02adda76e2cd1e65caa808104c72102052057d", size = 662696, upload-time = "2026-07-28T07:15:38.519Z" }, + { url = "https://files.pythonhosted.org/packages/5c/63/46c9908fe7bd5ffa5002fa88fe289dfe6d3cea3fad1ab8942fe11f1c8a2b/hypothesis-6.165.2-cp310-abi3-macosx_10_12_x86_64.whl", hash = "sha256:33a7303566e660664f3f02ea1df85f7b966cd6723165c696996cfd8630913b3a", size = 781704, upload-time = "2026-08-05T21:32:03.548Z" }, + { url = "https://files.pythonhosted.org/packages/c5/7f/fdce62542a514f6b33c4fc0a760e6d17bb57602b28cb079b78e55b8ea32d/hypothesis-6.165.2-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:06d8fe4c82a935f67e610c99848360f5caeb04f547c7d7a830a5c74fb96f053a", size = 777243, upload-time = "2026-08-05T21:32:17.546Z" }, + { url = "https://files.pythonhosted.org/packages/9e/c8/39cd922bf3e1ec84977b768d4e8be31ae051e3a6b400b4fdd7ebcddb1eed/hypothesis-6.165.2-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:de2e3f6a6f75c876be481138c6c0802ebe10deef9f13ce1cdd6e0ed21d8e1e28", size = 1106492, upload-time = "2026-08-05T21:31:47.844Z" }, + { url = "https://files.pythonhosted.org/packages/0f/91/7bb502379a8dcc43f2538530c05cf16fd4e386afa587d65cc289484425cf/hypothesis-6.165.2-cp310-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:21668cb5a8a694d45ff4c43f20a8fc577a47467b5102c680a43638b027136368", size = 1135105, upload-time = "2026-08-05T21:31:49.453Z" }, + { url = "https://files.pythonhosted.org/packages/e5/04/4ce8ae1bf78d09d7543ab7037a3beedc7f3d963c7aa04e82842415284689/hypothesis-6.165.2-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eea4ab5cfdd6c6a23a60777559ea06c34868234fff6542ff6125c0250429348e", size = 1156034, upload-time = "2026-08-05T21:31:44.687Z" }, + { url = "https://files.pythonhosted.org/packages/49/de/b074d899f4a04fa8b99a5bbd66f209c1c02bc21f9f87404539b28b99aff0/hypothesis-6.165.2-cp310-abi3-manylinux_2_31_riscv64.whl", hash = "sha256:0a6add02d9b3b73b59f4d69f5b15abbc07113cd335cc140815cec2877e6b496c", size = 1111344, upload-time = "2026-08-05T21:32:27.211Z" }, + { url = "https://files.pythonhosted.org/packages/e8/38/5a8514683a181f82a8ad9f6d084b704fea7a97c9814033939fc493b55fca/hypothesis-6.165.2-cp310-abi3-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:11013896b6a2ed497079558cb9f89e8b3b564f8859782b38f72cfc1dbeca66ad", size = 1148115, upload-time = "2026-08-05T21:31:01.009Z" }, + { url = "https://files.pythonhosted.org/packages/88/c7/08cf7930d8bec7f1df971c948af2ccb5a402d5b8b19b306af655a603b180/hypothesis-6.165.2-cp310-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:4ceabc69a95e761f381663c6452537fde12a2a6e0275e095b6822c0e0f3b1364", size = 1280321, upload-time = "2026-08-05T21:31:14.843Z" }, + { url = "https://files.pythonhosted.org/packages/c5/91/c9ebb7da3b6e06c47aecceb959cf7df6af75025663af543373c5692f97ac/hypothesis-6.165.2-cp310-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:11e1ce261765ffa6acbaf540358426519ca4a5e46b825cf39b429c77c1895689", size = 1408134, upload-time = "2026-08-05T21:31:27.383Z" }, + { url = "https://files.pythonhosted.org/packages/ed/24/13c2fd9f253ba3a92d4aaa61ae45a8b130df57ab5bd6fc481e2aae520e36/hypothesis-6.165.2-cp310-abi3-musllinux_1_2_riscv64.whl", hash = "sha256:b0250099b2e55d72872319918aacc501110a182938a3d56bcae4a999bee5db08", size = 1280884, upload-time = "2026-08-05T21:32:00.188Z" }, + { url = "https://files.pythonhosted.org/packages/6e/fa/2820bdbe0660394544b9e120b03ea7020702d7fa5c76236166de6ababc9d/hypothesis-6.165.2-cp310-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:96d02928d1a0b7d59e39fd8ada75f0b7d0377ff29f91c94109f92fc2dab9af74", size = 1322998, upload-time = "2026-08-05T21:31:24.373Z" }, + { url = "https://files.pythonhosted.org/packages/f0/24/38752794eb821f5c77da08523602003c344f3498fce09f20741cd5b5e29c/hypothesis-6.165.2-cp310-abi3-win32.whl", hash = "sha256:0f2044093c8244d73893e755a7fa53154b7eca57b37e1427d9b0d9948f6c2b3e", size = 667506, upload-time = "2026-08-05T21:32:10.547Z" }, + { url = "https://files.pythonhosted.org/packages/5f/71/b28f714a127017750e450d152aa4fbff51bd144c6840090d28b529b408d3/hypothesis-6.165.2-cp310-abi3-win_amd64.whl", hash = "sha256:2aa30716066e5ee7750e56b8f90cefaf4ed28c12b4b1d66cef40014fd3f95196", size = 673650, upload-time = "2026-08-05T21:31:25.726Z" }, + { url = "https://files.pythonhosted.org/packages/67/43/ba4e9140480326c517e46f6d16fb2efd423a579f4f50ff79d0326226c563/hypothesis-6.165.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:a49889d19484ccfe1977f448a9c0ad27078232a707fa9f9c8667e9d7ffbe792d", size = 782176, upload-time = "2026-08-05T21:32:08.821Z" }, + { url = "https://files.pythonhosted.org/packages/bf/10/f0ed8d6906a959f015bb6140413e5be7965ff50f965478316cc3a7469254/hypothesis-6.165.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:67560ca111bcad4e07dc8390a499d9b5c6b5488bab0b3c801a4c31a02238e199", size = 777969, upload-time = "2026-08-05T21:32:31.397Z" }, + { url = "https://files.pythonhosted.org/packages/8a/1e/137cc1cc254c4b00eb41ddebccf0a33cc2ad99f6bb531e68525c2561c475/hypothesis-6.165.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54e5afbdf7c973ced6984265a7ffbcdd3b072349c6e9f9d92af889a5af8d2a08", size = 1106856, upload-time = "2026-08-05T21:30:59.63Z" }, + { url = "https://files.pythonhosted.org/packages/f2/16/52e37b42dfa7579176aa9c8ada2f94eadcd27659b71c85fb477df0d57ad8/hypothesis-6.165.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3aed6b889f493d75b7f734e931d10dc003d7277af63956f8d2f131326aaf297", size = 1156324, upload-time = "2026-08-05T21:31:51.917Z" }, + { url = "https://files.pythonhosted.org/packages/6c/31/467ccd787de1cd77c9a23b963580bbe0ec00e8163ee0df224b3bfcbc2c94/hypothesis-6.165.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:929e47581a4a20b81a67deecd48f6589151fada7c23a418d8505c4595de14577", size = 1280680, upload-time = "2026-08-05T21:31:32.452Z" }, + { url = "https://files.pythonhosted.org/packages/39/9b/6edfb53334df96a0889978374a115fbc1569ffdef7786fe256ed71aa72a1/hypothesis-6.165.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:020a889e548e81514132fe215cca664ee3961a8d1343262c2aa6ea7e5f31370a", size = 1323331, upload-time = "2026-08-05T21:31:13.393Z" }, + { url = "https://files.pythonhosted.org/packages/67/83/92a460ee8811360b5f95cc547d6f43e632457be0bd1a28e497c84e46fa7a/hypothesis-6.165.2-cp311-cp311-win_amd64.whl", hash = "sha256:1bd8955bd5dd72bb9bd6f7243cef8a2bf8a264e23edbd29eecebe41de9348eb9", size = 673376, upload-time = "2026-08-05T21:31:22.637Z" }, + { url = "https://files.pythonhosted.org/packages/98/81/a9039e7eee38523e2ad13e9e4e70c508f25d4205fb4c6ceb98632547ca82/hypothesis-6.165.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:b24f1b238deb97fda828a939931de3210f5cef21e87fe0b941fafbeb55ead676", size = 783294, upload-time = "2026-08-05T21:31:56.881Z" }, + { url = "https://files.pythonhosted.org/packages/8d/e5/120642320291d8d117a83491d93527149ddbd15e56399274741fc4bd3a9a/hypothesis-6.165.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:306763ce7186e08ee30dba409b320873d1afc54adf76b44c6bf83b5867d17359", size = 774867, upload-time = "2026-08-05T21:32:05.489Z" }, + { url = "https://files.pythonhosted.org/packages/b5/ef/251607eb2446fb44e8faa83e30aa1b6cc281b6eca5d0ecaabe7527e3395d/hypothesis-6.165.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f878ebc5c33e4e8e8a90bd3d7ccc3f3a7370847aa22243536e673047f0f4c37", size = 1105307, upload-time = "2026-08-05T21:31:53.719Z" }, + { url = "https://files.pythonhosted.org/packages/54/f1/de30869d83f00137a664319a4acb0ba8b1a9e2c879afdc12abb1b4c703f7/hypothesis-6.165.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d726513b32cc6407667ac0812fa3517408f933b89b16b6b84f296335eec18432", size = 1155348, upload-time = "2026-08-05T21:31:58.536Z" }, + { url = "https://files.pythonhosted.org/packages/fa/2c/8925c2bddf6e105d947a04511cd5d536eabc8d4ed926518a0d1672ede007/hypothesis-6.165.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a700c0e193707e3b6f1b23f1d5f534896dd9f79bb2a2340582579bad5f5b59a4", size = 1278124, upload-time = "2026-08-05T21:32:14.049Z" }, + { url = "https://files.pythonhosted.org/packages/b9/00/e285e7987e96d74e229fcb94c58dd8e85290966fc2040fbac4b081fc49c9/hypothesis-6.165.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:50d50e313dfff2e79c754b92a4c88c479dd9e102a56c60caa5b3d6263caa1b02", size = 1322340, upload-time = "2026-08-05T21:31:11.671Z" }, + { url = "https://files.pythonhosted.org/packages/51/7a/990e802222b3a88a284a872fc41339e39d8b619e5266aae45ef1c5da231a/hypothesis-6.165.2-cp312-cp312-win_amd64.whl", hash = "sha256:e2493b71a6e75dbd9ab33f8ab3920a6850a7965de55baf9725738a227ef3bfd2", size = 670805, upload-time = "2026-08-05T21:32:19.278Z" }, + { url = "https://files.pythonhosted.org/packages/22/01/add18f19d5e5f084a59709f0dcebf3cb1edeca475ce8a31573dc33891e66/hypothesis-6.165.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:e2bf15d05264ec9da8d55c3843902f906ced5e84fb3da924eafe165697ab4638", size = 783183, upload-time = "2026-08-05T21:31:55.305Z" }, + { url = "https://files.pythonhosted.org/packages/8e/4b/df2e4c24d208518a6a3dab7acabad7f5ec6c5bb0f4d0bf1701d2fb7206ce/hypothesis-6.165.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3748153d4f64d347f8c988dd41fbef3513b66819e73e9209b1c501bf0d716a13", size = 774829, upload-time = "2026-08-05T21:32:01.891Z" }, + { url = "https://files.pythonhosted.org/packages/72/a0/b75a001efbde704ff2188924a4d4bb3cdf7a22924dc51c155115af64858c/hypothesis-6.165.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f689976e0eb578afbe8ce37669cb637f00f7c545ad303412947ee4abe2f29ce6", size = 1105224, upload-time = "2026-08-05T21:32:35.189Z" }, + { url = "https://files.pythonhosted.org/packages/71/f2/4942f510c6441b5d60dc7f0d8d2af74fe444b62d3af565bdf42d9b6b803d/hypothesis-6.165.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7c68a5684b2e2ad3c33500198a6073b3d04493fd7b1ef34937645ad092b797d", size = 1155166, upload-time = "2026-08-05T21:31:46.408Z" }, + { url = "https://files.pythonhosted.org/packages/48/11/405ebff50c6949518d34f487017412d5b8f8ee9239e50ecdfdd99a745f4b/hypothesis-6.165.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b40db922ccb53fb77c68d944748a3eb5b945402967b64093d9ba970d028cf1af", size = 1278170, upload-time = "2026-08-05T21:31:43.116Z" }, + { url = "https://files.pythonhosted.org/packages/73/ff/93ad0f4b55100876604d2c316a8c6e0ee037cb0da925caaa478709e504b0/hypothesis-6.165.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:d2fd48ec969b2dbe1c8e25dc86d199c6820b9222846469449b997f5546383378", size = 1322061, upload-time = "2026-08-05T21:32:07.217Z" }, + { url = "https://files.pythonhosted.org/packages/14/37/14b655c664a957e44c7f59d9498e53d79b55f1b752a1bb38fee9da403e9c/hypothesis-6.165.2-cp313-cp313-win_amd64.whl", hash = "sha256:9cf13225121280036ea5a8ff8babb82ec27a4736aea669bbe0bc9839d254575f", size = 670824, upload-time = "2026-08-05T21:32:21.25Z" }, + { url = "https://files.pythonhosted.org/packages/6f/ce/a2de75f1a12b6670edfca890794daab685a63ab1a2e36f28dc2c4d8e831d/hypothesis-6.165.2-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:66be9b848bdcb29132b18de6f574b89b392024c7de442acb393edaa1540cb548", size = 783398, upload-time = "2026-08-05T21:31:37.916Z" }, + { url = "https://files.pythonhosted.org/packages/02/8b/bf01b5f356f64a8af28be2718674e23ff7c0a4dbc5f476295be624b1a5ad/hypothesis-6.165.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:e51742efe8466cf89e26cb94843db8854bd0673a6d80da7e3d1ff6bd9dc006db", size = 774963, upload-time = "2026-08-05T21:31:10.053Z" }, + { url = "https://files.pythonhosted.org/packages/a8/4b/9ad06c5a5613b6d175a7fd1a518a9732bcc4772c0cb24f6d7e5fd63f7fed/hypothesis-6.165.2-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c648ee54cd734261e1615d80c2ebbd679d6dfbba6ef5aa672354c6ca62b6f446", size = 1105721, upload-time = "2026-08-05T21:32:29.252Z" }, + { url = "https://files.pythonhosted.org/packages/9c/f1/04c8ebe621c8b832106859f9425f91d049a96ccf99c3501f2905f3e1291a/hypothesis-6.165.2-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:032292cbffc0743b2fe4337a30c21ea9703a70a0021d39bf0c3e68bce7baab18", size = 1155349, upload-time = "2026-08-05T21:31:39.636Z" }, + { url = "https://files.pythonhosted.org/packages/6e/23/41fe5e805638dcb6a1b70c147e909d254d9f09db5ade7a3e790c94ec926e/hypothesis-6.165.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:5dc64171b06472f0b6c2e54bdc25687987e560e15133cf52f55d9ef4c747ebe1", size = 1278502, upload-time = "2026-08-05T21:32:23.405Z" }, + { url = "https://files.pythonhosted.org/packages/ce/42/54fdfc954314980d2b0eabbe57ef2960d85f3b1acb95f3326ff931ed349f/hypothesis-6.165.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:8e5a823ba918641af8177c121f122964d471db2ab1d07c1fe229c77b3a5ab7e8", size = 1322379, upload-time = "2026-08-05T21:31:05.39Z" }, + { url = "https://files.pythonhosted.org/packages/68/db/3667633b31b2b423b320fec4b7ac154e74d6b4a122fadd8e06f9d9afbef1/hypothesis-6.165.2-cp314-cp314-pyemscripten_2026_0_wasm32.whl", hash = "sha256:70966ab7dbe0ea9644eaed8324e037f05ac6a8141646b977da9e77813dac6ed7", size = 614909, upload-time = "2026-08-05T21:31:41.464Z" }, + { url = "https://files.pythonhosted.org/packages/2c/d9/0168c0d6ea32c195225b0673ee8cb7b61de6841d62c87d614d26add35770/hypothesis-6.165.2-cp314-cp314-win_amd64.whl", hash = "sha256:a5b913acd896f4f80597dd38966cd13984a1cfd45512498e8cf054aa7c92ffb9", size = 670684, upload-time = "2026-08-05T21:32:37.076Z" }, + { url = "https://files.pythonhosted.org/packages/21/e4/61cea938488b6958f07b8249bf37fcfb2802367e2a6af65afe82b05ca18c/hypothesis-6.165.2-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:6fa46589088966083ce653f908560cdd3330274cfafaaa65d1fb29b5f6681644", size = 781982, upload-time = "2026-08-05T21:32:15.899Z" }, + { url = "https://files.pythonhosted.org/packages/15/73/b4f9ba3e4b988b567d887b0857962e841b227a81a02ea83ae520e2001c31/hypothesis-6.165.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:6b5b922603879b4788447583928eb1cf2e1aafb9ce27f3a7234b7a4557d089a8", size = 773430, upload-time = "2026-08-05T21:31:28.913Z" }, + { url = "https://files.pythonhosted.org/packages/9c/e2/6fb4a2edbc7775dfa4d3950e3537239c6d957eeb6c571275edfd79a2b981/hypothesis-6.165.2-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8ab3a6b5bb3302f7dcd65b07dcdc0ca353c8c151567dffeda826977e765caaf9", size = 1104317, upload-time = "2026-08-05T21:30:57.765Z" }, + { url = "https://files.pythonhosted.org/packages/5d/06/9479b2acc58996ae18300becbaf910d7c542b5054a47ba05c28bdacd08f1/hypothesis-6.165.2-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:09f1c626023b68968d2cc5fe1e31548109f4406d81a2c3017b3de9fdd3a02e7d", size = 1154232, upload-time = "2026-08-05T21:31:30.368Z" }, + { url = "https://files.pythonhosted.org/packages/e3/9b/5b5cfce5445a807d042ca5a1a470606613835842d99488a199d994584cae/hypothesis-6.165.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:5c95808ab851498513192268e25f40bccd1c3719384c91535bbec3eedea39760", size = 1276739, upload-time = "2026-08-05T21:32:12.324Z" }, + { url = "https://files.pythonhosted.org/packages/2e/aa/6a731776ccaee13dba0624a73f01935fa174f39647ad463a495dcb2206a8/hypothesis-6.165.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:4a1c8bec789f21dc10620ce99e15fcd4f7737b9b4cfa571cdd93e01a17b7b06b", size = 1321119, upload-time = "2026-08-05T21:31:21.113Z" }, + { url = "https://files.pythonhosted.org/packages/43/a1/5d2c7c1346a0089908a3974c9e40ce223c22dd291dfe5df69a8c8cc64b98/hypothesis-6.165.2-cp314-cp314t-win_amd64.whl", hash = "sha256:458c891dfc00133bc4ce2e6c9716838f80f2fd96caf306f5eef42ad02aa4d972", size = 670831, upload-time = "2026-08-05T21:31:17.998Z" }, + { url = "https://files.pythonhosted.org/packages/35/51/745695dde335122e447dd8f762ee1c2f44d5f73dd3268a6df7f5d4339c1d/hypothesis-6.165.2-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:210955bdb78ce0e3279fd7ed47fa77fdd9f6004368a099c933c456f4c6ea358f", size = 783104, upload-time = "2026-08-05T21:31:02.564Z" }, + { url = "https://files.pythonhosted.org/packages/a4/8a/26f37eb2265ec3d6d59fcac7d93d554231ad2db7cef4e9e78113fa39ac36/hypothesis-6.165.2-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:024ddf78d150825210b4e41169ad1f3d40f8819bee0304890b851904d9f97541", size = 778956, upload-time = "2026-08-05T21:31:08.731Z" }, + { url = "https://files.pythonhosted.org/packages/0c/ef/72d586c2c5094410569a4e62792f0069dc0b6113979dd7754e80d03a800b/hypothesis-6.165.2-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:49e9aa39b21589e64b25ed8a452014fb546f2533cd5dbc0be16c35f94a4a9f6c", size = 1107828, upload-time = "2026-08-05T21:31:19.457Z" }, + { url = "https://files.pythonhosted.org/packages/38/1b/292fd8f7552d624ed29abab7f17935009cae3de14e50991951a73cff2a25/hypothesis-6.165.2-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:568038c8c9de3b22087fe1536d8d512e23c5a5eca3aa4c692e8fa46592afa267", size = 1157603, upload-time = "2026-08-05T21:32:39.041Z" }, + { url = "https://files.pythonhosted.org/packages/47/10/005eff3fba214bac14df88fdb78502d4990a135b128837dc826b215aa746/hypothesis-6.165.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:5a9c92f193b14bb0e69038cb4b31f3c0c7497cd3f2f43be5bb8a8fb6a036362d", size = 674478, upload-time = "2026-08-05T21:32:41.203Z" }, ] [[package]] @@ -786,7 +786,7 @@ wheels = [ [[package]] name = "mining-dashboard" -version = "1.17.0" +version = "1.18.0" source = { editable = "." } dependencies = [ { name = "aiofiles" }, @@ -815,9 +815,9 @@ test = [ requires-dist = [ { name = "aiofiles", specifier = ">=24.1" }, { name = "aiohttp", specifier = ">=3.14.3" }, - { name = "diff-cover", marker = "extra == 'test'", specifier = ">=10.4.1" }, + { name = "diff-cover", marker = "extra == 'test'", specifier = ">=10.5.0" }, { name = "grpcio", specifier = ">=1.83.0" }, - { name = "hypothesis", marker = "extra == 'test'", specifier = ">=6.163.0" }, + { name = "hypothesis", marker = "extra == 'test'", specifier = ">=6.165.2" }, { name = "pre-commit", marker = "extra == 'dev'", specifier = ">=4.6.1" }, { name = "protobuf", specifier = ">=6.31.1,<7" }, { name = "pytest", marker = "extra == 'test'", specifier = ">=9.1.1" }, @@ -826,7 +826,7 @@ requires-dist = [ { name = "pytest-cov", marker = "extra == 'test'", specifier = ">=5" }, { name = "pytest-mock", marker = "extra == 'test'", specifier = ">=3.14" }, { name = "requests", extras = ["socks"], specifier = ">=2.34.2" }, - { name = "ruff", marker = "extra == 'dev'", specifier = "==0.16.0" }, + { name = "ruff", marker = "extra == 'dev'", specifier = "==0.16.2" }, ] provides-extras = ["test", "dev"] @@ -1302,27 +1302,27 @@ socks = [ [[package]] name = "ruff" -version = "0.16.0" +version = "0.16.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/4d/94/1e5e4967626faf12fa56999cd6222dff6992ceb086ad7945756baf70c7a7/ruff-0.16.0.tar.gz", hash = "sha256:e460aafd5495ec89efaa6ced2e4a9a581116451e1c88b9d37ef497e0f8e93982", size = 4790557, upload-time = "2026-07-23T19:11:30.981Z" } +sdist = { url = "https://files.pythonhosted.org/packages/73/e1/4508a569211b35599016e84ba65c1a992b7a4004b4b6c4bea02a851cba1b/ruff-0.16.2.tar.gz", hash = "sha256:c3d7828d12e8927a6fc65fe38e2c2541b9e762d360a1786d752cb1b8883b3c9c", size = 4885811, upload-time = "2026-08-07T13:31:01.432Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/4b/81/1c8818fee7ce1a04cd7d1b3172e0a8f8e4f1dc4feb7fc390e16daa8af323/ruff-0.16.0-py3-none-linux_armv6l.whl", hash = "sha256:e5115729eb08c585e5121978ba5d5b60caeae394ce21b9fb5e6cd33a1c6c9b1e", size = 10754633, upload-time = "2026-07-23T19:10:46.415Z" }, - { url = "https://files.pythonhosted.org/packages/23/df/beaf59c09d68db84304d555f188b276a77132a5d5b0b67a5c762aa143628/ruff-0.16.0-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:3c954b1d580bfa035b41654f7858cc7e71d5fc3ac5b723dd62bd9133830ed522", size = 10969164, upload-time = "2026-07-23T19:10:50.271Z" }, - { url = "https://files.pythonhosted.org/packages/42/ce/741cd197496a1abbf51352710fd15ed995d2a2be87189c1da26a450d6e83/ruff-0.16.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:e01c21d10eb1b29f47b7454e1f4056db9a3f0260c646aa88457c610291db9f81", size = 10488846, upload-time = "2026-07-23T19:10:52.639Z" }, - { url = "https://files.pythonhosted.org/packages/52/2a/a2db8e88cade358f5cdcb05674a917751074109315d014eb6352d9a893f7/ruff-0.16.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6e364e5ed22ed8dc05082fd78e35308618260907ac2d3c1d637b2e682415b6c9", size = 10889729, upload-time = "2026-07-23T19:10:54.89Z" }, - { url = "https://files.pythonhosted.org/packages/42/65/62a771694ebd63029dc953e27dbad40e1588bd4860ff9fe881018fddaa49/ruff-0.16.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d327b8fc113a1d4421a04f3839d3752057c8dd1ee320223a6f3f52d04ada462a", size = 10568275, upload-time = "2026-07-23T19:10:56.993Z" }, - { url = "https://files.pythonhosted.org/packages/3f/e2/ced249fe8af5f086c5c58cc21cc3356d50f32f7401c5df87050c999620a7/ruff-0.16.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9b50c55e263103586b3dcf5f73d479eb8cb5fdb6098fec59a62891dab653717", size = 11385112, upload-time = "2026-07-23T19:10:59.615Z" }, - { url = "https://files.pythonhosted.org/packages/87/0b/05154977a8fd69eeb6c103271f55403bfd8711f5c0f8ed07489d95a504e7/ruff-0.16.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0ff4a79ce3ec0172f3241943835de1c4cb4e2dcd07f0f8c2d02603dbbbee4b17", size = 12207008, upload-time = "2026-07-23T19:11:02.154Z" }, - { url = "https://files.pythonhosted.org/packages/fb/29/98225831a3a1eab0e02f4acc6ca6559a98611dcc68b6965ff4b7234627c1/ruff-0.16.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e95c448fca1fb2a18372a9440926c5a6ee789639bb975c72e7ae6d0b04218ab4", size = 11650842, upload-time = "2026-07-23T19:11:04.557Z" }, - { url = "https://files.pythonhosted.org/packages/91/66/6bd3cf90500653d55dc0ffc8507aa8300bd49d0214b2e8cb4d3fef2943ba/ruff-0.16.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f11a8d11010301d0a398a2fdef67691feca7294da6aef55e2150e8fa2cd520b", size = 11400718, upload-time = "2026-07-23T19:11:09.233Z" }, - { url = "https://files.pythonhosted.org/packages/8e/a2/a54eb4eae05d66364050a5d3b8a9c5ef88196531b3cbe7109d873f87f819/ruff-0.16.0-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:48044c678e9cb8698246c99b14aaccfa6601dea7379eb48a6f8f73f7a6d86cd0", size = 11426177, upload-time = "2026-07-23T19:11:11.994Z" }, - { url = "https://files.pythonhosted.org/packages/1a/be/16e3eea4b2a478a496919f5e36f17c4559e54620bd3bbac5d6affa068006/ruff-0.16.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:7aa0959bad8eb8bef50340154fc9b58678dae31fa4293afa38b44b6e552c0213", size = 10856126, upload-time = "2026-07-23T19:11:14.221Z" }, - { url = "https://files.pythonhosted.org/packages/a2/84/252eb8b868a16eec7257c14f504f77537e734b2d69c762e639e588e304a3/ruff-0.16.0-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:28ea2b7df8ebf7f9da6b7d47b230ab48f387c0a29be3b474c4d0740e197bb9af", size = 10571208, upload-time = "2026-07-23T19:11:16.378Z" }, - { url = "https://files.pythonhosted.org/packages/21/09/817a482f542f7570cbb4554b26e896610c7114f539b1d9e2d2145bf6bef6/ruff-0.16.0-py3-none-musllinux_1_2_i686.whl", hash = "sha256:33a3dfac8c35f81498dea9181bccc2f4c4bc8f1521a1dd9406e77643e0f0fb09", size = 11063329, upload-time = "2026-07-23T19:11:19.173Z" }, - { url = "https://files.pythonhosted.org/packages/2e/23/9403c180ca1cb9b1f7335f5c3e5305c09d49ea5b345196682a36028bde4a/ruff-0.16.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:a5237a0bda500d30d81b8e07a6973a5cbc772864cbf746ae2f4e8a2e01c9f4ed", size = 11489751, upload-time = "2026-07-23T19:11:21.74Z" }, - { url = "https://files.pythonhosted.org/packages/b2/1d/1b2ef7bcde851c78d7f17f1cca13fd6dc695fc4b3d6197941e72cae5b132/ruff-0.16.0-py3-none-win32.whl", hash = "sha256:7fab76fa065c873f41ff744347c6e77bcc3dfec4bcc754dc26b63d23c0f7f5fb", size = 10785885, upload-time = "2026-07-23T19:11:23.947Z" }, - { url = "https://files.pythonhosted.org/packages/b2/a3/d5e4ef7a56be3f928ffb90b94c25ba7d3cb9c7fe0736aeaaedf361770712/ruff-0.16.0-py3-none-win_amd64.whl", hash = "sha256:429c117f022bf481fabd9d551e7a3952b24c65e6ef44337ea09d90bebef14472", size = 11923141, upload-time = "2026-07-23T19:11:26.409Z" }, - { url = "https://files.pythonhosted.org/packages/cb/9a/8415f2657cbe200f41a4531ccededf135505a92d4a012229121f885b26f9/ruff-0.16.0-py3-none-win_arm64.whl", hash = "sha256:14296fedcd2705c77ab8235439278bbb38f285cf7da5528b00b3e330c3d4872d", size = 11273407, upload-time = "2026-07-23T19:11:28.705Z" }, + { url = "https://files.pythonhosted.org/packages/14/57/db19951540f98859c956b50bdb4d31089b4d91e9f15e2968e7d5193806d5/ruff-0.16.2-py3-none-linux_armv6l.whl", hash = "sha256:3c8de4cf2181f01d57946d87d777aa52916976fc09942aed89938fab5e013318", size = 10847925, upload-time = "2026-08-07T13:30:14.468Z" }, + { url = "https://files.pythonhosted.org/packages/13/5a/995fe85a8470d3e391ac0f7fa8054bb454eaf33ee138196d6172ed1079c0/ruff-0.16.2-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:9a48cc05c6fbc811ca81b5d7ba95375affea6582d1b8024e455e41afbbf55344", size = 11072662, upload-time = "2026-08-07T13:30:18.143Z" }, + { url = "https://files.pythonhosted.org/packages/32/53/370d767c61c71a971a4ace36703a7ecd8c393956349a7325d7fab2b56827/ruff-0.16.2-py3-none-macosx_11_0_arm64.whl", hash = "sha256:a2c0d14fcbb26c91f0f867a6dc9bd71bbc30b1b6151829c884f23faeab2e5700", size = 10566771, upload-time = "2026-08-07T13:30:20.899Z" }, + { url = "https://files.pythonhosted.org/packages/85/d6/9d96948caf5a632be62d62202d5ec914d6856f204fd79eb036e5915e79ea/ruff-0.16.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:335c621622c4650330be50842561c6586ac6971bb8ab5407fe34dcc9efb16bbe", size = 10975825, upload-time = "2026-08-07T13:30:23.517Z" }, + { url = "https://files.pythonhosted.org/packages/3b/92/ea87129b3414acb0b5770563779c51804d37ac67675c7ba35447ddb14773/ruff-0.16.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:20e66910f2c37cc753f9ef6580c914a621b80c4fa3549d3e3521e29d0f5bfc3f", size = 10649437, upload-time = "2026-08-07T13:30:26.097Z" }, + { url = "https://files.pythonhosted.org/packages/ac/43/f8f291dcd4af5bb7872b74fdfa41a7cd7c856ca1d4069670971cf1b9f5cb/ruff-0.16.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c7e36fbfba65510548156902bcf1350a979a958ce0347ce0f90d73894036b39f", size = 11446761, upload-time = "2026-08-07T13:30:28.752Z" }, + { url = "https://files.pythonhosted.org/packages/71/4a/ef991fb2fcf516ab71f0808adcdd8da5e18c8cde447f4ceaf5f47a5132a5/ruff-0.16.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f0eab35f80df8f134aae5d1630e751901321d317cc8e50dc39e36fa3ed34cd12", size = 12336364, upload-time = "2026-08-07T13:30:31.468Z" }, + { url = "https://files.pythonhosted.org/packages/f3/24/f615e74f307e6ca0e56a482872477b856c70d530aa356abfb6dfe5ca8a80/ruff-0.16.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:40ea8c0594feb894e89c8c61ab9c103d38b0ea72dfde6c594107147ca31b1140", size = 11630720, upload-time = "2026-08-07T13:30:34.426Z" }, + { url = "https://files.pythonhosted.org/packages/c5/d3/8ef50149e8412a77f7ab409efdef0e2b23803707a3863da4fc64cb23d459/ruff-0.16.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ab3d62dde0b19facdd632008cc4827fc28ada7736c6bd35ab6f1050f0bfed53f", size = 11466130, upload-time = "2026-08-07T13:30:36.958Z" }, + { url = "https://files.pythonhosted.org/packages/dd/a7/a19334985c4dea8c381981fa252cd854c7ee52dc4b1686dc16f4a911c702/ruff-0.16.2-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:e43e1f5b8388da9eca1b9e88328d47a5cec794633ccf6f7484ac2dd15eee92c0", size = 11523634, upload-time = "2026-08-07T13:30:39.822Z" }, + { url = "https://files.pythonhosted.org/packages/6e/6c/96d192b0e742412ceda08c0a50f9669b253dde9fd6a60ea1a10c9fa79a63/ruff-0.16.2-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:c24788a980581e1d7ea3a0cbe4344c4fbeb0a6a9b1f4713aa46bb104f8294690", size = 10949807, upload-time = "2026-08-07T13:30:42.745Z" }, + { url = "https://files.pythonhosted.org/packages/fa/51/e26599ceca11e79ee255c7df515995561edf87e9ca1893284e44d98f5a86/ruff-0.16.2-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:81806b08329130005dd4a8a8394a0c9da8c6f4cafb16ba438d2a2ee6a18bedf1", size = 10646891, upload-time = "2026-08-07T13:30:45.522Z" }, + { url = "https://files.pythonhosted.org/packages/68/01/800c4b1f97bc8d7c6029e06b1f20473a3cf1e13c4933d8f3342add83fc55/ruff-0.16.2-py3-none-musllinux_1_2_i686.whl", hash = "sha256:4ce4e02bad779bef557f541a1b31f20d6abeae1cc05ed1b1ac019d4ffd1044c8", size = 11162063, upload-time = "2026-08-07T13:30:48.131Z" }, + { url = "https://files.pythonhosted.org/packages/e4/d0/1477ea50fc5a0d4b0b71d1d63d50770bdd794d90b43e37a7618e63ec9894/ruff-0.16.2-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:e0422abdf70070255fc4073ce9dfc814cc03db577013761ddd09bc1e4a9a4fbd", size = 11556038, upload-time = "2026-08-07T13:30:50.686Z" }, + { url = "https://files.pythonhosted.org/packages/b8/76/a7776f32048d991e16d4fa8ff91790b877342d3596cc3ed04acdbf1aaedc/ruff-0.16.2-py3-none-win32.whl", hash = "sha256:bf3a63d78fb39f4bf5ac8ae52051c5520505301abe19ba4e204c453b3f09bb0b", size = 10872850, upload-time = "2026-08-07T13:30:53.471Z" }, + { url = "https://files.pythonhosted.org/packages/00/0d/929c800d920e61397d82a01b60bffc68da3052c17d31de59efaad2e4ed75/ruff-0.16.2-py3-none-win_amd64.whl", hash = "sha256:bcabe2f6d0fc7819f1431793005af4e4de7371927d037345bf941252b195b9fa", size = 12023338, upload-time = "2026-08-07T13:30:56.193Z" }, + { url = "https://files.pythonhosted.org/packages/5b/6c/93e26c22c5f78ff87363e07da49c84955affbeb1098bd1936bf3b3f293bf/ruff-0.16.2-py3-none-win_arm64.whl", hash = "sha256:d614e95cedf38a2053fd351c55b103ba30d017d61688fdbfd40ee0412852a99f", size = 11374065, upload-time = "2026-08-07T13:30:58.775Z" }, ] [[package]] diff --git a/build/monero/Dockerfile b/build/monero/Dockerfile index 443ba1af..54db6c4b 100644 --- a/build/monero/Dockerfile +++ b/build/monero/Dockerfile @@ -1,5 +1,5 @@ # Pinned by digest (#135) so the ubuntu:24.04 tag can't be silently re-pointed. -FROM ubuntu:24.04@sha256:4fbb8e6a8395de5a7550b33509421a2bafbc0aab6c06ba2cef9ebffbc7092d90 +FROM ubuntu:24.04@sha256:561618e2c15bf2397621dd04f96926663a3b5616c189cf7e38db7e82f5c538ea # Install system dependencies required for downloading, verifying, and configuring the node # 'gettext-base' provides 'envsubst' for template processing in entrypoint.sh diff --git a/build/p2pool/Dockerfile b/build/p2pool/Dockerfile index c975e493..1da78dac 100644 --- a/build/p2pool/Dockerfile +++ b/build/p2pool/Dockerfile @@ -1,5 +1,5 @@ # Pinned by digest (#135) so the ubuntu:24.04 tag can't be silently re-pointed. -FROM ubuntu:24.04@sha256:4fbb8e6a8395de5a7550b33509421a2bafbc0aab6c06ba2cef9ebffbc7092d90 +FROM ubuntu:24.04@sha256:561618e2c15bf2397621dd04f96926663a3b5616c189cf7e38db7e82f5c538ea ARG P2POOL_VERSION=v4.16 ARG P2POOL_HASH=1b03b2e4d4adfe488b2867eb85b57366fbaf8594a7f84cdbf13a3c8519159280 diff --git a/build/xmrig-proxy/Dockerfile b/build/xmrig-proxy/Dockerfile index 5a6233e5..7d599c5a 100644 --- a/build/xmrig-proxy/Dockerfile +++ b/build/xmrig-proxy/Dockerfile @@ -1,5 +1,5 @@ # Pinned by digest (#135) so the ubuntu:24.04 tag can't be silently re-pointed. -FROM ubuntu:24.04@sha256:4fbb8e6a8395de5a7550b33509421a2bafbc0aab6c06ba2cef9ebffbc7092d90 +FROM ubuntu:24.04@sha256:561618e2c15bf2397621dd04f96926663a3b5616c189cf7e38db7e82f5c538ea # Define XMRig Proxy version and SHA256 hash for binary verification # Refer to https://github.com/xmrig/xmrig-proxy/releases for validation diff --git a/docs/README.md b/docs/README.md index 3738b662..39e2682d 100644 --- a/docs/README.md +++ b/docs/README.md @@ -16,7 +16,7 @@ stack. The other guides cover individual topics once you're running. | [Monitoring & Alerting](monitoring.md) | Optional Healthchecks.io dead-man's switch — get alerted when your host goes down (power loss, crash), even when it can't tell you itself — plus the Prometheus `/metrics` endpoint for Grafana or any scraper. | | [Telegram Bot](telegram.md) | Push operator alerts (node down/recovered, worker offline/back, sync finished) to Telegram and query stack status on demand (`/status`, `/hashrate`, `/workers`, `/sync`) — creating a bot, finding your chat id, per-event toggles, and the command list. | | [Connecting Miners](workers.md) | Pointing any existing rig at the stack, plus [RigForge](https://github.com/p2pool-starter-stack/rigforge) for setting up new miners. | -| [Architecture](architecture.md) | The nine services, how they fit together, the privacy model, and the algorithmic XvB switching engine. | +| [Architecture](architecture.md) | The eleven services, how they fit together, the privacy model, and the algorithmic XvB switching engine. | | [Privacy & Network Egress](privacy.md) | Every connection the stack makes off-box: what's Tor-routed, what's clearnet today, and how to harden each path. | | [Operations & Maintenance](operations.md) | The full `pithead` command reference (including command chaining and tab-completion), upgrades, encrypted backups, rotating the internal secrets, watching for intruders, and troubleshooting. | | [FAQ](faq.md) | Common questions, plus why Pithead vs. doing it yourself or Gupax. | @@ -35,6 +35,11 @@ Docs for working on Pithead itself live in [`dev/`](dev/). Operators don't need | [Releasing](dev/releasing.md) | How Pithead is versioned and released: one product, one version, the `VERSION` source of truth, and the GHCR stage→promote pipeline. | | [Release / Validation Server](dev/release-server.md) | Why end-to-end validation needs a dedicated server (and what GitHub Actions does free on every PR), how to provision and harden it, and the safe self-hosted-runner setup. | | [Test Server Architecture](dev/test-server-architecture.md) | How the reference test/build box is structured and how to recreate it. | +| [Dual-distribution plan](dev/dual-distribution-plan.md) | The ratified #77/#78 architecture decision record: how one release ships as the Compose stack, the flashable appliance image, and a git clone — and the rejected alternatives. | + +Published research lives in [`research/`](research/): the +[XvB delivery study](research/xvb-delivery-study/PAPER.md) is the measured evidence behind the +dashboard's XvB "Study est." figures. ## Quick links diff --git a/docs/architecture.md b/docs/architecture.md index ab5c3f25..a4e6c610 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -1,7 +1,7 @@ # Architecture -The stack runs nine containerized services under Docker Compose. This doc lists each service and how -they connect. +The stack runs eleven containerized services under Docker Compose — two of them opt-in view-only +wallets for payout confirmation. This doc lists each service and how they connect. The services provide a Monero full node, P2Pool sidechain mining, Tari merge-mining, a single worker endpoint, and a monitoring dashboard. All node P2P and transaction traffic routes over Tor; no public @@ -20,6 +20,8 @@ port forwarding is required. | 7 | **Docker Proxy** | A **read-only** proxy onto the Docker socket so the dashboard can read container stats/logs — no write access. | | 8 | **Docker Control** | A second, minimal socket proxy scoped to **only** `start`/`stop` (nothing else — not create/kill/exec/reads), so the dashboard can reject workers when a node is down (Issue #31), hold p2pool + xmrig-proxy until the chains finish syncing (Issue #35), switch a clearnet-syncing node back to Tor once it's synced (Issue #234), and, opt-in via `dashboard.fail_closed`, hold p2pool + xmrig-proxy again on an unrecoverable dashboard health failure (Issue #490). Kept separate so its write grant can't widen the read-only proxy. | | 9 | **Caddy** | A reverse proxy that serves the dashboard over HTTPS (automatic local TLS) on the LAN. | +| 10 | **Monero Wallet-RPC** | Opt-in: runs only when `monero.view_key` is set (compose profile `payout_confirm`). A view-only `monero-wallet-rpc` against the local node, so the dashboard can confirm P2Pool payouts on-chain. See [Dashboard › Payout confirmation](dashboard.md#payout-confirmation). | +| 11 | **Tari Console Wallet** | Opt-in: runs only when `tari.view_key` is set (compose profile `tari_payout_confirm`). A view-only `minotari_console_wallet` against the local Tari node, confirming merge-mine payouts on-chain. See [Dashboard › Payout confirmation](dashboard.md#payout-confirmation). | ## High-level diagram diff --git a/docs/configuration.md b/docs/configuration.md index b2ff37d7..2e820ef0 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -74,7 +74,10 @@ plain HTTP, edit `config.json` and run `./pithead apply`. > changes nothing by itself — run `./pithead apply` afterward (see > [Changing settings later](#changing-settings-later)). -The table below has ~94 keys across 13 sections — most of it you'll never touch. A handful of keys +The table below has ~113 keys across 13 sections — every leaf key of +[`config.reference.json`](../config.reference.json), not counting its deprecated `xmrig_proxy.*` +block (the pre-rename alias for `xvb.*`, still read from old configs) — most of it you'll never +touch. A handful of keys are **core**: wallet addresses, `monero.mode`, `p2pool.pool`, the dashboard login and host, and `workers.list` — the ones `./pithead setup` asks about (see [Getting Started › Run setup](getting-started.md#3-run-setup)) and, if `dashboard.control.enabled` @@ -127,6 +130,7 @@ control channel will commit, are unaffected either way. | `p2pool.clearnet` | `false` | Privacy-relevant, default off (Tor). P2Pool's `--onion-address` only advertises an onion for inbound peers; its outbound sidechain dials need a SOCKS proxy or they go over clearnet, exposing your home IP. Default (`false`) routes those dials through the bundled Tor proxy (`--socks5 :9050 --socks5-proxy-type tor`). Set `true` to dial peers directly over clearnet for maximum yield: Tor latency raises the stale/uncle-share rate and onion-only shrinks the peer set, both worse on `--mini`/`--nano`, so a high-variance small rig may prefer clearnet (at the cost of IP exposure). Full threat model: [Privacy › P2Pool outbound peers](privacy.md#p2pool-outbound-peers-165---tor-by-default). | | `p2pool.data_dir` | `auto` | Where P2Pool data lives on the host. `auto` = `./data/p2pool`. | | `proxy.donate_level` | `0` | xmrig-proxy's built-in dev-fee donation to the xmrig developers, as a percentage of submitted hashrate. Defaults to `0`, no donation (xmrig-proxy's own compiled-in default, which the stack now renders explicitly so it's visible rather than invisible). Set an integer `1`–`99` to donate that share to the xmrig devs if you want to support them. This is not the XvB donation; that's the separate `xvb.*` mechanism the optimizer steers, never this dev fee. | +| `local_miner.enabled` | `false` | Also mine on the stack host itself with its spare CPU: a RigForge worker co-located on this box, pointed at the stack's own stratum over loopback. `setup` asks about it; `setup`/`apply` then print the pool URL and stratum password a RigForge install needs. See [Connecting Miners › Mine on the stack host itself](workers.md#mine-on-the-stack-host-itself). | | `xvb.enabled` | `true` | Enable XMRvsBeast bonus-round hashrate switching. | | `xvb.url` | `na.xmrvsbeast.com:4247` | XMRvsBeast pool endpoint. | | `xvb.donor_id` | `auto` | XvB donor id. `auto` = the first 8 characters of your Monero address. | @@ -165,9 +169,12 @@ control channel will commit, are unaffected either way. | `telegram.enabled` | `false` | Push operational alerts (node down/recovered, worker offline/back, sync finished) to Telegram. Off by default. Requires `bot_token` + `chat_id` to actually send. Full walkthrough: [Telegram Bot](telegram.md). | | `telegram.bot_token` | `""` | Your BotFather bot token. A secret — stored owner-only in `.env`, git-ignored, and never logged. Get one from [@BotFather](https://t.me/BotFather). | | `telegram.chat_id` | `""` | Where alerts are sent and the only chat the command interface answers. A Telegram group id (negative, e.g. `-1001234567890`) or a personal chat id. See [how to find it](telegram.md#3-find-your-chat-id). | -| `telegram.events.*` | all `true` | Per-event toggles: `stack_online`, `node_down`, `node_recovered`, `worker_offline`, `worker_recovered`, `worker_joined`, `worker_left`, `sync_finished`, `disk_space`, `db_unhealthy`, `db_reset`, `xvb_no_share`, `xvb_registration`, `clearnet_exposed`, `new_release`, `daily_summary`, `hashrate_low`, `hashrate_loss`, `hugepages`, `low_ram`, `wallet_changed`, `high_reject_rate`, `block_found`, `payout_found`, `payout_confirmed`, `container_unhealthy`. Each defaults to on once Telegram is enabled; set one `false` to silence just that alert. Full list: [Telegram Bot](telegram.md#choosing-which-alerts-you-get). | +| `telegram.events.*` | all `true` | Per-event toggles: `stack_online`, `node_down`, `node_recovered`, `worker_offline`, `worker_recovered`, `worker_joined`, `worker_left`, `sync_finished`, `disk_space`, `db_unhealthy`, `db_reset`, `xvb_no_share`, `xvb_registration`, `clearnet_exposed`, `new_release`, `daily_summary`, `hashrate_low`, `hashrate_loss`, `hugepages`, `low_ram`, `wallet_changed`, `high_reject_rate`, `block_found`, `payout_found`, `payout_confirmed`, `container_unhealthy`, `raffle_win`. Each defaults to on once Telegram is enabled; set one `false` to silence just that alert. Full list: [Telegram Bot](telegram.md#choosing-which-alerts-you-get). | | `telegram.daily_summary_time` | `08:00` | Local time (24-hour `HH:MM`) to push the once-a-day status digest, when the `daily_summary` event is on. Uses the dashboard's timezone (`dashboard.timezone`). A malformed value disables the digest. | | `telegram.commands.enabled` | `false` | Turn on the interactive command interface — the bot answers read-only status queries (`/status`, `/hashrate`, `/workers`, `/luck`, `/earnings`, and more) from the configured `chat_id` (every other chat is ignored). Off by default; alerts work without it. Long-polls over Tor, so it needs no inbound port. Full command list: [Telegram › Commands](telegram.md#commands). | +| `telegram.control.enabled` | `false` | Security-relevant, default off. Lets the bot **act on the host**: `/restart` and `/apply` (the current on-disk `config.json`, never a change carried in from Telegram). Requires `dashboard.control.enabled` — the commands ride the config-editor's spool channel, not a new one — and does nothing while `allowed_ids` is empty. See [Telegram › Control commands](telegram.md#control-commands). | +| `telegram.control.allowed_ids` | `[]` | The numeric Telegram **user ids** allowed to issue control commands. Being in the configured `chat_id` is not enough; every other sender is dropped silently. Empty (the default) keeps the whole feature off. | +| `telegram.control.confirm_timeout` | `60` | Seconds the per-action **Confirm** button stays valid. A control command does nothing until its issuer taps Confirm; past the timeout the request is denied, never queued. | | `notifications.webhooks` | `[]` | Generic JSON webhook alert sinks (#380): every alert the stack produces is POSTed to each listed URL as `{"event", "text", "ts"}` — for Gotify, Home Assistant, or any endpoint that accepts a POST. Empty list keeps it off. The URLs are secrets (query strings often carry tokens): owner-only `.env`, never logged or printed. Sinks carry every event; `telegram.events` gates Telegram only. See [Telegram › Webhook and ntfy sinks](telegram.md#webhook-and-ntfy-sinks). | | `notifications.ntfy.url` | `""` | An [ntfy](https://ntfy.sh) topic URL (`https://server/topic`, self-hosted servers included); each alert's text is POSTed as the message body. Blank keeps it off. Treated as a secret like the webhook URLs. Step-by-step setup: [Telegram › Setting up ntfy](telegram.md#setting-up-ntfy-step-by-step). | | `notifications.ntfy.token` | `""` | Optional ntfy access token for a protected topic, sent as an `Authorization: Bearer` header. A secret — owner-only `.env`, never logged. | diff --git a/docs/dashboard.md b/docs/dashboard.md index 25f89975..b7e071b3 100644 --- a/docs/dashboard.md +++ b/docs/dashboard.md @@ -131,11 +131,14 @@ A strip of headline KPIs sits below the top bar: |---|---| | **Total Hashrate** | Your combined hashrate across all workers. | | **Shares in Window** | Shares you currently hold in the P2Pool PPLNS window (green when above zero). | -| **Raffle Eligible** | Whether you'd actually win **and** collect an XvB raffle payout: green **Yes**, red **No**, or muted **N/A** when XvB is off. (Full definition in [Overview](#overview).) | +| **Raffle Eligible** | Whether you'd actually win **and** collect an XvB raffle payout: green **Yes**, red **No**. (Full definition in [Overview](#overview).) | | **Blocks Found** | P2Pool sidechain blocks your node has found. | | **XvB Tier** | The donation tier you're currently holding. | | **Mining Mode** | What your hashrate is routed to right now: P2Pool, XvB, or a split. | +While XvB is disabled the two raffle KPIs stand down entirely — the mode badge already says XvB +is off, and a strip of **N/A** and **None** would just repeat it. + ### Mine cart train A pixel-art train runs under the hero band on every view. It is the chart's history retold as @@ -259,6 +262,10 @@ The summary panel pulls the key numbers together: | **Tari Mining** | Whether merge-mining of Tari is active and healthy. | | **Wallet XMR / Wallet TARI** | Your configured Monero and Tari payout addresses, one card each. | +While XvB is disabled the five raffle/split tiles (Current Tier, Raffle Eligible, Target Tier, +XvB routed averages) drop out of the card, along with the header's XvB routed line and the whole +*XvB Donation Stats* card — one mode badge says XvB is off; nothing else repeats it. + ### Earnings — Expected vs Actual One compact table, shown in **both** views, that answers "am I earning what this hashrate should?" @@ -267,9 +274,9 @@ trailing **30-day** window: | Row | Expected | Actual | |---|---|---| -| **Monero + XvB (30d)** | The P2Pool linear estimate at your **30-day average** routed hashrate — the hashrate that actually ran the window — **plus** XvB's published per-day estimate for your current tier, when XvB is on and the estimate is fresh (the label drops "+ XvB" otherwise). | All confirmed on-chain payouts over the window ([payout confirmation](#payout-confirmation)), with a percent-of-expected. | +| **Monero + XvB (30d)** | The P2Pool linear estimate at your **30-day average** routed hashrate — the hashrate that actually ran the window — **plus** the XvB share for your current tier, when XvB is on and the estimate is fresh (the label drops "+ XvB" otherwise). Once enough of your wins have confirmed payouts to measure, the XvB share is XvB's published figure **scaled to what your wins actually paid** — the tooltip names the measured percentage and sample. Until then the published face value stands, and the tooltip says it is an upper bound. | All confirmed on-chain payouts over the window ([payout confirmation](#payout-confirmation)), with a percent-of-expected. | | **Tari (30d)** | Expected **blocks** (hashrate × window ÷ Tari difficulty). Tari is merge-mined solo, so blocks are the honest unit — at fractions of a block per month, zero found is the normal case, not a fault. | Blocks found (each confirmed Tari payout is one solo-found block) and the XTM they paid. | -| **XvB wins (30d)** | — | Raffle wins recorded in the window, and how long ago the most recent win on record landed (which can predate the window). | +| **XvB wins (30d)** | Forecast wins for your tier, from XvB's own winners file: how often your tier's rounds are drawn ÷ how many qualifiers they have (summed with the lower donor rounds you also qualify for). While no tier is held yet — a fleet still ramping, or an operator weighing whether donating is worth it — the forecast uses your **target** tier instead. `—` while the file hasn't been read or has gone stale. | Raffle wins recorded in the window, and how long ago the most recent win on record landed (which can predate the window). | Monero and XvB share one row **on both sides** deliberately: an XvB win pays out through ordinary small payouts that can't be told apart from P2Pool payouts, so the confirmed actual always @@ -619,9 +626,10 @@ Set the keys in `config.json` and run `./pithead apply`. Key reference: the `mon A block inside the earnings card, driven by the same what-if hashrate input, that answers "which XMRvsBeast tier could this hashrate hold, and what would it cost?". Hidden entirely while XvB is -disabled (`xvb.enabled: false`). It shows tier status only — deliberately no raffle entries or win -odds, because there are none to show: the raffle winner is drawn at random among everyone above -the threshold, so donating more than the threshold buys zero extra win chance. +disabled (`xvb.enabled: false`). The raffle winner is drawn at random among everyone above the +threshold, so donating more than the threshold buys zero extra win chance — but the odds +themselves are knowable: XvB's winners file publishes the qualifier count for every round, and +the comparison below shows them. | Field | Meaning | |---|---| @@ -630,17 +638,18 @@ the threshold, so donating more than the threshold buys zero extra win chance. | **Current Tier** | The tier your credited XvB donation clears right now (the lower of XvB's 1h and 24h averages). | | **Target Tier** | The tier the donation controller is configured to aim for (`xvb.donation_level`), flagged when your hashrate can't sustain it. | -Below the tier figures, a **per-tier payout comparison** dropdown weighs each donor tier three ways: +Below the tier figures sits the **per-tier decision table** — every donor tier on one row, so +the whole choice is visible at once: -| Field | Meaning | +| Column | Meaning | |---|---| -| **Expected (XvB)** | XvB's own published expected reward for the tier, in XMR per year. This is XvB's pre-computed `reward_calc` figure for the tier's donor round, fetched over Tor from `reward_estimate_pub.txt` — the dashboard does not re-derive it. It is the raffle expectation across all qualifiers, so donating **above** the tier threshold does not raise it. `estimate unavailable` when the fetch is stale or failed — never a stale figure implied fresh. | -| **Cost / yr** | The P2Pool earnings given up by donating the tier threshold for a year: `threshold × the P2Pool daily rate × 365`, using the same rate the Monero tab shows. | -| **Net / yr** | Expected minus Cost. Shown only when XvB's estimate is available; otherwise the cost stands alone. | +| **Odds / 30d** | How often this tier's rounds pay out and among how many qualifiers, computed from XvB's public winners feed. The draw is random among qualifiers — donating above a threshold buys no extra odds. | +| **Cost / yr** | The P2Pool earnings given up by donating the tier threshold for a year, at your current rate. | +| **XvB says / yr** | XvB's own published expected reward — **face value**: it prices every bonus hash at full block reward. Shown as their number, never blended. | +| **Study est. / yr** | The same figure scaled by the **measured delivery band**: across 25 audited won rounds, verified on-chain across all three P2Pool sidechains (June–August 2026), winners received 33% of the advertised prize work (95% CI 28–39%; single-wallet on-chain audit, corroborated by a 14-winner public crawl), with at most a small margin effect. Once this box has enough measured wins of its own, the column becomes **Yours (N% × M wins)** and uses your wallet's measured figure instead. The full record — method, data, and scripts — is the [XvB delivery study](research/xvb-delivery-study/PAPER.md). | +| **Net / yr** | The verdict: estimated reward minus the cost. **Red** when even the optimistic end of the band loses; **green** when even the pessimistic end profits; neutral when the band spans zero. Withheld (with a ⚠ on the tier) when your hashrate cannot sustain the tier — an unreachable payout must never look reachable. | -The estimate is fetched over Tor on the same cadence and staleness rules as the XvB stats card, so -a quiet feed degrades to `estimate unavailable` rather than showing an old number. Pick a tier to -compare, e.g. Whale against VIP Donor, at a glance. +A fiat line prices the best sustainable tier's net at your configured XMR price. Raffle mechanics, flat: the winner of a donor round is drawn at random among wallets above the tier threshold on both credited averages; a win terminates if the 1h average then drops below the @@ -698,7 +707,7 @@ Two edit modes build the same candidate config and submit it through the same pi & thresholds, System / advanced — instead of one section per top-level `config.json` key, so a grab-bag key like `dashboard` (auth, remote access, the energy calculator, alert thresholds, …) splits across the sections its fields actually belong to. Each section is a collapsed `
` - as before; within **Notifications**, the 26 `telegram.events` toggles, the ntfy/webhook sinks, + as before; within **Notifications**, the 27 `telegram.events` toggles, the ntfy/webhook sinks, and Healthchecks each nest one level deeper into their own collapsed sub-group ([#612](https://github.com/p2pool-starter-stack/pithead/issues/612)) instead of dominating the section's field list. Rows in a section whose fields span more than one top-level key carry their diff --git a/docs/dev/integration-testing.md b/docs/dev/integration-testing.md index 811dab6f..50af828f 100644 --- a/docs/dev/integration-testing.md +++ b/docs/dev/integration-testing.md @@ -174,8 +174,12 @@ What it does, then reverses on exit (even on failure / Ctrl-C, via an `EXIT` tra 3. Safety backup (`pithead backup`) as the rollback anchor. 4. Borrows a miner (default the configured miner): backs up its xmrig config and repoints it at the bench so the matrix has a real worker mining through this stack (1 worker → run with `--workers 1`). -5. Deploys the branch (`pithead apply` builds the branch's images) and runs `run.sh` detached on the - box (survives an SSH drop on a long matrix), streaming a heartbeat and the full log at the end. +5. Deploys the branch (`pithead upgrade` — re-renders the generated configs and rebuilds the + first-party images from `build/`, so a Dockerfile or entrypoint change is actually under test; + `apply` never builds and would reuse whatever images were last built on the box, + [#272](https://github.com/p2pool-starter-stack/pithead/issues/272)) and runs + `run.sh` detached on the box (survives an SSH drop on a long matrix), streaming a heartbeat and + the full log at the end. 6. Restores the miner's original pool config and the baseline stack. Restore targets the directory the live stack actually ran from — read at preflight off the running container's `com.docker.compose.project.working_dir` label — which on a release box is the per-version bundle diff --git a/docs/dev/release-server.md b/docs/dev/release-server.md index 5ac434ce..782d5ecc 100644 --- a/docs/dev/release-server.md +++ b/docs/dev/release-server.md @@ -287,8 +287,9 @@ Treat the box as production-sensitive. It holds keys and it's the thing that sig 2. Pre-release (or on-demand for a reviewed PR) → a maintainer dispatches the release-gate workflow on the dedicated server: `make test` (tiers 1–2 on the trusted box) plus the tier-4 live matrix against the real synced nodes (`run.sh --safety-backup`), then per - [Releasing](releasing.md) the staging smoke test (pull the GHCR images on a clean host, real - `setup → up → status → mine` check). + [Releasing](releasing.md) the staging smoke test: pull each staged image back from GHCR and + verify its version label and target platforms — no stack is started; a functional run against + the staged tag is opt-in via `RELEASE_SMOKE_CMD`. 3. Nothing is tagged or published until that's green, and promotion is by digest, so the version users get is the exact bundle the server validated. diff --git a/docs/dev/releasing.md b/docs/dev/releasing.md index ddb5f7a1..e8483f4e 100644 --- a/docs/dev/releasing.md +++ b/docs/dev/releasing.md @@ -67,6 +67,15 @@ every gate is green. > runners (and what does run free on every PR), and the safe self-hosted-runner setup are covered > in [Release / Validation Server](release-server.md). +### Branch mechanics + +Releases are cut from `main`. Merge `develop` into `main` with a real merge commit — never a +squash, so the released commits keep their history — and run the pipeline from `main`. After +publishing, merge `main` back into `develop`: the release's merge commit and tag must be an +ancestor of `develop`, or the next cut diverges. `release.sh` warns (it does not abort) when the +working tree is on any other branch. The branch model itself is in +[CONTRIBUTING.md](../../CONTRIBUTING.md#development-workflow). + ### Pipeline: stage → smoke-test → promote 1. Preflight: clean working tree; read the product version from the top-level `VERSION` file; @@ -84,9 +93,13 @@ every gate is green. `vX.Y.Z` rather than the `dev · branch @ hash` it shows for working-tree builds. 4. Push to staging: push to a staging tag on GHCR (e.g. `:vX.Y.Z-rc.N`) and capture the immutable digests. Nothing user-facing points here yet. -5. Staging smoke test (gate): on a clean host, pull the staged images from GHCR and run the real - user path (`setup` → up → `status`, minimal mine check). This proves the actually-pushed - artifacts work, not just the local build. Abort on failure. +5. Staging smoke test (gate): pull each staged image back from GHCR and verify it resolves, + reports the release version in its OCI label, and carries every target platform (the v1.0.0 + wrong-arch guard). This validates the bytes actually pushed, not the local build — but it does + not start a stack, which would collide with the release host's live deployment. A fuller + functional run is opt-in: set `RELEASE_SMOKE_CMD` to a command to run during this stage, or + point the [#54](https://github.com/p2pool-starter-stack/pithead/issues/54) harness at the + staged tag. Abort on failure. 6. Promote by digest: re-tag the exact digests just smoke-tested to `:vX.Y.Z` and `:latest`, then push. Promotion is by digest (no rebuild), so the released bundle is bit-for-bit what was validated. Same version on every image. @@ -113,10 +126,18 @@ a single, validated bundle. Two runs of the matrix are required, and the automated one is the smaller of the two: 1. `release.sh` stage 2 runs the non-destructive `--readiness` assessment against the live - stack (via `RELEASE_INTEGRATION_ARGS`). It proves the box is fit to cut from — it does not + stack. Export the harness arguments on the release box before `make release`: + + ```bash + export RELEASE_INTEGRATION_ARGS="--local --dir --readiness" + ``` + + `--local` / `--dir` point the harness at the box's live stack install, not the checkout — the + same invocation the closing `--check` sweep below uses. Left unset, the cut aborts at stage 2 + with `run.sh`'s usage error. The assessment proves the box is fit to cut from — it does not mine, restart anything, or touch a rig. 2. Before cutting, run the targeted end-to-end matrix on the release candidate with a borrowed - loaner rig: + loaner rig. `release.sh` never runs this leg — run it yourself, before `make release`: ```bash BENCH_HOST= MINER_HOST= tests/integration/e2e.sh --mode targeted @@ -234,6 +255,24 @@ It runs two phases: read better for users, and automation can come later if a commit convention is adopted.) - Patches: security and component bumps ship as normal patch releases, re-validated through the same gate. +- Host ports: a release that adds a host-published `ports:` entry to `docker-compose.yml` must + call it out as **upgrade-blocking** in the release notes — a host where something else already + binds that port fails `pithead upgrade` at compose up, after images are pulled and config is + re-rendered. + +### Withdrawing a bad release + +A published `vX.Y.Z` tag is immutable: an active tag ruleset blocks deleting or re-pointing any +`v*` tag, so a released version number can never be re-cut — the v1.6.0 withdrawal burned that +number for good. When a published release turns out broken: + +1. Supersede it: bump `VERSION` and cut the next patch through the full gate. Promotion re-points + `:latest` at the good digests. +2. Edit the bad GitHub Release's notes to a "Superseded by the next patch — do not use" warning, + and say so in `CHANGELOG.md` (the 1.0.0 tombstone and the 1.6.1 "Supersedes 1.6.0" header are + the precedents). +3. Operators already on the bad version roll back per + [Operations › The deploy-box layout](../operations.md#the-deploy-box-layout). ## Install & upgrade diff --git a/docs/dev/testing-guide.md b/docs/dev/testing-guide.md index e814630e..cc89e571 100644 --- a/docs/dev/testing-guide.md +++ b/docs/dev/testing-guide.md @@ -77,6 +77,40 @@ Add a scenario to `tests/integration/mini-stack/run-mini-stack.sh`: drive the fa `/control` endpoints (`set_monerod`/`set_tari`) and assert real container state with `assert_state` / `assert_stays`. `make test-mini-stack` (needs docker). +### Visual check (frontend, pre-PR) + +The `node --test` frontend suite renders components as strings, so it cannot see a layout bug — +an overflowing table, a wrapped stat, a broken breakpoint. Before a PR that touches the +dashboard's look, render the real frontend in a real browser against a canned `/api/state` +payload — no docker, no stack. The fixture half lives in the repo: +`tests/frontend/fixtures/_gen_state.py` writes `state.json`, a real `build_state()` payload (the +exact contract the client renders). Regenerate it whenever the payload contract changes, then +serve the real app around it: + +```bash +cd build/dashboard +uv run --extra test python tests/frontend/fixtures/_gen_state.py +python3 - <<'EOF' +import http.server, mimetypes +from pathlib import Path +mimetypes.add_type("text/javascript", ".mjs") +web, fix = Path("mining_dashboard/web"), Path("tests/frontend/fixtures/state.json") +class H(http.server.SimpleHTTPRequestHandler): + def translate_path(self, path): + p = path.split("?")[0] + if p.startswith("/api/state"): return str(fix) + if p.startswith("/static/"): return str(web / p.lstrip("/")) + return str(web / "templates/index.html") +http.server.ThreadingHTTPServer(("127.0.0.1", 8000), H).serve_forever() +EOF +``` + +Open `http://127.0.0.1:8000` and eyeball the page at a desktop and a phone width (the browser's +device toolbar is enough). Only `/api/state` is served — every other API call fails, which the +page tolerates; the main view is the point. This is a manual pre-PR step, not a test tier: it has +caught real bugs (a "≈ 0.0 blocks" display, a WebKit table overflow) that the string-render tests +structurally cannot. + ## Conventions - Determinism, no sleep-and-hope. Wait on a real signal with a timeout (`wait_for`, @@ -106,9 +140,12 @@ now baked into the tests. 28081/28152 so it can't collide with — or control — a real deployment on the same host. A fake server inside a container must bind `0.0.0.0`; binding `127.0.0.1` makes it unreachable from peer containers, which once broke release in the mini-stack. -- monerod-down failover isn't simulated in the mini-stack. The dashboard's monerod down-path - log-scrapes a real `monerod` container the fake stack lacks; it's covered on real hardware by - `run.sh --fault-injection`. Tari-down is simulated there cleanly. +- monerod-down failover IS simulated in the mini-stack (scenarios 6–9: outage, readmit, + busy/mid-reorg, double outage) — but only because the fake compose sets `LOCAL_MONERO_HOST` to + the fake monerod's hostname. If it doesn't match `MONERO_NODE_HOST`, the dashboard treats + monerod as "remote" and never probes it for reachability, so an outage becomes a silent no-op — + the original wiring bug. The tier-4 `run.sh --fault-injection` run still proves the + real-binary leg on real hardware. - Run `--check` first. Against any real box, `run.sh --check` asserts the current live state non-destructively (no config change). It's the safe way to validate before the config-churning matrix. diff --git a/docs/dev/testing-strategy.md b/docs/dev/testing-strategy.md index 863f8ae6..869ba58c 100644 --- a/docs/dev/testing-strategy.md +++ b/docs/dev/testing-strategy.md @@ -295,12 +295,11 @@ tier 3/4: - **Tor-container-down partial start.** ✅ Now a tier-4 `--fault-injection` case (#563, TOP PRIVACY PRIORITY): `docker compose stop tor` and assert BOTH no clearnet egress leak appears (reuses `bench-verify-egress.sh`'s `/proc/net/tcp` proof, the same one the steady-state battery runs) and - that `doctor` flags the outage loudly rather than passing silently, then restart tor and re-assert - both the egress proof and `pithead status`. The doctor-loud-failure leg is the harness *proving* - the gap: `check_egress_firewall_installed` and `check_tor_clearnet_egress` both currently SKIP - (not FAIL) when the tor container isn't running, so this assertion is expected to fail against - today's `doctor` until it gains an explicit tor-down verdict — filed as a follow-up, not silently - softened here. + that `doctor` fails loudly — its dedicated `check_tor_running` verdict FAILs with a non-zero exit + while the tor container is down and the mining stack runs, never a silent all-clear — then + restart tor and re-assert both the egress proof and `pithead status`. + (`check_egress_firewall_installed` and `check_tor_clearnet_egress` still info-skip without a + running tor container, by design: the dedicated verdict already fails the outage.) - **Insecure + main matrix row.** `dashboard.secure=false` only ever pairs with `p2pool.pool=nano`, so the Caddy-scheme / bind assertions for insecure mode are entangled with the nano path; an insecure+main regression has no row. diff --git a/docs/monitoring.md b/docs/monitoring.md index 1f99304d..e999a9be 100644 --- a/docs/monitoring.md +++ b/docs/monitoring.md @@ -60,7 +60,7 @@ Add a `healthchecks` block with your ping URL — that URL is the on switch (see } ``` -`enabled` and `ping_url` are all you need; everything else has a sensible default. +`ping_url` is the only key — setting it turns the monitor on, blank keeps it off. ### 4. Apply diff --git a/docs/operations.md b/docs/operations.md index 72948faf..3a65fe75 100644 --- a/docs/operations.md +++ b/docs/operations.md @@ -14,7 +14,7 @@ Command reference for `pithead`, the CLI that manages the stack. Run `./pithead | `./pithead upgrade` | Re-render the generated config, then **pull** (release bundle) or **rebuild** (source checkout) the images and restart. Run after downloading a newer bundle or a `git pull`. | | `./pithead logs [service]` | Follow logs for all containers, or a single service (e.g. `logs p2pool`). | | `./pithead status` | Show container status and health-check every expected service. Warns about anything down/unhealthy and exits non-zero if so (handy for cron/monitoring). Profile-aware, and treats a stopped `p2pool`/`xmrig-proxy` as intentional during a node-down failover or while the miner is held until the chains sync. | -| `./pithead doctor` | Read-only diagnostics: deps, Docker, AVX2, HugePages, RAM/disk, `.env`/onion state, and container status — plus four runtime checks: the Tor-egress firewall rules are actually installed (a reboot silently drops them while the containers auto-restart), something is listening on stratum `:3333`, the dashboard app answers behind its container, and a clearnet request through Tor's SOCKS succeeds (a failing Tor guard breaks Healthchecks/Telegram/XvB while mining still works — fix with `./pithead restart tor`, or set `tor.auto_heal: true` to automate it). A paste-able health report. | +| `./pithead doctor` | Read-only diagnostics: deps, Docker, AVX2, HugePages, RAM/disk, `.env`/onion state, and container status — plus runtime checks: the Tor container is actually running while the mining stack runs (a loud FAIL when it's down — the privacy backbone is dead), the Tor-egress firewall rules are actually installed (a reboot silently drops them while the containers auto-restart), something is listening on stratum `:3333` (and whether that port sits on a public IP), the dashboard app answers behind its container, and a clearnet request through Tor's SOCKS succeeds (a failing Tor guard breaks Healthchecks/Telegram/XvB while mining still works — fix with `./pithead restart tor`, or set `tor.auto_heal: true` to automate it). A paste-able health report. | | `./pithead backup` | Save `config.json`, `.env`, `Caddyfile`, the Tor onion keys, and the dashboard's database (your hashrate history & settings) to a timestamped, passphrase-encrypted archive under `backups/` (checks free space first; stops a running stack for a clean copy, then restarts it). `--with-chains` also includes the blockchain data; `--no-encrypt` writes a plaintext `tar.gz`; `-y` / `--yes` skips the prompts (low free space and stopping the stack). | | `./pithead restore ` | Restore those files from a backup archive, encrypted or plaintext (asks before overwriting; fixes Tor key ownership). `-y` / `--yes` skips the prompt. | | `./pithead reset-dashboard` | **DESTRUCTIVE**. Wipes and recreates the dashboard and P2Pool data. `-y` / `--yes` skips the prompt. | @@ -402,6 +402,11 @@ prompts before overwriting anything (pass `-y` / `--yes` to skip). It puts the f Tor key ownership so the onion address returns unchanged, and restores hashrate history and dashboard settings. +> NOTE: The archive stores the source box's absolute paths, and `restore` puts every file back +> exactly where it came from. On a machine laid out differently (another user, another install +> directory), the files land in the old box's directory tree — not the install you ran `restore` +> from. Recreate the original path (or move the install there) before restoring. + > NOTE: After a restore, Caddy regenerates the dashboard's HTTPS certificate, so the browser shows > its "not trusted" warning once. Accept it as on first setup. diff --git a/docs/research/xvb-delivery-study/PAPER.md b/docs/research/xvb-delivery-study/PAPER.md new file mode 100644 index 00000000..585ae1da --- /dev/null +++ b/docs/research/xvb-delivery-study/PAPER.md @@ -0,0 +1,477 @@ +# Delivered versus advertised: measuring the XMRvsBeast raffle prize on-chain + +**Status: STUDY COMPLETE (revision 6, 2026-08-12; second adversarial pass applied — corrections #20–#23) — pre-registered experiment endpoint +reached AND the public-winners generalization executed (§3.7).** Figures in `figures/`. +Revision 3's adversarial-audit corrections (#11–#19, §2.5) stand. + +## Abstract + +The XMRvsBeast (XvB) "P2Pool Bonus Hash Rate Raffle" advertises a per-tier expected reward +(e.g. ~6 XMR/year for its Whale tier as of 2026-08, archived) derived from its published winners +feed. A production mining fleet holding Whale tier for 16 days collected roughly one fifth of +that figure at the wallet while its ordinary P2Pool mining stayed healthy. This study decomposes +the gap using five independent data sources — wallet-confirmed payouts, XvB's public winners +feed, XvB's published reward calculator, and the p2pool.observer share indexes for all three +P2Pool sidechains — and a controlled experiment instrumented at 2-minute resolution. Findings +so far: the raffle draw pays at fair odds (consistent with published qualifier counts); every +share mined for the winner pays out in full through PPLNS; prize slots run full length; and the +prize is delivered on all three sidechains (main, mini, nano — the study's earlier main-only +counting understated delivery and is corrected here). What remains is a genuine, population-wide +delivery gap: across this wallet's 25 measured wins, delivered work totals **33.1% of +advertised work (95% CI [28%, 39%])**, with at most a modest margin effect (the pre-registered +controlled experiment measured +5 pp across 8 settled clean rounds, 37.6% [28%, 53%], CIs +overlapping); a 14-winner / 83-slot public crawl corroborates (per-winner median ~44% among +the most frequent winners — a frequency-weighted frame — and no sampled winner near face +value). Q5 resolves from the operator's own archived wording: +the advertised figure is a base rig plus the sum of donors' credited averages — a nominal +aggregate, not a per-winner delivery commitment. The study shipped three merged product PRs, one open PR, and two filed issues, pricing the raffle by measured delivery beside XvB's published figures. + +## 1. Introduction + +**Background.** Pithead is a Docker-Compose Monero+Tari merge-mining stack. Its optional XvB +integration time-slices fleet hashrate between P2Pool (earning PPLNS payouts) and a donation to +XvB, which qualifies the wallet for hourly raffle rounds; a round's winner receives the pooled +"bonus hashrate" mined under the winner's own address — per XvB's published rules, on any of the +three P2Pool sidechains (main, mini, nano; rules archived in `data/sources/`). XvB publishes +per-tier expected rewards (`reward_estimate_pub.txt`, generated by its `reward_calc.sh` over the +winners feed). + +**Problem.** The stack's earnings dashboard showed a persistent gap: 30-day actuals at 54% of +expected (0.462 vs 0.858 XMR; dashboard-sourced, see Data Availability) on a fleet whose +P2Pool-only leg was healthy. Decomposition attributed the entire shortfall to the XvB leg: +15 raffle wins paid ~0.05 XMR against a published expectation of ~0.49 XMR for the period. + +**Questions.** +1. Is the raffle *draw* fair — do win frequencies match the published qualifier counts? *(Q1)* +2. What fraction of the advertised prize does a winner actually receive as mined work, and + where in the pipeline (draw → mining → shares → payout) is the remainder lost? *(Q2)* +3. Is the loss caused by the winner's own credited-average margin (round termination), by + rounds being shorter than advertised, or by the bonus hashrate being lower than advertised? + *(Q3: H-margin / H-short / H-rate)* +4. Given the answers, what is the honest expected value of each donation tier? *(Q4)* +5. What does XvB's advertised bonus hashrate semantically *mean* — a per-winner delivery + commitment, an aggregate of available donations, an average, or a nominal figure? *(Q5)* + +## 1.1 Terminology + +Terms are used in the precise senses below throughout. + +- **Round / draw**: one raffle cycle. A round begins when XvB *draws* a winner (a new row + appears in the winners feed, timestamped); rounds are sequential. +- **Slot**: the time from a round's draw to the next round's draw — the window in which the + prize can be mined. Measured slots are ≥ ~62 min (median 62.0); a slot is **extended** when + the round runs past 60 min until the winner's first share lands (per XvB's published rule; + extended slots of 79–152 min are observed, each ending shortly after the first share). +- **Qualifier**: a wallet whose credited averages clear a tier's threshold at draw time; the + winners feed's *players* column records the count per round. +- **Round minimum**: the credited 1h average the *winner* must maintain during the round + (the tier threshold; 100 kH/s for Whale). Per the published rules, dropping below it + terminates the round (H-margin's proposed mechanism). +- **Routed hashrate**: what our proxy actually sends to XvB, measured locally. +- **Credited average (1h/24h)**: XvB's reported moving averages of our donation — the figures + that decide qualification and termination. Credited lags routed by design. +- **Margin**: credited 1h average ÷ round minimum. A round is analyzed as **clean** when the + credited 1h average never fell below 1.5× the round minimum during its slot; **thin** + otherwise. (Experiment rounds classed clean rode 2.11–2.51×.) +- **Share**: a sidechain block recorded under our wallet's address at that chain's difficulty — + the on-chain unit of mined work. **Delivered work** = Σ share difficulty over a slot, + **summed across all three sidechains**, with the wallet's own mini-chain baseline subtracted + (we mine mini ourselves; main and nano shares are XvB-attributable for this wallet). +- **Advertised bonus HR**: the prize hashrate published in the winners feed's rate column for + that round (also the basis of XvB's reward calculator). Its semantics are Q5. +- **Advertised work**: advertised bonus HR × min(slot, 60 min). Note an accounting asymmetry: + delivered work is counted over the WHOLE slot (extensions included) while advertised work is + capped at 60 min; the symmetric alternative (both capped at 60 min) yields ~2–5 pp lower + ratios on extended rounds — reported alongside where material. Uncle side-blocks count at + full difficulty as delivered work (p2pool pays them at 80–90% weight; a ≤2 pp overstatement + of paid value, not of mined work). +- **Expected shares (n)**: advertised work ÷ that chain's difficulty *at the round's time* + (logged per-poll) — what full delivery predicts on that chain; share arrivals are treated as + Poisson (see Threats to Validity for the assumption's limits). +- **Delivery ratio (R)**: Σ delivered work ÷ Σ advertised work (difficulty-weighted, + cross-chain) — the study's **canonical primary metric**, computed only by + `analysis/rounds.py`. Share counts are secondary; payout-side realization is a cross-check. +- **Face value**: advertised work priced in XMR at network rates (work × block reward ÷ + network difficulty) — the prize's XMR worth if fully delivered and fully collected. +- **Realization**: the payout-side analogue of delivery — XvB-attributed wallet payouts ÷ face + value. Delivery and realization agree when collection of mined shares is complete (§3.2). +- **Attribution window**: the post-win interval (6 h, stream-measured envelope) whose payouts + are attributed to the win, minus a **baseline subtraction** (the box's own linear P2Pool + rate over the windowed hours). +- **PPLNS window / VIP gate / skip**: P2Pool pays a **dynamic** last-N window capped at 2× + the Monero network difficulty of cumulative share weight (≈1 h effective on main during the + study; the often-quoted 2160 shares is an upper bound — p2pool `side_chain.cpp`, archived). + XvB pays winners holding ≥1 P2Pool share (any sidechain) at draw time (its "VIP" gate); + a winner without one is **skipped** (fail count +1; removal at the 3rd consecutive fail; + reset on a win — rules archived). Skips are excluded from delivery statistics. +- **Settled**: a round is settled when ≥12 h have elapsed after its bounding next-round draw + AND the observer's indexed share set for the slot is unchanged across two consecutive polls. + Retained as a conservative index-stability rule; no experiment share was in fact indexed + late (correction #14). +- **First-seen**: when a share first appeared in our polling, as distinct from its chain + timestamp. +- **Counterfactual (luck-cancelling)**: the same window's P2Pool payouts rescaled by the + hashrate given away; pool luck appears in both sides and cancels. +- **Regime**: the donation configuration under which a record was taken. Stamped into records + (`cfg`) from 2026-08-07 01:24 UTC; earlier rounds' regimes are assigned from the §2.4 + configuration timeline (correction: the stamp postdates experiment rounds 1–3). + +**Claim-status taxonomy** (distinct from round settlement): **SETTLED** = will not change with +more data; **INTERIM** = will be revised as rounds accumulate; **PROVISIONAL** = awaiting the +settled-round rule. + +## 2. Methods + +### 2.1 Data sources (wallet-bearing network fetches routed via Tor) + +| # | Source | What it provides | File | +|---|---|---|---| +| S1 | View-only wallet (payout confirmation) | Every confirmed incoming payout: ts, amount, height | `data/prod-db-dump.json` → `payouts_monero` | +| S2 | XvB winners feed | One row per round: draw ts (UTC), masked winner, advertised bonus HR, qualifier count, round type (~45-day window) | `data/winners-*.txt`, daily archive | +| S3 | XvB reward estimates + `reward_calc.sh` | Operator's published per-tier expectations and generator script | `data/sources/xmrvsbeast-reward_estimate_pub.txt` (archived 2026-08-10) | +| S4 | p2pool.observer — **all three sidechain instances** (main / mini / nano) | Third-party index of every share and payout recorded for the wallet per chain | `data/observer-all-chains-20260810.json`, `data/observer-dump-20260806.json` | +| S5 | Dashboard DB (`raffle_wins`, `xvb_history`, `history`) | Win log; credited averages; routed split | `data/prod-db-dump.json` | +| S6 | Experiment logger (`analysis/poll.sh`, cron 2-min since 2026-08-03) | Seven streams/record: observer shares+payouts, pool difficulty, credited+fail, winners head, local split + PPLNS count + XMR price, regime (`cfg`, from 08-07 01:24 UTC) | `data/experiment-log.jsonl` | +| S7 | Daily winners archive (`analysis/archive-winners.sh`, 05:15 UTC) | Full 1000-row schedule per day | host `~/xvb-experiment/archive/`, synced at study end | + +External mechanics sources (P2Pool README and `side_chain.cpp`, Monero `cryptonote_config.h`, +observer API source, XvB rules/FAQ/dashboard pages) are archived with SHA-256 checksums in +`data/sources/MANIFEST.md` against link rot. + +### 2.2 Analytical methods + +- **Canonical delivery analysis**: `analysis/rounds.py` — slots from consecutive draws in the + merged schedule snapshots; per-slot shares from all three chain indexes; own-mini baseline + subtraction; per-round advertised work at the round's advertised rate; work-ratio aggregates + by era. All delivery numbers in §3 come from this one script (supersedes the ad-hoc + per-round scripts whose inconsistencies produced corrections #11–#13). +- **Draw fairness (Q1)**: expected wins/day = Σ over won-round types of (1 ÷ players) per + round ÷ span; the naive constituents (whale rounds 34.5% of 22.2/day, mean 9.48 qualifiers → + 0.81/day) are reported with the archived snapshot they derive from. +- **Payout attribution**: 6-h stream-measured window with baseline subtraction (see §1.1). +- **Era economics**: luck-cancelling counterfactual (§1.1); sensitivity to the attribution + window is reported alongside. +- **Controlled experiment (Q3)**: donation margin pinned ≥2.28× the round minimum; + per-round delivery at 2-minute resolution. +- **Stopping rule (pre-registered 2026-08-07; annotated per corrections #9/#19)**: run until + **8 settled clean wins**, early-stop if delivery-vs-0.30 rejects at p < 0.01, hard cap + 2026-08-20. *(Annotation: the precision originally quoted (±10 pp) was computed at f≈0.10 + with n≈5–6 expected shares/round; at the observed R≈0.4–0.5 and experiment-era n≈3, the + 8-round CI is materially wider (~±20 pp on the count basis). The endpoint stands as + pre-registered; precision claims are made from the achieved CI, not the projection.)* + +### 2.3 Reproducibility + +**Environment.** Collection runs inside the stack's dashboard container (Python 3.11, +`requests`), which carries the wallet address and Tor SOCKS proxy in its environment; every +wallet-bearing request uses `socks5h` through that proxy. Host cron drives `poll.sh` every +2 minutes via `docker exec -i` (the `-i` is load-bearing — correction #6). + +**Clocks.** Host NTP-synchronized, timezone America/Chicago (UTC−5). Winners-feed timestamps +are UTC; observer share timestamps are miner-set sidechain block timestamps; log records are +host epoch seconds. All joins are in epoch seconds; **paper tables state their timezone +explicitly** (correction: revision 2 mixed UTC and local in one table). + +**First-seen.** A share's first-seen time is the `t` of the earliest log record containing its +height. Measured first-seen lag for every experiment share: ≤ ~2 min (correction #14: an +earlier ">4 h observer backfill" claim traced to a timezone bug in an ad-hoc checker and is +retracted; the settled rule is retained as conservative). + +**Masking.** The wallet appears in raw data only in XvB's masked form; local dumps contain +payout amounts and are private. Any winner can reproduce the delivery measurement for their own +wallet from public data (winners feed + the three observer instances). + +**Result → script → data mapping.** + +| Result | Script | Input data | +|---|---|---| +| Table 2 (all per-round delivery), §3.3, §3.5 | `rounds.py` | winners snapshots, `observer-all-chains-20260810.json`, `prod-db-dump.json`, `experiment-log.jsonl` | +| §3.1 draw fairness | `rounds.py --json` + §2.2 formula | winners snapshots | +| §3.2 collection identity | `observer_check.py`, payout matching | observer dumps, `prod-db-dump.json` | +| §3.4 era ledger (+ sensitivity) | `whale_slice.py` (2h) / `win_stream.py` (6h excess) | `prod-db-dump.json` | +| collection itself | `poll.sh`, `archive-winners.sh` | live | + +### 2.4 Experiment configuration timeline (times UTC) + +| When (UTC) | Change | Why | +|---|---|---| +| 08-02 23:2x | XvB disabled on both boxes | Economics measured negative; baseline | +| 08-04 01:4x | Re-enabled, target Whale; 2-min logger installed | Experiment start | +| 08-05 00:12 | Round 1 won (thin margin — credited 103k falling) | H-margin specimen (§3.5) | +| 08-06 00:5x | Target switched to Mega (unreachable) → controller donates ~253 kH/s | Pin credited ≥2.28× minimum | +| 08-07 01:0x | PPLNS share count hit 0 (P2Pool starved ~14 kH/s) | VIP-gate risk materialized | +| 08-07 01:24 | `XVB_MAX_DONATION_FRACTION=0.65` env + cfg stamping begins | Intended rebalance to ~174k/~94k | +| — | **Cap did not bind**: routed stayed 246–251 kH/s, P2Pool ~15–20 kH/s throughout (pithead issue #898); eligibility nonetheless held (sw ≥ 1 at every subsequent draw; fail count 0) | Regime kept for consistency | + +### 2.5 Metrology corrections log (adversarial audit trail) + +1. Attribution window corrected 2h → 6h (stream-shape measurement); baseline subtraction added. +2. "4 of 15 wins paid zero" retracted — attribution-window artifact. +3. *(Superseded by #14.)* Observer backfill was claimed >4 h. +4. Per-round "stopped early" narratives are Poisson-weak; only aggregates carry conclusions. +5. Forgone Tari merge-mining is an unpriced additional donation cost. +6. Logger v1 wrote nothing (`docker exec` without `-i`); v2 verified end-to-end. +7. Bench e2e contamination guard (shared wallet must not mine main during the window). +8. VIP-era realization endpoint uncertainty flagged; later corrected outright (#16). +9. Power-calculation correction: ±10 pp claim held only at f≈0.10. +10. External methodological review (2026-08-08) — accepted items listed in revision 2. +11. **Round-2 "settled zero" was false** (audit 2026-08-10): its slot was extended to 152 min + and a share landed at +147 min; the 60-min ad-hoc analysis window missed it. The + extended-slot rule was applied inconsistently across rounds. Fixed by `rounds.py`. +12. **Aggregate arithmetic errors**: Σn computed at stale difficulty; delivered work computed + as count × pool-diff instead of Σ actual share difficulty. Fixed by `rounds.py`. +13. **Two settled rounds were missed entirely** (08-09 16:49 and 23:55 UTC) by newest-win-only + ad-hoc checking. Fixed: `rounds.py` enumerates every win in the merged schedule. +14. **Backfill retraction**: every experiment share was first-seen ≤ ~2 min after its chain + timestamp; the ">4 h backfill" observation traced to a timezone bug (wrong epoch for a + round-1 check). Settled rule retained as conservative. +15. **Main-only measurement scope error**: XvB's rules state the bonus applies on main, mini, + or nano; nano shares for this wallet (which never mines nano) and in-slot mini excess + confirm multi-chain delivery. All delivery figures recomputed cross-chain (`rounds.py`); + prior main-only figures understated delivery by ~5–15 pp per era. +16. **VIP-era "42%" retracted**: on-chain recount gives 1.75 shares/win main-chain, ~29% + multi-chain work basis — statistically indistinguishable from the whale era. The shipped + dashboard prior band [0.24, 0.42] requires re-derivation (repo follow-up filed). +17. **PPLNS window correction**: dynamic 2×-network-difficulty cap (~1 h effective on main), + not a fixed 2160-share/6-h window. +18. **Draw-fairness constituents corrected** (34.5%, 9.48 → prediction 0.81/day); the + previously-quoted "exact" 0.84=0.84 match was an artifact of wrong constituents; observed + 0.84/day remains consistent with prediction at n=13. +19. **Stopping-rule precision annotation** (see §2.2): experiment-era n≈3/round, not 5–6. + +### 2.6 Corrections #20–#23 (second adversarial pass, 2026-08-12) + +20. **False zero retracted again**: the closing analysis read a stale chain dump because the + dump-file glob sorted lexicographically ("-final" < ".json"); the 08-12 02:07 round in fact + delivered 24.3%, and the "valid clean settled zero / extension-rule anomaly" narrative of + revision 5 is retracted — all nine experiment rounds delivered. `rounds.py` now selects + dumps by modification time. +21. **Crawl frame misdescribed**: the crawler sampled the 14 *most frequent* winners of ≥29 + qualifying (≥2 wins/30 d), not "every" such winner; frequent winners tilt high (top four + pool 73.7% vs 40.5% for the other ten; Spearman +0.25, n.s.). §3.7 restated. +22. **Clipping-bias story replaced**: max(0, ·) never binds in the crawl data (0/83 slots; + worst-case +0.5 pp). High readings for high-own-baseline wallets stem from baseline + non-identifiability, not clipping; the low-baseline center is ~42–43%. +23. **Published-figure dating**: the 5.92 XMR/yr Whale figure is the July-era value (user-run + script output); the archived 2026-08-10 snapshot reads 4.67 — published estimates fell as + qualifiers left. All break-even claims now state their price basis. + +## 3. Results + +Tables are numbered; Table 2 is the canonical output of `rounds.py`. + +### 3.1 Draw fairness (Q1) — SETTLED + +From the archived 2026-08-02 snapshot (1000 rounds / 45.05 d): whale rounds 34.5% of 22.2/day, +mean 9.48 qualifiers → naive prediction 0.81 wins/day; per-round Σ(1/players) gives 0.84/day. +Observed in the whale tenure: 13 wins / 15.5 eligible days = 0.84/day — **consistent with fair +drawing** (n=13; a ±0.2 band covers both estimates). The published tier figures reproduce from +the feed via the operator's own script (5.84 computed vs 5.92 published, Whale; snapshot +archived). The draw and the operator's arithmetic are internally honest. + +### 3.2 Collection of mined work — SETTLED + +Observer payout records match wallet-confirmed payouts exactly (96/96 over the window checked). +Whale-era expected payout from mined shares (24 main shares × ~2.5 mXMR at logged difficulty +≈ 61 mXMR) is consistent with the measured payout-stream excess (51–79 mXMR across attribution +cutoffs). **Nothing measurable is lost after a share exists.** + +### 3.3 Historical delivered work (Q2) — SETTLED (multi-chain recount, correction #15) + +**Table 2a — historical era (16 wins with slot bounds, 2026-06-23 → 08-02):** +delivered work summed over main+nano (+mini excess where the mini index reaches, 07-31 onward): + +| Era subset | Rounds | Delivered / Advertised | R | +|---|---|---|---| +| VIP-era wins | 3 | 17.0G / 58.8G | 28.9% | +| Whale-era wins | 13 | 79.1G / 239.2G | 33.1% | +| **All historical** | **16** | **96.1G / 298.0G** | **32.3%** | + +Per-round R ranges 18–54%; **no round delivered zero** once all chains are counted. Against +full delivery the deficit is decisive (whale-era main-chain count basis: 24 observed vs ~78 expected, +exact Poisson tail ≈ 8×10⁻¹³; the cross-chain work-basis equivalent is of the same order — +conservatively, p < 10⁻¹⁰). Slots are full length (0 of 16 under ~61.8 min; median 62.0; +extended slots 79–152 min each end shortly after the first share, confirming the +extension rule). **H-short remains rejected.** VIP-era and whale-era delivery are +statistically indistinguishable (28.9% vs 33.1% at these sample sizes), weakening the earlier +margin-based reading of the historical eras. + +### 3.4 Era economics (Q4) — SETTLED for the measured period + +Whale tenure (16.1 d): actual total 0.2810 XMR vs all-P2Pool counterfactual 0.398–0.400 XMR → +**net −0.117 to −0.119 XMR (≈ −0.22 XMR/30d)**, luck cancelled by construction, excluding +forgone Tari (which worsens it). Sensitivity: win-attribution 0.044–0.046 XMR across 2h/6h-excess +windows; the net varies by <0.01 XMR. On a consistent face-value basis: measured realization +≈22–24% vs break-even ≈79–85% (equivalently ~17% vs ~62% on the published-expectation basis — +stated on both bases because revision 2 mixed them). Every donor tier is XMR-negative for this +fleet at measured delivery, robust to the CI (see §3.5). + +### 3.5 Controlled experiment (Q3) — INTERIM: 6 rounds instrumented, 5 settled clean + +**Table 2b — experiment rounds (draws UTC; delivery cross-chain from `rounds.py`):** + +| Draw (UTC) | Margin | Slot | main+nano+mini shares | Delivered / Advertised | R | +|---|---|---|---|---|---| +| 08-05 00:12 | thin (103k → crossed 100k at +19 min) | 62.2 | 1+8+0 | 3.66G / 18.89G | 19.4% | +| 08-06 08:25 | clean | 152 (ext) | 1+7+4 | 5.46G / 13.33G | 41.0% | +| 08-06 14:01 | clean | 83 (ext) | 1+0+1 | 4.54G / 12.73G | 35.6% | +| 08-08 12:41 | clean | 62.0 | 3+0+0 | 10.69G / 12.95G | 82.5% | +| 08-09 16:49 | clean | 62.9 | 1+5+2 | 4.71G / 10.53G | 44.8% | +| 08-09 23:55 | clean | 62.0 | 1+0+1 | 3.65G / 9.96G | 36.6% | +| 08-11 18:17 | clean | 62.1 | 1+0+1 | 4.15G / 17.73G | 23.4% | +| 08-11 22:27 | clean | 62.2 | 1+5+0 | 4.28G / 17.22G | 24.8% | +| 08-12 02:07 | clean (211k, 2.11×; fail 0; sw 13) | 62.0 | 1+0+1 | 3.62G / 14.86G | 24.3% | + +**Final clean-margin aggregate (8 settled rounds): 41.1G / 109.3G = 37.6%, bootstrap 95% CI +[28%, 53%].** Historical for comparison: 32.3% [27%, 38%]; all 25 measured rounds: **33.1% +[28%, 39%]**. **Measured margin effect: +5.3 pp — small, with overlapping CIs.** Per-round +spread stayed extreme throughout (19–83%); fail count 0 across the whole experiment (no +skips), and **every one of the nine instrumented rounds delivered** (revision 5's "clean +settled zero" was a stale-dump artifact — correction #20). + +Final readings (Figures 1–3): (a) delivery is **~⅓ of advertised with at most a small margin +effect** — the interim signal (+16 pp at 5 rounds) settled to +5 pp with overlapping CIs, so +H-margin cannot be a large economic factor for a qualified, share-holding winner; +(b) round 1's "termination" specimen remains ambiguous (share after the crossing); +(c) delivery arrives +throughout and beyond the nominal hour (Figure 2), on all three chains in varying mixes +(Figure 3), with nano bursts at ~full advertised rate — the signature of a prize *rotated* +among chains and duties rather than mined continuously for one target. + +### 3.5.1 Stopping-rule accounting + +Pre-registered: 8 settled clean wins, early-stop on p<0.01 vs the 30% level, hard cap +2026-08-20. Outcome: endpoint reached 2026-08-12 with no early stop (final point estimate sits +ON the historical level, so the early-stop hypothesis test was moot); the annotated precision +expectation (±~20 pp at these n) matched the achieved CI width almost exactly. The experiment +cost ≈0.15 XMR in forgone P2Pool (donated-share hashrate × the fleet's measured P2Pool rate +over the 8.6 instrumented days), plus unpriced Tari. + +### 3.7 Public-winners generalization — FINAL (2026-08-12 crawl; restated per corrections #21–#22) + +Method (§2.2 extension): the **14 most frequent** non-self winners (of ≥29 with ≥2 wins in the +trailing 30 days; the cut falls at a 5-win tie), capped at 6 most recent slots each — **a +frequency-weighted frame, not the whole winner population**. Each masked winner resolved to a +full address by matching miners with main-chain shares inside their own slots (all 14 +resolved); delivery measured as three-chain in-slot work minus the winner's own out-of-slot +baseline rate. Raw data: `data/winners-crawl-20260812.jsonl`; crawler in `analysis/`. + +**Table 3 — population delivery (frequency-weighted frame):** per-winner aggregates 27–125%; +per-winner median 43.9%; pooled 48.1%. Two estimator caveats, quantified: (a) for wallets with +large own baselines the baseline is **non-identifiable** from the observer alone (their own +mining variance swamps the excess term) — the >100% outlier and the mega winner's 45.1% are +flagged unreliable for this reason, and clipping (max(0,·)) is NOT the mechanism (it never +binds; worst case +0.5 pp); (b) frequent winners tilt high (the four most frequent pool to +73.7% vs 40.5% for the other ten; Spearman +0.25, n = 14, n.s.). The clean signal is the +**low-baseline (<35 kH/s) sub-sample: 10 winners, 59 slots, pooled 43.3%, per-winner median +42.3%** — baselines identifiable, clipping negligible. The mega-tier winner (~46% of all +rounds) measures 45.1% (baseline-unreliable). **No sampled winner approaches face value.** + +Conclusion for external validity: this wallet's audited 33% [28, 39] sits at the low-normal +edge of a population whose reliable members center on ~42–43% — the deficit is population-wide +among frequent winners, this wallet is typical, and the shipped estimator band remains +conservative. Residual limits: the frequency-weighted frame and the 30-day recency window. + +### 3.6 Product changes shipped from these findings + +- pithead PR #874 (earnings surfaces temper XvB's published figure by measured realization; + winners-feed expected-wins forecast), PR #877 (target-tier fallback; UI stand-down), + PR #879 (estimated net band on unmeasured boxes) — three shipped changes. +- Issues filed: #892 (in-round hold latency / credited-sag trajectory; its "roughly doubles + income" note should be tempered per §3.5's modest margin effect), #898 + (`XVB_MAX_DONATION_FRACTION` caps the calculator but not the live split). +- Follow-up from correction #16 implemented in PR #900 (open, under operator review): + the estimator band re-derived to the final all-round CI (0.28, 0.39), presented beside + XvB's published figures in a per-tier decision table. + +## 4. Discussion (final for the single-wallet phase) + +The raffle's draw is fair, its payout plumbing is complete, slots run full length, and the +prize provably arrives on all three sidechains — the study's earlier main-only scope +understated XvB's delivery, and this revision corrects it upward. What survives every +correction is a large, reproducible gap between advertised and delivered work: **roughly one +third under every regime measured** (33.1% all-round; 37.6% clean-margin; +5 pp apart with +overlapping CIs), with the advertised figure never approached. The margin mechanism is real in +the rules but measured as small, and its single direct specimen is ambiguous (§3.5, reading b). **Q5 is now substantially answered by the operator's own archived wording.** The raffle +dashboard labels the advertised figure as "Bonus HR: [base] + [donated] Donated by N Donors +(M using GUPAX)" — at archive time, 131.1 kH/s + 2880.3 kH/s from 74 donors, 49 on Gupax +(archived 2026-08-10, `xmrvsbeast-p2pool-dashboard.html`). The advertised bonus is therefore +**a base rig plus the sum of donors' credited averages — a nominal aggregate, not a measured +per-winner delivery commitment.** Two-thirds of donors run Gupax-style time-sliced donation, +so the aggregate is an average of pulsed flows; the measured ~⅓ delivery, the late first +shares, and the full-rate nano bursts are all consistent with the redirect capturing part of +that flow part of the time. The rules page (archived) also confirms verbatim the three-chain +application, the 60-min-plus-until-a-main-share duration (our extended slots key on main +exactly as written), and the archived dashboard itself displays a round at "-17 min" +remaining — an extension captured live. What remains outside observability is only the +redirect's implementation; the constructive next steps are the public-winners generalization +and, if warranted, presenting the archived chain data to the operator. + +### 4.1 Threats to validity + +**Internal**: the audit found and fixed analysis errors (corrections #11–#14) — the canonical +script now prevents the known classes; regime changes moved margin, donation fraction, and +P2Pool reserve together (and the fraction cap did not bind, #898), so margin attribution rests +on the pinned-clean property rather than a factorial design; share arrivals are treated as +Poisson at slowly-drifting logged difficulty. **External**: single wallet; the planned +generalization study (masked-address matching against the observer's miner index, or +`/api/side_blocks_in_window/` per the archived API source) is the designed remedy. +**Construct**: Q5 — the delivery ratio's denominator assumes winner-side continuous hashrate; +if the advertised figure means something else, the ratio measures advertising accuracy rather +than scheduler behavior. Mini-index depth limits the mini-excess term before 07-31 (three +historical rounds carry a "(mini n/a)" flag in `rounds.py` output). + +## 5. Conclusion + +Across 25 measured wins on three sidechains spanning June–August 2026, the XvB raffle +delivered **33.1% of its advertised prize work (95% CI [28%, 39%])**, with at most a small +margin effect (clean-margin experiment: 37.6% [28%, 53%]; +5 pp, CIs overlapping). The draw is fair, prize slots run full length, mined shares pay completely through +PPLNS, and delivery reaches all three sidechains. The advertised figure is, by the operator's +own page wording, a nominal aggregate (base rig + Σ donors' credited averages, two-thirds of +donors time-slicing) — and the measured constant is that **roughly one third of that nominal +aggregate materializes as winner-side work**. Economically the break-even delivery for Whale is +cost ÷ published ≈ 2.88/5.92 ≈ 49% at the July-era published estimate and ≈ 2.88/4.67 ≈ 62% +at the archived 2026-08-10 estimate (published figures fell as qualifiers left). The all-round +CI [28%, 39%] excludes both; the clean-margin CI's upper edge (53%) brushes only the July-era +threshold — and forgone Tari is additive. The pre-registered exit criterion (re-disable unless +the data flips the economics) is met, and the donation is disabled at experiment close. The dashboard shipped from this work now prices the raffle by +measured delivery. The public-winners +generalization is complete (§3.7): the deficit is population-wide, this wallet typical, and +the shipped estimator band [0.27, 0.38] is corroborated as conservative (population median ~44% +with an upward-biased estimator). Remaining future work: presenting the archived chain data to +the operator for the redirect-implementation question, and periodic recalibration of the band +from the continuing daily winners archive. + +**Figures.** Fig. 1: per-round delivery, all 25 rounds. Fig. 2: share-arrival timing (delivery +throughout and beyond the hour). Fig. 3: experiment-round chain composition vs advertised. + +## 6. Data availability + +Two layouts exist. **Public (repository, `docs/research/xvb-delivery-study/`)**: this paper, the +figures, every analysis script, the archived external sources with checksums +(`data/sources/MANIFEST.md`), and the public winners-feed schedule snapshots — everything +needed to audit the method and to reproduce the delivery measurement for any wallet from +public data (winners feed + the three p2pool.observer instances). **Private (operator-held)**: +the wallet's payout records, the box's experiment log, the observer share dumps for this +wallet, and the winners-crawl raw results — withheld because they correlate a masked public +identity with a wallet's financial history; available locally to the operator for +re-verification. The dashboard-sourced 30-day figures in §1 (0.462/0.858) predate the study +folder and motivate but do not enter any Result. The daily winners-feed archive continues to +accrue on the production host. + +## 7. References + +1. XMRvsBeast raffle pages and public files (dashboard, rules, FAQ, reward estimates, winners + feed) — archived 2026-08-10 in `data/sources/` with checksums. +2. XvB `reward_calc.sh` (operator-published calculator; user-supplied copy). +3. P2Pool README and `src/side_chain.cpp` (PPLNS dynamic window, uncle penalty) — archived. +4. Monero `src/cryptonote_config.h` (coinbase unlock, block target) — archived. +5. p2pool.observer API documentation — both the source template/`side_block.go` struct (field + semantics; `inclusion` flag) and the live documentation page (browser-archived 2026-08-11 + past the site's bot challenge; identical for main and mini instances; documents + `/api/side_blocks_in_window/`) — archived; instances: main/mini/nano. +5a. p2pool.io main page, FAQ and pool-API index (browser-archived 2026-08-11) — corroborates + the dynamic PPLNS window (duration = pplnsWeight ÷ hashrate) and the three observer + instances. +6. Pithead repository: PRs #874, #877, #879; issues #866, #872, #892, #898. +7. Analysis scripts and raw data: `analysis/`, `data/` in this folder. diff --git a/docs/research/xvb-delivery-study/README.md b/docs/research/xvb-delivery-study/README.md new file mode 100644 index 00000000..e117c6de --- /dev/null +++ b/docs/research/xvb-delivery-study/README.md @@ -0,0 +1,16 @@ +# XvB delivery study (public record) + +The complete research record of the XMRvsBeast raffle delivery study (June–August 2026): +PAPER.md (IMRAD, with a full adversarial-corrections audit trail), the figures, every +analysis script, checksummed archives of all external sources, and the public winners-feed +schedule snapshots. + +What is deliberately NOT here: the wallet's payout records, the experiment box's operational +log, per-wallet observer share dumps, and raw crawl results — they correlate a masked public +identity with a wallet's financial history (see PAPER.md §6, Data availability). The method +is reproducible for ANY wallet from public data alone: the winners feed plus the three +p2pool.observer instances. + +Headline result: across 25 on-chain-audited won rounds, delivered prize work measured 33.1% +of advertised (95% CI 28–39%), with at most a small donation-margin effect; a 14-winner +public crawl corroborates. See PAPER.md. diff --git a/docs/research/xvb-delivery-study/analysis/archive-winners.sh b/docs/research/xvb-delivery-study/analysis/archive-winners.sh new file mode 100755 index 00000000..58ad78ff --- /dev/null +++ b/docs/research/xvb-delivery-study/analysis/archive-winners.sh @@ -0,0 +1,10 @@ +#!/bin/bash +# Daily full winners-file snapshot: preserves the complete round schedule + qualifier counts +# beyond the file's ~45-day rolling window (via the stack Tor SOCKS; the file carries no wallet). +docker exec -i dashboard python3 /dev/stdin >"$HOME/xvb-experiment/archive/winners-$(date -u +%Y%m%d).txt" 2>>"$HOME/xvb-experiment/err.log" <<'PY' +import os, requests +proxy = os.environ.get("TOR_SOCKS_PROXY", "socks5h://tor:9050") +S = requests.Session() +S.proxies = {"http": proxy, "https": proxy} +print(S.get("https://xmrvsbeast.com/p2pool/winners_recent_full_pub.txt", timeout=60).text, end="") +PY diff --git a/docs/research/xvb-delivery-study/analysis/final_stats.py b/docs/research/xvb-delivery-study/analysis/final_stats.py new file mode 100644 index 00000000..6c483518 --- /dev/null +++ b/docs/research/xvb-delivery-study/analysis/final_stats.py @@ -0,0 +1,16 @@ +#!/usr/bin/env python3 +"""Bootstrap CIs for the paper's headline aggregates (seed pinned; §2.3 mapping row).""" +import json, random, subprocess, sys +random.seed(20260812) +rounds = json.loads(subprocess.run([sys.executable, "rounds.py", "--json"], + capture_output=True, text=True).stdout) +clean = [r for r in rounds if r["era"] == "experiment" and r["draw_utc"] != "08-05 00:12"] +hist = [r for r in rounds if r["era"] == "historical"] +def R(rs): return sum(r["delivered_G"] for r in rs) / sum(r["advertised_G"] for r in rs) +def boot(rs, n=20000): + vals = sorted(R([random.choice(rs) for _ in rs]) for _ in range(n)) + return vals[int(0.025 * n)], vals[int(0.975 * n)] +out = {"clean_R": R(clean), "clean_CI": boot(clean), "hist_R": R(hist), "hist_CI": boot(hist), + "all_R": R(rounds), "all_CI": boot(rounds)} +json.dump(out, open("../figures/final_stats.json", "w"), indent=1) +print(json.dumps(out, indent=1)) diff --git a/docs/research/xvb-delivery-study/analysis/observer_check.py b/docs/research/xvb-delivery-study/analysis/observer_check.py new file mode 100644 index 00000000..3d671773 --- /dev/null +++ b/docs/research/xvb-delivery-study/analysis/observer_check.py @@ -0,0 +1,30 @@ +import json, os, time, urllib.request, sqlite3 + +# Wallet from the container env (never printed in full); Tor SOCKS from the same config the +# dashboard's own XvB client uses — the query carries the wallet, so clearnet would correlate +# IP <-> wallet (#163). +addr = os.environ.get("MONERO_WALLET_ADDRESS", "") +proxy = os.environ.get("TOR_SOCKS_PROXY", "socks5h://tor:9050") +print("wallet:", addr[:8] + "..." + addr[-8:], "| proxy:", proxy) + +import requests # available in the dashboard image + +S = requests.Session() +S.proxies = {"http": proxy, "https": proxy} +BASE = "https://p2pool.observer/api" + +info = S.get(f"{BASE}/miner_info/{addr}", timeout=60) +print("miner_info HTTP", info.status_code) +mi = info.json() if info.status_code == 200 else {} +print("main-chain miner id:", mi.get("id"), "| shares total:", json.dumps(mi.get("shares"))) + +# All recorded main-chain shares for this wallet (observer caps page size; ask big). +sh = S.get(f"{BASE}/shares?miner={addr}&limit=200", timeout=60) +print("shares HTTP", sh.status_code) +shares = sh.json() if sh.status_code == 200 else [] +print("shares returned:", len(shares)) +for s in shares[:50]: + ts = s.get("timestamp") + print(" share:", time.strftime("%m-%d %H:%M", time.localtime(ts)), + "| height", s.get("side_height"), "| diff", s.get("difficulty"), + "| uncle" if s.get("parent") else "") diff --git a/docs/research/xvb-delivery-study/analysis/poll.sh b/docs/research/xvb-delivery-study/analysis/poll.sh new file mode 100755 index 00000000..858b236f --- /dev/null +++ b/docs/research/xvb-delivery-study/analysis/poll.sh @@ -0,0 +1,74 @@ +#!/bin/bash +# XvB delivery experiment v2 (2026-08) — see README.md beside this script for the methodology. +# One self-contained poll per cron firing; every fetch fails independently and is recorded as +# its own *_err field, so a Tor hiccup degrades one field, never the record. Wallet-bearing +# fetches ride the stack Tor SOCKS (#163). +docker exec -i dashboard python3 - <<'EOF' >>"$HOME/xvb-experiment/log.jsonl" 2>>"$HOME/xvb-experiment/err.log" +import json, os, re, time, requests, urllib.request + +addr = os.environ["MONERO_WALLET_ADDRESS"] +proxy = os.environ.get("TOR_SOCKS_PROXY", "socks5h://tor:9050") +S = requests.Session() +S.proxies = {"http": proxy, "https": proxy} +rec = {"t": round(time.time())} + +def grab(key, fn): + try: + rec[key] = fn() + except Exception as e: + rec[key + "_err"] = str(e)[:60] + +# 1. Delivered work, on-chain: our newest p2pool-main shares (height/ts/difficulty). +grab("shares", lambda: [ + {"h": x.get("side_height"), "ts": x.get("timestamp"), "d": x.get("difficulty")} + for x in S.get(f"https://p2pool.observer/api/shares?miner={addr}&limit=10", timeout=50).json() +]) +# 2. Collection, on-chain: which main blocks paid us, how much, when. +grab("payouts", lambda: [ + {"h": x.get("main_height"), "ts": x.get("timestamp"), "a": x.get("coinbase_reward")} + for x in S.get(f"https://p2pool.observer/api/payouts/{addr}?search_limit=10", timeout=50).json() +]) +# 3. Conversion context: pool hashrate + sidechain difficulty at this instant (expected-share math). +def _pool(): + p = S.get("https://p2pool.observer/api/pool_info", timeout=50).json() + side = p.get("sidechain", {}) + return {"diff": (side.get("difficulty")), "height": side.get("height"), + "mainchain_diff": (p.get("mainchain", {}) or {}).get("difficulty")} +grab("pool", _pool) +# 4. Our credited averages + fail count from XvB — the termination-margin timeline. +def _cred(): + h = S.get("https://xmrvsbeast.com/cgi-bin/p2pool_bonus_history.cgi", + params={"address": addr}, timeout=50).text + out = {} + m = re.search(r"1hr avg:\s*([\d.]+\s*[kKmM]?H/s)", h) + out["1h"] = m.group(1) if m else None + m = re.search(r"24hr avg:\s*([\d.]+\s*[kKmM]?H/s)", h) + out["24h"] = m.group(1) if m else None + m = re.search(r"Fail Count:\s*(\d+)", h) + out["fail"] = int(m.group(1)) if m else None + return out +grab("cred", _cred) +# 5. The round schedule + advertised prize: top rows of XvB's winners file. A new row appears +# when a round is drawn, so a 2-min cadence bounds every round start (ours AND the next +# round's — which bounds OUR round's true end) to ±2 min, with the advertised bonus HR. +grab("rounds", lambda: S.get( + "https://xmrvsbeast.com/p2pool/winners_recent_full_pub.txt", timeout=50 +).text.splitlines()[:3]) +# 6. Our own side of the ledger, locally: what the proxy is actually routing and the mode — +# distinguishes "our donation sagged" from "XvB delivered less" without inference. +def _local(): + d = json.load(urllib.request.urlopen("http://127.0.0.1:8000/api/state", timeout=10)) + hr = d.get("hashrate", {}) + return {"mode": hr.get("mode_name"), "routed_1h": hr.get("xvb_routed_1h"), + "p2p_1h": hr.get("p2p_1h"), "total": hr.get("total"), + "cred_1h": hr.get("xvb_1h"), "stale": hr.get("xvb_stale"), + "sw": (d.get("shares_window") or {}).get("count"), + "xmr_price": (d.get("energy") or {}).get("xmr_price")} +grab("local", _local) +# 7. The regime this record was taken under, from the container env itself — analysis needs no +# external timeline to know which donation configuration produced each observation. +grab("cfg", lambda: {"level": os.environ.get("XVB_DONATION_LEVEL"), + "frac": os.environ.get("XVB_MAX_DONATION_FRACTION", "0.85")}) + +print(json.dumps(rec)) +EOF diff --git a/docs/research/xvb-delivery-study/analysis/round2_final.py b/docs/research/xvb-delivery-study/analysis/round2_final.py new file mode 100644 index 00000000..72ce6b35 --- /dev/null +++ b/docs/research/xvb-delivery-study/analysis/round2_final.py @@ -0,0 +1,14 @@ +import json, time +WIN = 1786021262.0 # 08-06 09:01:02 local +rows = [json.loads(l) for l in open("/home/vijit/xvb-experiment/log.jsonl")] +r = rows[-1] +shares = [s for s in r.get("shares", []) if s["ts"] and s["ts"] >= WIN - 60] +diff = r["pool"]["diff"] +adv = 3536.5e3 +work = sum(s["d"] for s in shares) +exp = adv * 3600 +print(f"ROUND 2 FINAL (clean margin): {len(shares)} shares, delivered {work/1e9:.2f}G vs {exp/1e9:.2f}G expected -> {100*work/exp:.0f}%") +for s in shares: + print(f" share +{(s['ts']-WIN)/60:.1f} min, diff {s['d']/1e9:.2f}G") +cred = [x.get("cred", {}).get("1h") for x in rows if WIN <= x["t"] <= WIN + 4500] +print("credited min through round:", min(c for c in cred if c)) diff --git a/docs/research/xvb-delivery-study/analysis/round_live.py b/docs/research/xvb-delivery-study/analysis/round_live.py new file mode 100644 index 00000000..61e64198 --- /dev/null +++ b/docs/research/xvb-delivery-study/analysis/round_live.py @@ -0,0 +1,35 @@ +import json, time, datetime + +rows = [json.loads(l) for l in open("/home/vijit/xvb-experiment/log.jsonl")] +r = rows[-1] +now = r["t"] +print("latest poll:", time.strftime("%H:%M:%S", time.localtime(now)), + "| errors:", [k for k in r if k.endswith("_err")] or "none") +win = None +for x in rows: + for line in x.get("rounds", []): + if line.startswith("48LNi6pk"): + f = line.split() + ts = datetime.datetime.fromisoformat(f[1] + " " + f[2]).replace( + tzinfo=datetime.timezone.utc).timestamp() + if win is None or ts > win[0]: + win = (ts, f[3], f[7], f[8]) +print("WIN:", time.strftime("%m-%d %H:%M:%S", time.localtime(win[0])), + "| advertised:", win[1], "| players:", win[2], "| type:", win[3]) +mins = (now - win[0]) / 60 +print(f"round age: {mins:.1f} min") +shares = [s for s in r.get("shares", []) if s["ts"] and s["ts"] >= win[0] - 60] +diff = r["pool"]["diff"] +adv = float(win[1].replace("kH/s", "")) * 1000 +exp_work = adv * min(mins, 60) * 60 +work = sum(s["d"] for s in shares) +print(f"shares so far: {len(shares)} | delivered {work/1e9:.2f}G vs expected {exp_work/1e9:.2f}G " + f"-> delivery {100*work/exp_work if exp_work else 0:.0f}%") +for s in shares: + off = (s["ts"] - win[0]) / 60 + print(f" share +{off:5.1f} min | diff {s['d']/1e9:.2f}G") +print("--- credited/routed through round ---") +for x in rows: + if win[0] - 240 <= x["t"] <= now and (x["t"] - win[0]) % 360 < 120: + print(time.strftime("%H:%M", time.localtime(x["t"])), + x.get("cred", {}).get("1h"), "| routed", (x.get("local") or {}).get("routed_1h")) diff --git a/docs/research/xvb-delivery-study/analysis/rounds.py b/docs/research/xvb-delivery-study/analysis/rounds.py new file mode 100644 index 00000000..bf2d0f80 --- /dev/null +++ b/docs/research/xvb-delivery-study/analysis/rounds.py @@ -0,0 +1,133 @@ +#!/usr/bin/env python3 +"""Canonical per-round delivery analysis — THE single source of truth for the study's +delivery numbers (supersedes the ad-hoc scripts that produced corrections #11-#13). + +For every win of ours found in the archived round schedules: + slot = draw -> next draw (consecutive rows of the merged winners snapshots) + delivered = sum of share difficulty on EACH sidechain (main / mini / nano) inside the slot, + with the wallet's own mini mining subtracted as baseline work (we mine mini + ourselves; main and nano are XvB-only for this wallet) + advertised = advertised bonus HR (winners row) x min(slot, 60 min) + delivery R = delivered / advertised (difficulty-weighted, cross-chain) + +Data inputs (all in ../data/): winners-*.txt + sources/xmrvsbeast-winners*.txt snapshots, +observer-all-chains-20260810.json, prod-db-dump.json (hashrate_hourly for mini baseline), +experiment-log.jsonl (credited margins per experiment round). +Usage: python3 rounds.py [--json] +""" +import glob +import json +import os +import sys +from datetime import datetime, timezone + +D = os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "data") +MASK = "48LNi6pk" +EXPERIMENT_START = datetime(2026, 8, 4, 1, 0, tzinfo=timezone.utc).timestamp() + +# --- round schedule: union of every archived winners snapshot --------------------------- +rows = {} +for path in glob.glob(f"{D}/winners-*.txt") + glob.glob(f"{D}/sources/xmrvsbeast-winners*.txt"): + for line in open(path): + f = line.split() + if len(f) < 9: + continue + try: + ts = datetime.fromisoformat(f[1] + " " + f[2]).replace(tzinfo=timezone.utc).timestamp() + except ValueError: + continue + rows[round(ts)] = {"ts": ts, "who": f[0], "adv": float(f[3].replace("kH/s", "")) * 1e3, + "players": int(f[7]), "typ": f[8]} +# experiment log's rounds stream adds rows newer than any snapshot +logpath = f"{D}/experiment-log.jsonl" +if os.path.exists(logpath): + for line in open(logpath): + try: + r = json.loads(line) + except json.JSONDecodeError: + continue + for row in r.get("rounds") or []: + f = row.split() + if len(f) < 9: + continue + try: + ts = datetime.fromisoformat(f[1] + " " + f[2]).replace(tzinfo=timezone.utc).timestamp() + except ValueError: + continue + rows.setdefault(round(ts), {"ts": ts, "who": f[0], "adv": float(f[3].replace("kH/s", "")) * 1e3, + "players": int(f[7]), "typ": f[8]}) +sched = sorted(rows.values(), key=lambda r: r["ts"]) +draws = [r["ts"] for r in sched] + +# --- shares on all three chains --------------------------------------------------------- +import glob as _g +# newest by mtime, NOT by name (correction #20: "-final" sorts before ".json" lexicographically, +# which silently served a stale dump and manufactured a false zero round) +_chains_file = max(_g.glob(f"{D}/observer-all-chains-*.json"), key=os.path.getmtime) +chains = json.load(open(_chains_file)) +mini_floor = min((s["ts"] for s in chains["mini"]), default=None) # mini dump depth limit + +# --- our own mini baseline (H/s) from hourly hashrate dump ------------------------------ +hh = {r["hour"]: r["p2pool"] for r in json.load(open(f"{D}/prod-db-dump.json"))["hashrate_hourly"]} + +def own_mini_rate(ts): + h = int(ts // 3600) * 3600 + for cand in (h, h - 3600, h + 3600): + if hh.get(cand): + return hh[cand] + return 0.0 + +# --- per-round accounting --------------------------------------------------------------- +def slot_of(ts): + later = [d for d in draws if d > ts + 1] + return (min(later) - ts) if later else None + +out = [] +for r in sched: + if not r["who"].startswith(MASK): + continue + slot = slot_of(r["ts"]) + if slot is None: + continue + per = {} + for chain, shares in chains.items(): + inslot = [s for s in shares if s["ts"] and r["ts"] - 60 <= s["ts"] <= r["ts"] + slot] + per[chain] = {"n": len(inslot), "work": sum(s["d"] for s in inslot), + "offs": sorted(round((s["ts"] - r["ts"]) / 60, 1) for s in inslot)} + # mini baseline: our own expected mini work during the slot + base = own_mini_rate(r["ts"]) * slot + mini_excess = max(0.0, per["mini"]["work"] - base) + mini_covered = mini_floor is not None and r["ts"] >= mini_floor + delivered = per["main"]["work"] + per["nano"]["work"] + (mini_excess if mini_covered else 0.0) + advertised = r["adv"] * min(slot, 3600) + out.append({ + "draw_utc": datetime.fromtimestamp(r["ts"], timezone.utc).strftime("%m-%d %H:%M"), + "ts": r["ts"], "typ": r["typ"], "players": r["players"], + "adv_MHs": round(r["adv"] / 1e6, 2), "slot_min": round(slot / 60, 1), + "main_n": per["main"]["n"], "main_offs": per["main"]["offs"], + "nano_n": per["nano"]["n"], "mini_n": per["mini"]["n"], + "mini_covered": mini_covered, + "mini_excess_G": round(mini_excess / 1e9, 2) if mini_covered else None, + "delivered_G": round(delivered / 1e9, 2), + "advertised_G": round(advertised / 1e9, 2), + "R": round(delivered / advertised, 3), + "era": "experiment" if r["ts"] >= EXPERIMENT_START else "historical", + }) + +if "--json" in sys.argv: + print(json.dumps(out, indent=1)) +else: + hdr = f"{'draw(UTC)':>11} {'type':12} {'adv':>5} {'slot':>6} {'main':>4} {'nano':>4} {'mini':>4} {'delG':>6} {'advG':>6} {'R':>6} era" + print(hdr) + for o in out: + print(f"{o['draw_utc']:>11} {o['typ']:12} {o['adv_MHs']:>5} {o['slot_min']:>6} " + f"{o['main_n']:>4} {o['nano_n']:>4} {o['mini_n']:>4} " + f"{o['delivered_G']:>6} {o['advertised_G']:>6} {o['R']:>6.1%} {o['era']}" + + ("" if o["mini_covered"] else " (mini n/a)")) + for era in ("historical", "experiment"): + sub = [o for o in out if o["era"] == era] + if not sub: + continue + del_t = sum(o["delivered_G"] for o in sub) + adv_t = sum(o["advertised_G"] for o in sub) + print(f"{era}: {len(sub)} rounds, R = {del_t:.1f}G / {adv_t:.1f}G = {del_t/adv_t:.1%}") diff --git a/docs/research/xvb-delivery-study/analysis/vip_stream.py b/docs/research/xvb-delivery-study/analysis/vip_stream.py new file mode 100644 index 00000000..b3890a04 --- /dev/null +++ b/docs/research/xvb-delivery-study/analysis/vip_stream.py @@ -0,0 +1,20 @@ +import sqlite3, time +c = sqlite3.connect("/data/mining_data.db") +# VIP era: everything before the whale era began. +whale_lo = list(c.execute("select min(ts) from xvb_history where avg_24h>=100000"))[0][0] +wins = [r[0] for r in c.execute("select ts from raffle_wins where ts < ? order by ts", (whale_lo,))] +if not wins: + print("no pre-whale wins"); raise SystemExit +lo = wins[0] - 7 * 86400 +pays = list(c.execute("select ts, amount_atomic from payouts where chain='monero' and ts between ? and ?", (lo, whale_lo))) +H, MAXOFF = 3600.0, 8 +def near(t): return any(0 <= t - w < MAXOFF * H for w in wins) +base_amt = sum(a for t, a in pays if not near(t)) / 1e12 +base_hours = (whale_lo - lo) / H - MAXOFF * len(wins) # approx; wins are far apart +base_rate = base_amt / base_hours +gross = sum(a for t, a in pays if near(t)) / 1e12 +excess = gross - base_rate * MAXOFF * len(wins) +print(f"VIP era: {len(wins)} wins from {time.strftime('%m-%d', time.localtime(wins[0]))}, baseline {base_rate*1000:.3f} mXMR/h") +print(f"gross in 8h windows {gross*1000:.1f} mXMR, excess {excess*1000:.1f} = {excess/len(wins)*1000:.2f} mXMR/win") +# face value per VIP-era win: same bonus rig, so same ~17.5 face; realization: +print(f"realization vs 17.5 mXMR face: {excess/len(wins)/0.0175*100:.0f}%") diff --git a/docs/research/xvb-delivery-study/analysis/whale_slice.py b/docs/research/xvb-delivery-study/analysis/whale_slice.py new file mode 100644 index 00000000..6a265b7a --- /dev/null +++ b/docs/research/xvb-delivery-study/analysis/whale_slice.py @@ -0,0 +1,20 @@ +import sqlite3, time +c = sqlite3.connect("/data/mining_data.db") +fmt = lambda t: time.strftime("%m-%d %H:%M", time.localtime(t)) +rows = list(c.execute("select ts from xvb_history where avg_24h>=100000 order by ts")) +lo, hi = rows[0][0], rows[-1][0] +days = (hi - lo) / 86400 +print("whale era:", fmt(lo), "->", fmt(hi), f"({days:.1f} days)") +wins = [r[0] for r in c.execute("select ts from raffle_wins where ts between ? and ? order by ts", (lo, hi + 7200))] +pays = list(c.execute("select ts, amount_atomic from payouts where chain='monero' and ts between ? and ?", (lo, hi + 7200))) +tot = sum(a for _, a in pays) / 1e12 +W = sum(a for t, a in pays if any(0 <= t - w <= 7200 for w in wins)) / 1e12 +P = tot - W +p2p, xvb = list(c.execute("select avg(v_p2pool), avg(v_xvb) from history where timestamp between ? and ?", (lo, hi)))[0] +cf = P * (p2p + xvb) / p2p +print(f"wins in era: {len(wins)}") +print(f"total payouts: {tot:.4f} XMR | xvb-attributed(2h): {W:.4f} | p2pool: {P:.4f}") +print(f"avg split: p2pool {p2p/1000:.1f} kH/s, xvb {xvb/1000:.1f} kH/s") +print(f"counterfactual all-p2pool: {cf:.4f} XMR") +print(f"whale-era net vs counterfactual: {tot-cf:+.4f} XMR over {days:.1f}d = {(tot-cf)/days*30:+.4f} XMR/30d") +print(f"realized per win: {W/len(wins)*1000:.2f} mXMR | xvb income per day: {W/days*1000:.2f} mXMR | forgone per day: {(cf-P)/days*1000:.2f} mXMR") diff --git a/docs/research/xvb-delivery-study/analysis/win_stream.py b/docs/research/xvb-delivery-study/analysis/win_stream.py new file mode 100644 index 00000000..519d61ab --- /dev/null +++ b/docs/research/xvb-delivery-study/analysis/win_stream.py @@ -0,0 +1,67 @@ +import sqlite3, time + +c = sqlite3.connect("/data/mining_data.db") +# Whale era bounds (credited 24h >= 100k), padded so post-win streams fit inside. +rows = list(c.execute("select ts from xvb_history where avg_24h>=100000 order by ts")) +lo, hi = rows[0][0], rows[-1][0] +wins = [r[0] for r in c.execute("select ts from raffle_wins where ts between ? and ? order by ts", (lo, hi))] +pays = list(c.execute("select ts, amount_atomic from payouts where chain='monero' and ts between ? and ?", (lo, hi + 12 * 3600))) + +H = 3600.0 +MAXOFF = 12 # hours after a win we examine + +# Baseline: payout rate in hours NOT within MAXOFF hours after any win. +def near_win(t): + return any(0 <= t - w < MAXOFF * H for w in wins) + +base_amt = sum(a for t, a in pays if lo <= t <= hi and not near_win(t)) / 1e12 +# covered time: era duration minus union of win windows (approximate union by merging) +ivals = sorted((w, min(w + MAXOFF * H, hi)) for w in wins) +merged = [] +for s, e in ivals: + if merged and s <= merged[-1][1]: + merged[-1][1] = max(merged[-1][1], e) + else: + merged.append([s, e]) +covered = sum(e - s for s, e in merged) +base_hours = (hi - lo - covered) / H +base_rate = base_amt / base_hours # XMR per hour, away from wins +print(f"era {time.strftime('%m-%d', time.localtime(lo))}->{time.strftime('%m-%d', time.localtime(hi))}, " + f"{len(wins)} wins; baseline {base_rate*1000:.3f} mXMR/h over {base_hours:.0f} clean hours") + +# Bucket every payout by hours-since the NEAREST PRECEDING win (within MAXOFF h). +buckets = [0.0] * MAXOFF +counts = [0] * MAXOFF +for t, a in pays: + prevs = [t - w for w in wins if 0 <= t - w < MAXOFF * H] + if prevs: + off = int(min(prevs) // H) + buckets[off] += a / 1e12 + counts[off] += 1 +# Bucket exposure: how many win-hours actually elapsed at each offset (era-end + overlap trimmed). +# Overlap: an hour claimed by a *nearer* preceding win is not exposure for the earlier win. +expo = [0.0] * MAXOFF +for i, w in enumerate(wins): + for off in range(MAXOFF): + s, e = w + off * H, w + (off + 1) * H + e = min(e, hi + 12 * 3600) + if e <= s: + continue + # trim any part where a later win is nearer + later = [x for x in wins if s < x < e] # a win starting inside this hour claims the rest + if any(x <= s for x in wins if x > w): # a later win started before this hour: not ours + continue + span = (min(later) - s) if later else (e - s) + expo[off] += span / H + +print(f"{'h after win':>11} {'payouts':>8} {'XMR':>8} {'baseline':>9} {'excess mXMR':>12}") +cum = 0.0 +for off in range(MAXOFF): + expected = base_rate * expo[off] + excess = buckets[off] - expected + cum += excess + print(f"{off:>11} {counts[off]:>8} {buckets[off]:.4f} {expected:>9.4f} {excess*1000:>12.2f} cum {cum*1000:7.2f}") +print(f"\nper-win excess by cutoff: 2h {sum(buckets[:2]) - base_rate*sum(expo[:2]):.4f} XMR /{len(wins)} wins") +for cut in (2, 4, 6, 8, 10, 12): + ex = sum(buckets[:cut]) - base_rate * sum(expo[:cut]) + print(f" cutoff {cut:>2}h: total excess {ex*1000:7.2f} mXMR = {ex/len(wins)*1000:6.2f} mXMR/win") diff --git a/docs/research/xvb-delivery-study/analysis/winners_crawl.py b/docs/research/xvb-delivery-study/analysis/winners_crawl.py new file mode 100644 index 00000000..146a6abb --- /dev/null +++ b/docs/research/xvb-delivery-study/analysis/winners_crawl.py @@ -0,0 +1,161 @@ +"""Public-winners generalization crawl (runs inside the dashboard container on prod, via Tor). + +For a sample of OTHER winners' recent rounds: resolve masked winner -> full address by matching +against miners who found main-chain shares inside the winner's own slot; then measure each +resolved winner's three-chain in-slot delivered work vs their own out-of-slot baseline. +Writes JSON progress to stdout lines; final result as one JSON object on the last line. +Polite: ~1 request / 1.6 s, sequential, cached. +""" +import json, os, re, time, urllib.request, random +import requests + +ADDR = os.environ["MONERO_WALLET_ADDRESS"] +PROXY = os.environ.get("TOR_SOCKS_PROXY", "socks5h://tor:9050") +S = requests.Session() +S.proxies = {"http": PROXY, "https": PROXY} +BASES = {"main": "https://p2pool.observer", "mini": "https://mini.p2pool.observer", + "nano": "https://nano.p2pool.observer"} +STATE = "/tmp/winners_crawl_state.json" +_last = [0.0] + +def get(url, timeout=60): + wait = 1.6 + random.random() * 0.6 - (time.time() - _last[0]) + if wait > 0: + time.sleep(wait) + _last[0] = time.time() + for attempt in (1, 2, 3): + try: + r = S.get(url, timeout=timeout) + if r.status_code == 200: + return r.json() + if r.status_code == 404: + return None + except Exception: + pass + time.sleep(3 * attempt) + return None + +# ---- 1. winner sample from the on-box winners archives --------------------------------- +import glob, datetime +rows = {} +for path in glob.glob("/data/crawl-archives/winners-*.txt"): + for line in open(path): + f = line.split() + if len(f) < 9: + continue + try: + ts = datetime.datetime.fromisoformat(f[1] + " " + f[2]).replace( + tzinfo=datetime.timezone.utc).timestamp() + except ValueError: + continue + rows[round(ts)] = (ts, f[0], float(f[3].replace("kH/s", "")) * 1e3, f[8]) +sched = sorted(rows.values()) +draws = [r[0] for r in sched] +now = time.time() +OUR = ADDR[:8] +cands = {} +for i, (ts, who, adv, typ) in enumerate(sched): + if who.startswith(OUR) or now - ts > 30 * 86400 or now - ts < 8 * 3600: + continue + if typ not in ("donor_whale", "donor_mega", "donor_vip"): + continue + nxt = draws[i + 1] if i + 1 < len(draws) else None + if not nxt: + continue + cands.setdefault(who, []).append({"ts": ts, "slot": nxt - ts, "adv": adv, "typ": typ}) +# winners with >=2 recent slots, biggest first; cap winners and slots for politeness +sample = sorted(((w, sl) for w, sl in cands.items() if len(sl) >= 2), + key=lambda x: -len(x[1]))[:14] +sample = [(w, sorted(sl, key=lambda s: -s["ts"])[:6]) for w, sl in sample] +print(json.dumps({"progress": "sample", "winners": len(sample), + "slots": sum(len(s) for _, s in sample)}), flush=True) + +# ---- 2. time -> main side-height anchors from our own shares ---------------------------- +mine = get(f"{BASES['main']}/api/shares?miner={ADDR}&limit=100") +anchors = sorted((s["timestamp"], s["side_height"]) for s in mine) +t0, h0 = anchors[0] +t1, h1 = anchors[-1] +rate = (h1 - h0) / (t1 - t0) # side blocks per second (~0.1) +def height_at(ts): + return int(h0 + (ts - t0) * rate) + +# ---- 3. resolve masked winners via in-slot main share miners ---------------------------- +id_addr = {} +def resolve_id(mid): + if mid in id_addr: + return id_addr[mid] + mi = get(f"{BASES['main']}/api/miner_info/{mid}") + a = (mi or {}).get("address") or "" + id_addr[mid] = a + return a + +def mask(a): + return f"{a[:8]}...{a[-8:]}" if len(a) > 16 else None + +resolved = {} +for who, slots in sample: + full = None + for sl in slots: + hs = height_at(sl["ts"]) - 6 + span = int(sl["slot"] * rate) + 12 + blocks = get(f"{BASES['main']}/api/side_blocks_in_window?window={min(span, 900)}&from={hs + min(span, 900)}") + if not isinstance(blocks, list): + continue + miners = [] + for b in blocks: + mid = b.get("miner") + if mid is not None and mid not in miners: + miners.append(mid) + # frequency-ascending: rare in-slot miners are likelier the bonus target + for mid in sorted(miners, key=lambda m: sum(1 for b in blocks if b.get("miner") == m)): + a = resolve_id(mid) + if a and mask(a) == who: + full = a + break + if full: + break + resolved[who] = full + print(json.dumps({"progress": "resolve", "winner": who, "resolved": bool(full), + "cache": len(id_addr)}), flush=True) + json.dump({"resolved": resolved}, open(STATE, "w")) + +# ---- 4. per resolved winner: three-chain history, in-slot vs baseline ------------------- +results = [] +for who, slots in sample: + full = resolved.get(who) + if not full: + results.append({"winner": who, "resolved": False, "n_slots": len(slots)}) + continue + hist = {} + for ch, base in BASES.items(): + sh = get(f"{base}/api/shares?miner={full}&limit=500") + hist[ch] = [{"ts": x.get("timestamp"), "d": x.get("difficulty")} for x in (sh or [])] + span_lo = min((s["ts"] for ch in hist.values() for s in ch), default=None) + per_slots = [] + for sl in slots: + inw = 0.0 + for ch, shares in hist.items(): + inw += sum(s["d"] for s in shares if s["ts"] and sl["ts"] - 60 <= s["ts"] <= sl["ts"] + sl["slot"]) + per_slots.append({"ts": sl["ts"], "adv_work": sl["adv"] * min(sl["slot"], 3600), + "in_work": inw, "slot": sl["slot"], "typ": sl["typ"]}) + # baseline: winner's own out-of-slot share rate over their covered span (per chain summed) + slot_ivals = [(sl["ts"] - 60, sl["ts"] + sl["slot"]) for sl in slots] + def in_any_slot(ts): + return any(a <= ts <= b for a, b in slot_ivals) + out_work = sum(s["d"] for ch in hist.values() for s in ch + if s["ts"] and not in_any_slot(s["ts"])) + cover = {ch: (max((s["ts"] for s in shares), default=0) - min((s["ts"] for s in shares), default=0)) + for ch, shares in hist.items() if shares} + span = max(cover.values(), default=0) + base_rate = (out_work / span) if span > 3600 else 0.0 # H/s equivalent + for ps in per_slots: + ps["baseline_work"] = base_rate * ps["slot"] + ps["excess"] = max(0.0, ps["in_work"] - ps["baseline_work"]) + ps["R"] = ps["excess"] / ps["adv_work"] + results.append({"winner": who, "resolved": True, "address_len": len(full), + "base_rate_Hs": round(base_rate), "slots": per_slots}) + print(json.dumps({"progress": "measured", "winner": who, + "R_slots": [round(p["R"], 3) for p in per_slots]}), flush=True) + json.dump({"resolved": resolved, "results": results}, open(STATE, "w")) + +print(json.dumps({"final": True, "results": results}), flush=True) diff --git a/docs/research/xvb-delivery-study/data/sources/MANIFEST.md b/docs/research/xvb-delivery-study/data/sources/MANIFEST.md new file mode 100644 index 00000000..67e94ced --- /dev/null +++ b/docs/research/xvb-delivery-study/data/sources/MANIFEST.md @@ -0,0 +1,128 @@ +# Source archive manifest + +All files fetched 2026-08-10 with `curl -sSL --fail --max-time 60` (2 tries per URL). +Hashes are `shasum -a 256` over the archived file. + +## Archived + +### github-schernykh-p2pool-repo-page.html +- Source: https://github.com/SChernykh/p2pool +- Fetched: 2026-08-10 +- SHA-256: `9f51f11bb6860e379c2ead923d82cf51ff0d672502618488b340a6abc458b451` +- What: P2Pool README (GitHub repo page) — PPLNS window definition, sidechain block time, uncle support, payout proportionality. + +### p2pool-README.md +- Source: https://raw.githubusercontent.com/SChernykh/p2pool/master/README.md +- Fetched: 2026-08-10 +- SHA-256: `8173fc1ea0269e8d8003c741d4dfc9ac33f12f9f3781a90d2524fc4425cdd40d` +- What: P2Pool README, raw markdown — same content as the repo page without GitHub chrome; the study-cited canonical copy. + +### p2pool-side_chain.cpp +- Source: https://raw.githubusercontent.com/SChernykh/p2pool/master/src/side_chain.cpp +- Fetched: 2026-08-10 +- SHA-256: `ddbbd8575e2c40056eeaedb479ae5ddfbcd974ebe4436012b7c1bcaf7e86eced` +- What: P2Pool source — dynamic PPLNS window mechanism, uncle penalty, default sidechain parameters. + +### monero-cryptonote_config.h +- Source: https://raw.githubusercontent.com/monero-project/monero/master/src/cryptonote_config.h +- Fetched: 2026-08-10 +- SHA-256: `4c8a157b66e00a6bb20ebf377cf677632ec5611c5e57b9719f32e8116c84538f` +- What: Monero source — coinbase maturity (60-block unlock) and 120 s block target time (verifies the ~2 h unlock claim). + +### xmrvsbeast-p2pool-dashboard.html +- Source: https://xmrvsbeast.com/p2pool/ +- Fetched: 2026-08-10 +- SHA-256: `0fa4b3f39f5fd3ed0a97ab94f78db16602f0921fa7ea0553aa77e02b42810de2` +- What: XvB raffle dashboard main page — the site's label for the bonus hashrate figure and links to rules/FAQ. + +### xmrvsbeast-rules.html +- Source: https://xmrvsbeast.com/p2pool/rules.html +- Fetched: 2026-08-10 +- SHA-256: `23d8668e0d36291b0c23a4e6bdd91f760907c55cbb20bd604cbc2e984b484996` +- What: Raffle rules page — round duration/extension, skip/fail rules, termination rule, tier thresholds, sidechain-application rule. + +### xmrvsbeast-faq.html +- Source: https://xmrvsbeast.com/p2pool/faq.html +- Fetched: 2026-08-10 +- SHA-256: `2163a4671f6db102a8f1d7da754dfda9b5f7dd8d3e8e89bcbcfe5f83341a35fc` +- What: Raffle FAQ — VIP/PPLNS share requirement wording and API endpoints. + +### xmrvsbeast-reward_estimate_pub.txt +- Source: https://xmrvsbeast.com/p2pool/reward_estimate_pub.txt +- Fetched: 2026-08-10 +- SHA-256: `acffb6167a4b8809ea2e7f0e0809909259c62fee7bd39fd39e5e65882390af6a` +- What: Published per-tier reward estimates, fetched verbatim — no methodology text or timestamp in the file. + +### xmrvsbeast-winners_recent_full_pub.txt +- Source: https://xmrvsbeast.com/p2pool/winners_recent_full_pub.txt +- Fetched: 2026-08-10 +- SHA-256: `0b390fbf9ffcce9ab1a47280b0d208fe5a2aae3776121ba8fd59f3241916007f` +- What: Live winners feed — tab-separated data rows with no header line naming the rate column. + +### observer-api-docs-template.qtpl +- Source: https://git.gammaspectra.live/P2Pool/observer/raw/branch/master/cmd/web/views/api.qtpl +- Fetched: 2026-08-10 +- SHA-256: `bfe8de8f73076d41f33d71657d26b121feb72b05bef22e3bfdcacaaae6ca280e` +- What: Source template of the p2pool.observer /api documentation page — all endpoints, parameters, and example payloads (pool_info, miner_info, side_blocks_in_window, payouts, found_blocks, shares, block_by_id). + +### observer-side_block.go +- Source: https://git.gammaspectra.live/P2Pool/observer-cmd-utils/raw/branch/master/index/side_block.go +- Fetched: 2026-08-10 +- SHA-256: `0b32e0492f81dd6f15deee77a9797f44c28c4744f8c0b1d12ab486ad2dbd09e0` +- What: SideBlock struct — authoritative field semantics for difficulty, inclusion, timestamp, miner id; uncle-penalty weighting. + +### observer-README.md +- Source: https://git.gammaspectra.live/P2Pool/observer/raw/branch/master/README.md +- Fetched: 2026-08-10 +- SHA-256: `d4d2ccafe570aaea7f636627b553108273d6cc826078eacb2a07c79edf48f11f` +- What: Observer project README — maintainer-run instances (main/mini/nano/old), self-hosting instructions. + +### p2pool-observer-go-README.md +- Source: https://git.gammaspectra.live/P2Pool/p2pool-observer/raw/branch/master/README.md +- Fetched: 2026-08-10 +- SHA-256: `4f2c94b43cb2d1d5cd0989b92202bf3d9019e1c2384d16d48689c1fbfca04c82` +- What: Go consensus repo README (points to P2Pool/observer as the site/API repo). + +## Unreachable + +### https://p2pool.observer/faq — UNREACHABLE +- 2 tries on 2026-08-10, HTTP 418 both times (Cloudflare-style bot check; no content retrieved). +- Mechanics verified from the p2pool README and source instead. + +### https://p2pool.observer/api — UNREACHABLE +- 2 tries on 2026-08-10, HTTP 418 both times (interactive challenge blocks automated fetch). +- The page's content is archived via its source template, `observer-api-docs-template.qtpl` above. + +### https://mini.p2pool.observer/api — UNREACHABLE +- 2 tries on 2026-08-10, HTTP 418 both times (same block as the main instance). +- Same documentation covered by `observer-api-docs-template.qtpl` above. + +## Archived 2026-08-11 (operator browser fetch — bot-challenge pages) + +### observer-api-docs-live.html +- Source: https://p2pool.observer/api (and mini.p2pool.observer/api — identical documentation) +- Fetched: 2026-08-11 (browser, saved by operator) +- SHA-256: `9e788a888ecf5aa4faa9a017b2cafa69547db24602f167716c2eecd059faab52` +- What: Live observer API documentation page, browser-fetched by the operator through the site's bot challenge; validates the source-template archive and documents /api/side_blocks_in_window/ used by the planned generalization study. + +### p2pool-io-api-index.html +- Source: https://p2pool.io/api/ +- Fetched: 2026-08-11 (browser, saved by operator) +- SHA-256: `019573e803939c34f1b39e9d1fd1fc64867a800da8ccfdf616fa033e4274c4fc` +- What: P2Pool pool-API directory index (network/, pool/, stats_mod, tail.json). + +### p2pool-io-main-and-faq.html +- Source: https://p2pool.io/#faq +- Fetched: 2026-08-11 (browser, saved by operator) +- SHA-256: `46bd5ab09471fac558e91d183e89bb48fd69fa41eecbfa533f0a9aee5eb65001` +- What: p2pool.io main page incl. FAQ and pool stats logic: PPLNS window duration = pplnsWeight/hashRate, min payout = 0.6 x sidechainDifficulty/pplnsWeight, and the mini/nano observer instance links. + +### Note on previously UNREACHABLE entries +- p2pool.observer/api and mini.p2pool.observer/api are now covered by `observer-api-docs-live.html` (identical docs for both instances). +- p2pool.observer/faq itself remains unarchived; `p2pool-io-main-and-faq.html` archives the p2pool.io FAQ (a different site) as an additional mechanics source. + +### xmrvsbeast-reward_calc.sh +- Source: operator-published calculator script (user-supplied copy, obtained 2026-08-02) +- Archived: 2026-08-12 +- SHA-256: `9e6155f736824f20a0d392f4193f2df77f1f611e95ce2e31a8285010dd571174` +- What: XvB's own reward_calc.sh — the generator of reward_estimate_pub.txt; averages the winners feed's rate column as "bonus hr" and prices it at full block reward. diff --git a/docs/research/xvb-delivery-study/data/sources/github-schernykh-p2pool-repo-page.html b/docs/research/xvb-delivery-study/data/sources/github-schernykh-p2pool-repo-page.html new file mode 100644 index 00000000..1ab29641 --- /dev/null +++ b/docs/research/xvb-delivery-study/data/sources/github-schernykh-p2pool-repo-page.html @@ -0,0 +1,1379 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GitHub - SChernykh/p2pool: Decentralized pool for Monero mining · GitHub + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ Skip to content + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + +
+ +
+ + + + + + + + +
+ + + + + + +
+ + + + + + + + + +
+
+
+ + + + + + + + + + + + +
+ +
+ +
+ +
+ + + + / + + p2pool + + + Public +
+ + +
+ +
+ + +
+
+ +
+
+ + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + + +

Repository files navigation

Monero P2Pool

+

Decentralized pool for Monero mining.

+

Pool status and monitoring pages can be found at:

+ + + + + + + + + + + + + + + + + + + + + +
P2Pool
mainhttps://p2pool.io/
https://p2pool.observer/
minihttps://p2pool.io/mini/
https://mini.p2pool.observer/
nanohttps://p2pool.io/nano/
https://nano.p2pool.observer/
+

These are 3rd-party pages. If they are down, it doesn't mean there is a problem with P2Pool itself - it keeps mining always thanks to its decentralized nature.

+

Build Status

+

C/C++ CI +test-sync

+

CodeQL +msvc-analysis +cppcheck + +Coverity Scan Build Status + +clang-tidy

+

Contents

+ +

Pool mining vs Solo mining vs P2Pool mining

+

Here's the comparison table of the different ways of mining. While pool mining is the easiest to set up, it centralizes the Monero network and the pool admin gets full power over your hashrate and your unpaid funds. Solo mining is 100% independent and the best for the network. P2Pool mining has all the advantages of solo mining, but also makes regular payouts possible.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Pool typePayoutsFeeMin. payoutCentralized?StabilityControlSetup
Centralized poolRegular0-3%0.001-0.01 XMRYesLess stable due to pool server outagesThe pool admin controls your mined funds and what you mine, and can execute attacks against the networkOnly miner software is required
SoloRare0%0.6 XMR or moreNoAs stable as your Monero node100% under your controlMonero node + optional miner
P2PoolRegular0%~0.00027 XMRNoVery stable: node failover and multiple Monero nodes are supported100% under your controlMonero node(s) + P2Pool node(s) + optional miner(s)
+

Features

+
    +
  • Decentralized: no central server that can be shut down/blocked. P2Pool uses a separate blockchain to merge mine with Monero. Pool admin can't go rogue or be pressured to do an attack on the network because there is no pool admin!
  • +
  • Permissionless: there is no one to decide who can mine on the pool and who can't.
  • +
  • Trustless: there is no pool wallet, funds are never in custody. All pool blocks pay out to miners directly.
  • +
  • PPLNS payout scheme
  • +
  • 0% fee
  • +
  • 0 XMR payout fee
  • +
  • ~0.00027 XMR minimal payout
  • +
  • Fast block times, down to 1 second
  • +
  • Uncle blocks are supported to avoid orphans - all your shares will be accounted for!
  • +
  • Configurable PPLNS window size and block time
  • +
  • Advanced mempool picking algorithm: it creates blocks with better rewards than what monerod solo mining does
  • +
  • Password protected private pools
  • +
  • Highly reliable configurations are supported (multiple P2Pool nodes mining to the same wallet, each P2Pool node can use multiple Monero nodes and switch on the fly if an issue is detected)
  • +
  • Mining through TOR and I2P is fully supported
  • +
+

How payouts work in P2Pool

+

First you need to find a pool share. This share will stay in PPLNS window for up to 2160 pool blocks (6 hours, auto adjustable to balance payout sizes and frequency). The moment P2Pool finds a Monero block and you have at least 1 pool share in PPLNS window, you'll get a payout! Monero block reward is split between all miner wallets in PPLNS window. Each miner gets a part of the block reward proportional to the total difficulty of his/her shares in PPLNS window.

+

NOTE If P2Pool doesn't have enough hashrate to find Monero blocks faster than every 6 hours on average (~15 MH/s), not all your pool shares will result in a payout. Even if pool hashrate is higher, bad luck can sometimes result in a share going through PPLNS window without a payout. But in the long run it will be compensated by other shares receiving multiple payouts - your payouts will average out to what you'd get with regular pool mining.

+

Default P2Pool parameters

+
    +
  • Block time: 10 seconds
  • +
  • PPLNS window: up to 2160 blocks (6 hours, auto adjustable to balance payout sizes and frequency)
  • +
  • Minimum payout = Monero block reward/2160, ~0.00027 XMR
  • +
+

Monero version support

+
    +
  • The latest Monero network upgrade happened on August 13th, 2022 (block 2,688,888).
  • +
  • The latest P2Pool network upgrade happened on October 12th, 2024 at 20:00 UTC.
  • +
+

In order to continue mining on P2Pool, you must update both Monero and P2Pool software to the latest available versions as soon as they are released.

+ + + + + + + + + + + + + + + +
Monero protocol versionRequired Monero software versionRequired P2Pool version
v15, v16 (active after August 13th, 2022)v0.18.0.0 or newer, v0.18.4.6 or newer is recommendedv4.0 or newer
+

How to mine on P2Pool

+

General Considerations

+
    +
  • In order to mine on P2Pool, a synced Monero node using monerod v0.18.0.0 or newer is required. If you don't currently have one, you can download the official Monero binaries, start monerod on your PC and wait until it's fully synced. Advanced Monero node setup instructions are here.
  • +
  • It is highly recommended that you create a separate restricted user account (in your OS) for mining. While P2Pool has been battle-tested for a long time now, any software may have unknown bugs/vulnerabilities.
  • +
  • You can mine to a primary wallet address (the one starting with 4). If you want to mine to a subaddress, you will need to provide both the main address (starting with 4) and the subaddress (starting with 8) using --wallet and --subaddress command line parameters.
  • +
  • You can add the --mini or --nano parameter to your P2Pool command to connect to the respective sidechain.
  • +
+

Note

You cannot use both --mini and --nano together
+Using --mini will change the p2p port to 37888.
+Using --nano will change the p2p port to 37890.

+
+
    +
  • Check that ports 18080 (Monero p2p port) and 37889/37888/37890 (P2Pool default/mini/nano p2p port) are open in your firewall to ensure better connectivity. If you're mining from a computer behind NAT (like a router) you could consider forwarding the ports to your local machine.
  • +
  • You can connect multiple miners to the same P2Pool node. The more the better!
  • +
  • The steps below assume that you run everything on the same machine. If it's not the case, change 127.0.0.1 to appropriate IP addresses for your setup.
  • +
  • It is highly recommended to create a new mainnet wallet for P2Pool mining because wallet addresses are public on P2Pool.
  • +
+

Wallet software compatible with P2Pool payouts

+ +

GUI for P2Pool

+
    +
  • Gupax project aims to provide an easy to use cross-platform GUI to configure and run P2Pool & XMRig.
  • +
+

Merge mining

+

Merge mining is available in P2Pool since the fork that happened on October 12th, 2024. Version 4.0 or newer is required to use it.

+

Blockchains that will support Merge mining RPC API:

+
    +
  • Townforge supports merge mining (but Townforge is still in testnet phase)
  • +
  • DarkFi supports it in their testnet
  • +
+
p2pool.exe --wallet YOUR_MONERO_WALLET_ADDRESS --merge-mine IP:port YOUR_WALLET_ADDRESS_ON_ANOTHER_BLOCKCHAIN
+
+

Blockchains that support merge mining already: Tari

+

Tari uses their own gRPC API and requires a different command line:

+
./p2pool --wallet YOUR_MONERO_WALLET_ADDRESS --merge-mine tari://TARI_NODE_IP:18102 TARI_WALLET_ADDRESS
+
+

and on the Tari side

+
./minotari_node --grpc-enabled --mining-enabled
+
+

TARI_NODE_IP is 127.0.0.1 if you run both on the same machine (recommended).

+

Merge mining is available on Tari's mainnet:

+
    +
  • Download Tari suite for your OS
  • +
  • Run Minotari node and wait until it synchronizes
  • +
  • Run Minotari console wallet to create a Tari wallet
  • +
  • Copy the "Tari Address one-sided" from the "Receive" tab of the wallet
  • +
  • Paste it into the P2Pool command line above
  • +
  • Everything is ready now to start merge mining Monero and Tari!
  • +
+

Note that Tari will be mined in solo mode (only full Tari blocks can be mined for now). This doesn't affect P2Pool payouts - they will stay the same.

+

Mining on GNU/Linux

+
    +
  1. Download the latest P2Pool binaries here. +
      +
    • Alternatively, grab the latest source code for P2Pool and build it.
    • +
    +
  2. +
  3. Download the latest XMRig (linux-static-x64) binary here.
  4. +
  5. Prepare enough huge pages (each of monerod/P2Pool/XMRig needs them):
  6. +
+
sudo sysctl vm.nr_hugepages=3072
+
+
    +
  1. Check that ports 18080 (Monero p2p port) and 37889/37888/37890 (P2Pool default/mini/nano p2p port) are open in your local firewall to ensure better connectivity.
  2. +
  3. Start monerod with the following command/options:
  4. +
+
./monerod --zmq-pub tcp://127.0.0.1:18083 --out-peers 32 --in-peers 64 --add-priority-node=p2pmd.xmrvsbeast.com:18080 --add-priority-node=nodes.hashvault.pro:18080 --enforce-dns-checkpointing --enable-dns-blocklist
+
+

Note: +The --zmq-pub option is required for P2Pool to work properly.

+

--out-peers 32 --in-peers 64 is needed to (1) have many connections to other nodes and (2) limit incoming connection count because it can grow uncontrollably and cause problems when it goes above 1000 (open files limit in Linux). If your network connection's upload bandwidth is less than 10 Mbit, use --out-peers 8 --in-peers 16 instead.

+

--add-priority-node=p2pmd.xmrvsbeast.com:18080 --add-priority-node=nodes.hashvault.pro:18080 is needed to have guaranteed good working nodes in your connected peers.

+

--enforce-dns-checkpointing is needed to combat the selfish mining attempts by malicious actors

+

--enable-dns-blocklist is needed to ban known bad nodes

+
    +
  1. Start P2Pool with the following command/options:
  2. +
+
./p2pool --host 127.0.0.1 --wallet YOUR_WALLET_ADDRESS --mini
+
+
    +
  1. Wait until the initial P2Pool sync is finished (shouldn't take more than 5-10 minutes).
  2. +
  3. Start XMRig with the following command/options:
  4. +
+
./xmrig -o 127.0.0.1:3333
+
+
    +
  • Note that you don't need to specify your wallet address for XMRig. Wallet addresses set in XMRig config will be ignored!
  • +
  • To set a custom fixed difficulty for your miner (for example, 10000), instead start XMRig with the following options:
  • +
+
./xmrig -u x+10000 -o 127.0.0.1:3333
+
+
    +
  1. XMRig should connect and start mining!
  2. +
+

Additional Information:

+
    +
  • For a more in-depth beginner-friendly walk-through with the option of using Docker, please see SethForPrivacy's guide at: https://sethforprivacy.com/guides/run-a-p2pool-node/
  • +
  • You can check the p2pool.log for any warnings or errors using the following command:
  • +
+
grep -E 'WARNING|ERROR' p2pool.log
+
+
    +
  • P2Pool has verbose logging by default, you can reduce it by using "loglevel N" command where N is between 0 and 6. Default loglevel is 3. +
      +
    • You can use logrotate with a config like this to control logfile growth:
    • +
    +
  • +
+
<path-to-logfile>
+{
+rotate 7
+daily
+missingok
+delaycompress
+nocreate
+}
+
+

Mining on Windows

+

Note: Windows SmartScreen may block incoming connections by files that are "Downloaded from the Internet". You can allow 'p2pool.exe' and 'monerod.exe' by double-clicking them, clicking "More Info", then clicking "Run Anyway" and then closing them immediately so you can run them from the command line. Advanced users can use the PowerShell cmdlet Unblock-File to remove this flag.

+
    +
  1. Download the latest P2Pool binaries here. +
      +
    • Alternatively, grab the latest source code for P2Pool and build it.
    • +
    +
  2. +
  3. Download the latest XMRig binary here.
  4. +
  5. Expand the P2Pool binaries into an appropriate location (%USERPROFILE%/bin or C:/bin/ are good options)
  6. +
  7. Expand XMRig binary into an appropriate location (the same folder as P2Pool is fine).
  8. +
  9. Prepare huge pages to work properly (each of monerod/P2Pool/XMRig needs them): +
      +
    • On Windows 10 or above, run XMRig at least once as Administrator (right-click, "Run As Administrator")
    • +
    • On earlier versions of Windows, you'll need to run XMRig as Administrator at least once per login.
    • +
    +
  10. +
  11. Create "Monero" folder inside extracted P2Pool folder and copy Monero binaries there.
  12. +
  13. Open a command prompt and navigate to the folder where you extracted P2Pool.
  14. +
+

Note: When running the below commands, Windows Firewall may prompt to allow connections, click "Allow" if prompted.

+
    +
  1. Start monerod with the following command/options:
  2. +
+
.\Monero\monerod.exe --zmq-pub tcp://127.0.0.1:18083 --out-peers 32 --in-peers 64 --add-priority-node=p2pmd.xmrvsbeast.com:18080 --add-priority-node=nodes.hashvault.pro:18080 --enforce-dns-checkpointing --enable-dns-blocklist
+
+

Note: +The --zmq-pub option is required for P2Pool to work properly.

+

--out-peers 32 --in-peers 64 is needed to (1) have many connections to other nodes and (2) limit incoming connection count because it can grow uncontrollably and cause problems when it goes above 1000 (open files limit in Linux). If your network connection's upload bandwidth is less than 10 Mbit, use --out-peers 8 --in-peers 16 instead.

+

--add-priority-node=p2pmd.xmrvsbeast.com:18080 --add-priority-node=nodes.hashvault.pro:18080 is needed to have guaranteed good working nodes in your connected peers.

+

--enforce-dns-checkpointing is needed to combat the selfish mining attempts by malicious actors

+

--enable-dns-blocklist is needed to ban known bad nodes

+
    +
  1. Start P2Pool with the following command/options:
  2. +
+
.\p2pool.exe --host 127.0.0.1 --wallet YOUR_WALLET_ADDRESS --mini
+
+
    +
  1. Wait until the initial P2Pool sync is finished (shouldn't take more than 5-10 minutes).
  2. +
  3. Start XMRig with the following command/options:
  4. +
+
.\xmrig.exe -o 127.0.0.1:3333
+
+
    +
  • Note that you don't need to specify your wallet address for XMRig. Wallet addresses set in XMRig config will be ignored!
  • +
  • To set a custom fixed difficulty for your miner (for example, 10000), instead start XMRig with the following options: +
    xmrig.exe -u x+10000 -o 127.0.0.1:3333
    +
    +
  • +
+
    +
  1. XMRig should connect and start mining!
  2. +
  3. (Optional but highly recommended) You can create a Quickstart by creating a batch (.bat) file with the following contents and placing it in your P2Pool directory along with xmrig.exe.
  4. +
+
@ECHO OFF
+start cmd /k %~dp0\Monero\monerod.exe --zmq-pub tcp://127.0.0.1:18083 --out-peers 32 --in-peers 64 --add-priority-node=p2pmd.xmrvsbeast.com:18080 --add-priority-node=nodes.hashvault.pro:18080 --enforce-dns-checkpointing --enable-dns-blocklist
+ECHO Wait until the Monero daemon shows fully synced before continuing. This can take some time. Type 'status' in other window to check progress.
+PAUSE
+start cmd /k %~dp0\p2pool.exe --wallet YOUR_WALLET_ADDRESS --mini
+ECHO Wait until the daemon shows fully synced before continuing. This can take some time.
+PAUSE
+%~dp0\xmrig.exe -o 127.0.0.1
+
+

Build instructions

+

Only 64-bit builds are supported. In particular, ARMv7 and older CPUs are not supported. The reason is that RandomX hashing algorithm is too slow in 32-bit mode, and P2Pool needs to check new blocks very fast to keep up with other nodes.

+

Prerequisites

+
    +
  • cmake >= 3.10
  • +
  • C++ compiler with C++17 support. GCC-8, Clang-13 and MSVC-2019 have been tested and confirmed to work. Older compilers may fail to build P2Pool.
  • +
+

Ubuntu 20.04

+

Run the following commands to install the necessary prerequisites, clone this repo, and build P2Pool locally on Ubuntu 20.04:

+
sudo apt update && sudo apt install git build-essential cmake libuv1-dev libzmq3-dev libsodium-dev libpgm-dev libnorm-dev libgss-dev libcurl4-openssl-dev libidn2-0-dev
+git clone --recursive https://github.com/SChernykh/p2pool
+cd p2pool
+mkdir build && cd build
+cmake ..
+make -j$(nproc)
+
+ +
pacman -S p2pool
+
+ +

This is a flake only project. So you have to use nixUnstable with nix flakes to build or install P2Pool. +The commands below use the new flake-specific reference-format, so be sure to also set ca-references in --experimental-features.

+

Because this project has submodules which are not fixed in nixUnstable yet you have to use the nix/master branch:

+
nix shell github:nixos/nix/master
+
+

Run the binary:

+
nix run git+https://github.com/SChernykh/p2pool?ref=master&submodules=1
+
+

Run the binary with arguments:

+
nix run git+https://github.com/SChernykh/p2pool?ref=master&submodules=1 -- --help
+
+

Windows

+

P2Pool binary (Visual Studio Community 2019 build): +NOTE: You need to have the "Desktop Development with C++" module installed.

+
git clone --recursive https://github.com/SChernykh/p2pool
+cd p2pool
+mkdir build
+cd build
+cmake .. -G "Visual Studio 16 2019"
+
+

then open generated build\p2pool.sln in Visual Studio and build it there

+

Alternatively, you can select "Clone a repository" within the GUI, then select "Build" from the menu.

+

macOS

+

Run the following commands to install the necessary prerequisites, clone this repo, and build P2Pool locally on your Mac:

+
brew update && brew install git cmake libuv zmq libpgm curl
+git clone --recursive https://github.com/SChernykh/p2pool
+cd p2pool
+mkdir build && cd build
+cmake ..
+make -j$(sysctl -n hw.logicalcpu)
+
+

FreeBSD

+

Run the following commands to install the necessary prerequisites, clone this repo, and build P2Pool locally on FreeBSD:

+
pkg install git cmake libuv libzmq4 curl
+git clone --recursive https://github.com/SChernykh/p2pool
+cd p2pool
+mkdir build && cd build
+cmake ..
+make
+
+

Android (Termux)

+

Run the following commands to install the necessary prerequisites, clone this repo, and build P2Pool locally in Termux:

+
pkg install git build-essential cmake libuv libzmq libcurl
+git clone --recursive https://github.com/SChernykh/p2pool
+cd p2pool
+mkdir build && cd build
+cmake ..
+make -j$(nproc)
+
+

Reproducible builds

+

Starting from v4.9, P2Pool uses reproducible builds to create the release binaries. This allows verification that no vulnerabilities or backdoors have been introduced during the compilation process, and that the compiled binaries correspond to the source code.

+

It removes the need for trust that the author or maintainer of the code is not malicious/compromised, and that the build server is not compromised.

+

Anyone can run the same build script on the same source code, and get the same release binaries in the end, confirming their authenticity.

+

Prerequisites: Ubuntu with Docker and Git installed.

+

Example of building v4.15 release binaries:

+
git clone --branch v4.15 --recursive https://github.com/SChernykh/p2pool
+p2pool/scripts/release/build_all.sh v4.15
+
+

The binaries will be created in p2pool/scripts/release folder. The first time you run it, it will take up to several hours to first build the Docker image with all the necessary tools in it. Wait until all builds are finished and then run

+
cd p2pool/scripts/release
+./gen_sums.sh
+
+

to generate the hash sums and compare them with the official release's hash sums.

+

Reproducible builds of (almost) all commits are available here. These builds use the release build scripts, so they can act as a "latest release" for all means and purposes, but they might be less stable than the official releases.

+

Donations

+

If you'd like to support further development of Monero P2Pool, you're welcome to send any amount of XMR to the following address:

+
44MnN1f3Eto8DZYUWuE5XZNUtE3vcRzt2j6PzqWpPau34e6Cf4fAxt6X2MBmrm6F9YMEiMNjN6W4Shn4pLcfNAja621jwyg
+
+

Starting from v4.6, P2Pool also has an ability to merge mine donations for the author.

+

Note that this will not affect your hashrate or payouts in any way. P2Pool will always (100% of the time) keep mining to your configured Monero wallet address, but it might also use the available merge mining capacity to donate to the author.

+

If you merge mine yourself, your settings will take priority.

+

The merge mining donation runs without a donation server - there is no "phoning home" to a server, everything is done through the P2Pool's network in a decentralized way.

+

To opt out of this, build P2Pool with -DWITH_MERGE_MINING_DONATION=OFF in the cmake command line. Due to the architecture of the decentralized P2Pool network, your node will still relay donation messages to other nodes even if you opted out (but it will not process them).

+

About

Decentralized pool for Monero mining

Topics

Resources

Stars

1.5k stars

Watchers

54 watching

Forks

Releases

Packages

Used by

Contributors

Languages

+
+ + + + +
+ +
+ +
+
+ +
+ +
+

Footer

+ + + + +
+
+ + + + + © 2026 GitHub, Inc. + +
+ + +
+
+ + + + + + + + + + + + + + + + + + + + +
+
+
+ + + diff --git a/docs/research/xvb-delivery-study/data/sources/monero-cryptonote_config.h b/docs/research/xvb-delivery-study/data/sources/monero-cryptonote_config.h new file mode 100644 index 00000000..fea5d30d --- /dev/null +++ b/docs/research/xvb-delivery-study/data/sources/monero-cryptonote_config.h @@ -0,0 +1,366 @@ +// Copyright (c) 2014-2024, The Monero Project +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without modification, are +// permitted provided that the following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright notice, this list of +// conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright notice, this list +// of conditions and the following disclaimer in the documentation and/or other +// materials provided with the distribution. +// +// 3. Neither the name of the copyright holder nor the names of its contributors may be +// used to endorse or promote products derived from this software without specific +// prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL +// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF +// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Parts of this file are originally copyright (c) 2012-2013 The Cryptonote developers + +#pragma once + +#include +#include +#include +#include + +#define CRYPTONOTE_DNS_TIMEOUT_MS 20000 + +#define CRYPTONOTE_MAX_BLOCK_NUMBER 500000000 +#define CRYPTONOTE_MAX_TX_SIZE 1000000 +#define CRYPTONOTE_MAX_TX_PER_BLOCK 0x10000000 +#define CRYPTONOTE_MINED_MONEY_UNLOCK_WINDOW 60 +#define CURRENT_TRANSACTION_VERSION 2 +#define CURRENT_BLOCK_MAJOR_VERSION 1 +#define CURRENT_BLOCK_MINOR_VERSION 0 +#define CRYPTONOTE_BLOCK_FUTURE_TIME_LIMIT 60*60*2 +#define CRYPTONOTE_DEFAULT_TX_SPENDABLE_AGE 10 + +#define BLOCKCHAIN_TIMESTAMP_CHECK_WINDOW 60 + +// MONEY_SUPPLY - total number coins to be generated +#define MONEY_SUPPLY ((uint64_t)(-1)) +#define EMISSION_SPEED_FACTOR_PER_MINUTE (20) +#define FINAL_SUBSIDY_PER_MINUTE ((uint64_t)300000000000) // 3 * pow(10, 11) + +#define CRYPTONOTE_REWARD_BLOCKS_WINDOW 100 +#define CRYPTONOTE_BLOCK_GRANTED_FULL_REWARD_ZONE_V2 60000 //size of block (bytes) after which reward for block calculated using block size +#define CRYPTONOTE_BLOCK_GRANTED_FULL_REWARD_ZONE_V1 20000 //size of block (bytes) after which reward for block calculated using block size - before first fork +#define CRYPTONOTE_BLOCK_GRANTED_FULL_REWARD_ZONE_V5 300000 //size of block (bytes) after which reward for block calculated using block size - second change, from v5 +#define CRYPTONOTE_LONG_TERM_BLOCK_WEIGHT_WINDOW_SIZE 100000 // size in blocks of the long term block weight median window +#define CRYPTONOTE_SHORT_TERM_BLOCK_WEIGHT_SURGE_FACTOR 50 +#define CRYPTONOTE_COINBASE_BLOB_RESERVED_SIZE 600 +#define CRYPTONOTE_DISPLAY_DECIMAL_POINT 12 +// COIN - number of smallest units in one coin +#define COIN ((uint64_t)1000000000000) // pow(10, 12) + +#define FEE_PER_KB_OLD ((uint64_t)10000000000) // pow(10, 10) +#define FEE_PER_KB ((uint64_t)2000000000) // 2 * pow(10, 9) +#define FEE_PER_BYTE ((uint64_t)300000) +#define DYNAMIC_FEE_PER_KB_BASE_FEE ((uint64_t)2000000000) // 2 * pow(10,9) +#define DYNAMIC_FEE_PER_KB_BASE_BLOCK_REWARD ((uint64_t)10000000000000) // 10 * pow(10,12) +#define DYNAMIC_FEE_PER_KB_BASE_FEE_V5 ((uint64_t)2000000000 * (uint64_t)CRYPTONOTE_BLOCK_GRANTED_FULL_REWARD_ZONE_V2 / CRYPTONOTE_BLOCK_GRANTED_FULL_REWARD_ZONE_V5) +#define DYNAMIC_FEE_REFERENCE_TRANSACTION_WEIGHT ((uint64_t)3000) + +#define ORPHANED_BLOCKS_MAX_COUNT 100 + + +#define DIFFICULTY_TARGET_V2 120 // seconds +#define DIFFICULTY_TARGET_V1 60 // seconds - before first fork +#define DIFFICULTY_WINDOW 720 // blocks +#define DIFFICULTY_LAG 15 // !!! +#define DIFFICULTY_CUT 60 // timestamps to cut after sorting +#define DIFFICULTY_BLOCKS_COUNT DIFFICULTY_WINDOW + DIFFICULTY_LAG + + +#define CRYPTONOTE_LOCKED_TX_ALLOWED_DELTA_SECONDS_V1 DIFFICULTY_TARGET_V1 * CRYPTONOTE_LOCKED_TX_ALLOWED_DELTA_BLOCKS +#define CRYPTONOTE_LOCKED_TX_ALLOWED_DELTA_SECONDS_V2 DIFFICULTY_TARGET_V2 * CRYPTONOTE_LOCKED_TX_ALLOWED_DELTA_BLOCKS +#define CRYPTONOTE_LOCKED_TX_ALLOWED_DELTA_BLOCKS 1 + + +#define DIFFICULTY_BLOCKS_ESTIMATE_TIMESPAN DIFFICULTY_TARGET_V1 //just alias; used by tests + + +#define BLOCKS_IDS_SYNCHRONIZING_DEFAULT_COUNT 10000 //by default, blocks ids count in synchronizing +#define BLOCKS_IDS_SYNCHRONIZING_MAX_COUNT 25000 //max blocks ids count in synchronizing +#define BLOCKS_SYNCHRONIZING_DEFAULT_COUNT_PRE_V4 100 //by default, blocks count in blocks downloading +#define BLOCKS_SYNCHRONIZING_DEFAULT_COUNT 20 //by default, blocks count in blocks downloading +#define BLOCKS_SYNCHRONIZING_MAX_COUNT 2048 //must be a power of 2, greater than 128, equal to SEEDHASH_EPOCH_BLOCKS +#define BATCH_MAX_WEIGHT 10 //by default, maximum size of batch in [mB] +#define BATCH_MAX_ALLOWED_WEIGHT 50 //maximum allowed size of batch in [mB] +#define BLOCKS_MAX_WINDOW CRYPTONOTE_REWARD_BLOCKS_WINDOW //Window to find the historical max block weight (100 blocks) + +#define CRYPTONOTE_MEMPOOL_TX_LIVETIME (86400*3) //seconds, three days +#define CRYPTONOTE_MEMPOOL_TX_FROM_ALT_BLOCK_LIVETIME 604800 //seconds, one week + + +#define CRYPTONOTE_DANDELIONPP_STEMS 2 // number of outgoing stem connections per epoch +#define CRYPTONOTE_DANDELIONPP_FLUFF_PROBABILITY 20 // out of 100 +#define CRYPTONOTE_DANDELIONPP_MIN_EPOCH 10 // minutes +#define CRYPTONOTE_DANDELIONPP_EPOCH_RANGE 30 // seconds +#define CRYPTONOTE_DANDELIONPP_FLUSH_AVERAGE 5 // seconds average for poisson distributed fluff flush +#define CRYPTONOTE_DANDELIONPP_EMBARGO_AVERAGE 39 // seconds (see tx_pool.cpp for more info) + +// see src/cryptonote_protocol/levin_notify.cpp +#define CRYPTONOTE_NOISE_MIN_EPOCH 5 // minutes +#define CRYPTONOTE_NOISE_EPOCH_RANGE 30 // seconds +#define CRYPTONOTE_NOISE_MIN_DELAY 10 // seconds +#define CRYPTONOTE_NOISE_DELAY_RANGE 5 // seconds +#define CRYPTONOTE_NOISE_BYTES 3*1024 // 3 KiB +#define CRYPTONOTE_NOISE_CHANNELS 2 // Max outgoing connections per zone used for noise/covert sending + +// Both below are in seconds. The idea is to delay forwarding from i2p/tor +// to ipv4/6, such that 2+ incoming connections _could_ have sent the tx +#define CRYPTONOTE_FORWARD_DELAY_BASE (CRYPTONOTE_NOISE_MIN_DELAY + CRYPTONOTE_NOISE_DELAY_RANGE) +#define CRYPTONOTE_FORWARD_DELAY_AVERAGE (CRYPTONOTE_FORWARD_DELAY_BASE + (CRYPTONOTE_FORWARD_DELAY_BASE / 2)) + +#define CRYPTONOTE_MAX_FRAGMENTS 20 // ~20 * NOISE_BYTES max payload size for covert/noise send + +#define COMMAND_RPC_GET_BLOCKS_FAST_MAX_BLOCK_COUNT 1000 +#define COMMAND_RPC_GET_BLOCKS_FAST_MAX_TX_COUNT 20000 +#define DEFAULT_RPC_MAX_CONNECTIONS_PER_PUBLIC_IP 3 +#define DEFAULT_RPC_MAX_CONNECTIONS_PER_PRIVATE_IP 25 +#define DEFAULT_RPC_MAX_CONNECTIONS 100 +#define DEFAULT_RPC_SOFT_LIMIT_SIZE 25 * 1024 * 1024 // 25 MiB +#define MAX_RPC_CONTENT_LENGTH 1048576 // 1 MB + +#define P2P_LOCAL_WHITE_PEERLIST_LIMIT 1000 +#define P2P_LOCAL_GRAY_PEERLIST_LIMIT 5000 + +#define P2P_DEFAULT_CONNECTIONS_COUNT 12 +#define P2P_DEFAULT_HANDSHAKE_INTERVAL 60 //seconds +#define P2P_DEFAULT_PACKET_MAX_SIZE 50000000 //50000000 bytes maximum packet size +#define P2P_DEFAULT_PEERS_IN_HANDSHAKE 250 +#define P2P_MAX_PEERS_IN_HANDSHAKE 250 +#define P2P_DEFAULT_CONNECTION_TIMEOUT 5000 //5 seconds +#define P2P_DEFAULT_SOCKS_CONNECT_TIMEOUT 45 // seconds +#define P2P_DEFAULT_PING_CONNECTION_TIMEOUT 2000 //2 seconds +#define P2P_DEFAULT_INVOKE_TIMEOUT 60*2*1000 //2 minutes +#define P2P_DEFAULT_HANDSHAKE_INVOKE_TIMEOUT 5000 //5 seconds +#define P2P_DEFAULT_WHITELIST_CONNECTIONS_PERCENT 70 +#define P2P_DEFAULT_ANCHOR_CONNECTIONS_COUNT 2 +#define P2P_DEFAULT_SYNC_SEARCH_CONNECTIONS_COUNT 2 +#define P2P_DEFAULT_LIMIT_RATE_UP 8192 // kB/s +#define P2P_DEFAULT_LIMIT_RATE_DOWN 32768 // kB/s + +#define P2P_FAILED_ADDR_FORGET_SECONDS (60*60) //1 hour +#define P2P_IP_BLOCKTIME (60*60*24) //24 hour +#define P2P_IP_FAILS_BEFORE_BLOCK 10 +#define P2P_IDLE_CONNECTION_KILL_INTERVAL (5*60) //5 minutes + +#define P2P_SUPPORT_FLAG_FLUFFY_BLOCKS 0x01 +#define P2P_SUPPORT_FLAGS P2P_SUPPORT_FLAG_FLUFFY_BLOCKS + +#define RPC_IP_FAILS_BEFORE_BLOCK 3 + +#define CRYPTONOTE_NAME "bitmonero" +#define CRYPTONOTE_BLOCKCHAINDATA_FILENAME "data.mdb" +#define CRYPTONOTE_BLOCKCHAINDATA_LOCK_FILENAME "lock.mdb" +#define P2P_NET_DATA_FILENAME "p2pstate.bin" +#define MINER_CONFIG_FILE_NAME "miner_conf.json" + +#define THREAD_STACK_SIZE 5 * 1024 * 1024 + +#define HF_VERSION_DYNAMIC_FEE 4 +#define HF_VERSION_MIN_MIXIN_4 6 +#define HF_VERSION_MIN_MIXIN_6 7 +#define HF_VERSION_CRYPTONIGHT_VARIANT_1 7 +#define HF_VERSION_MIN_MIXIN_10 8 +#define HF_VERSION_MIN_MIXIN_15 15 +#define HF_VERSION_ENFORCE_RCT 6 +#define HF_VERSION_PER_BYTE_FEE 8 +#define HF_VERSION_SMALLER_BP 10 +#define HF_VERSION_LONG_TERM_BLOCK_WEIGHT 10 +#define HF_VERSION_MIN_2_OUTPUTS 12 +#define HF_VERSION_MIN_V2_COINBASE_TX 12 +#define HF_VERSION_SAME_MIXIN 12 +#define HF_VERSION_REJECT_SIGS_IN_COINBASE 12 +#define HF_VERSION_ENFORCE_MIN_AGE 12 +#define HF_VERSION_EFFECTIVE_SHORT_TERM_MEDIAN_IN_PENALTY 12 +#define HF_VERSION_EXACT_COINBASE 13 +#define HF_VERSION_CLSAG 13 +#define HF_VERSION_DETERMINISTIC_UNLOCK_TIME 13 +#define HF_VERSION_BULLETPROOF_PLUS 15 +#define HF_VERSION_VIEW_TAGS 15 +#define HF_VERSION_2021_SCALING 15 + +#define PER_KB_FEE_QUANTIZATION_DECIMALS 8 +#define CRYPTONOTE_SCALING_2021_FEE_ROUNDING_PLACES 2 + +#define HASH_OF_HASHES_STEP 512 + +#define DEFAULT_TXPOOL_MAX_WEIGHT 648000000ull // 3 days at 300000, in bytes + +#define BULLETPROOF_MAX_OUTPUTS 16 +#define BULLETPROOF_PLUS_MAX_OUTPUTS 16 + +#define CRYPTONOTE_PRUNING_STRIPE_SIZE 4096 // the smaller, the smoother the increase +#define CRYPTONOTE_PRUNING_LOG_STRIPES 3 // the higher, the more space saved +#define CRYPTONOTE_PRUNING_TIP_BLOCKS 5500 // the smaller, the more space saved + +#define RPC_CREDITS_PER_HASH_SCALE ((float)(1<<24)) + +#define DNS_BLOCKLIST_LIFETIME (86400 * 8) + +//The limit is enough for the mandatory transaction content with 16 outputs (547 bytes), +//a custom tag (1 byte) and up to 32 bytes of custom data for each recipient. +// (1+32) + (1+1+16*32) + (1+16*32) = 1060 +#define MAX_TX_EXTRA_SIZE 1060 + +// New constants are intended to go here +namespace config +{ + uint64_t const DEFAULT_FEE_ATOMIC_XMR_PER_KB = 500; // Just a placeholder! Change me! + uint8_t const FEE_CALCULATION_MAX_RETRIES = 10; + uint64_t const DEFAULT_DUST_THRESHOLD = ((uint64_t)2000000000); // 2 * pow(10, 9) + uint64_t const BASE_REWARD_CLAMP_THRESHOLD = ((uint64_t)100000000); // pow(10, 8) + + uint64_t const CRYPTONOTE_PUBLIC_ADDRESS_BASE58_PREFIX = 18; + uint64_t const CRYPTONOTE_PUBLIC_INTEGRATED_ADDRESS_BASE58_PREFIX = 19; + uint64_t const CRYPTONOTE_PUBLIC_SUBADDRESS_BASE58_PREFIX = 42; + uint16_t const P2P_DEFAULT_PORT = 18080; + uint16_t const RPC_DEFAULT_PORT = 18081; + uint16_t const ZMQ_RPC_DEFAULT_PORT = 18082; + boost::uuids::uuid const NETWORK_ID = { { + 0x12 ,0x30, 0xF1, 0x71 , 0x61, 0x04 , 0x41, 0x61, 0x17, 0x31, 0x00, 0x82, 0x16, 0xA1, 0xA1, 0x10 + } }; // Bender's nightmare + std::string const GENESIS_TX = "013c01ff0001ffffffffffff03029b2e4c0281c0b02e7c53291a94d1d0cbff8883f8024f5142ee494ffbbd08807121017767aafcde9be00dcfd098715ebcf7f410daebc582fda69d24a28e9d0bc890d1"; + uint32_t const GENESIS_NONCE = 10000; + + // Hash domain separators + const char HASH_KEY_BULLETPROOF_EXPONENT[] = "bulletproof"; + const char HASH_KEY_BULLETPROOF_PLUS_EXPONENT[] = "bulletproof_plus"; + const char HASH_KEY_BULLETPROOF_PLUS_TRANSCRIPT[] = "bulletproof_plus_transcript"; + const char HASH_KEY_RINGDB[] = "ringdsb"; + const char HASH_KEY_SUBADDRESS[] = "SubAddr"; + const unsigned char HASH_KEY_ENCRYPTED_PAYMENT_ID = 0x8d; + const unsigned char HASH_KEY_WALLET = 0x8c; + const unsigned char HASH_KEY_WALLET_CACHE = 0x8d; + const unsigned char HASH_KEY_BACKGROUND_CACHE = 0x8e; + const unsigned char HASH_KEY_BACKGROUND_KEYS_FILE = 0x8f; + const unsigned char HASH_KEY_MEMORY = 'k'; + const unsigned char HASH_KEY_MULTISIG[] = {'M', 'u', 'l', 't' , 'i', 's', 'i', 'g', 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + const unsigned char HASH_KEY_MULTISIG_KEY_AGGREGATION[] = "Multisig_key_agg"; + const unsigned char HASH_KEY_CLSAG_ROUND_MULTISIG[] = "CLSAG_round_ms_merge_factor"; + const unsigned char HASH_KEY_TXPROOF_V2[] = "TXPROOF_V2"; + const unsigned char HASH_KEY_CLSAG_ROUND[] = "CLSAG_round"; + const unsigned char HASH_KEY_CLSAG_AGG_0[] = "CLSAG_agg_0"; + const unsigned char HASH_KEY_CLSAG_AGG_1[] = "CLSAG_agg_1"; + const char HASH_KEY_MESSAGE_SIGNING[] = "MoneroMessageSignature"; + const unsigned char HASH_KEY_MM_SLOT = 'm'; + const constexpr char HASH_KEY_MULTISIG_TX_PRIVKEYS_SEED[] = "multisig_tx_privkeys_seed"; + const constexpr char HASH_KEY_MULTISIG_TX_PRIVKEYS[] = "multisig_tx_privkeys"; + const constexpr char HASH_KEY_TXHASH_AND_MIXRING[] = "txhash_and_mixring"; + + // Multisig + const uint32_t MULTISIG_MAX_SIGNERS{16}; + + namespace testnet + { + uint64_t const CRYPTONOTE_PUBLIC_ADDRESS_BASE58_PREFIX = 53; + uint64_t const CRYPTONOTE_PUBLIC_INTEGRATED_ADDRESS_BASE58_PREFIX = 54; + uint64_t const CRYPTONOTE_PUBLIC_SUBADDRESS_BASE58_PREFIX = 63; + uint16_t const P2P_DEFAULT_PORT = 28080; + uint16_t const RPC_DEFAULT_PORT = 28081; + uint16_t const ZMQ_RPC_DEFAULT_PORT = 28082; + boost::uuids::uuid const NETWORK_ID = { { + 0x12 ,0x30, 0xF1, 0x71 , 0x61, 0x04 , 0x41, 0x61, 0x17, 0x31, 0x00, 0x82, 0x16, 0xA1, 0xA1, 0x11 + } }; // Bender's daydream + std::string const GENESIS_TX = "013c01ff0001ffffffffffff03029b2e4c0281c0b02e7c53291a94d1d0cbff8883f8024f5142ee494ffbbd08807121017767aafcde9be00dcfd098715ebcf7f410daebc582fda69d24a28e9d0bc890d1"; + uint32_t const GENESIS_NONCE = 10001; + } + + namespace stagenet + { + uint64_t const CRYPTONOTE_PUBLIC_ADDRESS_BASE58_PREFIX = 24; + uint64_t const CRYPTONOTE_PUBLIC_INTEGRATED_ADDRESS_BASE58_PREFIX = 25; + uint64_t const CRYPTONOTE_PUBLIC_SUBADDRESS_BASE58_PREFIX = 36; + uint16_t const P2P_DEFAULT_PORT = 38080; + uint16_t const RPC_DEFAULT_PORT = 38081; + uint16_t const ZMQ_RPC_DEFAULT_PORT = 38082; + boost::uuids::uuid const NETWORK_ID = { { + 0x12 ,0x30, 0xF1, 0x71 , 0x61, 0x04 , 0x41, 0x61, 0x17, 0x31, 0x00, 0x82, 0x16, 0xA1, 0xA1, 0x12 + } }; // Bender's daydream + std::string const GENESIS_TX = "013c01ff0001ffffffffffff0302df5d56da0c7d643ddd1ce61901c7bdc5fb1738bfe39fbe69c28a3a7032729c0f2101168d0c4ca86fb55a4cf6a36d31431be1c53a3bd7411bb24e8832410289fa6f3b"; + uint32_t const GENESIS_NONCE = 10002; + } +} + +namespace cryptonote +{ + enum network_type : uint8_t + { + MAINNET = 0, + TESTNET, + STAGENET, + FAKECHAIN, + UNDEFINED = 255 + }; + struct config_t + { + uint64_t const CRYPTONOTE_PUBLIC_ADDRESS_BASE58_PREFIX; + uint64_t const CRYPTONOTE_PUBLIC_INTEGRATED_ADDRESS_BASE58_PREFIX; + uint64_t const CRYPTONOTE_PUBLIC_SUBADDRESS_BASE58_PREFIX; + uint16_t const P2P_DEFAULT_PORT; + uint16_t const RPC_DEFAULT_PORT; + uint16_t const ZMQ_RPC_DEFAULT_PORT; + boost::uuids::uuid const NETWORK_ID; + std::string const GENESIS_TX; + uint32_t const GENESIS_NONCE; + }; + inline const config_t& get_config(network_type nettype) + { + static const config_t mainnet = { + ::config::CRYPTONOTE_PUBLIC_ADDRESS_BASE58_PREFIX, + ::config::CRYPTONOTE_PUBLIC_INTEGRATED_ADDRESS_BASE58_PREFIX, + ::config::CRYPTONOTE_PUBLIC_SUBADDRESS_BASE58_PREFIX, + ::config::P2P_DEFAULT_PORT, + ::config::RPC_DEFAULT_PORT, + ::config::ZMQ_RPC_DEFAULT_PORT, + ::config::NETWORK_ID, + ::config::GENESIS_TX, + ::config::GENESIS_NONCE + }; + static const config_t testnet = { + ::config::testnet::CRYPTONOTE_PUBLIC_ADDRESS_BASE58_PREFIX, + ::config::testnet::CRYPTONOTE_PUBLIC_INTEGRATED_ADDRESS_BASE58_PREFIX, + ::config::testnet::CRYPTONOTE_PUBLIC_SUBADDRESS_BASE58_PREFIX, + ::config::testnet::P2P_DEFAULT_PORT, + ::config::testnet::RPC_DEFAULT_PORT, + ::config::testnet::ZMQ_RPC_DEFAULT_PORT, + ::config::testnet::NETWORK_ID, + ::config::testnet::GENESIS_TX, + ::config::testnet::GENESIS_NONCE + }; + static const config_t stagenet = { + ::config::stagenet::CRYPTONOTE_PUBLIC_ADDRESS_BASE58_PREFIX, + ::config::stagenet::CRYPTONOTE_PUBLIC_INTEGRATED_ADDRESS_BASE58_PREFIX, + ::config::stagenet::CRYPTONOTE_PUBLIC_SUBADDRESS_BASE58_PREFIX, + ::config::stagenet::P2P_DEFAULT_PORT, + ::config::stagenet::RPC_DEFAULT_PORT, + ::config::stagenet::ZMQ_RPC_DEFAULT_PORT, + ::config::stagenet::NETWORK_ID, + ::config::stagenet::GENESIS_TX, + ::config::stagenet::GENESIS_NONCE + }; + switch (nettype) + { + case MAINNET: return mainnet; + case TESTNET: return testnet; + case STAGENET: return stagenet; + case FAKECHAIN: return mainnet; + default: throw std::runtime_error("Invalid network type"); + } + }; +} diff --git a/docs/research/xvb-delivery-study/data/sources/observer-README.md b/docs/research/xvb-delivery-study/data/sources/observer-README.md new file mode 100644 index 00000000..ce972c57 --- /dev/null +++ b/docs/research/xvb-delivery-study/data/sources/observer-README.md @@ -0,0 +1,84 @@ +# P2Pool Observer + +This repository contains the running code to produce statistics and historical archives of [Monero P2Pool](https://github.com/SChernykh/p2pool) decentralized pool. + +## Reporting issues + +You can give feedback or report / discuss issues on: +* [The issue tracker on git.gammaspectra.live/P2Pool/observer](https://git.gammaspectra.live/P2Pool/observer/issues?state=open) +* Via IRC on [#p2pool-observer@libera.chat](ircs://irc.libera.chat/#p2pool-observer), or via [Matrix](https://matrix.to/#/#p2pool-observer:monero.social) +* Any of the relevant rooms for the specific observer instances listed below. + +## Maintainer-run Observer Instances + +| Host | Onion Address | IRC Channel | Notes | +|--------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------| +| [P2Pool.Observer](https://p2pool.observer/) | [p2pool2giz2r5cpqicajwoazjcxkfujxswtk3jolfk2ubilhrkqam2id.onion](http://p2pool2giz2r5cpqicajwoazjcxkfujxswtk3jolfk2ubilhrkqam2id.onion/) | [#p2pool-log](ircs://irc.libera.chat/#p2pool-log) or [Matrix](https://matrix.to/#/#p2pool-log:monero.social) | Tracking up-to-date [Main P2Pool](https://p2pool.io/) on Mainnet | +| [MINI.P2Pool.Observer](https://mini.p2pool.observer/) | [p2pmin25k4ei5bp3l6bpyoap6ogevrc35c3hcfue7zfetjpbhhshxdqd.onion](http://p2pmin25k4ei5bp3l6bpyoap6ogevrc35c3hcfue7zfetjpbhhshxdqd.onion/) | [#p2pool-mini](ircs://irc.libera.chat/#p2pool-mini) or [Matrix](https://matrix.to/#/#p2pool-mini:libera.chat) [[2]](https://matrix.to/#/#p2pool-mini:monero.social) | Tracking up-to-date [Mini P2Pool](https://p2pool.io/mini/) on Mainnet | +| [NANO.P2Pool.Observer](https://nano.p2pool.observer/) | [p2pnanphwyo2smf3khhjjkmfxll7h2ptmj4iwrbjklsk2wx66m5m7oad.onion](http://p2pnanphwyo2smf3khhjjkmfxll7h2ptmj4iwrbjklsk2wx66m5m7oad.onion/) | [#p2pool-mini](ircs://irc.libera.chat/#p2pool-mini) or [Matrix](https://matrix.to/#/#p2pool-mini:libera.chat) [[2]](https://matrix.to/#/#p2pool-mini:monero.social) | Tracking up-to-date [Nano P2Pool](https://p2pool.io/nano/) on Mainnet | +| [OLD.P2Pool.Observer](https://old.p2pool.observer/) | [temp2p7m2ddclcsqx2mrbqrmo7ccixpiu5s2cz2c6erxi2lppptdvxqd.onion](http://temp2p7m2ddclcsqx2mrbqrmo7ccixpiu5s2cz2c6erxi2lppptdvxqd.onion/) | [#p2pool-log](ircs://irc.libera.chat/#p2pool-log) or [Matrix](https://matrix.to/#/#p2pool-log:monero.social) | Tracking old fork pre-v3.0 [Main P2Pool](https://p2pool.io/) on Mainnet | +| [OLD-MINI.P2Pool.Observer](https://old-mini.p2pool.observer/) | [temp2pbud6av2jx3lh3yovrj4mjjy2k4p5rxydviosp356ndzs4nd6yd.onion](http://temp2pbud6av2jx3lh3yovrj4mjjy2k4p5rxydviosp356ndzs4nd6yd.onion/) | [#p2pool-mini](ircs://irc.libera.chat/#p2pool-mini) or [Matrix](https://matrix.to/#/#p2pool-mini:libera.chat) [[2]](https://matrix.to/#/#p2pool-mini:monero.social) | Tracking old fork pre-v3.0 [Mini P2Pool](https://p2pool.io/mini/) on Mainnet | + +## Donations +This project is provided for everyone to use, for free, as a hobby project. Any support is appreciated. + +Donate to support this project, its development, and running the Observer Instances on [4AeEwC2Uik2Zv4uooAUWjQb2ZvcLDBmLXN4rzSn3wjBoY8EKfNkSUqeg5PxcnWTwB1b2V39PDwU9gaNE5SnxSQPYQyoQtr7](monero:4AeEwC2Uik2Zv4uooAUWjQb2ZvcLDBmLXN4rzSn3wjBoY8EKfNkSUqeg5PxcnWTwB1b2V39PDwU9gaNE5SnxSQPYQyoQtr7?tx_description=P2Pool.Observer) + +You can also use the OpenAlias `p2pool.observer` directly on the GUI. + +## Operational instructions + +A docker compose setup is provided and documented. + +If desired each tool can be run individually, but that is left to the user to configure, refer to Docker setup as reference. + +### Requirements +* `docker compose` or similar +* `git` installed +* Disk space for new incoming historic data. Assume a few tens of MiB per day +* A monerod non-pruned node running in unrestricted mode preferably, but can work with restricted mode. +* Enough RAM to fit state and incoming queries. It can run with lower with adjustment of settings, but 8 GiB per instance should be fine. + +### Initial setup +```bash +$ git clone https://git.gammaspectra.live/P2Pool/observer.git test-instance +$ cd test-instance +$ cp .env.example .env +``` +Edit `.env` via your preferred editor, specifically around the monerod host options and generate keys for the Tor hidden service. + +If you want to make changes to additional docker compose settings, do not edit `docker-compose.yml`. Instead, create `docker-compose.override.yml` and place new settings there. See [Multiple Compose files documentation](https://docs.docker.com/compose/extends/#multiple-compose-files). + +### Update / Apply new settings +Within the instance folder, run this command +```bash +$ git checkout -- '*/default.pgo'; \ +git pull && \ +docker compose build --pull && \ +docker compose up -d && \ +docker compose restart tor site +``` +`docker compose restart tor` is necessary due to the tor server not refreshing DNS of the containers. + +It is recommended to run `docker system prune` regularly or after update to cleanup no longer used images. + +### Development notes + +Requires using CGO when running the main modes where RandomX hashes are used, but can be used with `CGO_ENABLED=0` specifically as a library. + +You can install the RandomX dependency via this command: +```bash +$ git clone --depth 1 --branch master https://github.com/tevador/RandomX.git /tmp/RandomX && cd /tmp/RandomX && \ + mkdir build && cd build && \ + cmake .. -DCMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX:PATH=/usr && \ + make -j$(nproc) && \ + sudo make install && \ + cd ../ && \ + rm -rf /tmp/RandomX +``` + + +To generate web templates, run this command: +```bash +$ go run github.com/valyala/quicktemplate/qtc@v1.8.0 +``` \ No newline at end of file diff --git a/docs/research/xvb-delivery-study/data/sources/observer-api-docs-live.html b/docs/research/xvb-delivery-study/data/sources/observer-api-docs-live.html new file mode 100644 index 00000000..603d5906 --- /dev/null +++ b/docs/research/xvb-delivery-study/data/sources/observer-api-docs-live.html @@ -0,0 +1,1779 @@ + + + + + + + + + + + P2Pool.Observer + + - API Documentation + + + + + + + + +
+ + +
+
+

API Documentation

+

This site and API is in development. As such, returned data could be different, or methods be deprecated / replaced anytime. Though it will be avoided if possible without affecting performance :)

+

All the data showed on this site comes from the API, P2Pool or Monero. So if new features are added on site, it's possible to do so via the API.

+

At the moment there is no broad rate-limiting. If abuse is detected, temporary rate limits can be put in place. You can always run your own instance of this site / API / consensus, see source code.

+

Some historical data could be incomplete. Some block records do not exist.

+

In general, mandatory parameters are specified on the path, optional parameters on query.

+

Knowledge of P2Pool internals is strongly advised. Feel free to ask questions on IRC or Matrix.

+

Unless specified, all returned data is JSON with status code 200. A not found error will issue a status code 404 and JSON of {"error": "not_found"} or similar.

+
+ +
+

Common types and fields

+

+ Fields within JSON objects may be omitted if marked as omitempty or omitzero on its definition within the source code. An empty/zero representation is assumed. +
+ For example, a types.Hash marked as omitempty or omitzero would represent the value 0000000000000000000000000000000000000000000000000000000000000000. +
+ For pointers/structs, the zero or nil value is considered empty. In lists, an empty / length of zero is assumed when empty. +
+ Refer to source code to check the struct definition when in doubt. +

+ +

types.Hash

+

Represents a 256-bit hash value. This can refer to a block template id, main id, parents, transaction ids, proof of work hashes or any other value.

+

This value is encoded as 64 hexadecimal characters.

+ +

crypto.PublicKeyBytes / crypto.PrivateKeyBytes

+

Represents an edwards25519 Point or Scalar in binary form. Encoded as a 256-bit value. This can refer to a public keys on a block, transaction keys or any other value.

+

This value is encoded as 64 hexadecimal characters.

+ +

address.Address

+

Represents a Monero address. Includes valid checksums.

+

This value is encoded using special base58.

+ +

types.Difficulty

+

Represents a 128-bit unsigned integer value. This can refer to weight, block difficulty or cumulative difficulty.

+

This value is encoded as a 64-bit unsigned integer when the highest 64-bits are not set. Otherwise, it is encoded as 32 hexadecimal characters.

+
+ +
+ +
+

/api/pool_info

+

Response contains general information on the current status of the P2Pool sidechain and Monero network, release versions, and other parameters.

+
+[Live result. Has been cut due to size, relevant portions shown]
+curl --silent https://p2pool.observer/api/pool_info
+{
+    "sidechain": {
+        "consensus": {
+            "network_type": "mainnet",
+            "name": "mainnet test 2",
+            "password": "",
+            "block_time": 10,
+            "min_diff": 100000,
+            "pplns_window": 2160,
+            "uncle_penalty": 20,
+            "hard_forks": [
+                {
+                    "version": 1,
+                    "height": 0,
+                    "threshold": 0,
+                    "time": 0
+                },
+                {
+                    "version": 2,
+                    "height": 0,
+                    "threshold": 0,
+                    "time": 1679173200
+                },
+                {
+                    "version": 3,
+                    "height": 0,
+                    "threshold": 0,
+                    "time": 1728763200
+                }
+            ],
+            "monero_hard_forks": [
+                {
+                    "version": 1,
+                    "height": 1,
+                    "threshold": 0,
+                    "time": 1341378000
+                },
+                {
+                    "version": 2,
+                    "height": 1009827,
+                    "threshold": 0,
+                    "time": 1442763710
+                },
+                {
+                    "version": 3,
+                    "height": 1141317,
+                    "threshold": 0,
+                    "time": 1458558528
+                },
+                {
+                    "version": 4,
+                    "height": 1220516,
+                    "threshold": 0,
+                    "time": 1483574400
+                },
+                {
+                    "version": 5,
+                    "height": 1288616,
+                    "threshold": 0,
+                    "time": 1489520158
+                },
+                {
+                    "version": 6,
+                    "height": 1400000,
+                    "threshold": 0,
+                    "time": 1503046577
+                },
+                {
+                    "version": 7,
+                    "height": 1546000,
+                    "threshold": 0,
+                    "time": 1521303150
+                },
+                {
+                    "version": 8,
+                    "height": 1685555,
+                    "threshold": 0,
+                    "time": 1535889547
+                },
+                {
+                    "version": 9,
+                    "height": 1686275,
+                    "threshold": 0,
+                    "time": 1535889548
+                },
+                {
+                    "version": 10,
+                    "height": 1788000,
+                    "threshold": 0,
+                    "time": 1549792439
+                },
+                {
+                    "version": 11,
+                    "height": 1788720,
+                    "threshold": 0,
+                    "time": 1550225678
+                },
+                {
+                    "version": 12,
+                    "height": 1978433,
+                    "threshold": 0,
+                    "time": 1571419280
+                },
+                {
+                    "version": 13,
+                    "height": 2210000,
+                    "threshold": 0,
+                    "time": 1598180817
+                },
+                {
+                    "version": 14,
+                    "height": 2210720,
+                    "threshold": 0,
+                    "time": 1598180818
+                },
+                {
+                    "version": 15,
+                    "height": 2688888,
+                    "threshold": 0,
+                    "time": 1656629117
+                },
+                {
+                    "version": 16,
+                    "height": 2689608,
+                    "threshold": 0,
+                    "time": 1656629118
+                }
+            ],
+            "id": "22af7ee7b50b6892e399da6b2c6c4427b25104d4a9048e00b16e9df04407f918"
+        },
+        "last_block": {
+            "main_id": "53d59c8e927414456e51f006bd9a9bbef7ea9525a687124eb74831ce0bcd074e",
+            "main_height": 3737613,
+            "template_id": "09d4d6d5a90fe48fcac4b895d70377a2623ea8f0cd78fe57632eb49712d038a1",
+            "root_hash": "047ca59ea49b487d0006bc05fb43d136fc760bdd94b1551d761c4cc399d649b4",
+            "side_height": 14940666,
+            "parent_template_id": "656cf82601cabca731ac75126dcfb4dd63b89fff879885bba6821005ca946f2f",
+            "miner": 10815,
+            "effective_height": 14940666,
+            "nonce": 2214592628,
+            "extra_nonce": 1432973589,
+            "timestamp": 1786425516,
+            "software_id": 0,
+            "software_version": 266497,
+            "window_depth": 328,
+            "window_outputs": 43,
+            "difficulty": 4029765106,
+            "cumulative_difficulty": 29961793343607514,
+            "pow_difficulty": 7036554906,
+            "pow_hash": "0e30e5aba8fbb06d11ea3a82cf55f9ea2ed01a528416c1a6f8d0419c00000000",
+            "inclusion": 1,
+            "transaction_count": 0,
+            "miner_address": "41jt6AQp3nQD211wCMS3oJ9NC4wxAJorLNPUndcWoMjngiC88w1yi3ciRUsMSDFZ5996yfR3EJ3DfWnYignVFHLrRYDTDHh"
+        },
+        "seconds_since_last_block": 0,
+        "last_found": {
+            "main_block": {
+                "id": "7fdb17746111cb2aec0896e94bdae5c5b5c5a4b06e40fa88f4cc53ad86ddc7af",
+                "height": 3737604,
+                "timestamp": 1786424772,
+                "reward": 603999300000,
+                "coinbase_id": "f15585475d8f290d831b657dc5855de59af4223bc57fac8a2a769e626bf73bca",
+                "difficulty": 734162758959,
+                "side_template_id": "4c5815620cdee11335bf5e140e3f54eb7da9da31692314e13ff79c2c468f630e",
+                "root_hash": "a1488f83b1b379a71ceccfeb973f302e7937e77841efb35993ba74b5ff02d191",
+                "coinbase_private_key": "3c55e12c459ad9d54c07a34235e8cd4a88231c55623a5ffe4c756bfc0ff3aa04"
+            },
+            "side_height": 14940593,
+            "miner": 9595,
+            "effective_height": 14940593,
+            "window_depth": 330,
+            "window_outputs": 44,
+            "transaction_count": 32,
+            "difficulty": 4032256037,
+            "cumulative_difficulty": 29961483496491697,
+            "inclusion": 1
+        },
+        "effort": {
+            "current": 42.13493861174415,
+            "average10": 87.41886506847622,
+            "average": 78.19523983008372,
+            "average200": 84.24768784483147,
+            "last": [
+                {
+                    "id": "7fdb17746111cb2aec0896e94bdae5c5b5c5a4b06e40fa88f4cc53ad86ddc7af",
+                    "effort": 18.579001819079927
+                },
+                {
+                    "id": "296b13266095c7b45fbc5dfec7821cadf303bdf66ccb0430c1cd46ea10f2a33c",
+                    "effort": 100.9935247469688
+                },
+                {
+                    "id": "56f6bd4584f8d2f2a20ea47897a21a9c3f9327eb3c20bb37280593743613c2f7",
+                    "effort": 25.43342468510072
+                },
+                {
+                    "id": "4b754b631373c6b905743eea21fb7555b23d087d40c447bc32e9aa2b86389f97",
+                    "effort": 3.7878261302877543
+                },
+                {
+                    "id": "35ea2c529255ca66b10ba5bad79ed893b3d1fe16b8f6795a73c93a7e923dc1f8",
+                    "effort": 72.50793670065457
+                }
+            ]
+        },
+        "window": {
+            "miners": 43,
+            "blocks": 328,
+            "uncles": 18,
+            "top": "09d4d6d5a90fe48fcac4b895d70377a2623ea8f0cd78fe57632eb49712d038a1",
+            "bottom": "cc8ff5d695c6279f51799c1bfa7683cb0c3897a886b261e1f40b2d0c6931107d",
+            "weight": 1380634699322,
+            "versions": [
+                {
+                    "weight": 565639388955,
+                    "share": 40.96951852888917,
+                    "count": 142,
+                    "software_id": 0,
+                    "software_version": 266497,
+                    "software_string": "P2Pool v4.17.1"
+                },
+                {
+                    "weight": 565085023625,
+                    "share": 40.929365595584486,
+                    "count": 142,
+                    "software_id": 0,
+                    "software_version": 266752,
+                    "software_string": "P2Pool v4.18"
+                },
+                {
+                    "weight": 193141310253,
+                    "share": 13.989313056368028,
+                    "count": 48,
+                    "software_id": 0,
+                    "software_version": 266496,
+                    "software_string": "P2Pool v4.17"
+                },
+                {
+                    "weight": 23964977822,
+                    "share": 1.7357942570738434,
+                    "count": 6,
+                    "software_id": 0,
+                    "software_version": 266240,
+                    "software_string": "P2Pool v4.16"
+                },
+                {
+                    "weight": 15975098560,
+                    "share": 1.1570836636110209,
+                    "count": 4,
+                    "software_id": 0,
+                    "software_version": 262912,
+                    "software_string": "P2Pool v4.3"
+                },
+                {
+                    "weight": 8011885590,
+                    "share": 0.5803045218213381,
+                    "count": 2,
+                    "software_id": 0,
+                    "software_version": 264705,
+                    "software_string": "P2Pool v4.10.1"
+                },
+                {
+                    "weight": 4828723149,
+                    "share": 0.34974661663735396,
+                    "count": 1,
+                    "software_id": 0,
+                    "software_version": 265985,
+                    "software_string": "P2Pool v4.15.1"
+                },
+                {
+                    "weight": 3988291368,
+                    "share": 0.2888737600147645,
+                    "count": 1,
+                    "software_id": 0,
+                    "software_version": 264960,
+                    "software_string": "P2Pool v4.11"
+                }
+            ]
+        },
+        "found": 74519,
+        "miners": 10863,
+        "id": "09d4d6d5a90fe48fcac4b895d70377a2623ea8f0cd78fe57632eb49712d038a1",
+        "height": 14940666,
+        "version": 3,
+        "difficulty": 4029765106,
+        "cumulative_difficulty": 29961793343607514,
+        "timestamp": 1786425516,
+        "window_size": 328,
+        "max_window_size": 2160,
+        "block_time": 10,
+        "uncle_penalty": 20
+    },
+    "mainchain": {
+        "consensus": {
+            "block_time": 120,
+            "transaction_unlock_time": 10,
+            "miner_reward_unlock_time": 60,
+            "hard_fork_supported_version": 18,
+            "hard_forks": [
+                {
+                    "version": 1,
+                    "height": 1,
+                    "threshold": 0,
+                    "time": 1341378000
+                },
+                {
+                    "version": 2,
+                    "height": 1009827,
+                    "threshold": 0,
+                    "time": 1442763710
+                },
+                {
+                    "version": 3,
+                    "height": 1141317,
+                    "threshold": 0,
+                    "time": 1458558528
+                },
+                {
+                    "version": 4,
+                    "height": 1220516,
+                    "threshold": 0,
+                    "time": 1483574400
+                },
+                {
+                    "version": 5,
+                    "height": 1288616,
+                    "threshold": 0,
+                    "time": 1489520158
+                },
+                {
+                    "version": 6,
+                    "height": 1400000,
+                    "threshold": 0,
+                    "time": 1503046577
+                },
+                {
+                    "version": 7,
+                    "height": 1546000,
+                    "threshold": 0,
+                    "time": 1521303150
+                },
+                {
+                    "version": 8,
+                    "height": 1685555,
+                    "threshold": 0,
+                    "time": 1535889547
+                },
+                {
+                    "version": 9,
+                    "height": 1686275,
+                    "threshold": 0,
+                    "time": 1535889548
+                },
+                {
+                    "version": 10,
+                    "height": 1788000,
+                    "threshold": 0,
+                    "time": 1549792439
+                },
+                {
+                    "version": 11,
+                    "height": 1788720,
+                    "threshold": 0,
+                    "time": 1550225678
+                },
+                {
+                    "version": 12,
+                    "height": 1978433,
+                    "threshold": 0,
+                    "time": 1571419280
+                },
+                {
+                    "version": 13,
+                    "height": 2210000,
+                    "threshold": 0,
+                    "time": 1598180817
+                },
+                {
+                    "version": 14,
+                    "height": 2210720,
+                    "threshold": 0,
+                    "time": 1598180818
+                },
+                {
+                    "version": 15,
+                    "height": 2688888,
+                    "threshold": 0,
+                    "time": 1656629117
+                },
+                {
+                    "version": 16,
+                    "height": 2689608,
+                    "threshold": 0,
+                    "time": 1656629118
+                }
+            ]
+        },
+        "id": "3e8aeb72bccd1a9ff76d632e763c015ecfe95893441057689acb119a99991057",
+        "coinbase_id": "5fcba3aa6573081bf2467090915ac2156f0bb3269c0762e831516080471c7769",
+        "height": 3737612,
+        "difficulty": 735368618125,
+        "reward": 622896020000,
+        "base_reward": 600000000000,
+        "next_difficulty": 732548938509,
+        "block_time": 120
+    },
+    "versions": {
+        "p2pool": {
+            "version": "v4.18",
+            "timestamp": 1785923820,
+            "link": "https://github.com/SChernykh/p2pool/releases/tag/v4.18"
+        },
+        "monero": {
+            "version": "v0.18.5.1",
+            "timestamp": 1783542348,
+            "link": "https://github.com/monero-project/monero/releases/tag/v0.18.5.1"
+        }
+    }
+}
+
+        
+
+ +
+ +
+

/api/miner_info/<id|address>

+

Response contains general information on a specific miner, referred by its internal id or known Monero address.

+

If you do not need the precise count of shares please pass the ?shareEstimates parameter.

+
+curl --silent https://p2pool.observer/api/miner_info/47ab14EokGgCTX7RYoVhrNMjVA7GfW1jyMAmL7qBQz9fa4RZ6ZsBUgeRGuPWjqeM1wLptSJH5xuX2H4mAepMYvu6JqWMsGw
+{
+    "id": 3,
+    "address": "47ab14EokGgCTX7RYoVhrNMjVA7GfW1jyMAmL7qBQz9fa4RZ6ZsBUgeRGuPWjqeM1wLptSJH5xuX2H4mAepMYvu6JqWMsGw",
+    "shares": [
+        {
+            "shares": 1022,
+            "uncles": 0,
+            "last_height": 4371641
+        },
+        {
+            "shares": 559294,
+            "uncles": 17861,
+            "last_height": 4868281
+        },
+        {
+            "shares": 69,
+            "uncles": 0,
+            "last_height": 4624653
+        }
+    ],
+    "last_share_height": 4868281,
+    "last_share_timestamp": 1681256979
+}
+        
+
+ +
+ +
+

/api/side_blocks_in_window?window=[window_size]&from=[height][&noMainStatus][&noUncles][&noMiners]

+

Response contains SideChain Blocks on specified range window. Optional parameters are height, denoting the Tip where the window gets measured from, and window_size, max SIDECHAIN_PPLNS_WINDOW * 4 * 7

+

By default it will return current window blocks, from current tip.

+
+[result has been cut due to size, relevant portions shown]
+curl --silent https://p2pool.observer/api/side_blocks_in_window
+[
+    {
+        "main_id": "61c6463961c31584617f2ffd322fd32f91cef4a956b3ac431c128ab1ef8342c8",
+        "main_height": 2863488,
+        "template_id": "8782465759db40c11f64e78a26df4ec6221fb91202cc19a3beaef61acb8e1a50",
+        "side_height": 4882215,
+        "parent_template_id": "2ee8e55e2d0696d715049f5958c300c10b01d0a30b607c82afb8885a76f00d71",
+        "miner": 3,
+        "effective_height": 4882215,
+        "nonce": 3691022871,
+        "extra_nonce": 1665655721,
+        "timestamp": 1681402700,
+        "software_id": 0,
+        "software_version": 196610,
+        "window_depth": 294,
+        "window_outputs": 30,
+        "transaction_count": 2,
+        "difficulty": 2107950958,
+        "cumulative_difficulty": 7610896210501088,
+        "pow_difficulty": 3167867138,
+        "pow_hash": "3e19a8e6c1db97bae77fb19b68b5bf6c927e3b212063ee219e26155b01000000",
+        "inclusion": 1,
+        "miner_address": "47ab14EokGgCTX7RYoVhrNMjVA7GfW1jyMAmL7qBQz9fa4RZ6ZsBUgeRGuPWjqeM1wLptSJH5xuX2H4mAepMYvu6JqWMsGw",
+        "main_difficulty": 310626726029
+    },
+    {
+        "main_id": "30e8afa1c6961afae7686f4c9c2ee5ad77bd87bdcbf7da00958af53b3349264a",
+        "main_height": 2863488,
+        "template_id": "2ee8e55e2d0696d715049f5958c300c10b01d0a30b607c82afb8885a76f00d71",
+        "side_height": 4882214,
+        "parent_template_id": "e0b745e8e3004832d95ef7eb6aa5f43dd0f86a491b6edb8ccd8e8dfbf92f6768",
+        "miner": 2,
+        "effective_height": 4882214,
+        "nonce": 3791814950,
+        "extra_nonce": 610282123,
+        "timestamp": 1681402699,
+        "software_id": 0,
+        "software_version": 196610,
+        "window_depth": 293,
+        "window_outputs": 30,
+        "transaction_count": 2,
+        "difficulty": 2108162718,
+        "cumulative_difficulty": 7610894102550130,
+        "pow_difficulty": 5140029450,
+        "pow_hash": "591082e76b158724c0a1a3ea8ffdec93eaa33a8d371eda2ad85ae9d500000000",
+        "inclusion": 1,
+        "miner_address": "435QwkC3fJ4YeX929gmaBMeuUwR1wdmRrQBNyoKfpJdHKDbqnukHJeA768yt8ngnS7UTHRJ2yJmnWP8gCz6s3kkiBX8C363",
+        "uncles": [
+            {
+                "template_id": "4005ede80787679e83d269f09f6435ac4952d9c2cf2fadf999620ed81a948d40",
+                "miner": 77,
+                "side_height": 4882213,
+                "difficulty": 2109635914
+            }
+        ],
+        "main_difficulty": 310626726029
+    },
+    {
+        "main_id": "6d1865f59d8cd38f5de6a498a2a5465040194f63122187b6e439743913aac202",
+        "main_height": 2863487,
+        "template_id": "4005ede80787679e83d269f09f6435ac4952d9c2cf2fadf999620ed81a948d40",
+        "side_height": 4882213,
+        "parent_template_id": "985d621e565da6da1f772dffef4b1154678cc724b6b18eff6edde5e68136a45d",
+        "miner": 77,
+        "uncle_of": "2ee8e55e2d0696d715049f5958c300c10b01d0a30b607c82afb8885a76f00d71",
+        "effective_height": 4882214,
+        "nonce": 3326443597,
+        "extra_nonce": 3803058762,
+        "timestamp": 1681402680,
+        "software_id": 0,
+        "software_version": 196610,
+        "window_depth": 294,
+        "window_outputs": 31,
+        "transaction_count": 0,
+        "difficulty": 2109635914,
+        "cumulative_difficulty": "0000000000000000001b0a106401568a",
+        "pow_difficulty": 2153295646,
+        "pow_hash": 7610889884751498,
+        "inclusion": 1,
+        "miner_address": "457fCKqWYSacjDRLjqah9kTga8KCQRNwL4WP7EfBNQKghYF3RZunjGHCoPSd6F7Y6mVRpT6eCgkEtin3cKvSCf11AqcP33g",
+        "main_difficulty": 310568847048
+    },
+    {
+        "main_id": "f5582e27b94a34713b607d0f47821142c8b88f8a3335d5b2b1d679c909a9651f",
+        "main_height": 2863486,
+        "template_id": "e0b745e8e3004832d95ef7eb6aa5f43dd0f86a491b6edb8ccd8e8dfbf92f6768",
+        "side_height": 4882213,
+        "parent_template_id": "985d621e565da6da1f772dffef4b1154678cc724b6b18eff6edde5e68136a45d",
+        "miner": 18,
+        "effective_height": 4882213,
+        "nonce": 3506931857,
+        "extra_nonce": 1625389436,
+        "timestamp": 1681402674,
+        "software_id": 0,
+        "software_version": 196610,
+        "window_depth": 294,
+        "window_outputs": 31,
+        "transaction_count": 115,
+        "difficulty": 2109635914,
+        "cumulative_difficulty": 7610889884751498,
+        "pow_difficulty": 3604028547,
+        "pow_hash": "1d01609ded322d6665fb96410042cc5cc9604be078b77967a818143101000000",
+        "inclusion": 1,
+        "miner_address": "4BBb6ZBPPPWivZnx2m3m7YUUGQv54F9HfjPWurf2Xy2UDQwwPyb956dGQ3p9whrxNJ568zc3Ygfr9McVT1UJyRKtLi1jcMb",
+        "main_difficulty": 310847993727
+    }
+]
+        
+
+ +
+ +
+

/api/side_blocks_in_window/<id|address>?window=[window_size]&from=[height][&noMainStatus][&noUncles][&noMiners]

+

Response contains SideChain Blocks on specified range window for a specific miner. Optional parameters are height, denoting the Tip where the window gets measured from, and window_size, max SIDECHAIN_PPLNS_WINDOW * 4 * 7

+

By default it will return current window blocks, from current tip.

+
+[result has been cut due to size, relevant portions shown]
+curl --silent https://p2pool.observer/api/side_blocks_in_window/47ab14EokGgCTX7RYoVhrNMjVA7GfW1jyMAmL7qBQz9fa4RZ6ZsBUgeRGuPWjqeM1wLptSJH5xuX2H4mAepMYvu6JqWMsGw
+[
+        {
+        "main_id": "b41a9e78f11b9f7eaed30a4211f43ae7201f7c77031839f3e484b59c32088028",
+        "main_height": 2863492,
+        "template_id": "ce8de3ca5a9a066c0b4f5d5068783b17ace476f56236c65f5c949b9039c0ca3e",
+        "side_height": 4882250,
+        "parent_template_id": "a0cb288e467f5a4069603f4047c8607f1721a4b62fc8e2f794a5a942828fdf32",
+        "miner": 3,
+        "effective_height": 4882250,
+        "nonce": 2046825740,
+        "extra_nonce": 1477203696,
+        "timestamp": 1681403097,
+        "software_id": 0,
+        "software_version": 196610,
+        "window_depth": 296,
+        "window_outputs": 28,
+        "transaction_count": 75,
+        "difficulty": 2099479471,
+        "cumulative_difficulty": 7610976044280876,
+        "pow_difficulty": 2770364525,
+        "pow_hash": "ea3d41d8874fb1de05aee76a0fb6df7267b07e34ee95cdf1f924e28c01000000",
+        "inclusion": 1,
+        "miner_address": "47ab14EokGgCTX7RYoVhrNMjVA7GfW1jyMAmL7qBQz9fa4RZ6ZsBUgeRGuPWjqeM1wLptSJH5xuX2H4mAepMYvu6JqWMsGw",
+        "main_difficulty": 311336952550
+    },
+    {
+        "main_id": "fea4ee3769b350f2aad0571ff54eb555dbdf7f0cb811c19dea66bef286b041c4",
+        "main_height": 2863492,
+        "template_id": "74caf5d6ba885d05adbb4e4d611edabb55f0e05dcbb20cd3105d2adbcf4cdd1b",
+        "side_height": 4882248,
+        "parent_template_id": "3378e835d72a821b5157d8bebaf4f2193ebaf9cb86c93a106fc4fbbb1921c158",
+        "miner": 3,
+        "effective_height": 4882248,
+        "nonce": 3456175326,
+        "extra_nonce": 2803310737,
+        "timestamp": 1681403084,
+        "software_id": 0,
+        "software_version": 196610,
+        "window_depth": 296,
+        "window_outputs": 28,
+        "transaction_count": 73,
+        "difficulty": 2103245329,
+        "cumulative_difficulty": 7610971844410631,
+        "pow_difficulty": 5249306449,
+        "pow_hash": "4ab091d18ac65c212feff8f1a971aee1da50c177620827326b5d75d100000000",
+        "inclusion": 1,
+        "miner_address": "47ab14EokGgCTX7RYoVhrNMjVA7GfW1jyMAmL7qBQz9fa4RZ6ZsBUgeRGuPWjqeM1wLptSJH5xuX2H4mAepMYvu6JqWMsGw",
+        "main_difficulty": 311336952550
+    },
+    {
+        "main_id": "277a19bf024b4895553bbefc047eeb7733b95a97df6d8422759ec874d2d626c1",
+        "main_height": 2863492,
+        "template_id": "52ad4bb20d62b0e9d7762bab8d27de05563be6147cf3367d9bc79688f794217c",
+        "side_height": 4882246,
+        "parent_template_id": "40865b24eb4fbd1428ff1444d21b4337c8922b60b63a3ab6bdfef2586775390b",
+        "miner": 3,
+        "effective_height": 4882246,
+        "nonce": 754974898,
+        "extra_nonce": 2953378118,
+        "timestamp": 1681403082,
+        "software_id": 0,
+        "software_version": 196610,
+        "window_depth": 296,
+        "window_outputs": 28,
+        "transaction_count": 72,
+        "difficulty": 2104858109,
+        "cumulative_difficulty": 7610967638144376,
+        "pow_difficulty": 4514527717,
+        "pow_hash": "fc127598502b38c4977f7faef3f7db6bab11bab42353baed9ab58cf300000000",
+        "inclusion": 1,
+        "miner_address": "47ab14EokGgCTX7RYoVhrNMjVA7GfW1jyMAmL7qBQz9fa4RZ6ZsBUgeRGuPWjqeM1wLptSJH5xuX2H4mAepMYvu6JqWMsGw",
+        "uncles": [
+            {
+                "template_id": "ab07fe1e4a6a00ae799bedc637c1b642b4938d302ec16db5b513923937614abe",
+                "miner": 7,
+                "side_height": 4882244,
+                "difficulty": 2105207888
+            }
+        ],
+        "main_difficulty": 311336952550
+    },
+    {
+        "main_id": "ff68eedc72252289e066d2dd59c209dc1502500d2cf4501fb69a91b69e2415b8",
+        "main_height": 2863492,
+        "template_id": "4764acc29d604f1491d600504d2802fea156a47ad691420b63d2c52924570925",
+        "side_height": 4882241,
+        "parent_template_id": "12f8b044e315669904f81caa055eac84f9a7d30d93bdd446cf304d38f18097cf",
+        "miner": 3,
+        "effective_height": 4882241,
+        "nonce": 4026633700,
+        "extra_nonce": 2755066571,
+        "timestamp": 1681403011,
+        "software_id": 0,
+        "software_version": 196610,
+        "window_depth": 296,
+        "window_outputs": 29,
+        "transaction_count": 47,
+        "difficulty": 2099621378,
+        "cumulative_difficulty": 7610955003350240,
+        "pow_difficulty": 5985480395,
+        "pow_hash": "6e0cc4b1e989a18a8f7a65c5aa5ad252a071cd57d877cac4f14bb2b700000000",
+        "inclusion": 1,
+        "miner_address": "47ab14EokGgCTX7RYoVhrNMjVA7GfW1jyMAmL7qBQz9fa4RZ6ZsBUgeRGuPWjqeM1wLptSJH5xuX2H4mAepMYvu6JqWMsGw",
+        "main_difficulty": 311336952550
+    }
+]
+        
+
+ +
+ +
+

/api/payouts/<id|address>?search_limit=[search_limit]

+

Response contains payouts received by this miner due to blocks on Monero network. Optional parameters are search_limit, maximum amount of records to return, set 0 to return all. Defaults to 10

+

.[].coinbase_private_key can be used to prove the payout is correct.

+
+[result has been cut due to size, relevant portions shown]
+curl --silent https://p2pool.observer/api/payouts/47ab14EokGgCTX7RYoVhrNMjVA7GfW1jyMAmL7qBQz9fa4RZ6ZsBUgeRGuPWjqeM1wLptSJH5xuX2H4mAepMYvu6JqWMsGw
+[
+    {
+        "miner": 3,
+        "template_id": "cebb0c11be67c43c1a01cf2ac43e6bafe745a92012bbbb04be03842f56c5cc78",
+        "side_height": 5428093,
+        "main_id": "8e0c7b08f92be1bdc5c4153f7a8c3e536f1353aff898684477cc6ba857b8510e",
+        "main_height": 2910747,
+        "timestamp": 1687085695,
+        "coinbase_id": "e1b20914f4ff768277c19daa65ef5f2ace7cda6f3f2586caf569c3008b7510b1",
+        "coinbase_reward": 3400854816,
+        "coinbase_private_key": "9438ef07d1bb10ae05e68cdf900938807fe8639acf7dab27feedc08119072b02",
+        "coinbase_output_index": 26,
+        "global_output_index": 75393989,
+        "including_height": 5427726
+    },
+    {
+        "miner": 3,
+        "template_id": "9bab936c12790d7e006ef1e97bf00572e85eb2f5647ce6320491fc93ba47f6a0",
+        "side_height": 5427897,
+        "main_id": "8bf0f5f17c53a68e5fb36a89781acd84c5936c4b06287aad09c038dac8b52860",
+        "main_height": 2910737,
+        "timestamp": 1687083786,
+        "coinbase_id": "413b6cac611c49d543d058a7d4ea908ba8a3774ced6781c2fdcdbbc0b187f24a",
+        "coinbase_reward": 103013108631,
+        "coinbase_private_key": "4344896bdacc7c58758090b955c7fd098f7414cdf773ec39fd12808f1fb4090f",
+        "coinbase_output_index": 11,
+        "global_output_index": 75393229,
+        "including_height": 5427531
+    },
+    {
+        "miner": 3,
+        "template_id": "566257bf73bc937a7b5bb6c3b6c1a2008db078a56d4fcbb2e34bde6f2b847d55",
+        "side_height": 5427764,
+        "main_id": "d74f9c0201c248911d6c306f7e6b5d58dea469ecf40ffd891e59dd0f6d082aea",
+        "main_height": 2910725,
+        "timestamp": 1687082281,
+        "coinbase_id": "561ed794fbdf5502fbd934fe7d7e4b9f4ccd4a8f7436fb93bc51c1e6dd431357",
+        "coinbase_reward": 170359596687,
+        "coinbase_private_key": "0332c944b6919f8e284993c35f810ce6b0c43cbf5f743f339fd4aaa197787109",
+        "coinbase_output_index": 14,
+        "global_output_index": 75392201,
+        "including_height": 5427402
+    }
+]
+        
+
+ +
+ +
+

/api/found_blocks?limit=[limit]&miner=[id|address]

+

Response contains last found block records on the Monero network by P2Pool. Optional parameters are limit, maximum amount of records to return, defaults to 50, max 1000. Additionally, you can pass the miner parameter to select blocks from that miner only. coinbase parameter can also be used here to decode coinbase outputs.

+
+curl --silent https://p2pool.observer/api/found_blocks?limit=2
+[
+    {
+        "main_block": {
+            "id": "be284c7fc784ca83f92c2f1eac2e02524a99a63876179dae6c370a199d533d95",
+            "height": 2942191,
+            "timestamp": 1690866882,
+            "reward": 600373170000,
+            "coinbase_id": "691eb1e5b9222df2c667a481370acdd751c7f5f3cd0345ac9fc0f1feea396f7c",
+            "difficulty": 260315236919,
+            "side_template_id": "b76318caa4822826573ceebcabbd0309d2a710dd83700cb5d0cae206d9835cb4",
+            "coinbase_private_key": "5cdea4c89482c19588527238d32bdad97151c4e40800882183222d080ff5f203"
+        },
+        "side_height": 5789985,
+        "miner": 2915,
+        "effective_height": 5789985,
+        "window_depth": 438,
+        "window_outputs": 41,
+        "transaction_count": 2,
+        "difficulty": 1301336116,
+        "cumulative_difficulty": 9202373148639334,
+        "inclusion": 1,
+        "miner_address": "42HEEF3NM9cHkJoPpDhNyJHuZ6DFhdtymCohF9CwP5KPM1Mp3eH2RVXCPRrxe4iWRogT7299R8PP7drGvThE8bHmRDq1qWp"
+    },
+    {
+        "main_block": {
+            "id": "ac6ae3cfe0f241e22aae6b7a165e7254f380d50c5a690994aa462120c00c4f16",
+            "height": 2942190,
+            "timestamp": 1690866866,
+            "reward": 608015760000,
+            "coinbase_id": "a7f784cc724f9e172d3bea13a18569b339e96d218b3fa54f9189abacbeb349ae",
+            "difficulty": 260396879898,
+            "side_template_id": "be9e779f4f8b2cd96c6e30a94c28c6d36af261ecf7cc195394471f112b850c49",
+            "coinbase_private_key": "896cde95bf6713d60b7ed4bafa88018e7418cd55db9232db08dc2de174cebd0b"
+        },
+        "side_height": 5789983,
+        "miner": 2915,
+        "effective_height": 5789983,
+        "window_depth": 438,
+        "window_outputs": 41,
+        "transaction_count": 49,
+        "difficulty": 1301263505,
+        "cumulative_difficulty": 9202370546222535,
+        "inclusion": 1,
+        "miner_address": "42HEEF3NM9cHkJoPpDhNyJHuZ6DFhdtymCohF9CwP5KPM1Mp3eH2RVXCPRrxe4iWRogT7299R8PP7drGvThE8bHmRDq1qWp"
+    }
+]
+        
+
+ + +
+ +
+

/api/shares?limit=[limit]&miner=[id|address][&onlyBlocks][&noMainStatus][&noUncles][&noMiners]

+

Response contains last found SideChain block records on P2Pool. Optional parameters are limit, maximum amount of records to return, defaults to 50, max SIDECHAIN_PPLNS_WINDOW. Additionally, you can pass the miner parameter to select shares from that miner only. onlyBlocks can be set to not receive uncle share entries.

+
+curl --silent https://p2pool.observer/api/shares?limit=2
+[
+   {
+       "main_id": "7717e2e59fb345ce3e5c5585b51632f32db2e98bb0a69b64a0b91f7b370be3b7",
+       "main_height": 2942216,
+       "template_id": "7f0ce404ab3d576d97dc4affacb5e443fb4c1f36f1bb09feed5b9af3dcca0169",
+       "side_height": 5790240,
+       "parent_template_id": "7070785f6ac7c486ab2ae7df443e6afc31010f87206b44c90be1339cd2ecfc70",
+       "miner": 2915,
+       "effective_height": 5790240,
+       "nonce": 1660977225,
+       "extra_nonce": 2706560389,
+       "timestamp": 1690869415,
+       "software_id": 0,
+       "software_version": 196613,
+       "window_depth": 424,
+       "window_outputs": 40,
+       "difficulty": 1327149158,
+       "cumulative_difficulty": 9202726518962104,
+       "pow_difficulty": 1720691274,
+       "pow_hash": "36685a8106e8b6a7450820f97cba0fa3cd2aa017fb4119f3737ffe7e02000000",
+       "inclusion": 1,
+       "transaction_count": 9,
+       "miner_address": "42HEEF3NM9cHkJoPpDhNyJHuZ6DFhdtymCohF9CwP5KPM1Mp3eH2RVXCPRrxe4iWRogT7299R8PP7drGvThE8bHmRDq1qWp",
+       "main_difficulty": 260565791438
+   },
+   {
+       "main_id": "9ce6483c303ada746b9e969c65235bcba0433865f6afd11153e94fb0e6d41046",
+       "main_height": 2942216,
+       "template_id": "7070785f6ac7c486ab2ae7df443e6afc31010f87206b44c90be1339cd2ecfc70",
+       "side_height": 5790239,
+       "parent_template_id": "d7477275674bd90bba39e4604cf2539ae99460856567895369cda165370ba081",
+       "miner": 5695,
+       "effective_height": 5790239,
+       "nonce": 460496,
+       "extra_nonce": 346986124,
+       "timestamp": 1690869412,
+       "software_id": 0,
+       "software_version": 196612,
+       "window_depth": 425,
+       "window_outputs": 40,
+       "difficulty": 1326689571,
+       "cumulative_difficulty": 9202725191812946,
+       "pow_difficulty": 1929563612,
+       "pow_hash": "1ba49ad252103dc9e5eba606a3c1fac0875e01b6163201d6b6f0d23902000000",
+       "inclusion": 1,
+       "transaction_count": 9,
+       "miner_address": "48bSCfGTKE4Kb3Fe3YWYgmNjgxjGqxZsP4mwHEQDVUQST2HxRGEX2566LbfmBE5bW2JcByTnjsWZiQZWj6f8XSpX4EDE9Gj",
+       "main_difficulty": 260565791438
+   }
+]
+        
+
+ + +
+ +
+

/api/block_by_id/<blockId>[/full|/light|/raw|/info|/payouts|/coinbase]

+

Response contains a block/share record on P2Pool by Template, Main Id, or Coinbase Id. You can select the JSON version or the binary format, or the full/light JSON format of the raw share.

+

Using /payouts you can query all payouts that include weights by this share.

+

Using /coinbase you can query all possible outputs and ownership for found and not found blocks.

+
+curl --silent https://p2pool.observer/api/block_by_id/179cf9d77c7d198dc4d9a5deb03561b6121336fe9ea72fbda00fbf6eea34a34d
+{
+    "main_id": "abf18da3388c1c5c8ca372ac4804c6b1b2adb511d6a6cc5f781d883211568eb0",
+    "main_height": 2863113,
+    "template_id": "179cf9d77c7d198dc4d9a5deb03561b6121336fe9ea72fbda00fbf6eea34a34d",
+    "side_height": 4877733,
+    "parent_template_id": "ffd6a96ce3131f043f273582a69d1eaa42b7557f47f7b241140cb22af9fbf556",
+    "miner": 3,
+    "effective_height": 4877733,
+    "nonce": 1694662668,
+    "extra_nonce": 2797508428,
+    "timestamp": 1681355864,
+    "software_id": 0,
+    "software_version": 196610,
+    "window_depth": 327,
+    "window_outputs": 33,
+    "difficulty": 1956175240,
+    "cumulative_difficulty": 7601017513575704,
+    "pow_difficulty": 1301275836828,
+    "pow_hash": "602d39809af709405eb8660028fdfa5bf80e71e6a4ec1fbb924ed80000000000",
+    "inclusion": 1,
+    "transaction_count": 5,
+    "mined_main_at_height": true,
+    "miner_address": "47ab14EokGgCTX7RYoVhrNMjVA7GfW1jyMAmL7qBQz9fa4RZ6ZsBUgeRGuPWjqeM1wLptSJH5xuX2H4mAepMYvu6JqWMsGw",
+    "main_difficulty": 332971955880
+}
+        
+
+ + + +
+ +
+

/api/block_by_height/<blockHeight>[/full|/light|/raw|/info|/payouts|/coinbase]

+

Response contains a block/share record on P2Pool by SideChain height. You can select the JSON version or the binary format, or the full/light JSON format of the raw share.

+

Using /payouts you can query all payouts that include weights by this share.

+

Using /coinbase you can query all possible outputs and ownership for found and not found blocks.

+
+curl --silent https://p2pool.observer/api/block_by_height/4868351
+{
+    "main_id": "5b468e062dc4aa1570f956e6314f6d0634a772aa8d2905d8ab9c83026a7ac6af",
+    "main_height": 2862309,
+    "template_id": "09d1974eea6de73d3cb95bc495b0b24a7b6f6405eaada53c4ec1ad3f513a4cc8",
+    "side_height": 4868351,
+    "parent_template_id": "b74acca03b7593386dd54b8132bf79522c9861b41f7797d0ce4f2af5f35cc170",
+    "miner": 1,
+    "effective_height": 4868351,
+    "nonce": 3271624915,
+    "extra_nonce": 1072029533,
+    "timestamp": 1681257577,
+    "software_id": 0,
+    "software_version": 196609,
+    "window_depth": 323,
+    "window_outputs": 30,
+    "difficulty": 2002581944,
+    "cumulative_difficulty": 7579715115168858,
+    "pow_difficulty": 3782914221,
+    "pow_hash": "fe471ad3fbd112fabe2abebafeccd2cb8eb0077864e7cfe939eaa62201000000",
+    "inclusion": 1,
+    "transaction_count": 28,
+    "miner_address": "4ApeMQzcRS7huBW8HEGkug2e5kQxhhC2Ub9y8F9bc7arKHsCktAV24n5ezKM9PjX5yS3Pv4PPNMXT8rTAFVuKCRi1jEqJZd",
+    "main_difficulty": 326506434325
+}
+        
+
+ + +
+
+

/api/events WebSocket Event API

+

+ Connect to this using a WebSocket library. Produces a stream of JSON events for new blocks (type side_block), found blocks (type found_block), orphaned blocks (type orphaned_block). +

+[result has been cut due to size, relevant portions shown]
+{
+   "type":"side_block",
+   "side_block":{
+      "main_id":"77d54ef67b566439c7df43614928ee6a503d82fb16f69720ed2ca0852b4ea5b6",
+      "main_height":2871492,
+      "template_id":"7c5db68e5af86e66df94d03688a8f61d7e7cd4544dbadc3f4d2f7972c0c72b17",
+      "side_height":4973833,
+      "parent_template_id":"10e2b50eb5c688bea4852f25b0d3550fe0e4e8192ea0602a373fb48454496e20",
+      "miner":19,
+      "uncle_of":"372ee3a80d8ab9131878a56e5e2802aa3f797a55d38f76871f1eeeafd60cd828",
+      "effective_height":4973834,
+      "nonce":4127591028,
+      "extra_nonce":3737539655,
+      "timestamp":1682358001,
+      "software_id":0,
+      "software_version":196610,
+      "window_depth":333,
+      "window_outputs":31,
+      "transaction_count":2,
+      "difficulty":1902041368,
+      "cumulative_difficulty":"0000000000000000001ba95c40814041",
+      "pow_difficulty":39725018671,
+      "pow_hash":"f6ddc7bdb80b6050fc7dd9fea1ad009434b7bcda3e3cb309a295ad1b00000000",
+      "inclusion":1,
+      "miner_address":"4B4mXWBqrFYGk9W8t1J3UifSdnU723HHKf8VaWGSZGzLZUncHRJetPCjbDUha1udPd2ZpJrwYCmPv1jzvg3NCf7Z1YViuoa",
+      "main_difficulty":344857075709
+   }
+}
+{
+   "type":"side_block",
+   "side_block":{
+      "main_id":"808c9c2a413b8480cc5b445575580a6edd5d237cc120f18a668c6f602dff9c1b",
+      "main_height":2871492,
+      "template_id":"372ee3a80d8ab9131878a56e5e2802aa3f797a55d38f76871f1eeeafd60cd828",
+      "side_height":4973834,
+      "parent_template_id":"8d691190875157d160c8bc8787ab140b1855c1afcc7b8f3076bc3366711bb085",
+      "miner":2,
+      "effective_height":4973834,
+      "nonce":402718979,
+      "extra_nonce":3611692200,
+      "timestamp":1682358008,
+      "software_id":0,
+      "software_version":196610,
+      "window_depth":332,
+      "window_outputs":31,
+      "transaction_count":2,
+      "difficulty":1900059444,
+      "cumulative_difficulty":"0000000000000000001ba95d2320b48d",
+      "pow_difficulty":4388053454,
+      "pow_hash":"727019817d63c52ac2ce2067652804cbfc8d3be778fe5548d0bf91fa00000000",
+      "inclusion":1,
+      "miner_address":"435QwkC3fJ4YeX929gmaBMeuUwR1wdmRrQBNyoKfpJdHKDbqnukHJeA768yt8ngnS7UTHRJ2yJmnWP8gCz6s3kkiBX8C363",
+      "uncles":[
+         {
+            "template_id":"7c5db68e5af86e66df94d03688a8f61d7e7cd4544dbadc3f4d2f7972c0c72b17",
+            "miner":19,
+            "side_height":4973833,
+            "difficulty":1902041368
+         }
+      ],
+      "main_difficulty":344857075709
+   }
+}
+{
+   "type":"side_block",
+   "side_block":{
+      "main_id":"220534c981f71a7d2d935825b5cf479d960345177387eb7fcd196a762b018453",
+      "main_height":2871492,
+      "template_id":"320a1a1d8849d48243670938efa640a271b289fae392ea35eb1a7daf88d3e2c8",
+      "side_height":4973835,
+      "parent_template_id":"372ee3a80d8ab9131878a56e5e2802aa3f797a55d38f76871f1eeeafd60cd828",
+      "miner":3,
+      "effective_height":4973835,
+      "nonce":3825436994,
+      "extra_nonce":2417583792,
+      "timestamp":1682358009,
+      "software_id":0,
+      "software_version":196610,
+      "window_depth":332,
+      "window_outputs":31,
+      "transaction_count":3,
+      "difficulty":1899187725,
+      "cumulative_difficulty":"0000000000000000001ba95d9454029a",
+      "pow_difficulty":4870458263,
+      "pow_hash":"d6b5911b6b13e6258e2f1d23ab5256cf9b3c4a002e0722f15b4cc0e100000000",
+      "inclusion":1,
+      "miner_address":"47ab14EokGgCTX7RYoVhrNMjVA7GfW1jyMAmL7qBQz9fa4RZ6ZsBUgeRGuPWjqeM1wLptSJH5xuX2H4mAepMYvu6JqWMsGw",
+      "main_difficulty":344857075709
+   }
+}
+{
+   "type":"side_block",
+   "side_block":{
+      "main_id":"3e735ce653c2f1c312125309367ad6016e3f55c80834efd63fdb94d0929d017a",
+      "main_height":2871492,
+      "template_id":"3f089efbc7fd31eb98705665acbbe1e7d3b290866cb94f39a0d2e072f2a11f14",
+      "side_height":4973836,
+      "parent_template_id":"320a1a1d8849d48243670938efa640a271b289fae392ea35eb1a7daf88d3e2c8",
+      "miner":9,
+      "effective_height":4973836,
+      "nonce":132358,
+      "extra_nonce":1448692177,
+      "timestamp":1682358019,
+      "software_id":0,
+      "software_version":196609,
+      "window_depth":332,
+      "window_outputs":31,
+      "transaction_count":7,
+      "difficulty":1896666403,
+      "cumulative_difficulty":"0000000000000000001ba95e0560d7bd",
+      "pow_difficulty":15371353282,
+      "pow_hash":"cf9774d250b905729cb988b24437ac5f27ccc55d78d6388ca7a8874700000000",
+      "inclusion":1,
+      "miner_address":"4AxaapsBMRYMJHFV5uApnFJth7stf4GiK9sqnLAH8SizguBbZ8YYtE2C3aF3UGVbh3ATRKdtd7ai1Hi1zfzMkdqmAZLqaGN",
+      "main_difficulty":344857075709
+   }
+}
+{
+   "type":"side_block",
+   "side_block":{
+      "main_id":"3ecbfae652abf9ecfd043d8921b3c18f9acc6f08a8521bd4a06c46b8ff5181f9",
+      "main_height":2871492,
+      "template_id":"ba8514bd7403c16a61b7e20f34981d9cb72de09a7b0593d55ef14d55bff1908e",
+      "side_height":4973837,
+      "parent_template_id":"3f089efbc7fd31eb98705665acbbe1e7d3b290866cb94f39a0d2e072f2a11f14",
+      "miner":2,
+      "effective_height":4973837,
+      "nonce":1879082776,
+      "extra_nonce":1309685883,
+      "timestamp":1682358030,
+      "software_id":0,
+      "software_version":196610,
+      "window_depth":332,
+      "window_outputs":31,
+      "transaction_count":8,
+      "difficulty":1897117455,
+      "cumulative_difficulty":"0000000000000000001ba95e76748ecc",
+      "pow_difficulty":4828639998,
+      "pow_hash":"979dbacd27e0c15bfa93a72bda30f9e4e472ab86cfc9bc5f71ceb4e300000000",
+      "inclusion":1,
+      "miner_address":"435QwkC3fJ4YeX929gmaBMeuUwR1wdmRrQBNyoKfpJdHKDbqnukHJeA768yt8ngnS7UTHRJ2yJmnWP8gCz6s3kkiBX8C363",
+      "main_difficulty":344857075709
+   }
+}
+{
+   "type":"side_block",
+   "side_block":{
+      "main_id":"f7aab8fda85491a5b3847435fa16ae925d55b60791c01faf5a23c6d5365ef6ca",
+      "main_height":2871492,
+      "template_id":"19278cd3a3022a25edf4b91a5544a88b8c8f6f78f84e862b01781de493b562c8",
+      "side_height":4973838,
+      "parent_template_id":"ba8514bd7403c16a61b7e20f34981d9cb72de09a7b0593d55ef14d55bff1908e",
+      "miner":3,
+      "effective_height":4973838,
+      "nonce":2868937852,
+      "extra_nonce":869103007,
+      "timestamp":1682358036,
+      "software_id":0,
+      "software_version":196610,
+      "window_depth":332,
+      "window_outputs":31,
+      "transaction_count":8,
+      "difficulty":1894821734,
+      "cumulative_difficulty":"0000000000000000001ba95ee7653e32",
+      "pow_difficulty":2019716446,
+      "pow_hash":"2d03c8818798cb1bde4a6d2d64d0a59a04b8228e94aff841599c632002000000",
+      "inclusion":1,
+      "miner_address":"47ab14EokGgCTX7RYoVhrNMjVA7GfW1jyMAmL7qBQz9fa4RZ6ZsBUgeRGuPWjqeM1wLptSJH5xuX2H4mAepMYvu6JqWMsGw",
+      "main_difficulty":344857075709
+   }
+}
+{
+   "type":"side_block",
+   "side_block":{
+      "main_id":"877b4df53e2347e19d94ba52e04522601d461c0dc5d0439e8ec87a5ecb58a31f",
+      "main_height":2871492,
+      "template_id":"000c39fc469e4062fe4da6fc8444c3c990ad817397c94abe13c46720a4c9ab75",
+      "side_height":4973839,
+      "parent_template_id":"19278cd3a3022a25edf4b91a5544a88b8c8f6f78f84e862b01781de493b562c8",
+      "miner":2,
+      "effective_height":4973839,
+      "nonce":822086856,
+      "extra_nonce":1665899192,
+      "timestamp":1682358038,
+      "software_id":0,
+      "software_version":196610,
+      "window_depth":332,
+      "window_outputs":31,
+      "transaction_count":10,
+      "difficulty":1893298342,
+      "cumulative_difficulty":"0000000000000000001ba95f583eaed8",
+      "pow_difficulty":29696623614,
+      "pow_hash":"b1aa60a163d39b0524f7448954f770de8cbb873e346b63e37659062500000000",
+      "inclusion":1,
+      "miner_address":"435QwkC3fJ4YeX929gmaBMeuUwR1wdmRrQBNyoKfpJdHKDbqnukHJeA768yt8ngnS7UTHRJ2yJmnWP8gCz6s3kkiBX8C363",
+      "main_difficulty":344857075709
+   }
+}
+{
+   "type":"side_block",
+   "side_block":{
+      "main_id":"b6516743e3693824f0d8eceab7109c4242661f78e498f78e42a57bd602b7b167",
+      "main_height":2871493,
+      "template_id":"af88e464df1f31761996031f5c851f1a59d6ecb4b6e917407e1164ce6a569a07",
+      "side_height":4973840,
+      "parent_template_id":"000c39fc469e4062fe4da6fc8444c3c990ad817397c94abe13c46720a4c9ab75",
+      "miner":19,
+      "effective_height":4973840,
+      "nonce":1543602719,
+      "extra_nonce":2911703055,
+      "timestamp":1682358053,
+      "software_id":0,
+      "software_version":196610,
+      "window_depth":332,
+      "window_outputs":31,
+      "transaction_count":0,
+      "difficulty":1893967043,
+      "cumulative_difficulty":"0000000000000000001ba95fc922539b",
+      "pow_difficulty":1157101996504,
+      "pow_hash":"d855eed5d88837eb44c3d0a80457981fd39e9af67e8b58a03142f30000000000",
+      "inclusion":1,
+      "miner_address":"4B4mXWBqrFYGk9W8t1J3UifSdnU723HHKf8VaWGSZGzLZUncHRJetPCjbDUha1udPd2ZpJrwYCmPv1jzvg3NCf7Z1YViuoa",
+      "mined_main_at_height":true,
+      "main_difficulty":344633368046
+   }
+}
+{
+   "type":"found_block",
+   "found_block":{
+      "main_block":{
+         "id":"b6516743e3693824f0d8eceab7109c4242661f78e498f78e42a57bd602b7b167",
+         "height":2871493,
+         "timestamp":1682358053,
+         "reward":600000000000,
+         "coinbase_id":"9ba3e0449f6ff3a108a877f2f37eedf0b87f811ff5725634e109ba0d2789d479",
+         "difficulty":344633368046,
+         "side_template_id":"af88e464df1f31761996031f5c851f1a59d6ecb4b6e917407e1164ce6a569a07",
+         "coinbase_private_key":"1331ab860507192987e98497b971daac66e8804c51ad115ab6b2bf3d2abd270d"
+      },
+      "side_height":4973840,
+      "miner":19,
+      "effective_height":4973840,
+      "window_depth":332,
+      "window_outputs":31,
+      "transaction_count":0,
+      "difficulty":1893967043,
+      "cumulative_difficulty":"0000000000000000001ba95fc922539b",
+      "inclusion":1,
+      "miner_address":"4B4mXWBqrFYGk9W8t1J3UifSdnU723HHKf8VaWGSZGzLZUncHRJetPCjbDUha1udPd2ZpJrwYCmPv1jzvg3NCf7Z1YViuoa"
+   },
+   "main_coinbase_outputs":[
+      {
+         "id":"9ba3e0449f6ff3a108a877f2f37eedf0b87f811ff5725634e109ba0d2789d479",
+         "index":0,
+         "global_output_index":72132937,
+         "miner":30,
+         "value":1747977812,
+         "miner_address":"47J5KAEgevN8TKMhstn85mbASkhpZq5BtSt9afcseHPEVtDggZ8uBdxgoTRjdP2ooS4Px1y1pXeryhr9UFQqaykY5J4Ev85"
+      },
+      {
+         "id":"9ba3e0449f6ff3a108a877f2f37eedf0b87f811ff5725634e109ba0d2789d479",
+         "index":1,
+         "global_output_index":72132938,
+         "miner":195,
+         "value":1736642632,
+         "miner_address":"47goCBjSdpqAGUFkc1nM9F7gNcSfSjtKuTqcLxGpEUn6DgboSZMpn2CMRkQ2JKWbxRJvHy2fbSJxtFqXVDbQqs5wPpxgbYD"
+      },
+      {
+         "id":"9ba3e0449f6ff3a108a877f2f37eedf0b87f811ff5725634e109ba0d2789d479",
+         "index":2,
+         "global_output_index":72132939,
+         "miner":10,
+         "value":1737989471,
+         "miner_address":"46vavwU3QDmK2Jdw6CgezsB5538rbwFGi67EPWqkEBfvWuuiFTNaPVQPNSbxVc1UNbN6E7xakVkCxCnttvgyohaN4U9F7kf"
+      },
+      {
+         "id":"9ba3e0449f6ff3a108a877f2f37eedf0b87f811ff5725634e109ba0d2789d479",
+         "index":3,
+         "global_output_index":72132940,
+         "miner":1,
+         "value":3139170892,
+         "miner_address":"4ApeMQzcRS7huBW8HEGkug2e5kQxhhC2Ub9y8F9bc7arKHsCktAV24n5ezKM9PjX5yS3Pv4PPNMXT8rTAFVuKCRi1jEqJZd"
+      },
+      {
+         "id":"9ba3e0449f6ff3a108a877f2f37eedf0b87f811ff5725634e109ba0d2789d479",
+         "index":4,
+         "global_output_index":72132941,
+         "miner":47,
+         "value":1751320020,
+         "miner_address":"47Eqp7fsvVnPPSU4rsXrKJhyAme6LhDRZDzFky9xWsWUS9pd6FPjJCMDCNX1NnNiDzTwfbAgGMk2N6A1aucNcrkhLffta1p"
+      },
+      {
+         "id":"9ba3e0449f6ff3a108a877f2f37eedf0b87f811ff5725634e109ba0d2789d479",
+         "index":5,
+         "global_output_index":72132942,
+         "miner":26,
+         "value":6966089461,
+         "miner_address":"42yAHAH5at9ZHvMXvb1xPV2aKnoibjZWCfTgQg2HdxumFx857g3DK75GbDKzmvu8QMW8CnWxuPAYyfQADjwKw6dy78x2gbp"
+      },
+      {
+         "id":"9ba3e0449f6ff3a108a877f2f37eedf0b87f811ff5725634e109ba0d2789d479",
+         "index":6,
+         "global_output_index":72132943,
+         "miner":6,
+         "value":1739307539,
+         "miner_address":"4AzyJ87Tp3yLXjA3E5v9iAEnTTLu6UTeSdatiwto92n91z7NE11QmpV4YGatwS3ihvFsmvTfz85bfKMLBBAsZMGFKcJJ8jG"
+      },
+      {
+         "id":"9ba3e0449f6ff3a108a877f2f37eedf0b87f811ff5725634e109ba0d2789d479",
+         "index":7,
+         "global_output_index":72132944,
+         "miner":18,
+         "value":11494230879,
+         "miner_address":"4BBb6ZBPPPWivZnx2m3m7YUUGQv54F9HfjPWurf2Xy2UDQwwPyb956dGQ3p9whrxNJ568zc3Ygfr9McVT1UJyRKtLi1jcMb"
+      },
+      {
+         "id":"9ba3e0449f6ff3a108a877f2f37eedf0b87f811ff5725634e109ba0d2789d479",
+         "index":8,
+         "global_output_index":72132945,
+         "miner":19,
+         "value":39395535008,
+         "miner_address":"4B4mXWBqrFYGk9W8t1J3UifSdnU723HHKf8VaWGSZGzLZUncHRJetPCjbDUha1udPd2ZpJrwYCmPv1jzvg3NCf7Z1YViuoa"
+      },
+      {
+         "id":"9ba3e0449f6ff3a108a877f2f37eedf0b87f811ff5725634e109ba0d2789d479",
+         "index":9,
+         "global_output_index":72132946,
+         "miner":842,
+         "value":3477271817,
+         "miner_address":"457Ht8LpLt2iq8y5HShzySduWTC58JvGLj6eWiURzUxNVXrDBWJc9jd3niHHLZ4o6hHYpufyd8zhL9EMktn3p3EdHQ6LAkj"
+      },
+      {
+         "id":"9ba3e0449f6ff3a108a877f2f37eedf0b87f811ff5725634e109ba0d2789d479",
+         "index":10,
+         "global_output_index":72132947,
+         "miner":1104,
+         "value":1746268557,
+         "miner_address":"48LszLe98KgS1H4ELW9rmEH6dTar1uWdZDx7ttDHNSZvcANADw9PUbDU3KWREmgozxMbzofNmj8m5ZuieukEsj7aHjfo3in"
+      },
+      {
+         "id":"9ba3e0449f6ff3a108a877f2f37eedf0b87f811ff5725634e109ba0d2789d479",
+         "index":11,
+         "global_output_index":72132948,
+         "miner":445,
+         "value":1748663264,
+         "miner_address":"44XavwVX8pP2U5NxtwGusU2obpoK55nNVBBqWLC2aJBX2yhAozsC1tvVG8NcC2PEQy2SRmBuB4WqTfVgfBCS3NkY1wYHZ3T"
+      },
+      {
+         "id":"9ba3e0449f6ff3a108a877f2f37eedf0b87f811ff5725634e109ba0d2789d479",
+         "index":12,
+         "global_output_index":72132949,
+         "miner":156,
+         "value":1755605809,
+         "miner_address":"42FUiB6725E4UDkVXMJ3nZ21dhV9atHP9Z1yqxMGfNhnDkJUhdxDaTGaCej35H346eS5vcbEVY4kzdLVhKM63LjNJxFYMUF"
+      },
+      {
+         "id":"9ba3e0449f6ff3a108a877f2f37eedf0b87f811ff5725634e109ba0d2789d479",
+         "index":13,
+         "global_output_index":72132950,
+         "miner":23,
+         "value":1749533284,
+         "miner_address":"46aSNdCK35w9fdX3iCwk3GLt3iZ4hnR34j2mJtxE14MWLXB5JRXxvzmjMUoz2mmFZk9mkqQRpCbPd2TbFqcQxqGkHxJPHUK"
+      },
+      {
+         "id":"9ba3e0449f6ff3a108a877f2f37eedf0b87f811ff5725634e109ba0d2789d479",
+         "index":14,
+         "global_output_index":72132951,
+         "miner":61,
+         "value":3491378711,
+         "miner_address":"44YdBost8RfFjVT9W712c5KN1ZeTq5rPC6Uu12D4nBkUMBHxeb7TxKfGnAGLbfsvbaKtBvwzqKLqBWf7cpU7d2nZ55pXeCU"
+      },
+      {
+         "id":"9ba3e0449f6ff3a108a877f2f37eedf0b87f811ff5725634e109ba0d2789d479",
+         "index":15,
+         "global_output_index":72132952,
+         "miner":647,
+         "value":24776511644,
+         "miner_address":"4AQ3YkqG2XdWsPHEgrDGdyQLq1qMMGFqWTFJfrVQW99qPmCzZKvJqzxgf5342KC17o9bchfJcUzLhVW9QgNKTYUBLg876Gt"
+      },
+      {
+         "id":"9ba3e0449f6ff3a108a877f2f37eedf0b87f811ff5725634e109ba0d2789d479",
+         "index":16,
+         "global_output_index":72132953,
+         "miner":11,
+         "value":1739154107,
+         "miner_address":"42safVv7VKVLrGc1RWEgVqi9YJRV8XiUeFViStfLPWE8FAH1i4HvovcXntT8k5MvVuKkpYLcjELwL4Azrcb65MZC2AkoDoJ"
+      },
+      {
+         "id":"9ba3e0449f6ff3a108a877f2f37eedf0b87f811ff5725634e109ba0d2789d479",
+         "index":17,
+         "global_output_index":72132954,
+         "miner":4,
+         "value":82984625360,
+         "miner_address":"4ADyLD6c7hzT5gCYxWnw7k2q5RPDxwqNTMsHcz9n91ir22YJbjBQ4LjGZgcLUVV7tyG33vXfB5SR1iCWaCjEQ7BNJUg6SyJ"
+      },
+      {
+         "id":"9ba3e0449f6ff3a108a877f2f37eedf0b87f811ff5725634e109ba0d2789d479",
+         "index":18,
+         "global_output_index":72132955,
+         "miner":111,
+         "value":1741890162,
+         "miner_address":"45vMeqsvpW5UoQ4HQDjbUoLpmrLkhyVKgiSeR9WwuCpLV9egZtkwGGYPJ5HDvdAVtgF4bcu93dzEc6mLFbYRqVJzAQWHRnL"
+      },
+      {
+         "id":"9ba3e0449f6ff3a108a877f2f37eedf0b87f811ff5725634e109ba0d2789d479",
+         "index":19,
+         "global_output_index":72132956,
+         "miner":8,
+         "value":5240626741,
+         "miner_address":"47oeGVdUWXDPSqjgFd2dQS57S3W4KPGnneq1o8hAdGE2ZwMZzKHeLFhiQoguKMFq4jScJ2qL7jrHoiP8xh2Su6SuFtxk3Da"
+      },
+      {
+         "id":"9ba3e0449f6ff3a108a877f2f37eedf0b87f811ff5725634e109ba0d2789d479",
+         "index":20,
+         "global_output_index":72132957,
+         "miner":5283,
+         "value":1750270617,
+         "miner_address":"45j2xT1JbU27Mv8ScdumCC5bg3P9EU1HEE2DKZ9TzVje6wVE8kKqviwFuvwaoNywwzh7uiJoxfpWe4jp5HvYDZgyKdU2iEt"
+      },
+      {
+         "id":"9ba3e0449f6ff3a108a877f2f37eedf0b87f811ff5725634e109ba0d2789d479",
+         "index":21,
+         "global_output_index":72132958,
+         "miner":179,
+         "value":1749846757,
+         "miner_address":"42TUuapMMbs4taYHYFnFTeFAM57WzVKDNXn4yeAQcJcgHq1m6q993EedsF2ebd7WP5Gjixw3NPu6ncH7WFWfsPDiPSWEnr9"
+      },
+      {
+         "id":"9ba3e0449f6ff3a108a877f2f37eedf0b87f811ff5725634e109ba0d2789d479",
+         "index":22,
+         "global_output_index":72132959,
+         "miner":639,
+         "value":3497561198,
+         "miner_address":"49bNJ3mdVBfGjr3vWTVhXNig75gCxHQCwNG2FyvRErxs7U4A1c8K6Pn39Tq8oZAxtbXsfNsBtyKzT8apMkYD67QTS2v42oW"
+      },
+      {
+         "id":"9ba3e0449f6ff3a108a877f2f37eedf0b87f811ff5725634e109ba0d2789d479",
+         "index":23,
+         "global_output_index":72132960,
+         "miner":15,
+         "value":5247959737,
+         "miner_address":"44N5jui2nbtQaxWjs9hoJBX5ELrCk5ftja7Zu3QCGTA1FftJhDKrEDL92Rw12j8FALHKnJEUb6KZ45SAncJ6iqKN6nShj2S"
+      },
+      {
+         "id":"9ba3e0449f6ff3a108a877f2f37eedf0b87f811ff5725634e109ba0d2789d479",
+         "index":24,
+         "global_output_index":72132961,
+         "miner":2161,
+         "value":1750436503,
+         "miner_address":"44WHz1PGu8mYWxVE1p6vVtXDtvKtkd7eY23DdXncavA9Ybb6kP9i6BrhZschXpxGCHdTfBoLDznv55SYUqDhoCyJJxV84tD"
+      },
+      {
+         "id":"9ba3e0449f6ff3a108a877f2f37eedf0b87f811ff5725634e109ba0d2789d479",
+         "index":25,
+         "global_output_index":72132962,
+         "miner":91,
+         "value":2100792894,
+         "miner_address":"48tdvJBtQN5Vt3jmLDTTYX7dpS9oDXATAdD8XFhuE1CshWUdShUsEif6UivD5iGsroKGEKqxGqA1aFA2XVx8rtmiFAqKT6E"
+      },
+      {
+         "id":"9ba3e0449f6ff3a108a877f2f37eedf0b87f811ff5725634e109ba0d2789d479",
+         "index":26,
+         "global_output_index":72132963,
+         "miner":2,
+         "value":125897735171,
+         "miner_address":"435QwkC3fJ4YeX929gmaBMeuUwR1wdmRrQBNyoKfpJdHKDbqnukHJeA768yt8ngnS7UTHRJ2yJmnWP8gCz6s3kkiBX8C363"
+      },
+      {
+         "id":"9ba3e0449f6ff3a108a877f2f37eedf0b87f811ff5725634e109ba0d2789d479",
+         "index":27,
+         "global_output_index":72132964,
+         "miner":5190,
+         "value":1741473336,
+         "miner_address":"49trSMSTsAmE2uMeCo1MmEUvfk6i9DWF15skLn9hut11ehcq1vLHkYi9sTujrcDG61dLFk61LeWMafa3EkamaGEUD1fSvRe"
+      },
+      {
+         "id":"9ba3e0449f6ff3a108a877f2f37eedf0b87f811ff5725634e109ba0d2789d479",
+         "index":28,
+         "global_output_index":72132965,
+         "miner":9,
+         "value":50246935661,
+         "miner_address":"4AxaapsBMRYMJHFV5uApnFJth7stf4GiK9sqnLAH8SizguBbZ8YYtE2C3aF3UGVbh3ATRKdtd7ai1Hi1zfzMkdqmAZLqaGN"
+      },
+      {
+         "id":"9ba3e0449f6ff3a108a877f2f37eedf0b87f811ff5725634e109ba0d2789d479",
+         "index":29,
+         "global_output_index":72132966,
+         "miner":4990,
+         "value":15680539194,
+         "miner_address":"4B4aCvEcZr6GcusVJfEds2LXixCeJ2dQBaDUCguWmzi5L7PW5tVXfAnE4cn1mQdiNzH6zWcEPMQTiYTsNcX44ryxCJWZKZH"
+      },
+      {
+         "id":"9ba3e0449f6ff3a108a877f2f37eedf0b87f811ff5725634e109ba0d2789d479",
+         "index":30,
+         "global_output_index":72132967,
+         "miner":3,
+         "value":190176655762,
+         "miner_address":"47ab14EokGgCTX7RYoVhrNMjVA7GfW1jyMAmL7qBQz9fa4RZ6ZsBUgeRGuPWjqeM1wLptSJH5xuX2H4mAepMYvu6JqWMsGw"
+      }
+   ]
+}
+{
+   "type":"side_block",
+   "side_block":{
+      "main_id":"5594278518615f55a7e911cca93280fd0c3d2dff1d1fd184db6602e0afb69e0b",
+      "main_height":2871494,
+      "template_id":"0ef3e5ddcb0c4f6398eb833361b3749f92fc232a049c52052c5da956c9bbc868",
+      "side_height":4973841,
+      "parent_template_id":"af88e464df1f31761996031f5c851f1a59d6ecb4b6e917407e1164ce6a569a07",
+      "miner":4,
+      "effective_height":4973841,
+      "nonce":2466322468,
+      "extra_nonce":893603150,
+      "timestamp":1682358055,
+      "software_id":0,
+      "software_version":196610,
+      "window_depth":332,
+      "window_outputs":31,
+      "transaction_count":0,
+      "difficulty":1894526953,
+      "cumulative_difficulty":"0000000000000000001ba9603a0e8384",
+      "pow_difficulty":11901446960,
+      "pow_hash":"bbe4a67f6a9bca4028ca1faa940d692f834978d10ed18e34d07b625c00000000",
+      "inclusion":1,
+      "miner_address":"4ADyLD6c7hzT5gCYxWnw7k2q5RPDxwqNTMsHcz9n91ir22YJbjBQ4LjGZgcLUVV7tyG33vXfB5SR1iCWaCjEQ7BNJUg6SyJ",
+      "main_difficulty":344205037143
+   }
+}
+{
+   "type":"side_block",
+   "side_block":{
+      "main_id":"6c50a9aa027a09b41c56f965f8e21041649c1638a956576fc3fc350441e0f4ab",
+      "main_height":2871494,
+      "template_id":"5f72a35b571746ac3835b204020e548e65a7350d84d5d7a7aa3a749dc058f7ad",
+      "side_height":4973842,
+      "parent_template_id":"0ef3e5ddcb0c4f6398eb833361b3749f92fc232a049c52052c5da956c9bbc868",
+      "miner":19,
+      "effective_height":4973842,
+      "nonce":1090620480,
+      "extra_nonce":162834581,
+      "timestamp":1682358073,
+      "software_id":0,
+      "software_version":196610,
+      "window_depth":332,
+      "window_outputs":31,
+      "transaction_count":1,
+      "difficulty":1893992163,
+      "cumulative_difficulty":"0000000000000000001ba960aaf28a67",
+      "pow_difficulty":4704880707,
+      "pow_hash":"bc26c47392a94004bc736822520f67bbf56dfba432e6d75aa12ab2e900000000",
+      "inclusion":1,
+      "miner_address":"4B4mXWBqrFYGk9W8t1J3UifSdnU723HHKf8VaWGSZGzLZUncHRJetPCjbDUha1udPd2ZpJrwYCmPv1jzvg3NCf7Z1YViuoa",
+      "main_difficulty":344205037143
+   }
+}
+{
+   "type":"side_block",
+   "side_block":{
+      "main_id":"617ea6fe4a47a3e7f51c8cc719a5158b88a4ca2583cd2f0cd5ed0b006bca3564",
+      "main_height":2871494,
+      "template_id":"b95dcd9d440fcd49a050c76f006189c01e1857d11bfc0b41f3fa560c15a4750f",
+      "side_height":4973843,
+      "parent_template_id":"5f72a35b571746ac3835b204020e548e65a7350d84d5d7a7aa3a749dc058f7ad",
+      "miner":3,
+      "effective_height":4973843,
+      "nonce":4026630147,
+      "extra_nonce":2353672144,
+      "timestamp":1682358101,
+      "software_id":0,
+      "software_version":196610,
+      "window_depth":332,
+      "window_outputs":31,
+      "transaction_count":15,
+      "difficulty":1895322145,
+      "cumulative_difficulty":"0000000000000000001ba9611beadc88",
+      "pow_difficulty":6105552648,
+      "pow_hash":"5c06f2ebd7fc22dca35bed2a0faa9e1aad7e36a5c89af94d587915b400000000",
+      "inclusion":1,
+      "miner_address":"47ab14EokGgCTX7RYoVhrNMjVA7GfW1jyMAmL7qBQz9fa4RZ6ZsBUgeRGuPWjqeM1wLptSJH5xuX2H4mAepMYvu6JqWMsGw",
+      "main_difficulty":344205037143
+   }
+}
+    
+

+
+ +
+
+

Redirect APIs

+

Several endpoints are available that redirect/forward your request via Location HTTP header to the relevant API listed above.

+

+

/api/last_found[/raw|...]?...

+ Redirects to the /api/block_by_id/... record for the last block found on the Monero network by P2Pool. +

+

+

/api/tip[/raw|...]?...

+ Redirects to the /api/block_by_id/... record for the last share found by P2Pool. +

+
+
+ + +
+ + +
+ +
+ + + diff --git a/docs/research/xvb-delivery-study/data/sources/observer-api-docs-template.qtpl b/docs/research/xvb-delivery-study/data/sources/observer-api-docs-template.qtpl new file mode 100644 index 00000000..f48f6592 --- /dev/null +++ b/docs/research/xvb-delivery-study/data/sources/observer-api-docs-template.qtpl @@ -0,0 +1,1208 @@ +{% import cmdutils "git.gammaspectra.live/P2Pool/observer-cmd-utils/utils" %} + +{% code +type ApiPage struct { + // inherit from base page, so its' title is used in error page. + BasePage + + PoolInfoExample cmdutils.PoolInfoResult +} +%} + +{% func (p *ApiPage) Style() %} +{%= p.BasePage.Style() %} +pre { + padding: 2px; + border: 1px dashed #BBB; +} +{% endfunc %} + +{% func (p *ApiPage) Title() %} +{%= p.BasePage.Title() %} - API Documentation +{% endfunc %} + +{% func (p *ApiPage) Content() %} + +
+
+

API Documentation

+

This site and API is in development. As such, returned data could be different, or methods be deprecated / replaced anytime. Though it will be avoided if possible without affecting performance :)

+

All the data showed on this site comes from the API, P2Pool or Monero. So if new features are added on site, it's possible to do so via the API.

+

At the moment there is no broad rate-limiting. If abuse is detected, temporary rate limits can be put in place. You can always run your own instance of this site / API / consensus, see source code.

+

Some historical data could be incomplete. Some block records do not exist.

+

In general, mandatory parameters are specified on the path, optional parameters on query.

+

Knowledge of P2Pool internals is strongly advised. Feel free to ask questions on IRC or Matrix.

+

Unless specified, all returned data is JSON with status code 200. A not found error will issue a status code 404 and JSON of {"error": "not_found"} or similar.

+
+ +
+

Common types and fields

+

+ Fields within JSON objects may be omitted if marked as omitempty or omitzero on its definition within the source code. An empty/zero representation is assumed. +
+ For example, a types.Hash marked as omitempty or omitzero would represent the value 0000000000000000000000000000000000000000000000000000000000000000. +
+ For pointers/structs, the zero or nil value is considered empty. In lists, an empty / length of zero is assumed when empty. +
+ Refer to source code to check the struct definition when in doubt. +

+ +

types.Hash

+

Represents a 256-bit hash value. This can refer to a block template id, main id, parents, transaction ids, proof of work hashes or any other value.

+

This value is encoded as 64 hexadecimal characters.

+ +

crypto.PublicKeyBytes / crypto.PrivateKeyBytes

+

Represents an edwards25519 Point or Scalar in binary form. Encoded as a 256-bit value. This can refer to a public keys on a block, transaction keys or any other value.

+

This value is encoded as 64 hexadecimal characters.

+ +

address.Address

+

Represents a Monero address. Includes valid checksums.

+

This value is encoded using special base58.

+ +

types.Difficulty

+

Represents a 128-bit unsigned integer value. This can refer to weight, block difficulty or cumulative difficulty.

+

This value is encoded as a 64-bit unsigned integer when the highest 64-bits are not set. Otherwise, it is encoded as 32 hexadecimal characters.

+
+ +
+ +
+

/api/pool_info

+

Response contains general information on the current status of the P2Pool sidechain and Monero network, release versions, and other parameters.

+
+[Live result. Has been cut due to size, relevant portions shown]
+curl --silent https://{%s p.Context().NetServiceAddress %}/api/pool_info
+{%= encodeJson(p.PoolInfoExample, true) %}
+        
+
+ +
+ +
+

/api/miner_info/<id|address>

+

Response contains general information on a specific miner, referred by its internal id or known Monero address.

+

If you do not need the precise count of shares please pass the ?shareEstimates parameter.

+
+curl --silent https://{%s p.Context().NetServiceAddress %}/api/miner_info/47ab14EokGgCTX7RYoVhrNMjVA7GfW1jyMAmL7qBQz9fa4RZ6ZsBUgeRGuPWjqeM1wLptSJH5xuX2H4mAepMYvu6JqWMsGw
+{
+    "id": 3,
+    "address": "47ab14EokGgCTX7RYoVhrNMjVA7GfW1jyMAmL7qBQz9fa4RZ6ZsBUgeRGuPWjqeM1wLptSJH5xuX2H4mAepMYvu6JqWMsGw",
+    "shares": [
+        {
+            "shares": 1022,
+            "uncles": 0,
+            "last_height": 4371641
+        },
+        {
+            "shares": 559294,
+            "uncles": 17861,
+            "last_height": 4868281
+        },
+        {
+            "shares": 69,
+            "uncles": 0,
+            "last_height": 4624653
+        }
+    ],
+    "last_share_height": 4868281,
+    "last_share_timestamp": 1681256979
+}
+        
+
+ +
+ +
+

/api/side_blocks_in_window?window=[window_size]&from=[height][&noMainStatus][&noUncles][&noMiners]

+

Response contains SideChain Blocks on specified range window. Optional parameters are height, denoting the Tip where the window gets measured from, and window_size, max SIDECHAIN_PPLNS_WINDOW * 4 * 7

+

By default it will return current window blocks, from current tip.

+
+[result has been cut due to size, relevant portions shown]
+curl --silent https://{%s p.Context().NetServiceAddress %}/api/side_blocks_in_window
+[
+    {
+        "main_id": "61c6463961c31584617f2ffd322fd32f91cef4a956b3ac431c128ab1ef8342c8",
+        "main_height": 2863488,
+        "template_id": "8782465759db40c11f64e78a26df4ec6221fb91202cc19a3beaef61acb8e1a50",
+        "side_height": 4882215,
+        "parent_template_id": "2ee8e55e2d0696d715049f5958c300c10b01d0a30b607c82afb8885a76f00d71",
+        "miner": 3,
+        "effective_height": 4882215,
+        "nonce": 3691022871,
+        "extra_nonce": 1665655721,
+        "timestamp": 1681402700,
+        "software_id": 0,
+        "software_version": 196610,
+        "window_depth": 294,
+        "window_outputs": 30,
+        "transaction_count": 2,
+        "difficulty": 2107950958,
+        "cumulative_difficulty": 7610896210501088,
+        "pow_difficulty": 3167867138,
+        "pow_hash": "3e19a8e6c1db97bae77fb19b68b5bf6c927e3b212063ee219e26155b01000000",
+        "inclusion": 1,
+        "miner_address": "47ab14EokGgCTX7RYoVhrNMjVA7GfW1jyMAmL7qBQz9fa4RZ6ZsBUgeRGuPWjqeM1wLptSJH5xuX2H4mAepMYvu6JqWMsGw",
+        "main_difficulty": 310626726029
+    },
+    {
+        "main_id": "30e8afa1c6961afae7686f4c9c2ee5ad77bd87bdcbf7da00958af53b3349264a",
+        "main_height": 2863488,
+        "template_id": "2ee8e55e2d0696d715049f5958c300c10b01d0a30b607c82afb8885a76f00d71",
+        "side_height": 4882214,
+        "parent_template_id": "e0b745e8e3004832d95ef7eb6aa5f43dd0f86a491b6edb8ccd8e8dfbf92f6768",
+        "miner": 2,
+        "effective_height": 4882214,
+        "nonce": 3791814950,
+        "extra_nonce": 610282123,
+        "timestamp": 1681402699,
+        "software_id": 0,
+        "software_version": 196610,
+        "window_depth": 293,
+        "window_outputs": 30,
+        "transaction_count": 2,
+        "difficulty": 2108162718,
+        "cumulative_difficulty": 7610894102550130,
+        "pow_difficulty": 5140029450,
+        "pow_hash": "591082e76b158724c0a1a3ea8ffdec93eaa33a8d371eda2ad85ae9d500000000",
+        "inclusion": 1,
+        "miner_address": "435QwkC3fJ4YeX929gmaBMeuUwR1wdmRrQBNyoKfpJdHKDbqnukHJeA768yt8ngnS7UTHRJ2yJmnWP8gCz6s3kkiBX8C363",
+        "uncles": [
+            {
+                "template_id": "4005ede80787679e83d269f09f6435ac4952d9c2cf2fadf999620ed81a948d40",
+                "miner": 77,
+                "side_height": 4882213,
+                "difficulty": 2109635914
+            }
+        ],
+        "main_difficulty": 310626726029
+    },
+    {
+        "main_id": "6d1865f59d8cd38f5de6a498a2a5465040194f63122187b6e439743913aac202",
+        "main_height": 2863487,
+        "template_id": "4005ede80787679e83d269f09f6435ac4952d9c2cf2fadf999620ed81a948d40",
+        "side_height": 4882213,
+        "parent_template_id": "985d621e565da6da1f772dffef4b1154678cc724b6b18eff6edde5e68136a45d",
+        "miner": 77,
+        "uncle_of": "2ee8e55e2d0696d715049f5958c300c10b01d0a30b607c82afb8885a76f00d71",
+        "effective_height": 4882214,
+        "nonce": 3326443597,
+        "extra_nonce": 3803058762,
+        "timestamp": 1681402680,
+        "software_id": 0,
+        "software_version": 196610,
+        "window_depth": 294,
+        "window_outputs": 31,
+        "transaction_count": 0,
+        "difficulty": 2109635914,
+        "cumulative_difficulty": "0000000000000000001b0a106401568a",
+        "pow_difficulty": 2153295646,
+        "pow_hash": 7610889884751498,
+        "inclusion": 1,
+        "miner_address": "457fCKqWYSacjDRLjqah9kTga8KCQRNwL4WP7EfBNQKghYF3RZunjGHCoPSd6F7Y6mVRpT6eCgkEtin3cKvSCf11AqcP33g",
+        "main_difficulty": 310568847048
+    },
+    {
+        "main_id": "f5582e27b94a34713b607d0f47821142c8b88f8a3335d5b2b1d679c909a9651f",
+        "main_height": 2863486,
+        "template_id": "e0b745e8e3004832d95ef7eb6aa5f43dd0f86a491b6edb8ccd8e8dfbf92f6768",
+        "side_height": 4882213,
+        "parent_template_id": "985d621e565da6da1f772dffef4b1154678cc724b6b18eff6edde5e68136a45d",
+        "miner": 18,
+        "effective_height": 4882213,
+        "nonce": 3506931857,
+        "extra_nonce": 1625389436,
+        "timestamp": 1681402674,
+        "software_id": 0,
+        "software_version": 196610,
+        "window_depth": 294,
+        "window_outputs": 31,
+        "transaction_count": 115,
+        "difficulty": 2109635914,
+        "cumulative_difficulty": 7610889884751498,
+        "pow_difficulty": 3604028547,
+        "pow_hash": "1d01609ded322d6665fb96410042cc5cc9604be078b77967a818143101000000",
+        "inclusion": 1,
+        "miner_address": "4BBb6ZBPPPWivZnx2m3m7YUUGQv54F9HfjPWurf2Xy2UDQwwPyb956dGQ3p9whrxNJ568zc3Ygfr9McVT1UJyRKtLi1jcMb",
+        "main_difficulty": 310847993727
+    }
+]
+        
+
+ +
+ +
+

/api/side_blocks_in_window/<id|address>?window=[window_size]&from=[height][&noMainStatus][&noUncles][&noMiners]

+

Response contains SideChain Blocks on specified range window for a specific miner. Optional parameters are height, denoting the Tip where the window gets measured from, and window_size, max SIDECHAIN_PPLNS_WINDOW * 4 * 7

+

By default it will return current window blocks, from current tip.

+
+[result has been cut due to size, relevant portions shown]
+curl --silent https://{%s p.Context().NetServiceAddress %}/api/side_blocks_in_window/47ab14EokGgCTX7RYoVhrNMjVA7GfW1jyMAmL7qBQz9fa4RZ6ZsBUgeRGuPWjqeM1wLptSJH5xuX2H4mAepMYvu6JqWMsGw
+[
+        {
+        "main_id": "b41a9e78f11b9f7eaed30a4211f43ae7201f7c77031839f3e484b59c32088028",
+        "main_height": 2863492,
+        "template_id": "ce8de3ca5a9a066c0b4f5d5068783b17ace476f56236c65f5c949b9039c0ca3e",
+        "side_height": 4882250,
+        "parent_template_id": "a0cb288e467f5a4069603f4047c8607f1721a4b62fc8e2f794a5a942828fdf32",
+        "miner": 3,
+        "effective_height": 4882250,
+        "nonce": 2046825740,
+        "extra_nonce": 1477203696,
+        "timestamp": 1681403097,
+        "software_id": 0,
+        "software_version": 196610,
+        "window_depth": 296,
+        "window_outputs": 28,
+        "transaction_count": 75,
+        "difficulty": 2099479471,
+        "cumulative_difficulty": 7610976044280876,
+        "pow_difficulty": 2770364525,
+        "pow_hash": "ea3d41d8874fb1de05aee76a0fb6df7267b07e34ee95cdf1f924e28c01000000",
+        "inclusion": 1,
+        "miner_address": "47ab14EokGgCTX7RYoVhrNMjVA7GfW1jyMAmL7qBQz9fa4RZ6ZsBUgeRGuPWjqeM1wLptSJH5xuX2H4mAepMYvu6JqWMsGw",
+        "main_difficulty": 311336952550
+    },
+    {
+        "main_id": "fea4ee3769b350f2aad0571ff54eb555dbdf7f0cb811c19dea66bef286b041c4",
+        "main_height": 2863492,
+        "template_id": "74caf5d6ba885d05adbb4e4d611edabb55f0e05dcbb20cd3105d2adbcf4cdd1b",
+        "side_height": 4882248,
+        "parent_template_id": "3378e835d72a821b5157d8bebaf4f2193ebaf9cb86c93a106fc4fbbb1921c158",
+        "miner": 3,
+        "effective_height": 4882248,
+        "nonce": 3456175326,
+        "extra_nonce": 2803310737,
+        "timestamp": 1681403084,
+        "software_id": 0,
+        "software_version": 196610,
+        "window_depth": 296,
+        "window_outputs": 28,
+        "transaction_count": 73,
+        "difficulty": 2103245329,
+        "cumulative_difficulty": 7610971844410631,
+        "pow_difficulty": 5249306449,
+        "pow_hash": "4ab091d18ac65c212feff8f1a971aee1da50c177620827326b5d75d100000000",
+        "inclusion": 1,
+        "miner_address": "47ab14EokGgCTX7RYoVhrNMjVA7GfW1jyMAmL7qBQz9fa4RZ6ZsBUgeRGuPWjqeM1wLptSJH5xuX2H4mAepMYvu6JqWMsGw",
+        "main_difficulty": 311336952550
+    },
+    {
+        "main_id": "277a19bf024b4895553bbefc047eeb7733b95a97df6d8422759ec874d2d626c1",
+        "main_height": 2863492,
+        "template_id": "52ad4bb20d62b0e9d7762bab8d27de05563be6147cf3367d9bc79688f794217c",
+        "side_height": 4882246,
+        "parent_template_id": "40865b24eb4fbd1428ff1444d21b4337c8922b60b63a3ab6bdfef2586775390b",
+        "miner": 3,
+        "effective_height": 4882246,
+        "nonce": 754974898,
+        "extra_nonce": 2953378118,
+        "timestamp": 1681403082,
+        "software_id": 0,
+        "software_version": 196610,
+        "window_depth": 296,
+        "window_outputs": 28,
+        "transaction_count": 72,
+        "difficulty": 2104858109,
+        "cumulative_difficulty": 7610967638144376,
+        "pow_difficulty": 4514527717,
+        "pow_hash": "fc127598502b38c4977f7faef3f7db6bab11bab42353baed9ab58cf300000000",
+        "inclusion": 1,
+        "miner_address": "47ab14EokGgCTX7RYoVhrNMjVA7GfW1jyMAmL7qBQz9fa4RZ6ZsBUgeRGuPWjqeM1wLptSJH5xuX2H4mAepMYvu6JqWMsGw",
+        "uncles": [
+            {
+                "template_id": "ab07fe1e4a6a00ae799bedc637c1b642b4938d302ec16db5b513923937614abe",
+                "miner": 7,
+                "side_height": 4882244,
+                "difficulty": 2105207888
+            }
+        ],
+        "main_difficulty": 311336952550
+    },
+    {
+        "main_id": "ff68eedc72252289e066d2dd59c209dc1502500d2cf4501fb69a91b69e2415b8",
+        "main_height": 2863492,
+        "template_id": "4764acc29d604f1491d600504d2802fea156a47ad691420b63d2c52924570925",
+        "side_height": 4882241,
+        "parent_template_id": "12f8b044e315669904f81caa055eac84f9a7d30d93bdd446cf304d38f18097cf",
+        "miner": 3,
+        "effective_height": 4882241,
+        "nonce": 4026633700,
+        "extra_nonce": 2755066571,
+        "timestamp": 1681403011,
+        "software_id": 0,
+        "software_version": 196610,
+        "window_depth": 296,
+        "window_outputs": 29,
+        "transaction_count": 47,
+        "difficulty": 2099621378,
+        "cumulative_difficulty": 7610955003350240,
+        "pow_difficulty": 5985480395,
+        "pow_hash": "6e0cc4b1e989a18a8f7a65c5aa5ad252a071cd57d877cac4f14bb2b700000000",
+        "inclusion": 1,
+        "miner_address": "47ab14EokGgCTX7RYoVhrNMjVA7GfW1jyMAmL7qBQz9fa4RZ6ZsBUgeRGuPWjqeM1wLptSJH5xuX2H4mAepMYvu6JqWMsGw",
+        "main_difficulty": 311336952550
+    }
+]
+        
+
+ +
+ +
+

/api/payouts/<id|address>?search_limit=[search_limit]

+

Response contains payouts received by this miner due to blocks on Monero network. Optional parameters are search_limit, maximum amount of records to return, set 0 to return all. Defaults to 10

+

.[].coinbase_private_key can be used to prove the payout is correct.

+
+[result has been cut due to size, relevant portions shown]
+curl --silent https://{%s p.Context().NetServiceAddress %}/api/payouts/47ab14EokGgCTX7RYoVhrNMjVA7GfW1jyMAmL7qBQz9fa4RZ6ZsBUgeRGuPWjqeM1wLptSJH5xuX2H4mAepMYvu6JqWMsGw
+[
+    {
+        "miner": 3,
+        "template_id": "cebb0c11be67c43c1a01cf2ac43e6bafe745a92012bbbb04be03842f56c5cc78",
+        "side_height": 5428093,
+        "main_id": "8e0c7b08f92be1bdc5c4153f7a8c3e536f1353aff898684477cc6ba857b8510e",
+        "main_height": 2910747,
+        "timestamp": 1687085695,
+        "coinbase_id": "e1b20914f4ff768277c19daa65ef5f2ace7cda6f3f2586caf569c3008b7510b1",
+        "coinbase_reward": 3400854816,
+        "coinbase_private_key": "9438ef07d1bb10ae05e68cdf900938807fe8639acf7dab27feedc08119072b02",
+        "coinbase_output_index": 26,
+        "global_output_index": 75393989,
+        "including_height": 5427726
+    },
+    {
+        "miner": 3,
+        "template_id": "9bab936c12790d7e006ef1e97bf00572e85eb2f5647ce6320491fc93ba47f6a0",
+        "side_height": 5427897,
+        "main_id": "8bf0f5f17c53a68e5fb36a89781acd84c5936c4b06287aad09c038dac8b52860",
+        "main_height": 2910737,
+        "timestamp": 1687083786,
+        "coinbase_id": "413b6cac611c49d543d058a7d4ea908ba8a3774ced6781c2fdcdbbc0b187f24a",
+        "coinbase_reward": 103013108631,
+        "coinbase_private_key": "4344896bdacc7c58758090b955c7fd098f7414cdf773ec39fd12808f1fb4090f",
+        "coinbase_output_index": 11,
+        "global_output_index": 75393229,
+        "including_height": 5427531
+    },
+    {
+        "miner": 3,
+        "template_id": "566257bf73bc937a7b5bb6c3b6c1a2008db078a56d4fcbb2e34bde6f2b847d55",
+        "side_height": 5427764,
+        "main_id": "d74f9c0201c248911d6c306f7e6b5d58dea469ecf40ffd891e59dd0f6d082aea",
+        "main_height": 2910725,
+        "timestamp": 1687082281,
+        "coinbase_id": "561ed794fbdf5502fbd934fe7d7e4b9f4ccd4a8f7436fb93bc51c1e6dd431357",
+        "coinbase_reward": 170359596687,
+        "coinbase_private_key": "0332c944b6919f8e284993c35f810ce6b0c43cbf5f743f339fd4aaa197787109",
+        "coinbase_output_index": 14,
+        "global_output_index": 75392201,
+        "including_height": 5427402
+    }
+]
+        
+
+ +
+ +
+

/api/found_blocks?limit=[limit]&miner=[id|address]

+

Response contains last found block records on the Monero network by P2Pool. Optional parameters are limit, maximum amount of records to return, defaults to 50, max 1000. Additionally, you can pass the miner parameter to select blocks from that miner only. coinbase parameter can also be used here to decode coinbase outputs.

+
+curl --silent https://{%s p.Context().NetServiceAddress %}/api/found_blocks?limit=2
+[
+    {
+        "main_block": {
+            "id": "be284c7fc784ca83f92c2f1eac2e02524a99a63876179dae6c370a199d533d95",
+            "height": 2942191,
+            "timestamp": 1690866882,
+            "reward": 600373170000,
+            "coinbase_id": "691eb1e5b9222df2c667a481370acdd751c7f5f3cd0345ac9fc0f1feea396f7c",
+            "difficulty": 260315236919,
+            "side_template_id": "b76318caa4822826573ceebcabbd0309d2a710dd83700cb5d0cae206d9835cb4",
+            "coinbase_private_key": "5cdea4c89482c19588527238d32bdad97151c4e40800882183222d080ff5f203"
+        },
+        "side_height": 5789985,
+        "miner": 2915,
+        "effective_height": 5789985,
+        "window_depth": 438,
+        "window_outputs": 41,
+        "transaction_count": 2,
+        "difficulty": 1301336116,
+        "cumulative_difficulty": 9202373148639334,
+        "inclusion": 1,
+        "miner_address": "42HEEF3NM9cHkJoPpDhNyJHuZ6DFhdtymCohF9CwP5KPM1Mp3eH2RVXCPRrxe4iWRogT7299R8PP7drGvThE8bHmRDq1qWp"
+    },
+    {
+        "main_block": {
+            "id": "ac6ae3cfe0f241e22aae6b7a165e7254f380d50c5a690994aa462120c00c4f16",
+            "height": 2942190,
+            "timestamp": 1690866866,
+            "reward": 608015760000,
+            "coinbase_id": "a7f784cc724f9e172d3bea13a18569b339e96d218b3fa54f9189abacbeb349ae",
+            "difficulty": 260396879898,
+            "side_template_id": "be9e779f4f8b2cd96c6e30a94c28c6d36af261ecf7cc195394471f112b850c49",
+            "coinbase_private_key": "896cde95bf6713d60b7ed4bafa88018e7418cd55db9232db08dc2de174cebd0b"
+        },
+        "side_height": 5789983,
+        "miner": 2915,
+        "effective_height": 5789983,
+        "window_depth": 438,
+        "window_outputs": 41,
+        "transaction_count": 49,
+        "difficulty": 1301263505,
+        "cumulative_difficulty": 9202370546222535,
+        "inclusion": 1,
+        "miner_address": "42HEEF3NM9cHkJoPpDhNyJHuZ6DFhdtymCohF9CwP5KPM1Mp3eH2RVXCPRrxe4iWRogT7299R8PP7drGvThE8bHmRDq1qWp"
+    }
+]
+        
+
+ + +
+ +
+

/api/shares?limit=[limit]&miner=[id|address][&onlyBlocks][&noMainStatus][&noUncles][&noMiners]

+

Response contains last found SideChain block records on P2Pool. Optional parameters are limit, maximum amount of records to return, defaults to 50, max SIDECHAIN_PPLNS_WINDOW. Additionally, you can pass the miner parameter to select shares from that miner only. onlyBlocks can be set to not receive uncle share entries.

+
+curl --silent https://{%s p.Context().NetServiceAddress %}/api/shares?limit=2
+[
+   {
+       "main_id": "7717e2e59fb345ce3e5c5585b51632f32db2e98bb0a69b64a0b91f7b370be3b7",
+       "main_height": 2942216,
+       "template_id": "7f0ce404ab3d576d97dc4affacb5e443fb4c1f36f1bb09feed5b9af3dcca0169",
+       "side_height": 5790240,
+       "parent_template_id": "7070785f6ac7c486ab2ae7df443e6afc31010f87206b44c90be1339cd2ecfc70",
+       "miner": 2915,
+       "effective_height": 5790240,
+       "nonce": 1660977225,
+       "extra_nonce": 2706560389,
+       "timestamp": 1690869415,
+       "software_id": 0,
+       "software_version": 196613,
+       "window_depth": 424,
+       "window_outputs": 40,
+       "difficulty": 1327149158,
+       "cumulative_difficulty": 9202726518962104,
+       "pow_difficulty": 1720691274,
+       "pow_hash": "36685a8106e8b6a7450820f97cba0fa3cd2aa017fb4119f3737ffe7e02000000",
+       "inclusion": 1,
+       "transaction_count": 9,
+       "miner_address": "42HEEF3NM9cHkJoPpDhNyJHuZ6DFhdtymCohF9CwP5KPM1Mp3eH2RVXCPRrxe4iWRogT7299R8PP7drGvThE8bHmRDq1qWp",
+       "main_difficulty": 260565791438
+   },
+   {
+       "main_id": "9ce6483c303ada746b9e969c65235bcba0433865f6afd11153e94fb0e6d41046",
+       "main_height": 2942216,
+       "template_id": "7070785f6ac7c486ab2ae7df443e6afc31010f87206b44c90be1339cd2ecfc70",
+       "side_height": 5790239,
+       "parent_template_id": "d7477275674bd90bba39e4604cf2539ae99460856567895369cda165370ba081",
+       "miner": 5695,
+       "effective_height": 5790239,
+       "nonce": 460496,
+       "extra_nonce": 346986124,
+       "timestamp": 1690869412,
+       "software_id": 0,
+       "software_version": 196612,
+       "window_depth": 425,
+       "window_outputs": 40,
+       "difficulty": 1326689571,
+       "cumulative_difficulty": 9202725191812946,
+       "pow_difficulty": 1929563612,
+       "pow_hash": "1ba49ad252103dc9e5eba606a3c1fac0875e01b6163201d6b6f0d23902000000",
+       "inclusion": 1,
+       "transaction_count": 9,
+       "miner_address": "48bSCfGTKE4Kb3Fe3YWYgmNjgxjGqxZsP4mwHEQDVUQST2HxRGEX2566LbfmBE5bW2JcByTnjsWZiQZWj6f8XSpX4EDE9Gj",
+       "main_difficulty": 260565791438
+   }
+]
+        
+
+ + +
+ +
+

/api/block_by_id/<blockId>[/full|/light|/raw|/info|/payouts|/coinbase]

+

Response contains a block/share record on P2Pool by Template, Main Id, or Coinbase Id. You can select the JSON version or the binary format, or the full/light JSON format of the raw share.

+

Using /payouts you can query all payouts that include weights by this share.

+

Using /coinbase you can query all possible outputs and ownership for found and not found blocks.

+
+curl --silent https://{%s p.Context().NetServiceAddress %}/api/block_by_id/179cf9d77c7d198dc4d9a5deb03561b6121336fe9ea72fbda00fbf6eea34a34d
+{
+    "main_id": "abf18da3388c1c5c8ca372ac4804c6b1b2adb511d6a6cc5f781d883211568eb0",
+    "main_height": 2863113,
+    "template_id": "179cf9d77c7d198dc4d9a5deb03561b6121336fe9ea72fbda00fbf6eea34a34d",
+    "side_height": 4877733,
+    "parent_template_id": "ffd6a96ce3131f043f273582a69d1eaa42b7557f47f7b241140cb22af9fbf556",
+    "miner": 3,
+    "effective_height": 4877733,
+    "nonce": 1694662668,
+    "extra_nonce": 2797508428,
+    "timestamp": 1681355864,
+    "software_id": 0,
+    "software_version": 196610,
+    "window_depth": 327,
+    "window_outputs": 33,
+    "difficulty": 1956175240,
+    "cumulative_difficulty": 7601017513575704,
+    "pow_difficulty": 1301275836828,
+    "pow_hash": "602d39809af709405eb8660028fdfa5bf80e71e6a4ec1fbb924ed80000000000",
+    "inclusion": 1,
+    "transaction_count": 5,
+    "mined_main_at_height": true,
+    "miner_address": "47ab14EokGgCTX7RYoVhrNMjVA7GfW1jyMAmL7qBQz9fa4RZ6ZsBUgeRGuPWjqeM1wLptSJH5xuX2H4mAepMYvu6JqWMsGw",
+    "main_difficulty": 332971955880
+}
+        
+
+ + + +
+ +
+

/api/block_by_height/<blockHeight>[/full|/light|/raw|/info|/payouts|/coinbase]

+

Response contains a block/share record on P2Pool by SideChain height. You can select the JSON version or the binary format, or the full/light JSON format of the raw share.

+

Using /payouts you can query all payouts that include weights by this share.

+

Using /coinbase you can query all possible outputs and ownership for found and not found blocks.

+
+curl --silent https://{%s p.Context().NetServiceAddress %}/api/block_by_height/4868351
+{
+    "main_id": "5b468e062dc4aa1570f956e6314f6d0634a772aa8d2905d8ab9c83026a7ac6af",
+    "main_height": 2862309,
+    "template_id": "09d1974eea6de73d3cb95bc495b0b24a7b6f6405eaada53c4ec1ad3f513a4cc8",
+    "side_height": 4868351,
+    "parent_template_id": "b74acca03b7593386dd54b8132bf79522c9861b41f7797d0ce4f2af5f35cc170",
+    "miner": 1,
+    "effective_height": 4868351,
+    "nonce": 3271624915,
+    "extra_nonce": 1072029533,
+    "timestamp": 1681257577,
+    "software_id": 0,
+    "software_version": 196609,
+    "window_depth": 323,
+    "window_outputs": 30,
+    "difficulty": 2002581944,
+    "cumulative_difficulty": 7579715115168858,
+    "pow_difficulty": 3782914221,
+    "pow_hash": "fe471ad3fbd112fabe2abebafeccd2cb8eb0077864e7cfe939eaa62201000000",
+    "inclusion": 1,
+    "transaction_count": 28,
+    "miner_address": "4ApeMQzcRS7huBW8HEGkug2e5kQxhhC2Ub9y8F9bc7arKHsCktAV24n5ezKM9PjX5yS3Pv4PPNMXT8rTAFVuKCRi1jEqJZd",
+    "main_difficulty": 326506434325
+}
+        
+
+ + +
+
+

/api/events WebSocket Event API

+

+ Connect to this using a WebSocket library. Produces a stream of JSON events for new blocks (type side_block), found blocks (type found_block), orphaned blocks (type orphaned_block). +

+[result has been cut due to size, relevant portions shown]
+{
+   "type":"side_block",
+   "side_block":{
+      "main_id":"77d54ef67b566439c7df43614928ee6a503d82fb16f69720ed2ca0852b4ea5b6",
+      "main_height":2871492,
+      "template_id":"7c5db68e5af86e66df94d03688a8f61d7e7cd4544dbadc3f4d2f7972c0c72b17",
+      "side_height":4973833,
+      "parent_template_id":"10e2b50eb5c688bea4852f25b0d3550fe0e4e8192ea0602a373fb48454496e20",
+      "miner":19,
+      "uncle_of":"372ee3a80d8ab9131878a56e5e2802aa3f797a55d38f76871f1eeeafd60cd828",
+      "effective_height":4973834,
+      "nonce":4127591028,
+      "extra_nonce":3737539655,
+      "timestamp":1682358001,
+      "software_id":0,
+      "software_version":196610,
+      "window_depth":333,
+      "window_outputs":31,
+      "transaction_count":2,
+      "difficulty":1902041368,
+      "cumulative_difficulty":"0000000000000000001ba95c40814041",
+      "pow_difficulty":39725018671,
+      "pow_hash":"f6ddc7bdb80b6050fc7dd9fea1ad009434b7bcda3e3cb309a295ad1b00000000",
+      "inclusion":1,
+      "miner_address":"4B4mXWBqrFYGk9W8t1J3UifSdnU723HHKf8VaWGSZGzLZUncHRJetPCjbDUha1udPd2ZpJrwYCmPv1jzvg3NCf7Z1YViuoa",
+      "main_difficulty":344857075709
+   }
+}
+{
+   "type":"side_block",
+   "side_block":{
+      "main_id":"808c9c2a413b8480cc5b445575580a6edd5d237cc120f18a668c6f602dff9c1b",
+      "main_height":2871492,
+      "template_id":"372ee3a80d8ab9131878a56e5e2802aa3f797a55d38f76871f1eeeafd60cd828",
+      "side_height":4973834,
+      "parent_template_id":"8d691190875157d160c8bc8787ab140b1855c1afcc7b8f3076bc3366711bb085",
+      "miner":2,
+      "effective_height":4973834,
+      "nonce":402718979,
+      "extra_nonce":3611692200,
+      "timestamp":1682358008,
+      "software_id":0,
+      "software_version":196610,
+      "window_depth":332,
+      "window_outputs":31,
+      "transaction_count":2,
+      "difficulty":1900059444,
+      "cumulative_difficulty":"0000000000000000001ba95d2320b48d",
+      "pow_difficulty":4388053454,
+      "pow_hash":"727019817d63c52ac2ce2067652804cbfc8d3be778fe5548d0bf91fa00000000",
+      "inclusion":1,
+      "miner_address":"435QwkC3fJ4YeX929gmaBMeuUwR1wdmRrQBNyoKfpJdHKDbqnukHJeA768yt8ngnS7UTHRJ2yJmnWP8gCz6s3kkiBX8C363",
+      "uncles":[
+         {
+            "template_id":"7c5db68e5af86e66df94d03688a8f61d7e7cd4544dbadc3f4d2f7972c0c72b17",
+            "miner":19,
+            "side_height":4973833,
+            "difficulty":1902041368
+         }
+      ],
+      "main_difficulty":344857075709
+   }
+}
+{
+   "type":"side_block",
+   "side_block":{
+      "main_id":"220534c981f71a7d2d935825b5cf479d960345177387eb7fcd196a762b018453",
+      "main_height":2871492,
+      "template_id":"320a1a1d8849d48243670938efa640a271b289fae392ea35eb1a7daf88d3e2c8",
+      "side_height":4973835,
+      "parent_template_id":"372ee3a80d8ab9131878a56e5e2802aa3f797a55d38f76871f1eeeafd60cd828",
+      "miner":3,
+      "effective_height":4973835,
+      "nonce":3825436994,
+      "extra_nonce":2417583792,
+      "timestamp":1682358009,
+      "software_id":0,
+      "software_version":196610,
+      "window_depth":332,
+      "window_outputs":31,
+      "transaction_count":3,
+      "difficulty":1899187725,
+      "cumulative_difficulty":"0000000000000000001ba95d9454029a",
+      "pow_difficulty":4870458263,
+      "pow_hash":"d6b5911b6b13e6258e2f1d23ab5256cf9b3c4a002e0722f15b4cc0e100000000",
+      "inclusion":1,
+      "miner_address":"47ab14EokGgCTX7RYoVhrNMjVA7GfW1jyMAmL7qBQz9fa4RZ6ZsBUgeRGuPWjqeM1wLptSJH5xuX2H4mAepMYvu6JqWMsGw",
+      "main_difficulty":344857075709
+   }
+}
+{
+   "type":"side_block",
+   "side_block":{
+      "main_id":"3e735ce653c2f1c312125309367ad6016e3f55c80834efd63fdb94d0929d017a",
+      "main_height":2871492,
+      "template_id":"3f089efbc7fd31eb98705665acbbe1e7d3b290866cb94f39a0d2e072f2a11f14",
+      "side_height":4973836,
+      "parent_template_id":"320a1a1d8849d48243670938efa640a271b289fae392ea35eb1a7daf88d3e2c8",
+      "miner":9,
+      "effective_height":4973836,
+      "nonce":132358,
+      "extra_nonce":1448692177,
+      "timestamp":1682358019,
+      "software_id":0,
+      "software_version":196609,
+      "window_depth":332,
+      "window_outputs":31,
+      "transaction_count":7,
+      "difficulty":1896666403,
+      "cumulative_difficulty":"0000000000000000001ba95e0560d7bd",
+      "pow_difficulty":15371353282,
+      "pow_hash":"cf9774d250b905729cb988b24437ac5f27ccc55d78d6388ca7a8874700000000",
+      "inclusion":1,
+      "miner_address":"4AxaapsBMRYMJHFV5uApnFJth7stf4GiK9sqnLAH8SizguBbZ8YYtE2C3aF3UGVbh3ATRKdtd7ai1Hi1zfzMkdqmAZLqaGN",
+      "main_difficulty":344857075709
+   }
+}
+{
+   "type":"side_block",
+   "side_block":{
+      "main_id":"3ecbfae652abf9ecfd043d8921b3c18f9acc6f08a8521bd4a06c46b8ff5181f9",
+      "main_height":2871492,
+      "template_id":"ba8514bd7403c16a61b7e20f34981d9cb72de09a7b0593d55ef14d55bff1908e",
+      "side_height":4973837,
+      "parent_template_id":"3f089efbc7fd31eb98705665acbbe1e7d3b290866cb94f39a0d2e072f2a11f14",
+      "miner":2,
+      "effective_height":4973837,
+      "nonce":1879082776,
+      "extra_nonce":1309685883,
+      "timestamp":1682358030,
+      "software_id":0,
+      "software_version":196610,
+      "window_depth":332,
+      "window_outputs":31,
+      "transaction_count":8,
+      "difficulty":1897117455,
+      "cumulative_difficulty":"0000000000000000001ba95e76748ecc",
+      "pow_difficulty":4828639998,
+      "pow_hash":"979dbacd27e0c15bfa93a72bda30f9e4e472ab86cfc9bc5f71ceb4e300000000",
+      "inclusion":1,
+      "miner_address":"435QwkC3fJ4YeX929gmaBMeuUwR1wdmRrQBNyoKfpJdHKDbqnukHJeA768yt8ngnS7UTHRJ2yJmnWP8gCz6s3kkiBX8C363",
+      "main_difficulty":344857075709
+   }
+}
+{
+   "type":"side_block",
+   "side_block":{
+      "main_id":"f7aab8fda85491a5b3847435fa16ae925d55b60791c01faf5a23c6d5365ef6ca",
+      "main_height":2871492,
+      "template_id":"19278cd3a3022a25edf4b91a5544a88b8c8f6f78f84e862b01781de493b562c8",
+      "side_height":4973838,
+      "parent_template_id":"ba8514bd7403c16a61b7e20f34981d9cb72de09a7b0593d55ef14d55bff1908e",
+      "miner":3,
+      "effective_height":4973838,
+      "nonce":2868937852,
+      "extra_nonce":869103007,
+      "timestamp":1682358036,
+      "software_id":0,
+      "software_version":196610,
+      "window_depth":332,
+      "window_outputs":31,
+      "transaction_count":8,
+      "difficulty":1894821734,
+      "cumulative_difficulty":"0000000000000000001ba95ee7653e32",
+      "pow_difficulty":2019716446,
+      "pow_hash":"2d03c8818798cb1bde4a6d2d64d0a59a04b8228e94aff841599c632002000000",
+      "inclusion":1,
+      "miner_address":"47ab14EokGgCTX7RYoVhrNMjVA7GfW1jyMAmL7qBQz9fa4RZ6ZsBUgeRGuPWjqeM1wLptSJH5xuX2H4mAepMYvu6JqWMsGw",
+      "main_difficulty":344857075709
+   }
+}
+{
+   "type":"side_block",
+   "side_block":{
+      "main_id":"877b4df53e2347e19d94ba52e04522601d461c0dc5d0439e8ec87a5ecb58a31f",
+      "main_height":2871492,
+      "template_id":"000c39fc469e4062fe4da6fc8444c3c990ad817397c94abe13c46720a4c9ab75",
+      "side_height":4973839,
+      "parent_template_id":"19278cd3a3022a25edf4b91a5544a88b8c8f6f78f84e862b01781de493b562c8",
+      "miner":2,
+      "effective_height":4973839,
+      "nonce":822086856,
+      "extra_nonce":1665899192,
+      "timestamp":1682358038,
+      "software_id":0,
+      "software_version":196610,
+      "window_depth":332,
+      "window_outputs":31,
+      "transaction_count":10,
+      "difficulty":1893298342,
+      "cumulative_difficulty":"0000000000000000001ba95f583eaed8",
+      "pow_difficulty":29696623614,
+      "pow_hash":"b1aa60a163d39b0524f7448954f770de8cbb873e346b63e37659062500000000",
+      "inclusion":1,
+      "miner_address":"435QwkC3fJ4YeX929gmaBMeuUwR1wdmRrQBNyoKfpJdHKDbqnukHJeA768yt8ngnS7UTHRJ2yJmnWP8gCz6s3kkiBX8C363",
+      "main_difficulty":344857075709
+   }
+}
+{
+   "type":"side_block",
+   "side_block":{
+      "main_id":"b6516743e3693824f0d8eceab7109c4242661f78e498f78e42a57bd602b7b167",
+      "main_height":2871493,
+      "template_id":"af88e464df1f31761996031f5c851f1a59d6ecb4b6e917407e1164ce6a569a07",
+      "side_height":4973840,
+      "parent_template_id":"000c39fc469e4062fe4da6fc8444c3c990ad817397c94abe13c46720a4c9ab75",
+      "miner":19,
+      "effective_height":4973840,
+      "nonce":1543602719,
+      "extra_nonce":2911703055,
+      "timestamp":1682358053,
+      "software_id":0,
+      "software_version":196610,
+      "window_depth":332,
+      "window_outputs":31,
+      "transaction_count":0,
+      "difficulty":1893967043,
+      "cumulative_difficulty":"0000000000000000001ba95fc922539b",
+      "pow_difficulty":1157101996504,
+      "pow_hash":"d855eed5d88837eb44c3d0a80457981fd39e9af67e8b58a03142f30000000000",
+      "inclusion":1,
+      "miner_address":"4B4mXWBqrFYGk9W8t1J3UifSdnU723HHKf8VaWGSZGzLZUncHRJetPCjbDUha1udPd2ZpJrwYCmPv1jzvg3NCf7Z1YViuoa",
+      "mined_main_at_height":true,
+      "main_difficulty":344633368046
+   }
+}
+{
+   "type":"found_block",
+   "found_block":{
+      "main_block":{
+         "id":"b6516743e3693824f0d8eceab7109c4242661f78e498f78e42a57bd602b7b167",
+         "height":2871493,
+         "timestamp":1682358053,
+         "reward":600000000000,
+         "coinbase_id":"9ba3e0449f6ff3a108a877f2f37eedf0b87f811ff5725634e109ba0d2789d479",
+         "difficulty":344633368046,
+         "side_template_id":"af88e464df1f31761996031f5c851f1a59d6ecb4b6e917407e1164ce6a569a07",
+         "coinbase_private_key":"1331ab860507192987e98497b971daac66e8804c51ad115ab6b2bf3d2abd270d"
+      },
+      "side_height":4973840,
+      "miner":19,
+      "effective_height":4973840,
+      "window_depth":332,
+      "window_outputs":31,
+      "transaction_count":0,
+      "difficulty":1893967043,
+      "cumulative_difficulty":"0000000000000000001ba95fc922539b",
+      "inclusion":1,
+      "miner_address":"4B4mXWBqrFYGk9W8t1J3UifSdnU723HHKf8VaWGSZGzLZUncHRJetPCjbDUha1udPd2ZpJrwYCmPv1jzvg3NCf7Z1YViuoa"
+   },
+   "main_coinbase_outputs":[
+      {
+         "id":"9ba3e0449f6ff3a108a877f2f37eedf0b87f811ff5725634e109ba0d2789d479",
+         "index":0,
+         "global_output_index":72132937,
+         "miner":30,
+         "value":1747977812,
+         "miner_address":"47J5KAEgevN8TKMhstn85mbASkhpZq5BtSt9afcseHPEVtDggZ8uBdxgoTRjdP2ooS4Px1y1pXeryhr9UFQqaykY5J4Ev85"
+      },
+      {
+         "id":"9ba3e0449f6ff3a108a877f2f37eedf0b87f811ff5725634e109ba0d2789d479",
+         "index":1,
+         "global_output_index":72132938,
+         "miner":195,
+         "value":1736642632,
+         "miner_address":"47goCBjSdpqAGUFkc1nM9F7gNcSfSjtKuTqcLxGpEUn6DgboSZMpn2CMRkQ2JKWbxRJvHy2fbSJxtFqXVDbQqs5wPpxgbYD"
+      },
+      {
+         "id":"9ba3e0449f6ff3a108a877f2f37eedf0b87f811ff5725634e109ba0d2789d479",
+         "index":2,
+         "global_output_index":72132939,
+         "miner":10,
+         "value":1737989471,
+         "miner_address":"46vavwU3QDmK2Jdw6CgezsB5538rbwFGi67EPWqkEBfvWuuiFTNaPVQPNSbxVc1UNbN6E7xakVkCxCnttvgyohaN4U9F7kf"
+      },
+      {
+         "id":"9ba3e0449f6ff3a108a877f2f37eedf0b87f811ff5725634e109ba0d2789d479",
+         "index":3,
+         "global_output_index":72132940,
+         "miner":1,
+         "value":3139170892,
+         "miner_address":"4ApeMQzcRS7huBW8HEGkug2e5kQxhhC2Ub9y8F9bc7arKHsCktAV24n5ezKM9PjX5yS3Pv4PPNMXT8rTAFVuKCRi1jEqJZd"
+      },
+      {
+         "id":"9ba3e0449f6ff3a108a877f2f37eedf0b87f811ff5725634e109ba0d2789d479",
+         "index":4,
+         "global_output_index":72132941,
+         "miner":47,
+         "value":1751320020,
+         "miner_address":"47Eqp7fsvVnPPSU4rsXrKJhyAme6LhDRZDzFky9xWsWUS9pd6FPjJCMDCNX1NnNiDzTwfbAgGMk2N6A1aucNcrkhLffta1p"
+      },
+      {
+         "id":"9ba3e0449f6ff3a108a877f2f37eedf0b87f811ff5725634e109ba0d2789d479",
+         "index":5,
+         "global_output_index":72132942,
+         "miner":26,
+         "value":6966089461,
+         "miner_address":"42yAHAH5at9ZHvMXvb1xPV2aKnoibjZWCfTgQg2HdxumFx857g3DK75GbDKzmvu8QMW8CnWxuPAYyfQADjwKw6dy78x2gbp"
+      },
+      {
+         "id":"9ba3e0449f6ff3a108a877f2f37eedf0b87f811ff5725634e109ba0d2789d479",
+         "index":6,
+         "global_output_index":72132943,
+         "miner":6,
+         "value":1739307539,
+         "miner_address":"4AzyJ87Tp3yLXjA3E5v9iAEnTTLu6UTeSdatiwto92n91z7NE11QmpV4YGatwS3ihvFsmvTfz85bfKMLBBAsZMGFKcJJ8jG"
+      },
+      {
+         "id":"9ba3e0449f6ff3a108a877f2f37eedf0b87f811ff5725634e109ba0d2789d479",
+         "index":7,
+         "global_output_index":72132944,
+         "miner":18,
+         "value":11494230879,
+         "miner_address":"4BBb6ZBPPPWivZnx2m3m7YUUGQv54F9HfjPWurf2Xy2UDQwwPyb956dGQ3p9whrxNJ568zc3Ygfr9McVT1UJyRKtLi1jcMb"
+      },
+      {
+         "id":"9ba3e0449f6ff3a108a877f2f37eedf0b87f811ff5725634e109ba0d2789d479",
+         "index":8,
+         "global_output_index":72132945,
+         "miner":19,
+         "value":39395535008,
+         "miner_address":"4B4mXWBqrFYGk9W8t1J3UifSdnU723HHKf8VaWGSZGzLZUncHRJetPCjbDUha1udPd2ZpJrwYCmPv1jzvg3NCf7Z1YViuoa"
+      },
+      {
+         "id":"9ba3e0449f6ff3a108a877f2f37eedf0b87f811ff5725634e109ba0d2789d479",
+         "index":9,
+         "global_output_index":72132946,
+         "miner":842,
+         "value":3477271817,
+         "miner_address":"457Ht8LpLt2iq8y5HShzySduWTC58JvGLj6eWiURzUxNVXrDBWJc9jd3niHHLZ4o6hHYpufyd8zhL9EMktn3p3EdHQ6LAkj"
+      },
+      {
+         "id":"9ba3e0449f6ff3a108a877f2f37eedf0b87f811ff5725634e109ba0d2789d479",
+         "index":10,
+         "global_output_index":72132947,
+         "miner":1104,
+         "value":1746268557,
+         "miner_address":"48LszLe98KgS1H4ELW9rmEH6dTar1uWdZDx7ttDHNSZvcANADw9PUbDU3KWREmgozxMbzofNmj8m5ZuieukEsj7aHjfo3in"
+      },
+      {
+         "id":"9ba3e0449f6ff3a108a877f2f37eedf0b87f811ff5725634e109ba0d2789d479",
+         "index":11,
+         "global_output_index":72132948,
+         "miner":445,
+         "value":1748663264,
+         "miner_address":"44XavwVX8pP2U5NxtwGusU2obpoK55nNVBBqWLC2aJBX2yhAozsC1tvVG8NcC2PEQy2SRmBuB4WqTfVgfBCS3NkY1wYHZ3T"
+      },
+      {
+         "id":"9ba3e0449f6ff3a108a877f2f37eedf0b87f811ff5725634e109ba0d2789d479",
+         "index":12,
+         "global_output_index":72132949,
+         "miner":156,
+         "value":1755605809,
+         "miner_address":"42FUiB6725E4UDkVXMJ3nZ21dhV9atHP9Z1yqxMGfNhnDkJUhdxDaTGaCej35H346eS5vcbEVY4kzdLVhKM63LjNJxFYMUF"
+      },
+      {
+         "id":"9ba3e0449f6ff3a108a877f2f37eedf0b87f811ff5725634e109ba0d2789d479",
+         "index":13,
+         "global_output_index":72132950,
+         "miner":23,
+         "value":1749533284,
+         "miner_address":"46aSNdCK35w9fdX3iCwk3GLt3iZ4hnR34j2mJtxE14MWLXB5JRXxvzmjMUoz2mmFZk9mkqQRpCbPd2TbFqcQxqGkHxJPHUK"
+      },
+      {
+         "id":"9ba3e0449f6ff3a108a877f2f37eedf0b87f811ff5725634e109ba0d2789d479",
+         "index":14,
+         "global_output_index":72132951,
+         "miner":61,
+         "value":3491378711,
+         "miner_address":"44YdBost8RfFjVT9W712c5KN1ZeTq5rPC6Uu12D4nBkUMBHxeb7TxKfGnAGLbfsvbaKtBvwzqKLqBWf7cpU7d2nZ55pXeCU"
+      },
+      {
+         "id":"9ba3e0449f6ff3a108a877f2f37eedf0b87f811ff5725634e109ba0d2789d479",
+         "index":15,
+         "global_output_index":72132952,
+         "miner":647,
+         "value":24776511644,
+         "miner_address":"4AQ3YkqG2XdWsPHEgrDGdyQLq1qMMGFqWTFJfrVQW99qPmCzZKvJqzxgf5342KC17o9bchfJcUzLhVW9QgNKTYUBLg876Gt"
+      },
+      {
+         "id":"9ba3e0449f6ff3a108a877f2f37eedf0b87f811ff5725634e109ba0d2789d479",
+         "index":16,
+         "global_output_index":72132953,
+         "miner":11,
+         "value":1739154107,
+         "miner_address":"42safVv7VKVLrGc1RWEgVqi9YJRV8XiUeFViStfLPWE8FAH1i4HvovcXntT8k5MvVuKkpYLcjELwL4Azrcb65MZC2AkoDoJ"
+      },
+      {
+         "id":"9ba3e0449f6ff3a108a877f2f37eedf0b87f811ff5725634e109ba0d2789d479",
+         "index":17,
+         "global_output_index":72132954,
+         "miner":4,
+         "value":82984625360,
+         "miner_address":"4ADyLD6c7hzT5gCYxWnw7k2q5RPDxwqNTMsHcz9n91ir22YJbjBQ4LjGZgcLUVV7tyG33vXfB5SR1iCWaCjEQ7BNJUg6SyJ"
+      },
+      {
+         "id":"9ba3e0449f6ff3a108a877f2f37eedf0b87f811ff5725634e109ba0d2789d479",
+         "index":18,
+         "global_output_index":72132955,
+         "miner":111,
+         "value":1741890162,
+         "miner_address":"45vMeqsvpW5UoQ4HQDjbUoLpmrLkhyVKgiSeR9WwuCpLV9egZtkwGGYPJ5HDvdAVtgF4bcu93dzEc6mLFbYRqVJzAQWHRnL"
+      },
+      {
+         "id":"9ba3e0449f6ff3a108a877f2f37eedf0b87f811ff5725634e109ba0d2789d479",
+         "index":19,
+         "global_output_index":72132956,
+         "miner":8,
+         "value":5240626741,
+         "miner_address":"47oeGVdUWXDPSqjgFd2dQS57S3W4KPGnneq1o8hAdGE2ZwMZzKHeLFhiQoguKMFq4jScJ2qL7jrHoiP8xh2Su6SuFtxk3Da"
+      },
+      {
+         "id":"9ba3e0449f6ff3a108a877f2f37eedf0b87f811ff5725634e109ba0d2789d479",
+         "index":20,
+         "global_output_index":72132957,
+         "miner":5283,
+         "value":1750270617,
+         "miner_address":"45j2xT1JbU27Mv8ScdumCC5bg3P9EU1HEE2DKZ9TzVje6wVE8kKqviwFuvwaoNywwzh7uiJoxfpWe4jp5HvYDZgyKdU2iEt"
+      },
+      {
+         "id":"9ba3e0449f6ff3a108a877f2f37eedf0b87f811ff5725634e109ba0d2789d479",
+         "index":21,
+         "global_output_index":72132958,
+         "miner":179,
+         "value":1749846757,
+         "miner_address":"42TUuapMMbs4taYHYFnFTeFAM57WzVKDNXn4yeAQcJcgHq1m6q993EedsF2ebd7WP5Gjixw3NPu6ncH7WFWfsPDiPSWEnr9"
+      },
+      {
+         "id":"9ba3e0449f6ff3a108a877f2f37eedf0b87f811ff5725634e109ba0d2789d479",
+         "index":22,
+         "global_output_index":72132959,
+         "miner":639,
+         "value":3497561198,
+         "miner_address":"49bNJ3mdVBfGjr3vWTVhXNig75gCxHQCwNG2FyvRErxs7U4A1c8K6Pn39Tq8oZAxtbXsfNsBtyKzT8apMkYD67QTS2v42oW"
+      },
+      {
+         "id":"9ba3e0449f6ff3a108a877f2f37eedf0b87f811ff5725634e109ba0d2789d479",
+         "index":23,
+         "global_output_index":72132960,
+         "miner":15,
+         "value":5247959737,
+         "miner_address":"44N5jui2nbtQaxWjs9hoJBX5ELrCk5ftja7Zu3QCGTA1FftJhDKrEDL92Rw12j8FALHKnJEUb6KZ45SAncJ6iqKN6nShj2S"
+      },
+      {
+         "id":"9ba3e0449f6ff3a108a877f2f37eedf0b87f811ff5725634e109ba0d2789d479",
+         "index":24,
+         "global_output_index":72132961,
+         "miner":2161,
+         "value":1750436503,
+         "miner_address":"44WHz1PGu8mYWxVE1p6vVtXDtvKtkd7eY23DdXncavA9Ybb6kP9i6BrhZschXpxGCHdTfBoLDznv55SYUqDhoCyJJxV84tD"
+      },
+      {
+         "id":"9ba3e0449f6ff3a108a877f2f37eedf0b87f811ff5725634e109ba0d2789d479",
+         "index":25,
+         "global_output_index":72132962,
+         "miner":91,
+         "value":2100792894,
+         "miner_address":"48tdvJBtQN5Vt3jmLDTTYX7dpS9oDXATAdD8XFhuE1CshWUdShUsEif6UivD5iGsroKGEKqxGqA1aFA2XVx8rtmiFAqKT6E"
+      },
+      {
+         "id":"9ba3e0449f6ff3a108a877f2f37eedf0b87f811ff5725634e109ba0d2789d479",
+         "index":26,
+         "global_output_index":72132963,
+         "miner":2,
+         "value":125897735171,
+         "miner_address":"435QwkC3fJ4YeX929gmaBMeuUwR1wdmRrQBNyoKfpJdHKDbqnukHJeA768yt8ngnS7UTHRJ2yJmnWP8gCz6s3kkiBX8C363"
+      },
+      {
+         "id":"9ba3e0449f6ff3a108a877f2f37eedf0b87f811ff5725634e109ba0d2789d479",
+         "index":27,
+         "global_output_index":72132964,
+         "miner":5190,
+         "value":1741473336,
+         "miner_address":"49trSMSTsAmE2uMeCo1MmEUvfk6i9DWF15skLn9hut11ehcq1vLHkYi9sTujrcDG61dLFk61LeWMafa3EkamaGEUD1fSvRe"
+      },
+      {
+         "id":"9ba3e0449f6ff3a108a877f2f37eedf0b87f811ff5725634e109ba0d2789d479",
+         "index":28,
+         "global_output_index":72132965,
+         "miner":9,
+         "value":50246935661,
+         "miner_address":"4AxaapsBMRYMJHFV5uApnFJth7stf4GiK9sqnLAH8SizguBbZ8YYtE2C3aF3UGVbh3ATRKdtd7ai1Hi1zfzMkdqmAZLqaGN"
+      },
+      {
+         "id":"9ba3e0449f6ff3a108a877f2f37eedf0b87f811ff5725634e109ba0d2789d479",
+         "index":29,
+         "global_output_index":72132966,
+         "miner":4990,
+         "value":15680539194,
+         "miner_address":"4B4aCvEcZr6GcusVJfEds2LXixCeJ2dQBaDUCguWmzi5L7PW5tVXfAnE4cn1mQdiNzH6zWcEPMQTiYTsNcX44ryxCJWZKZH"
+      },
+      {
+         "id":"9ba3e0449f6ff3a108a877f2f37eedf0b87f811ff5725634e109ba0d2789d479",
+         "index":30,
+         "global_output_index":72132967,
+         "miner":3,
+         "value":190176655762,
+         "miner_address":"47ab14EokGgCTX7RYoVhrNMjVA7GfW1jyMAmL7qBQz9fa4RZ6ZsBUgeRGuPWjqeM1wLptSJH5xuX2H4mAepMYvu6JqWMsGw"
+      }
+   ]
+}
+{
+   "type":"side_block",
+   "side_block":{
+      "main_id":"5594278518615f55a7e911cca93280fd0c3d2dff1d1fd184db6602e0afb69e0b",
+      "main_height":2871494,
+      "template_id":"0ef3e5ddcb0c4f6398eb833361b3749f92fc232a049c52052c5da956c9bbc868",
+      "side_height":4973841,
+      "parent_template_id":"af88e464df1f31761996031f5c851f1a59d6ecb4b6e917407e1164ce6a569a07",
+      "miner":4,
+      "effective_height":4973841,
+      "nonce":2466322468,
+      "extra_nonce":893603150,
+      "timestamp":1682358055,
+      "software_id":0,
+      "software_version":196610,
+      "window_depth":332,
+      "window_outputs":31,
+      "transaction_count":0,
+      "difficulty":1894526953,
+      "cumulative_difficulty":"0000000000000000001ba9603a0e8384",
+      "pow_difficulty":11901446960,
+      "pow_hash":"bbe4a67f6a9bca4028ca1faa940d692f834978d10ed18e34d07b625c00000000",
+      "inclusion":1,
+      "miner_address":"4ADyLD6c7hzT5gCYxWnw7k2q5RPDxwqNTMsHcz9n91ir22YJbjBQ4LjGZgcLUVV7tyG33vXfB5SR1iCWaCjEQ7BNJUg6SyJ",
+      "main_difficulty":344205037143
+   }
+}
+{
+   "type":"side_block",
+   "side_block":{
+      "main_id":"6c50a9aa027a09b41c56f965f8e21041649c1638a956576fc3fc350441e0f4ab",
+      "main_height":2871494,
+      "template_id":"5f72a35b571746ac3835b204020e548e65a7350d84d5d7a7aa3a749dc058f7ad",
+      "side_height":4973842,
+      "parent_template_id":"0ef3e5ddcb0c4f6398eb833361b3749f92fc232a049c52052c5da956c9bbc868",
+      "miner":19,
+      "effective_height":4973842,
+      "nonce":1090620480,
+      "extra_nonce":162834581,
+      "timestamp":1682358073,
+      "software_id":0,
+      "software_version":196610,
+      "window_depth":332,
+      "window_outputs":31,
+      "transaction_count":1,
+      "difficulty":1893992163,
+      "cumulative_difficulty":"0000000000000000001ba960aaf28a67",
+      "pow_difficulty":4704880707,
+      "pow_hash":"bc26c47392a94004bc736822520f67bbf56dfba432e6d75aa12ab2e900000000",
+      "inclusion":1,
+      "miner_address":"4B4mXWBqrFYGk9W8t1J3UifSdnU723HHKf8VaWGSZGzLZUncHRJetPCjbDUha1udPd2ZpJrwYCmPv1jzvg3NCf7Z1YViuoa",
+      "main_difficulty":344205037143
+   }
+}
+{
+   "type":"side_block",
+   "side_block":{
+      "main_id":"617ea6fe4a47a3e7f51c8cc719a5158b88a4ca2583cd2f0cd5ed0b006bca3564",
+      "main_height":2871494,
+      "template_id":"b95dcd9d440fcd49a050c76f006189c01e1857d11bfc0b41f3fa560c15a4750f",
+      "side_height":4973843,
+      "parent_template_id":"5f72a35b571746ac3835b204020e548e65a7350d84d5d7a7aa3a749dc058f7ad",
+      "miner":3,
+      "effective_height":4973843,
+      "nonce":4026630147,
+      "extra_nonce":2353672144,
+      "timestamp":1682358101,
+      "software_id":0,
+      "software_version":196610,
+      "window_depth":332,
+      "window_outputs":31,
+      "transaction_count":15,
+      "difficulty":1895322145,
+      "cumulative_difficulty":"0000000000000000001ba9611beadc88",
+      "pow_difficulty":6105552648,
+      "pow_hash":"5c06f2ebd7fc22dca35bed2a0faa9e1aad7e36a5c89af94d587915b400000000",
+      "inclusion":1,
+      "miner_address":"47ab14EokGgCTX7RYoVhrNMjVA7GfW1jyMAmL7qBQz9fa4RZ6ZsBUgeRGuPWjqeM1wLptSJH5xuX2H4mAepMYvu6JqWMsGw",
+      "main_difficulty":344205037143
+   }
+}
+    
+

+
+ +
+
+

Redirect APIs

+

Several endpoints are available that redirect/forward your request via Location HTTP header to the relevant API listed above.

+

+

/api/last_found[/raw|...]?...

+ Redirects to the /api/block_by_id/... record for the last block found on the Monero network by P2Pool. +

+

+

/api/tip[/raw|...]?...

+ Redirects to the /api/block_by_id/... record for the last share found by P2Pool. +

+
+
+ +{% endfunc %} \ No newline at end of file diff --git a/docs/research/xvb-delivery-study/data/sources/observer-side_block.go b/docs/research/xvb-delivery-study/data/sources/observer-side_block.go new file mode 100644 index 00000000..fd29d8d1 --- /dev/null +++ b/docs/research/xvb-delivery-study/data/sources/observer-side_block.go @@ -0,0 +1,257 @@ +package index + +import ( + "encoding/binary" + "errors" + "slices" + "unsafe" + + "git.gammaspectra.live/P2Pool/consensus/v5/monero/address" + mainblock "git.gammaspectra.live/P2Pool/consensus/v5/monero/block" + "git.gammaspectra.live/P2Pool/consensus/v5/monero/crypto/curve25519" + "git.gammaspectra.live/P2Pool/consensus/v5/p2pool/sidechain" + p2pooltypes "git.gammaspectra.live/P2Pool/consensus/v5/p2pool/types" + "git.gammaspectra.live/P2Pool/consensus/v5/types" +) + +type BlockInclusion int + +const ( + // InclusionOrphan orphan (was not included in-verified-chain) + InclusionOrphan = BlockInclusion(iota) + // InclusionInVerifiedChain in-verified-chain (uncle or main) + InclusionInVerifiedChain + // InclusionAlternateInVerifiedChain alternate in-verified-chain (uncle or main), for example when duplicate nonce happens + InclusionAlternateInVerifiedChain + + InclusionCount +) + +const SideBlockSelectFields = "main_id, main_height, template_id, root_hash, side_height, parent_template_id, miner, uncle_of, effective_height, nonce, extra_nonce, timestamp, software_id, software_version, window_depth, window_outputs, transaction_count, difficulty, cumulative_difficulty, pow_difficulty, pow_hash, inclusion" + +type SideBlock struct { + // MainId mainchain id, on Monero network + MainId types.Hash `json:"main_id"` + MainHeight uint64 `json:"main_height"` + + // TemplateId -- sidechain template id. Note multiple blocks can exist per template id, see Inclusion + TemplateId types.Hash `json:"template_id"` + // RootHash -- root hash. Note multiple blocks can exist per root hash, see Inclusion + RootHash types.Hash `json:"root_hash,omitzero"` + + SideHeight uint64 `json:"side_height"` + // ParentTemplateId previous sidechain template id + ParentTemplateId types.Hash `json:"parent_template_id"` + + // Miner internal id of the miner who contributed the block + Miner uint64 `json:"miner"` + + // Uncle inclusion information + + // UncleOf has been included under this parent block TemplateId as an uncle + UncleOf types.Hash `json:"uncle_of,omitzero"` + // EffectiveHeight has been included under this parent block height as an uncle, or is this height + EffectiveHeight uint64 `json:"effective_height"` + + // Nonce data + Nonce uint32 `json:"nonce"` + ExtraNonce uint32 `json:"extra_nonce"` + + Timestamp uint64 `json:"timestamp"` + SoftwareId p2pooltypes.SoftwareId `json:"software_id"` + SoftwareVersion p2pooltypes.SoftwareVersion `json:"software_version"` + // WindowDepth PPLNS window depth, in blocks including this one + WindowDepth uint32 `json:"window_depth"` + WindowOutputs uint32 `json:"window_outputs"` + + // Difficulty sidechain difficulty at height + Difficulty uint64 `json:"difficulty"` + CumulativeDifficulty types.Difficulty `json:"cumulative_difficulty"` + PowDifficulty uint64 `json:"pow_difficulty"` + // PowHash result of PoW function as a hash (all 0x00 = not known) + PowHash types.Hash `json:"pow_hash"` + + Inclusion BlockInclusion `json:"inclusion"` + + TransactionCount uint32 `json:"transaction_count"` + + // Extra information filled just for JSON purposes + + MinedMainAtHeight bool `json:"mined_main_at_height,omitzero"` + MinerAddress *address.Address `json:"miner_address,omitempty"` + MinerPayoutAddress *address.Address `json:"miner_payout_address,omitempty"` + MinerAlias string `json:"miner_alias,omitempty"` + Uncles []SideBlockUncleEntry `json:"uncles,omitempty"` + MainDifficulty uint64 `json:"main_difficulty,omitzero"` +} + +type SideBlockUncleEntry struct { + TemplateId types.Hash `json:"template_id"` + Miner uint64 `json:"miner"` + SideHeight uint64 `json:"side_height"` + Difficulty uint64 `json:"difficulty"` +} + +// FromPoolBlock block needs to be pre-processed for ids to be correct +// These fields need to be filled by caller to match needs: +// SideBlock.UncleOf +// SideBlock.EffectiveHeight +// SideBlock.WindowDepth +// SideBlock.Inclusion +func (b *SideBlock) FromPoolBlock(i *Index, block *sidechain.PoolBlock, getSeedByHeight mainblock.GetSeedByHeightFunc) error { + b.MainId = block.MainId() + b.TemplateId = block.SideTemplateId(i.consensus) + b.RootHash = block.MergeMiningTag().RootHash + + if b.MainId == types.ZeroHash { + return errors.New("invalid main id") + } + if b.TemplateId == types.ZeroHash || b.TemplateId != block.FastSideTemplateId(i.Consensus()) { + return errors.New("invalid template id") + } + b.MainHeight = block.Main.Coinbase.GenHeight + b.SideHeight = block.Side.Height + b.ParentTemplateId = block.Side.Parent + + var subaddressViewPub *curve25519.PublicKeyBytes + if d, ok := block.Side.MergeMiningExtra.Get(sidechain.ExtraChainKeySubaddressViewPub); ok && len(d) >= curve25519.PublicKeySize { + viewPub := curve25519.PublicKeyBytes(d[:curve25519.PublicKeySize]) + // must be valid + if viewPub.PointVarTime() != nil { + subaddressViewPub = &viewPub + } + } + + b.Miner = i.GetOrCreateMinerPackedAddress(block.Side.PublicKey, subaddressViewPub).id + b.Nonce = block.Main.Nonce + b.ExtraNonce = block.ExtraNonce() + b.Timestamp = block.Main.Timestamp + b.SoftwareId = block.Side.ExtraBuffer.SoftwareId + b.SoftwareVersion = block.Side.ExtraBuffer.SoftwareVersion + b.WindowOutputs = uint32(len(block.Main.Coinbase.MinerOutputs)) + b.TransactionCount = uint32(len(block.Main.Transactions)) + b.Difficulty = block.Side.Difficulty.Lo + b.CumulativeDifficulty = block.Side.CumulativeDifficulty + b.PowHash = block.PowHash(i.Consensus().GetHasher(), getSeedByHeight) + if b.PowHash == types.ZeroHash { + return errors.New("invalid pow hash") + } + b.PowDifficulty = types.DifficultyFromPoW(b.PowHash).Lo + + return nil +} + +func (b *SideBlock) SetUncleOf(block *SideBlock) error { + if block == nil { + b.UncleOf = types.ZeroHash + b.EffectiveHeight = b.SideHeight + return nil + } + if block.IsUncle() { + return errors.New("parent cannot be uncle") + } + if block.SideHeight <= b.SideHeight { + return errors.New("parent side height cannot be lower or equal") + } + b.UncleOf = block.TemplateId + b.EffectiveHeight = block.EffectiveHeight + return nil +} + +// IsTipOfHeight whether this block is considered to be the "main" block within this height, not an uncle, or alternate +func (b *SideBlock) IsTipOfHeight() bool { + return b.SideHeight == b.EffectiveHeight && b.Inclusion == InclusionInVerifiedChain +} + +func (b *SideBlock) FullId() sidechain.FullId { + var buf sidechain.FullId + copy(buf[:], b.TemplateId[:]) + binary.LittleEndian.PutUint32(buf[types.HashSize:], b.Nonce) + binary.LittleEndian.PutUint32(buf[types.HashSize+unsafe.Sizeof(b.Nonce):], b.ExtraNonce) + return buf +} + +func (b *SideBlock) IsUncle() bool { + return b.SideHeight != b.EffectiveHeight && b.UncleOf != types.ZeroHash +} + +func (b *SideBlock) IsOrphan() bool { + return b.Inclusion == InclusionOrphan +} + +func (b *SideBlock) ScanFromRow(_ *sidechain.Consensus, row RowScanInterface) error { + if err := row.Scan(&b.MainId, &b.MainHeight, &b.TemplateId, &b.RootHash, &b.SideHeight, &b.ParentTemplateId, &b.Miner, &b.UncleOf, &b.EffectiveHeight, &b.Nonce, &b.ExtraNonce, &b.Timestamp, &b.SoftwareId, &b.SoftwareVersion, &b.WindowDepth, &b.WindowOutputs, &b.TransactionCount, &b.Difficulty, &b.CumulativeDifficulty, &b.PowDifficulty, &b.PowHash, &b.Inclusion); err != nil { + return err + } + return nil +} + +//Utilities to be used by JSON decoded blocks + +func (b *SideBlock) Weight(tipHeight, windowSize, consensusUnclePenalty uint64) (weight, parentWeight uint64) { + if (tipHeight - b.SideHeight) >= windowSize { + return 0, 0 + } + if b.IsUncle() { + unclePenalty := types.DifficultyFrom64(b.Difficulty).Mul64(consensusUnclePenalty).Div64(100) + uncleWeight := b.Difficulty - unclePenalty.Lo + + return uncleWeight, unclePenalty.Lo + } else { + weight = b.Difficulty + for _, u := range b.Uncles { + if (tipHeight - u.SideHeight) >= windowSize { + continue + } + weight += types.DifficultyFrom64(u.Difficulty).Mul64(consensusUnclePenalty).Div64(100).Lo + } + return weight, 0 + } +} + +func HashRatioSideBlocks(shares []*SideBlock, latest *SideBlock, consensusUnclePenalty uint64) (hashrate uint64, ratio float64, weight, total types.Difficulty) { + if len(shares) == 0 || latest == nil { + return 0, 0, types.ZeroDifficulty, types.ZeroDifficulty + } + + shares = slices.Clone(shares) + slices.SortFunc(shares, SortSideBlock) + + var totalWeight types.Difficulty + for _, s := range shares { + w, _ := s.Weight(s.SideHeight, uint64(s.WindowDepth), consensusUnclePenalty) + totalWeight = totalWeight.Add64(w) + } + + cumWeight := latest.CumulativeDifficulty.Sub(shares[0].CumulativeDifficulty) + + return totalWeight.Div64(latest.Timestamp - shares[0].Timestamp).Lo, + totalWeight.Float64() / cumWeight.Float64(), + totalWeight, + cumWeight +} + +func SortSideBlock(a, b *SideBlock) int { + if a == b { + return 0 + } + + if a == nil { + return -1 + } else if b == nil { + return 1 + } + + if a.EffectiveHeight < b.EffectiveHeight { + return -1 + } else if a.EffectiveHeight > b.EffectiveHeight { + return 1 + } + if a.SideHeight < b.SideHeight { + return -1 + } else if a.SideHeight > b.SideHeight { + return 1 + } + //same height, sort by main id + return a.MainId.Compare(b.MainId) +} diff --git a/docs/research/xvb-delivery-study/data/sources/p2pool-README.md b/docs/research/xvb-delivery-study/data/sources/p2pool-README.md new file mode 100644 index 00000000..97f84ae0 --- /dev/null +++ b/docs/research/xvb-delivery-study/data/sources/p2pool-README.md @@ -0,0 +1,412 @@ +# Monero P2Pool + +Decentralized pool for Monero mining. + +Pool status and monitoring pages can be found at: + +|P2Pool|| +|-|-| +|main|https://p2pool.io/
https://p2pool.observer/| +|mini|https://p2pool.io/mini/
https://mini.p2pool.observer/| +|nano|https://p2pool.io/nano/
https://nano.p2pool.observer/| + +These are 3rd-party pages. If they are down, it doesn't mean there is a problem with P2Pool itself - it keeps mining always thanks to its decentralized nature. + +### Build Status + +![C/C++ CI](https://github.com/SChernykh/p2pool/actions/workflows/c-cpp.yml/badge.svg) +![test-sync](https://github.com/SChernykh/p2pool/actions/workflows/test-sync.yml/badge.svg) + +![CodeQL](https://github.com/SChernykh/p2pool/actions/workflows/codeql-analysis.yml/badge.svg) +![msvc-analysis](https://github.com/SChernykh/p2pool/actions/workflows/msvc-analysis.yml/badge.svg) +![cppcheck](https://github.com/SChernykh/p2pool/actions/workflows/cppcheck.yml/badge.svg) + + Coverity Scan Build Status + +![clang-tidy](https://github.com/SChernykh/p2pool/actions/workflows/clang-tidy.yml/badge.svg) +# Contents +- [Pool mining vs Solo mining vs P2Pool mining](#pool-mining-vs-solo-mining-vs-p2pool-mining) +- [Features](#features) +- [How payouts work in P2Pool](#how-payouts-work-in-p2pool) +- [Default P2Pool parameters](#default-p2pool-parameters) +- [Monero version support](#monero-version-support) +- [How to mine on P2Pool](#how-to-mine-on-p2pool) + - [General Considerations](#general-considerations) + - [GUI for P2Pool](#gui-for-p2pool) + - [Merge mining](#merge-mining) + - [Mining on GNU/Linux](#gnulinux) + - [Mining on Windows](#windows) +- [Build instructions](#build-instructions) +- [Reproducible builds](#reproducible-builds) +- [Donations](#donations) + +## Pool mining vs Solo mining vs P2Pool mining + +Here's the comparison table of the different ways of mining. While pool mining is the easiest to set up, it centralizes the Monero network and the pool admin gets full power over your hashrate and your unpaid funds. Solo mining is 100% independent and the best for the network. P2Pool mining has all the advantages of solo mining, but also makes regular payouts possible. + +|Pool type|Payouts|Fee|Min. payout|Centralized?|Stability|Control|Setup +|-|-|-|-|-|-|-|-| +|Centralized pool|Regular|0-3%|0.001-0.01 XMR|Yes|Less stable due to pool server outages|The pool admin controls your mined funds and what you mine, and can execute attacks against the network|Only miner software is required +|Solo|Rare|0%|0.6 XMR or more|No|As stable as your Monero node|100% under your control|Monero node + optional miner +|**P2Pool**|Regular|0%|~0.00027 XMR|No|Very stable: node failover and multiple Monero nodes are supported|100% under your control|Monero node(s) + P2Pool node(s) + optional miner(s) + +## Features + +* Decentralized: no central server that can be shut down/blocked. P2Pool uses a separate blockchain to merge mine with Monero. Pool admin can't go rogue or be pressured to do an attack on the network because there is no pool admin! +* Permissionless: there is no one to decide who can mine on the pool and who can't. +* Trustless: there is no pool wallet, funds are never in custody. All pool blocks pay out to miners directly. +* PPLNS payout scheme +* **0% fee** +* **0 XMR payout fee** +* **~0.00027 XMR minimal payout** +* Fast block times, down to 1 second +* Uncle blocks are supported to avoid orphans - all your shares will be accounted for! +* Configurable PPLNS window size and block time +* Advanced mempool picking algorithm: it creates blocks with better rewards than what monerod solo mining does +* Password protected private pools +* Highly reliable configurations are supported (multiple P2Pool nodes mining to the same wallet, each P2Pool node can use multiple Monero nodes and switch on the fly if an issue is detected) +* Mining through [TOR](docs/TOR.MD) and [I2P](docs/I2P.MD) is fully supported + +## How payouts work in P2Pool + +First you need to find a pool share. This share will stay in [PPLNS](https://en.wikipedia.org/wiki/Mining_pool#Pay-per-last-N-shares) window for up to 2160 pool blocks (6 hours, auto adjustable to balance payout sizes and frequency). The moment P2Pool finds a Monero block and you have at least 1 pool share in PPLNS window, you'll get a payout! Monero block reward is split between all miner wallets in PPLNS window. Each miner gets a part of the block reward proportional to the total difficulty of his/her shares in PPLNS window. + +**NOTE** If P2Pool doesn't have enough hashrate to find Monero blocks faster than every 6 hours on average (~15 MH/s), **not all your pool shares will result in a payout**. Even if pool hashrate is higher, bad luck can sometimes result in a share going through PPLNS window without a payout. But in the long run it will be compensated by other shares receiving multiple payouts - your payouts will average out to what you'd get with regular pool mining. + +## Default P2Pool parameters + +* Block time: 10 seconds +* PPLNS window: up to 2160 blocks (6 hours, auto adjustable to balance payout sizes and frequency) +* Minimum payout = Monero block reward/2160, ~0.00027 XMR + +## Monero version support + +- The latest Monero network upgrade happened on August 13th, 2022 (block 2,688,888). +- The latest P2Pool network upgrade happened on October 12th, 2024 at 20:00 UTC. + +In order to continue mining on P2Pool, you must update both Monero and P2Pool software to the latest available versions as soon as they are released. + +|Monero protocol version|Required Monero software version|Required P2Pool version +|-|-|-| +|v15, v16 (active after August 13th, 2022)|v0.18.0.0 or newer, v0.18.4.6 or newer is recommended|v4.0 or newer + +## How to mine on P2Pool + +### General Considerations + +- In order to mine on P2Pool, a synced Monero node using monerod v0.18.0.0 or newer is required. If you don't currently have one, you can download the [official Monero binaries](https://www.getmonero.org/downloads/), start `monerod` on your PC and wait until it's fully synced. Advanced Monero node setup instructions are [here](https://sethforprivacy.com/guides/run-a-monero-node-advanced/). +- It is highly recommended that you create a separate restricted user account (in your OS) for mining. While P2Pool has been battle-tested for a long time now, any software may have unknown bugs/vulnerabilities. +- You can mine to a primary wallet address (the one starting with `4`). If you want to mine to a subaddress, you will need to provide both the main address (starting with 4) and the subaddress (starting with 8) using `--wallet` and `--subaddress` command line parameters. +- You can add the `--mini` or `--nano` parameter to your P2Pool command to connect to the respective sidechain. +> [!NOTE] +> You cannot use both `--mini` and `--nano` together
+> Using `--mini` will change the p2p port to 37888.
+> Using `--nano` will change the p2p port to 37890.
+- Check that ports 18080 (Monero p2p port) and 37889/37888/37890 (P2Pool default/mini/nano p2p port) are open in your firewall to ensure better connectivity. If you're mining from a computer behind NAT (like a router) you could consider forwarding the ports to your local machine. +- You can connect multiple miners to the same P2Pool node. The more the better! +- The steps below assume that you run everything on the same machine. If it's not the case, change `127.0.0.1` to appropriate IP addresses for your setup. +- It is highly recommended to create a new mainnet wallet for P2Pool mining because **wallet addresses are public on P2Pool**. + +**Wallet software compatible with P2Pool payouts** +- [Official Monero CLI and GUI v0.18.0.0 and newer](https://www.getmonero.org/downloads/) +- [Monerujo v3.0.2 "Fluorine Fermi" and newer](https://www.monerujo.io/) +- [Cake Wallet v4.4.5 and newer](https://cakewallet.com/) +- [Monero.com by Cake Wallet](https://monero.com/) +- [Feather Wallet v2.1.0 and newer](https://featherwallet.org/) + +### GUI for P2Pool + +- [Gupax](https://github.com/gupax-io/gupax) project aims to provide an easy to use cross-platform GUI to configure and run P2Pool & [XMRig](https://github.com/xmrig/xmrig). + +### Merge mining + +Merge mining is available in P2Pool since the fork that happened on October 12th, 2024. Version 4.0 or newer is required to use it. + +Blockchains that will support [Merge mining RPC API](https://github.com/SChernykh/p2pool/blob/master/docs/MERGE_MINING.MD#proposed-rpc-api): +- [Townforge](https://townforge.net/) supports merge mining (but Townforge is still in testnet phase) +- [DarkFi](https://dark.fi/) supports it in their [testnet](https://dark.fi/book/testnet/merge-mining.html) +``` +p2pool.exe --wallet YOUR_MONERO_WALLET_ADDRESS --merge-mine IP:port YOUR_WALLET_ADDRESS_ON_ANOTHER_BLOCKCHAIN +``` + +Blockchains that support merge mining already: [Tari](https://www.tari.com/) + +Tari uses their own gRPC API and requires a different command line: +``` +./p2pool --wallet YOUR_MONERO_WALLET_ADDRESS --merge-mine tari://TARI_NODE_IP:18102 TARI_WALLET_ADDRESS +``` +and on the Tari side +``` +./minotari_node --grpc-enabled --mining-enabled +``` +TARI_NODE_IP is 127.0.0.1 if you run both on the same machine (recommended). + +Merge mining is available on Tari's mainnet: +- Download [Tari suite](https://github.com/tari-project/tari/releases/latest) for your OS +- Run Minotari node and wait until it synchronizes +- Run Minotari console wallet to create a Tari wallet +- Copy the "Tari Address one-sided" from the "Receive" tab of the wallet +- Paste it into the P2Pool command line above +- Everything is ready now to start merge mining Monero and Tari! + +Note that Tari will be mined in solo mode (only full Tari blocks can be mined for now). This doesn't affect P2Pool payouts - they will stay the same. + +### Mining on GNU/Linux + +1. Download the latest P2Pool binaries [here](https://github.com/SChernykh/p2pool/releases/latest). + - Alternatively, grab the latest source code for P2Pool and [build it](#build-instructions). +2. Download the latest XMRig (linux-static-x64) binary [here](https://github.com/xmrig/xmrig/releases/latest). +3. Prepare enough huge pages (each of monerod/P2Pool/XMRig needs them): +``` +sudo sysctl vm.nr_hugepages=3072 +``` +4. Check that ports 18080 (Monero p2p port) and 37889/37888/37890 (P2Pool default/mini/nano p2p port) are open in your local firewall to ensure better connectivity. +5. Start `monerod` with the following command/options: +``` +./monerod --zmq-pub tcp://127.0.0.1:18083 --out-peers 32 --in-peers 64 --add-priority-node=p2pmd.xmrvsbeast.com:18080 --add-priority-node=nodes.hashvault.pro:18080 --enforce-dns-checkpointing --enable-dns-blocklist +``` +**Note:** +The `--zmq-pub` option is required for P2Pool to work properly. + +`--out-peers 32 --in-peers 64` is needed to (1) have many connections to other nodes and (2) limit incoming connection count because it can grow uncontrollably and cause problems when it goes above 1000 (open files limit in Linux). If your network connection's **upload** bandwidth is less than **10 Mbit**, use `--out-peers 8 --in-peers 16` instead. + +`--add-priority-node=p2pmd.xmrvsbeast.com:18080 --add-priority-node=nodes.hashvault.pro:18080` is needed to have guaranteed good working nodes in your connected peers. + +`--enforce-dns-checkpointing` is needed to combat the selfish mining attempts by malicious actors + +`--enable-dns-blocklist` is needed to ban known bad nodes + + +6. Start P2Pool with the following command/options: +``` +./p2pool --host 127.0.0.1 --wallet YOUR_WALLET_ADDRESS --mini +``` +7. Wait until the initial P2Pool sync is finished (shouldn't take more than 5-10 minutes). +8. Start XMRig with the following command/options: + ``` + ./xmrig -o 127.0.0.1:3333 + ``` + - Note that you don't need to specify your wallet address for XMRig. **Wallet addresses set in XMRig config will be ignored!** + - To set a custom fixed difficulty for your miner (for example, 10000), instead start XMRig with the following options: + ``` + ./xmrig -u x+10000 -o 127.0.0.1:3333 + ``` +9. XMRig should connect and start mining! + +**Additional Information:** +- For a more in-depth beginner-friendly walk-through with the option of using Docker, please see SethForPrivacy's guide at: https://sethforprivacy.com/guides/run-a-p2pool-node/ +- You can check the p2pool.log for any warnings or errors using the following command: +``` +grep -E 'WARNING|ERROR' p2pool.log +``` +- P2Pool has verbose logging by default, you can reduce it by using "loglevel N" command where N is between 0 and 6. Default loglevel is 3. + - You can use `logrotate` with a config like this to control logfile growth: + ``` + +{ +rotate 7 +daily +missingok +delaycompress +nocreate +} + ``` + +### Mining on Windows + +**Note:** *Windows SmartScreen may block incoming connections by files that are "Downloaded from the Internet". You can allow 'p2pool.exe' and 'monerod.exe' by double-clicking them, clicking "More Info", then clicking "Run Anyway" and then closing them immediately so you can run them from the command line. Advanced users can use the PowerShell cmdlet `Unblock-File` to remove this flag.* + +1. Download the latest P2Pool binaries [here](https://github.com/SChernykh/p2pool/releases/latest). + - Alternatively, grab the latest source code for P2Pool and [build it](#build-instructions). +2. Download the latest XMRig binary [here](https://github.com/xmrig/xmrig/releases/latest). +3. Expand the P2Pool binaries into an appropriate location (`%USERPROFILE%/bin` or `C:/bin/` are good options) +4. Expand XMRig binary into an appropriate location (the same folder as P2Pool is fine). +5. Prepare huge pages to work properly (each of monerod/P2Pool/XMRig needs them): + - On Windows 10 or above, run XMRig at least once as Administrator (right-click, "Run As Administrator") + - On earlier versions of Windows, you'll need to run XMRig as Administrator at least once per login. +6. Create "Monero" folder inside extracted P2Pool folder and copy Monero binaries there. +7. Open a command prompt and navigate to the folder where you extracted P2Pool. + +**Note:** *When running the below commands, Windows Firewall may prompt to allow connections, click "Allow" if prompted.* + +8. Start `monerod` with the following command/options: +``` +.\Monero\monerod.exe --zmq-pub tcp://127.0.0.1:18083 --out-peers 32 --in-peers 64 --add-priority-node=p2pmd.xmrvsbeast.com:18080 --add-priority-node=nodes.hashvault.pro:18080 --enforce-dns-checkpointing --enable-dns-blocklist +``` +**Note:** +The `--zmq-pub` option is required for P2Pool to work properly. + +`--out-peers 32 --in-peers 64` is needed to (1) have many connections to other nodes and (2) limit incoming connection count because it can grow uncontrollably and cause problems when it goes above 1000 (open files limit in Linux). If your network connection's **upload** bandwidth is less than **10 Mbit**, use `--out-peers 8 --in-peers 16` instead. + +`--add-priority-node=p2pmd.xmrvsbeast.com:18080 --add-priority-node=nodes.hashvault.pro:18080` is needed to have guaranteed good working nodes in your connected peers. + +`--enforce-dns-checkpointing` is needed to combat the selfish mining attempts by malicious actors + +`--enable-dns-blocklist` is needed to ban known bad nodes + +9. Start P2Pool with the following command/options: +``` +.\p2pool.exe --host 127.0.0.1 --wallet YOUR_WALLET_ADDRESS --mini +``` +10. Wait until the initial P2Pool sync is finished (shouldn't take more than 5-10 minutes). +11. Start XMRig with the following command/options: +``` +.\xmrig.exe -o 127.0.0.1:3333 +``` + - Note that you don't need to specify your wallet address for XMRig. **Wallet addresses set in XMRig config will be ignored!** + - To set a custom fixed difficulty for your miner (for example, 10000), instead start XMRig with the following options: + ``` + xmrig.exe -u x+10000 -o 127.0.0.1:3333 + ``` +12. XMRig should connect and start mining! +13. *(Optional but highly recommended)* You can create a Quickstart by creating a batch (.bat) file with the following contents and placing it in your P2Pool directory along with `xmrig.exe`. +``` +@ECHO OFF +start cmd /k %~dp0\Monero\monerod.exe --zmq-pub tcp://127.0.0.1:18083 --out-peers 32 --in-peers 64 --add-priority-node=p2pmd.xmrvsbeast.com:18080 --add-priority-node=nodes.hashvault.pro:18080 --enforce-dns-checkpointing --enable-dns-blocklist +ECHO Wait until the Monero daemon shows fully synced before continuing. This can take some time. Type 'status' in other window to check progress. +PAUSE +start cmd /k %~dp0\p2pool.exe --wallet YOUR_WALLET_ADDRESS --mini +ECHO Wait until the daemon shows fully synced before continuing. This can take some time. +PAUSE +%~dp0\xmrig.exe -o 127.0.0.1 +``` + +## Build instructions +Only 64-bit builds are supported. In particular, ARMv7 and older CPUs are not supported. The reason is that RandomX hashing algorithm is too slow in 32-bit mode, and P2Pool needs to check new blocks very fast to keep up with other nodes. + +### Prerequisites +- cmake >= 3.10 +- C++ compiler with C++17 support. GCC-8, Clang-13 and MSVC-2019 have been tested and confirmed to work. Older compilers may fail to build P2Pool. + +### Ubuntu 20.04 + +Run the following commands to install the necessary prerequisites, clone this repo, and build P2Pool locally on Ubuntu 20.04: +``` +sudo apt update && sudo apt install git build-essential cmake libuv1-dev libzmq3-dev libsodium-dev libpgm-dev libnorm-dev libgss-dev libcurl4-openssl-dev libidn2-0-dev +git clone --recursive https://github.com/SChernykh/p2pool +cd p2pool +mkdir build && cd build +cmake .. +make -j$(nproc) +``` + +### [Arch Linux](https://archlinux.org/packages/extra/x86_64/p2pool/) + +``` +pacman -S p2pool +``` + +### [Nix/NixOS](https://nixos.org) + +This is a flake only project. So you have to use [nixUnstable with nix flakes](https://nixos.wiki/wiki/Flakes) to build or install P2Pool. +The commands below use the new flake-specific reference-format, so be sure to also set `ca-references` in `--experimental-features`. + +Because this project has submodules which are not fixed in _nixUnstable_ yet you have to use the `nix/master` branch: +``` +nix shell github:nixos/nix/master +``` + +Run the binary: +``` +nix run git+https://github.com/SChernykh/p2pool?ref=master&submodules=1 +``` + +Run the binary with arguments: +``` +nix run git+https://github.com/SChernykh/p2pool?ref=master&submodules=1 -- --help +``` + +### Windows + +P2Pool binary (Visual Studio Community 2019 build): +*NOTE: You need to have the "Desktop Development with C++" module installed.* +``` +git clone --recursive https://github.com/SChernykh/p2pool +cd p2pool +mkdir build +cd build +cmake .. -G "Visual Studio 16 2019" +``` +then open generated build\p2pool.sln in Visual Studio and build it there + +Alternatively, you can select "Clone a repository" within the GUI, then select "Build" from the menu. + +### macOS + +Run the following commands to install the necessary prerequisites, clone this repo, and build P2Pool locally on your Mac: +``` +brew update && brew install git cmake libuv zmq libpgm curl +git clone --recursive https://github.com/SChernykh/p2pool +cd p2pool +mkdir build && cd build +cmake .. +make -j$(sysctl -n hw.logicalcpu) +``` + +### FreeBSD + +Run the following commands to install the necessary prerequisites, clone this repo, and build P2Pool locally on FreeBSD: +``` +pkg install git cmake libuv libzmq4 curl +git clone --recursive https://github.com/SChernykh/p2pool +cd p2pool +mkdir build && cd build +cmake .. +make +``` + +### Android (Termux) + +Run the following commands to install the necessary prerequisites, clone this repo, and build P2Pool locally in Termux: +``` +pkg install git build-essential cmake libuv libzmq libcurl +git clone --recursive https://github.com/SChernykh/p2pool +cd p2pool +mkdir build && cd build +cmake .. +make -j$(nproc) +``` + +## Reproducible builds + +Starting from v4.9, P2Pool uses [reproducible builds](https://en.wikipedia.org/wiki/Reproducible_builds) to create the release binaries. This allows verification that no vulnerabilities or backdoors have been introduced during the compilation process, and that the compiled binaries correspond to the source code. + +It removes the need for trust that the author or maintainer of the code is not malicious/compromised, and that the build server is not compromised. + +Anyone can run the same build script on the same source code, and get the same release binaries in the end, confirming their authenticity. + +Prerequisites: Ubuntu with Docker and Git installed. + +Example of building v4.15 release binaries: + +``` +git clone --branch v4.15 --recursive https://github.com/SChernykh/p2pool +p2pool/scripts/release/build_all.sh v4.15 +``` +The binaries will be created in `p2pool/scripts/release` folder. The first time you run it, it will take up to several hours to first build the Docker image with all the necessary tools in it. Wait until all builds are finished and then run +``` +cd p2pool/scripts/release +./gen_sums.sh +``` +to generate the hash sums and compare them with the official release's hash sums. + +Reproducible builds of (almost) all commits are available [here](https://p2pool.io/builds/). These builds use the release build scripts, so they can act as a "latest release" for all means and purposes, but they might be less stable than the official releases. + +## Donations + +If you'd like to support further development of Monero P2Pool, you're welcome to send any amount of XMR to the following address: + +``` +44MnN1f3Eto8DZYUWuE5XZNUtE3vcRzt2j6PzqWpPau34e6Cf4fAxt6X2MBmrm6F9YMEiMNjN6W4Shn4pLcfNAja621jwyg +``` + +Starting from v4.6, P2Pool also has an ability to merge mine donations for the author. + +Note that this will not affect your hashrate or payouts in any way. P2Pool will always (100% of the time) keep mining to your configured Monero wallet address, but it might also use the available merge mining capacity to donate to the author. + +If you merge mine yourself, your settings will take priority. + +The merge mining donation runs without a donation server - there is no "phoning home" to a server, everything is done through the P2Pool's network in a decentralized way. + +To opt out of this, build P2Pool with `-DWITH_MERGE_MINING_DONATION=OFF` in the cmake command line. Due to the architecture of the decentralized P2Pool network, your node will still relay donation messages to other nodes even if you opted out (but it will not process them). diff --git a/docs/research/xvb-delivery-study/data/sources/p2pool-io-api-index.html b/docs/research/xvb-delivery-study/data/sources/p2pool-io-api-index.html new file mode 100644 index 00000000..bc42d132 --- /dev/null +++ b/docs/research/xvb-delivery-study/data/sources/p2pool-io-api-index.html @@ -0,0 +1,12 @@ + +Index of /api/ + +

Index of /api/


../
+network/                                           11-Aug-2026 05:14                   -
+pool/                                              11-Aug-2026 05:17                   -
+config                                             25-Aug-2022 07:23                 118
+latest_release                                     11-Aug-2026 04:37                  91
+stats_mod                                          11-Aug-2026 05:17                 276
+tail.json                                          11-Aug-2026 05:17                  93
+

+ diff --git a/docs/research/xvb-delivery-study/data/sources/p2pool-io-main-and-faq.html b/docs/research/xvb-delivery-study/data/sources/p2pool-io-main-and-faq.html new file mode 100644 index 00000000..7e67aa64 --- /dev/null +++ b/docs/research/xvb-delivery-study/data/sources/p2pool-io-main-and-faq.html @@ -0,0 +1,318 @@ + + + + +P2Pool - Decentralized Monero mining pool + + + + + + +
P2Pool
Decentralized Monero mining pool
+
Latest release: P2Pool
+ +
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + +

+
+Pool API | Source | Onion URL
+Donate to support the project:
44MnN1f3Eto8DZYUWuE5XZNUtE3vcRzt2j6PzqWpPau34e6Cf4fAxt6X2MBmrm6F9YMEiMNjN6W4Shn4pLcfNAja621jwyg
+  +
+ + diff --git a/docs/research/xvb-delivery-study/data/sources/p2pool-observer-go-README.md b/docs/research/xvb-delivery-study/data/sources/p2pool-observer-go-README.md new file mode 100644 index 00000000..20eb95dd --- /dev/null +++ b/docs/research/xvb-delivery-study/data/sources/p2pool-observer-go-README.md @@ -0,0 +1,161 @@ +# Go Consensus + +This repository contains a consensus-compatible reimplementation of a P2Pool internals for [Monero P2Pool](https://github.com/SChernykh/p2pool) decentralized pool. + +As part of this work, several libraries to work with Monero and its cryptography are also maintained. + +You may be looking for [P2Pool Observer](https://git.gammaspectra.live/P2Pool/observer) instead. + +## Reporting issues + +You can give feedback or report / discuss issues or provide changes on: +* [The issue tracker on git.gammaspectra.live/P2Pool/consensus](https://git.gammaspectra.live/P2Pool/consensus/issues?state=open) +* Via IRC on [#p2pool-observer@libera.chat](ircs://irc.libera.chat/#p2pool-observer) [[WebIRC](https://web.libera.chat/?nick=Guest?#p2pool-observer)] or general Monero channels +* Via Matrix on [#p2pool-observer:monero.social](https://matrix.to/#/#p2pool-observer:monero.social) or general Monero channels, or [@DataHoarder:monero.social](https://matrix.to/#/@datahoarder:monero.social) + +### Security issues + +Reporting potential security issues must be done privately. If you are unsure, feel free to reach out. + +This can be done on: +* Via Matrix private message to [@DataHoarder:monero.social](https://matrix.to/#/@datahoarder:monero.social) +* Email to `weebdatahoarder [at] protonmail.com`. + +> **Note:** If sending mail, it's recommended to send an advisory private message to Matrix. + +You must disclose usage of automated tools (fuzzers, static checkers) or AI-driven tools if used on your findings. + +Reports will be reviewed and answered to. There are no bug bounties at this time, but may provide one personally to extraordinary issues. + +## Libraries in this package + +| Path | Status | Documentation | Description | +|:----------------------------------------------|:-----------------------------|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| merge_mining | 🛠️ In development | [![Go Reference](https://pkg.go.dev/badge/git.gammaspectra.live/P2Pool/consensus/v5.svg)](https://pkg.go.dev/git.gammaspectra.live/P2Pool/consensus/v5/merge_mining) | Implements the [Merge Mining format and API](https://github.com/SChernykh/p2pool/blob/master/docs/MERGE_MINING.MD). | +| monero/address | ✅ Supported | [![Go Reference](https://pkg.go.dev/badge/git.gammaspectra.live/P2Pool/consensus/v5.svg)](https://pkg.go.dev/git.gammaspectra.live/P2Pool/consensus/v5/monero/address) | Implements Monero Cryptonote address decoding/encoding, and generation of Transaction Proofs | +| monero/address/carrot | 🛠️ In development | [![Go Reference](https://pkg.go.dev/badge/git.gammaspectra.live/P2Pool/consensus/v5.svg)](https://pkg.go.dev/git.gammaspectra.live/P2Pool/consensus/v5/monero/address/carrot) | Implements [Carrot](https://github.com/jeffro256/carrot/blob/master/carrot.md) addressing protocol. | +| monero/address/cryptonote | 🛠️ In development | [![Go Reference](https://pkg.go.dev/badge/git.gammaspectra.live/P2Pool/consensus/v5.svg)](https://pkg.go.dev/git.gammaspectra.live/P2Pool/consensus/v5/monero/address/cryptonote) | Implements legacy [CryptoNote subaddress protocol](https://www.getmonero.org/resources/research-lab/pubs/MRL-0006.pdf). | +| monero/address/wallet | Semi-Internal | [![Go Reference](https://pkg.go.dev/badge/git.gammaspectra.live/P2Pool/consensus/v5.svg)](https://pkg.go.dev/git.gammaspectra.live/P2Pool/consensus/v5/monero/address/wallet) | Implements generic View Wallet and Spend Wallet for Legacy Cryptonote and Carrot addressing protocols.
Includes Tx match helpers for wallets, tx keys or tx proofs. | +| monero/block | ✅ Supported | [![Go Reference](https://pkg.go.dev/badge/git.gammaspectra.live/P2Pool/consensus/v5.svg)](https://pkg.go.dev/git.gammaspectra.live/P2Pool/consensus/v5/monero/block) | Supports decoding/encoding Monero Blocks with V2 Coinbase Transactions, calculating RandomX proof of work, calculating rewards. | +| monero/client | ✅ Supported | [![Go Reference](https://pkg.go.dev/badge/git.gammaspectra.live/P2Pool/consensus/v5.svg)](https://pkg.go.dev/git.gammaspectra.live/P2Pool/consensus/v5/monero/client) | High level Monero Daemon RPC client wrapper. | +| monero/client/rpc | ✅ Supported | [![Go Reference](https://pkg.go.dev/badge/git.gammaspectra.live/P2Pool/consensus/v5.svg)](https://pkg.go.dev/git.gammaspectra.live/P2Pool/consensus/v5/monero/client/rpc) | Monero Daemon RPC client. | +| monero/client/zmq | ✅ Supported | [![Go Reference](https://pkg.go.dev/badge/git.gammaspectra.live/P2Pool/consensus/v5.svg)](https://pkg.go.dev/git.gammaspectra.live/P2Pool/consensus/v5/monero/client/zmq) | Monero Daemon ZMQ-Pub client. | +| monero/client/levin | ❌ Unsupported | [![Go Reference](https://pkg.go.dev/badge/git.gammaspectra.live/P2Pool/consensus/v5.svg)](https://pkg.go.dev/git.gammaspectra.live/P2Pool/consensus/v5/monero/client/levin) | Monero [Portable Storage](https://github.com/monero-project/monero/blob/master/docs/PORTABLE_STORAGE.md) and [Levin](https://github.com/monero-project/monero/blob/master/docs/LEVIN_PROTOCOL.md) partial implementation. | +| monero/crypto | ✅ Supported | [![Go Reference](https://pkg.go.dev/badge/git.gammaspectra.live/P2Pool/consensus/v5.svg)](https://pkg.go.dev/git.gammaspectra.live/P2Pool/consensus/v5/monero/crypto) | General Monero cryptography data types, generators and hashers, passing all upstream tests.
Keccak256, Blake2b, merkle trees, signatures, hash to point and key images. | +| monero/crypto/curve | 🛠️ In development | [![Go Reference](https://pkg.go.dev/badge/git.gammaspectra.live/P2Pool/consensus/v5.svg)](https://pkg.go.dev/git.gammaspectra.live/P2Pool/consensus/v5/monero/crypto/curve) | Generic Field, Scalar and Point definitions and operations to work on Ed25519/Helios/Selene and others that define common interfaces. | +| monero/crypto/curve25519 | ✅ Supported | [![Go Reference](https://pkg.go.dev/badge/git.gammaspectra.live/P2Pool/consensus/v5.svg)](https://pkg.go.dev/git.gammaspectra.live/P2Pool/consensus/v5/monero/crypto/curve25519) | Specialized Ed25519/X25519 implementation for Monero, with performant constant and variable time implementations. | +| monero/crypto/ringct | ✅ Supported | [![Go Reference](https://pkg.go.dev/badge/git.gammaspectra.live/P2Pool/consensus/v5.svg)](https://pkg.go.dev/git.gammaspectra.live/P2Pool/consensus/v5/monero/crypto/ringct) | RingCT general data types, Pedersen commitments and original ring signatures. | +| monero/crypto/ringct/borromean | ✅ Supported port | [![Go Reference](https://pkg.go.dev/badge/git.gammaspectra.live/P2Pool/consensus/v5.svg)](https://pkg.go.dev/git.gammaspectra.live/P2Pool/consensus/v5/monero/crypto/ringct/borromean) | Borromean range proofs. Only verification supported. | +| monero/crypto/ringct/bulletproofs | ✅ Supported port | [![Go Reference](https://pkg.go.dev/badge/git.gammaspectra.live/P2Pool/consensus/v5.svg)](https://pkg.go.dev/git.gammaspectra.live/P2Pool/consensus/v5/monero/crypto/ringct/bulletproofs) | [Bulletproofs](https://eprint.iacr.org/2017/1066.pdf) and [Bulletproofs+](https://eprint.iacr.org/2020/735) range proofs. | +| monero/crypto/ringct/clsag | ✅ Supported port | [![Go Reference](https://pkg.go.dev/badge/git.gammaspectra.live/P2Pool/consensus/v5.svg)](https://pkg.go.dev/git.gammaspectra.live/P2Pool/consensus/v5/monero/crypto/ringct/clsag) | Implements [CLSAG RingCT](https://eprint.iacr.org/2019/654) ring signature scheme. | +| monero/crypto/ringct/mlsag | ✅ Supported port | [![Go Reference](https://pkg.go.dev/badge/git.gammaspectra.live/P2Pool/consensus/v5.svg)](https://pkg.go.dev/git.gammaspectra.live/P2Pool/consensus/v5/monero/crypto/ringct/mlsag) | Implements [MLSAG RingCT](https://www.getmonero.org/resources/research-lab/pubs/MRL-0005.pdf) ring signature scheme. | +| monero/crypto/ringct/generalized-bulletproofs | ⏳ Planned | [![Go Reference](https://pkg.go.dev/badge/git.gammaspectra.live/P2Pool/consensus/v5.svg)](https://pkg.go.dev/git.gammaspectra.live/P2Pool/consensus/v5/monero/crypto/ringct/generalized-bulletproofs) | Implements [Generalized Bulletproofs](https://github.com/simonkamp/curve-trees/blob/main/bulletproofs/generalized-bulletproofs.md). | +| monero/crypto/ringct/fcmp-plus-plus | 🛠️ In development | [![Go Reference](https://pkg.go.dev/badge/git.gammaspectra.live/P2Pool/consensus/v5.svg)](https://pkg.go.dev/git.gammaspectra.live/P2Pool/consensus/v5/monero/crypto/ringct/fcmp-plus-plus) | Implements [FCMP++](https://github.com/kayabaNerve/fcmp-plus-plus-paper/blob/develop/fcmp%2B%2B.pdf) proofs. | +| monero/crypto/multiexp | 🛠️ In development | [![Go Reference](https://pkg.go.dev/badge/git.gammaspectra.live/P2Pool/consensus/v5.svg)](https://pkg.go.dev/git.gammaspectra.live/P2Pool/consensus/v5/monero/crypto/multiexp) | Wrapper utilities for fast multiexponentiation in constant or variable time. | +| monero/proofs | ✅ Supported | [![Go Reference](https://pkg.go.dev/badge/git.gammaspectra.live/P2Pool/consensus/v5.svg)](https://pkg.go.dev/git.gammaspectra.live/P2Pool/consensus/v5/monero/proofs) | Implements Monero proofs, for generating and verifying Transaction proofs, Spend proofs. | +| monero/randomx | ✅ Supported | [![Go Reference](https://pkg.go.dev/badge/git.gammaspectra.live/P2Pool/consensus/v5.svg)](https://pkg.go.dev/git.gammaspectra.live/P2Pool/consensus/v5/monero/randomx) | Implements [RandomX](https://github.com/tevador/RandomX/blob/master/doc/specs.md) proof of work, with pure Go implementation and optional C library. | +| monero/cryptonight | ✅ Supported | [![Go Reference](https://pkg.go.dev/badge/git.gammaspectra.live/P2Pool/consensus/v5.svg)](https://pkg.go.dev/git.gammaspectra.live/P2Pool/consensus/v5/monero/cryptonight) | Implements [CryptoNight](https://docs.getmonero.org/proof-of-work/cryptonight/) proof of work, with variants v0, [v1](https://github.com/monero-project/monero/pull/3253), [v2](https://github.com/monero-project/monero/pull/4218), [R](https://github.com/monero-project/monero/pull/5126) supported, with pure Go.
Aimed for verification (not mining) purposes. | +| monero/transaction | ✅ Supported | [![Go Reference](https://pkg.go.dev/badge/git.gammaspectra.live/P2Pool/consensus/v5.svg)](https://pkg.go.dev/git.gammaspectra.live/P2Pool/consensus/v5/monero/transaction) | Allows decoding/encoding and verifying transactions from binary, along its proofs on V1 and V2 transactions for all supported ring signatures and range proofs. Supports pruning. | +| p2pool/mempool | ✅ Supported | [![Go Reference](https://pkg.go.dev/badge/git.gammaspectra.live/P2Pool/consensus/v5.svg)](https://pkg.go.dev/git.gammaspectra.live/P2Pool/consensus/v5/p2pool/mempool) | Mempool selection algorithm for P2Pool. | +| p2pool/p2p | ✅ Supported | [![Go Reference](https://pkg.go.dev/badge/git.gammaspectra.live/P2Pool/consensus/v5.svg)](https://pkg.go.dev/git.gammaspectra.live/P2Pool/consensus/v5/p2pool/p2p) | P2Pool Consensus P2P implementation. For go-p2pool. | +| p2pool/sidechain | ✅ Supported | [![Go Reference](https://pkg.go.dev/badge/git.gammaspectra.live/P2Pool/consensus/v5.svg)](https://pkg.go.dev/git.gammaspectra.live/P2Pool/consensus/v5/p2pool/sidechain) | P2Pool Consensus SideChain, compatible across all P2Pool versions and hard forks.
Passes all upstream tests. For go-p2pool and Observer. | +| p2pool/stratum | ✅ Supported | [![Go Reference](https://pkg.go.dev/badge/git.gammaspectra.live/P2Pool/consensus/v5.svg)](https://pkg.go.dev/git.gammaspectra.live/P2Pool/consensus/v5/p2pool/stratum) | P2Pool Stratum implementation, supporting multiple addresses. For go-p2pool. | +| types | ✅ Supported | [![Go Reference](https://pkg.go.dev/badge/git.gammaspectra.live/P2Pool/consensus/v5.svg)](https://pkg.go.dev/git.gammaspectra.live/P2Pool/consensus/v5/types) | General data types to work with 256-bit hashes or other fixed bytes, proof of work checking and 128-bit network difficulty. | +| utils | Semi-Internal | [![Go Reference](https://pkg.go.dev/badge/git.gammaspectra.live/P2Pool/consensus/v5.svg)](https://pkg.go.dev/git.gammaspectra.live/P2Pool/consensus/v5/utils) | Utilities to decode or work with specialized Monero types. | + +### Support Status Description +* **✅ Supported**: Fully supported, maintained, and regularly/automatically tested. They are built for external consumption. Will follow the semver of the main package. +* **✅ Supported port**: Fully supported, maintained, and regularly/automatically tested. They are built for external consumption. Will follow the semver of the main package. These were ported from [monero-oxide](https://github.com/monero-oxide/monero-oxide), unless specified. +* **Semi-Internal**: Supported, when used along with other parts of this package. Not supported when used independently. +* **Internal**: Not supported when used externally. Supported within the package. +* **🛠️ In Development**: Currently in development or not finished. It is not guaranteed to not break, even across minor patches. Use at your own discretion. +* **⏳ Planned**: Planned to be developed. +* **❌ Unsupported**: Not supported. Package may be deprecated or not currently developed. + +> **Note:** Project is automatically tested under Linux for _amd64_ and _arm64_ architectures, with normal, _purego_, and _cgo_ flavors. +> Other platforms are tested manually. 32-bit platforms should work but are not supported, but may receive fixes as needed. + +## Other maintained external libraries + +| Package | Status | Description | +|:--------------------------------------------------------------------|:----------------------------:|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| [go-p2pool](https://git.gammaspectra.live/P2Pool/go-p2pool) | ✅ Supported | Alternative P2Pool daemon implementation in Go.
Supports full consensus and mining, with similar arguments. Able to run P2Pool seed nodes. | +| [go-randomx](https://git.gammaspectra.live/P2Pool/go-randomx) | ✅ Supported | Implements pure Go [RandomX](https://github.com/tevador/RandomX/blob/master/doc/specs.md), with JIT for amd64 and native support for more architectures, and purego implementation for WASM.
Achieves ~90% speed of equivalent full mode under `amd64`, aimed for verification (not mining) purposes. | +| [edwards25519](https://git.gammaspectra.live/P2Pool/edwards25519) | ✅ Supported | Implements the edwards25519 elliptic curve, with extensions to support Monero operations efficiently.
Builds on top of [FiloSottile/edwards25519](https://github.com/FiloSottile/edwards25519) as a fork. | +| [helioselene](https://git.gammaspectra.live/P2Pool/helioselene) | 🛠️ In Development | Implements [Helio-Selene](https://gist.github.com/tevador/4524c2092178df08996487d4e272b096), Elliptic curve tower-cycle for Curve25519.
Efficient _purego_ implementation using formally proven field element operations. | +| [monero-base58](https://git.gammaspectra.live/P2Pool/monero-base58) | ✅ Supported | Efficient Monero's Base58 encoder/decoder. | + + +## SemVer and usage in other projects + +This package follows [SemVer v2](https://semver.org/spec/v2.0.0.html) from _v5.x.x_ onwards, with the following additions or exceptions: + +* MINOR version of 0 indicates an in-development version. In this case, PATCH indicates API changes, additions, or breakage. Once MINOR version is increased to one or above, normal SemVer resumes. +* Untagged or development branches are not covered by SemVer versions. +* Security releases MAY break backwards compatibility. +* **❌ Unsupported**, **🛠️ In Development**, **Semi-Internal** or **Internal** subpackages are not covered by the SemVer version. + +## Donations +This project is provided for everyone to use, for free. Any support is appreciated. + +Donate to support this project, its development, and running the Observer Instances on +[4AeEwC2Uik2Zv4uooAUWjQb2ZvcLDBmLXN4rzSn3wjBoY8EKfNkSUqeg5PxcnWTwB1b2V39PDwU9gaNE5SnxSQPYQyoQtr7](monero:4AeEwC2Uik2Zv4uooAUWjQb2ZvcLDBmLXN4rzSn3wjBoY8EKfNkSUqeg5PxcnWTwB1b2V39PDwU9gaNE5SnxSQPYQyoQtr7?tx_description=P2Pool.Observer) + +You can also use the OpenAlias `p2pool.observer` directly on the GUI. + +## Development notes + +### Running tests + +```shell +cd path/to/project/consensus +MONEROD_RPC_URL=http://127.0.0.1:18081 +MONEROD_ZMQ_URL=tcp://127.0.0.1:18083 +go test -v ./... +``` + +#### Initialize test data + +Several test data is provided outside the repository tree, but is verified with saved hashes. +Monero crypto tests and P2Pool crypto and sidechain tests will be downloaded. Requires `curl` and `sha256sum` installed. + +> **Note:** This only needs to be run once, or when new test data is added. + +```shell +cd path/to/project/consensus +./testdata/setup.sh +``` + +### Running linters + +Install [golangci-lint](https://golangci-lint.run/docs/welcome/install/#local-installation) + +The config is available in-tree at [.golangci.yml](.golangci.yml) + +```shell +cd path/to/project/consensus +golangci-lint run ./... +go vet ./... +``` + +### Requirements + +Go 1.26 + +By default, CGO is not necessary, so `CGO_ENABLED=0` is recommended. You may use the `purego` build flag to disable any assembly or architecture specific optimizations. + +This library supports both [go-RandomX library](https://git.gammaspectra.live/P2Pool/go-randomx) and the [C++ RandomX reference counterpart](https://github.com/tevador/RandomX). + +By default, the Golang library will be used, without special requirements. + +You can enable the C++ library if by using CGO and the Go compile tag `enable_randomx_library` and use `CGO_ENABLED=1`. +You must have the library installed or done via the command below: +```bash +$ git clone --depth 1 --branch v2.0.1 https://github.com/tevador/RandomX.git /tmp/RandomX && cd /tmp/RandomX && \ + mkdir build && cd build && \ + cmake .. -DCMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX:PATH=/usr && \ + make -j$(nproc) && \ + sudo make install && \ + cd ../ && \ + rm -rf /tmp/RandomX +``` \ No newline at end of file diff --git a/docs/research/xvb-delivery-study/data/sources/p2pool-side_chain.cpp b/docs/research/xvb-delivery-study/data/sources/p2pool-side_chain.cpp new file mode 100644 index 00000000..93136551 --- /dev/null +++ b/docs/research/xvb-delivery-study/data/sources/p2pool-side_chain.cpp @@ -0,0 +1,2791 @@ +/* + * This file is part of the Monero P2Pool + * Copyright (c) 2021-2026 SChernykh + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, version 3. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "common.h" +#include "p2pool.h" +#include "side_chain.h" +#include "pool_block.h" +#include "wallet.h" +#include "block_template.h" +#ifdef WITH_RANDOMX +#include "randomx.h" +#include "dataset.hpp" +#include "configuration.h" +#include "intrin_portable.h" +#endif +#include "keccak.h" +#include "p2p_server.h" +#include "stratum_server.h" +#include "params.h" +#include "json_parsers.h" +#include "crypto.h" +#include "hardforks/hardforks.h" +#include "pow_hash.h" + +#if !defined(_MSC_VER) || !defined(__cppcheck__) +#include +#include +#endif + +#include +#include +#include + +LOG_CATEGORY(SideChain) + +static constexpr uint64_t MIN_DIFFICULTY = 100000; +static constexpr size_t UNCLE_BLOCK_DEPTH = 3; + +static constexpr uint64_t MAX_PPLNS_WINDOW_HOURS = 30; + +static_assert(1 <= UNCLE_BLOCK_DEPTH && UNCLE_BLOCK_DEPTH <= 10, "Invalid UNCLE_BLOCK_DEPTH"); + +namespace p2pool { + +static constexpr uint8_t default_consensus_id[HASH_SIZE] = { 34,175,126,231,181,11,104,146,227,153,218,107,44,108,68,39,178,81,4,212,169,4,142,0,177,110,157,240,68,7,249,24 }; +static constexpr uint8_t mini_consensus_id[HASH_SIZE] = { 57,130,201,26,149,174,199,250,66,80,189,18,108,216,194,220,136,23,63,24,64,113,221,44,219,86,39,163,53,24,126,196 }; +static constexpr uint8_t nano_consensus_id[HASH_SIZE] = { 171,248,206,148,210,226,114,99,250,145,221,96,13,216,23,63,104,53,129,168,244,80,141,138,157,250,50,54,37,189,5,89 }; + +NetworkType SideChain::s_networkType = NetworkType::Invalid; + +SideChain::SideChain(p2pool* pool, NetworkType type, const char* pool_name) + : m_pool(pool) + , m_chainTip{ nullptr } + , m_seenWalletsLastPruneTime(0) + , m_poolName(pool_name ? pool_name : "default") + , m_targetBlockTime(10) + , m_minDifficulty(MIN_DIFFICULTY, 0) + , m_chainWindowSize(2160) + , m_unclePenalty(20) + , m_precalcFinished(false) +#ifdef DEV_TEST_SYNC + , m_firstPruneTime(0) +#endif +{ + if (s_networkType == NetworkType::Invalid) { + s_networkType = type; + } + else if (s_networkType != type) { + LOGERR(1, "can't run both " << s_networkType << " and " << type << " at the same time"); + PANIC_STOP(); + } + + LOGINFO(1, log::LightCyan() << "network type = " << type); + + if (m_poolName == "nano") { + m_targetBlockTime = 30; + m_unclePenalty = 10; + } + + if (m_pool && !load_config(m_pool->params().m_sidechainConfig)) { + PANIC_STOP(); + } + + if (!check_config()) { + PANIC_STOP(); + } + + m_curDifficulty = m_minDifficulty; + + uv_rwlock_init_checked(&m_sidechainLock); + uv_mutex_init_checked(&m_incomingBlocksLock); + uv_rwlock_init_checked(&m_curDifficultyLock); + uv_rwlock_init_checked(&m_watchBlockLock); + + m_difficultyData.reserve(m_chainWindowSize); + + LOGINFO(1, "generating consensus ID"); + + char buf[log::Stream::BUF_SIZE + 1]; + // cppcheck-suppress uninitvar + log::Stream s(buf); + + s << s_networkType << '\0' + << m_poolName << '\0' + << m_poolPassword << '\0' + << m_targetBlockTime << '\0' + << m_minDifficulty << '\0' + << m_chainWindowSize << '\0' + << m_unclePenalty << '\0'; + + constexpr char default_config[] = "mainnet\0" "default\0" "\0" "10\0" "100000\0" "2160\0" "20\0"; + constexpr char mini_config[] = "mainnet\0" "mini\0" "\0" "10\0" "100000\0" "2160\0" "20\0"; + constexpr char nano_config[] = "mainnet\0" "nano\0" "\0" "30\0" "100000\0" "2160\0" "10\0"; + + // Hardcoded default consensus ID + if ((s.m_pos == sizeof(default_config) - 1) && (memcmp(buf, default_config, sizeof(default_config) - 1) == 0)) { + m_consensusId.assign(default_consensus_id, default_consensus_id + HASH_SIZE); + } + // Hardcoded mini consensus ID + else if ((s.m_pos == sizeof(mini_config) - 1) && (memcmp(buf, mini_config, sizeof(mini_config) - 1) == 0)) { + m_consensusId.assign(mini_consensus_id, mini_consensus_id + HASH_SIZE); + } + // Hardcoded nano consensus ID + else if ((s.m_pos == sizeof(nano_config) - 1) && (memcmp(buf, nano_config, sizeof(nano_config) - 1) == 0)) { + m_consensusId.assign(nano_consensus_id, nano_consensus_id + HASH_SIZE); + } + else { +#ifdef WITH_RANDOMX + const randomx_flags flags = randomx_get_flags(); + randomx_cache* cache = randomx_alloc_cache(flags | RANDOMX_FLAG_LARGE_PAGES); + if (!cache) { + LOGWARN(1, "couldn't allocate RandomX cache using large pages"); + cache = randomx_alloc_cache(flags); + if (!cache) { + LOGERR(1, "couldn't allocate RandomX cache, aborting"); + PANIC_STOP(); + } + } + + randomx_init_cache(cache, buf, s.m_pos); + + // Intentionally not a power of 2 + constexpr size_t scratchpad_size = 1009; + + rx_vec_i128* scratchpad = reinterpret_cast(cache->memory); + rx_vec_i128* scratchpad_end = scratchpad + scratchpad_size; + rx_vec_i128* scratchpad_ptr = scratchpad; + rx_vec_i128* cache_ptr = scratchpad_end; + + for (uint64_t i = scratchpad_size, n = static_cast(RANDOMX_ARGON_MEMORY * 1024) / sizeof(rx_vec_i128); i < n; ++i) { + *scratchpad_ptr = rx_xor_vec_i128(*scratchpad_ptr, *cache_ptr); + ++cache_ptr; + ++scratchpad_ptr; + if (scratchpad_ptr == scratchpad_end) { + scratchpad_ptr = scratchpad; + } + } + + hash id; + keccak(reinterpret_cast(scratchpad), static_cast(scratchpad_size * sizeof(rx_vec_i128)), id.h); + randomx_release_cache(cache); + m_consensusId.assign(id.h, id.h + HASH_SIZE); +#else + LOGERR(1, "Can't calculate consensus ID without RandomX library"); + PANIC_STOP(); +#endif + } + + s.m_pos = 0; + s << log::hex_buf(m_consensusId.data(), m_consensusId.size()) << '\0'; + + // Hide most consensus ID bytes, we only want it on screen to show that we're on the right sidechain + memset(buf + 8, '*', HASH_SIZE * 2 - 16); + m_consensusIdDisplayStr = buf; + + LOGINFO(1, "consensus ID = " << log::LightCyan() << m_consensusIdDisplayStr.c_str()); + + memcpy(m_consensusHash.h, m_consensusId.data(), HASH_SIZE); + + uv_cond_init_checked(&m_precalcJobsCond); + uv_mutex_init_checked(&m_precalcJobsMutex); + m_precalcJobs.reserve(16); + + // One thread is enough with batched derivations + const uint32_t numThreads = 1; + + LOGINFO(4, "running " << numThreads << " pre-calculation workers"); + + m_precalcWorkers.reserve(numThreads); + for (uint32_t i = 0; i < numThreads; ++i) { + m_precalcWorkers.emplace_back(&SideChain::precalc_worker, this); + } + + m_uniquePrecalcInputs = new unordered_set(); + m_uniquePrecalcInputs->reserve(1 << 18); +} + +SideChain::~SideChain() +{ + finish_precalc(); + + uv_rwlock_destroy(&m_sidechainLock); + uv_mutex_destroy(&m_incomingBlocksLock); + uv_rwlock_destroy(&m_curDifficultyLock); + uv_rwlock_destroy(&m_watchBlockLock); + + for (const auto& it : m_blocksById) { + delete it.second; + } + + for (const auto& it : m_blocksToDelete) { + delete it.second; + } + + s_networkType = NetworkType::Invalid; +} + +bool SideChain::fill_sidechain_data(PoolBlock& block, std::vector& shares) const +{ + block.m_uncles.clear(); + + ReadLock lock(m_sidechainLock); + + const PoolBlock* tip = m_chainTip; + + if (!tip) { + block.m_parent = {}; + block.m_sidechainHeight = 0; + block.m_difficulty = m_minDifficulty; + block.m_cumulativeDifficulty = m_minDifficulty; + block.m_txkeySecSeed = m_consensusHash; + get_tx_keys(block.m_txkeyPub, block.m_txkeySec, block.m_txkeySecSeed, block.m_prevId); + + return get_shares(&block, shares); + } + + block.m_txkeySecSeed = (block.m_prevId == tip->m_prevId) ? tip->m_txkeySecSeed : tip->calculate_tx_key_seed(); + get_tx_keys(block.m_txkeyPub, block.m_txkeySec, block.m_txkeySecSeed, block.m_prevId); + + block.m_parent = tip->m_sidechainId; + block.m_sidechainHeight = tip->m_sidechainHeight + 1; + + // Collect uncles from 3 previous block heights + + // First get a list of already mined blocks at these heights + std::vector mined_blocks; + mined_blocks.reserve(UNCLE_BLOCK_DEPTH * 2 + 1); + + const PoolBlock* tmp = tip; + for (uint64_t i = 0, n = std::min(UNCLE_BLOCK_DEPTH, tip->m_sidechainHeight + 1); tmp && (i < n); ++i) { + mined_blocks.push_back(tmp->m_sidechainId); + mined_blocks.insert(mined_blocks.end(), tmp->m_uncles.begin(), tmp->m_uncles.end()); + tmp = get_parent(tmp); + } + + for (uint64_t i = 0, n = std::min(UNCLE_BLOCK_DEPTH, tip->m_sidechainHeight + 1); i < n; ++i) { + auto it = m_blocksByHeight.find(tip->m_sidechainHeight - i); + if (it == m_blocksByHeight.end()) { + continue; + } + for (const PoolBlock* uncle : it->second) { + // Only add verified and valid blocks + if (!uncle || !uncle->m_verified || uncle->m_invalid) { + continue; + } + + // Only add it if it hasn't been mined already + if (std::find(mined_blocks.begin(), mined_blocks.end(), uncle->m_sidechainId) != mined_blocks.end()) { + continue; + } + + // Only add it if it's on the same chain + bool same_chain = false; + do { + tmp = tip; + while (tmp && (tmp->m_sidechainHeight > uncle->m_sidechainHeight)) { + tmp = get_parent(tmp); + } + if (!tmp || (tmp->m_sidechainHeight < uncle->m_sidechainHeight)) { + break; + } + const PoolBlock* tmp2 = uncle; + for (size_t j = 0; (j < UNCLE_BLOCK_DEPTH) && tmp && tmp2 && (tmp->m_sidechainHeight + UNCLE_BLOCK_DEPTH >= block.m_sidechainHeight); ++j) { + if (tmp->m_parent == tmp2->m_parent) { + same_chain = true; + break; + } + tmp = get_parent(tmp); + tmp2 = get_parent(tmp2); + } + } while (0); + + if (same_chain) { + block.m_uncles.emplace_back(uncle->m_sidechainId); + LOGINFO(4, "block template at height " << block.m_sidechainHeight << + ": added " << uncle->m_sidechainId << + " (height " << uncle->m_sidechainHeight << + ") as an uncle block, depth " << block.m_sidechainHeight - uncle->m_sidechainHeight); + } + else { + LOGINFO(4, "block template at height " << block.m_sidechainHeight << + ": uncle block " << uncle->m_sidechainId << + " (height " << uncle->m_sidechainHeight << + ") is not on the same chain, depth " << block.m_sidechainHeight - uncle->m_sidechainHeight); + } + } + } + + // Sort uncles and remove duplicates + if (block.m_uncles.size() > 1) { + std::sort(block.m_uncles.begin(), block.m_uncles.end()); + block.m_uncles.erase(std::unique(block.m_uncles.begin(), block.m_uncles.end()), block.m_uncles.end()); + + if (block.m_uncles.size() > MAX_UNCLES_PER_BLOCK) { + block.m_uncles.resize(MAX_UNCLES_PER_BLOCK); + } + } + + block.m_difficulty = difficulty(); + block.m_cumulativeDifficulty = tip->m_cumulativeDifficulty + block.m_difficulty; + + for (const hash& uncle_id : block.m_uncles) { + auto it = m_blocksById.find(uncle_id); + if (it == m_blocksById.end()) { + LOGERR(1, "block template has an unknown uncle block " << uncle_id << ". Fix the code!"); + continue; + } + block.m_cumulativeDifficulty += it->second->m_difficulty; + } + + return get_shares(&block, shares); +} + +P2PServer* SideChain::p2pServer() const +{ + return m_pool ? m_pool->p2p_server() : nullptr; +} + +bool SideChain::get_shares(const PoolBlock* tip, std::vector& shares, uint64_t* bottom_height, bool quiet) const +{ + if (tip->m_txkeySecSeed.empty()) { + LOGERR(1, "tx key seed is not set, fix the code!"); + } + + const int L = quiet ? 6 : 3; + + // Collect shares from each block in the PPLNS window, starting from the "tip" + + uint64_t block_depth = 0; + const PoolBlock* cur = tip; + + difficulty_type mainchain_diff +#ifdef P2POOL_UNIT_TESTS + = m_testMainChainDiff +#endif + ; + + if (m_pool && !tip->m_parent.empty()) { + const uint64_t h = p2pool::get_seed_height(tip->m_txinGenHeight); + if (!m_pool->get_difficulty_at_height(h, mainchain_diff)) { + LOGWARN(L, "get_shares: couldn't get mainchain difficulty for height = " << h); + return false; + } + + LOGINFO(6, "get_shares: parent = " << tip->m_parent + << ", height = " << tip->m_sidechainHeight + << ", Monero height = " << tip->m_txinGenHeight + << ", seed height = " << h + << ", mainchain_diff = " << mainchain_diff + ); + } + + // Dynamic PPLNS window starting from v2 + // Limit PPLNS weight to 2x of the Monero difficulty (max 2 blocks per PPLNS window on average) + const difficulty_type max_pplns_weight = mainchain_diff * 2; + difficulty_type pplns_weight; + + unordered_set shares_set; + shares_set.reserve(m_chainWindowSize * 2); + + do { + difficulty_type cur_weight = cur->m_difficulty; + + for (const hash& uncle_id : cur->m_uncles) { + auto it = m_blocksById.find(uncle_id); + if (it == m_blocksById.end()) { + LOGWARN(L, "get_shares: can't find uncle block at height = " << cur->m_sidechainHeight << ", id = " << uncle_id); + LOGWARN(L, "get_shares: can't calculate shares for block at height = " << tip->m_sidechainHeight << ", id = " << tip->m_sidechainId << ", mainchain height = " << tip->m_txinGenHeight); + return false; + } + + const PoolBlock* uncle = it->second; + + // Skip uncles which are already out of PPLNS window + if (tip->m_sidechainHeight - uncle->m_sidechainHeight >= m_chainWindowSize) { + continue; + } + + // Take some % of uncle's weight into this share + const difficulty_type uncle_penalty = uncle->m_difficulty * m_unclePenalty / 100; + const difficulty_type uncle_weight = uncle->m_difficulty - uncle_penalty; + const difficulty_type new_pplns_weight = pplns_weight + uncle_weight; + + // Skip uncles that push PPLNS weight above the limit + if (new_pplns_weight > max_pplns_weight) { + continue; + } + + cur_weight += uncle_penalty; + + auto result = shares_set.emplace(uncle_weight, &uncle->m_minerWallet); + if (!result.second) { + result.first->m_weight += uncle_weight; + } + pplns_weight = new_pplns_weight; + } + + // Always add non-uncle shares even if PPLNS weight goes above the limit + auto result = shares_set.emplace(cur_weight, &cur->m_minerWallet); + if (!result.second) { + result.first->m_weight += cur_weight; + } + pplns_weight += cur_weight; + + // One non-uncle share can go above the limit, but it will also guarantee that "shares" is never empty + if (pplns_weight > max_pplns_weight) { + break; + } + + ++block_depth; + if (block_depth >= m_chainWindowSize) { + break; + } + + // Reached the genesis block so we're done + if (cur->m_sidechainHeight == 0) { + break; + } + + auto it = m_blocksById.find(cur->m_parent); + if (it == m_blocksById.end()) { + LOGWARN(L, "get_shares: can't find parent block at height = " << cur->m_sidechainHeight - 1 << ", id = " << cur->m_parent); + LOGWARN(L, "get_shares: can't calculate shares for block at height = " << tip->m_sidechainHeight << ", id = " << tip->m_sidechainId << ", mainchain height = " << tip->m_txinGenHeight); + return false; + } + + cur = it->second; + } while (true); + + if (bottom_height) { + *bottom_height = cur->m_sidechainHeight; + } + + shares.assign(shares_set.begin(), shares_set.end()); + std::sort(shares.begin(), shares.end(), [](const auto& a, const auto& b) { return *a.m_wallet < *b.m_wallet; }); + + const uint64_t n = shares.size(); + + // Shuffle shares + + // TODO: on the next hardfork change the shuffle to a better variant that churns only O(1) indices when wallets enter/leave + // + // The idea: + // + // Oldest wallet in the PPLNS window picks its index in [0, N) randomly by + // picking a random number in the [0, next_pow2(N + big enough margin)) range to workaround the changing N. + // + // The deterministic PRNG to be used for this must have uniformly distributed bits for any N consecutive bits it generates. + // Maybe PCG64 (permuted congruential generator) seeded with sha256(wallet keys||m_txkeySecSeed) will be good enough. + // + // The next wallet picks its index also in [0, N) and repeats if it conflicts, and so on. + // Tests have shown that each "wallet set change" churns ~5-6 indices, instead of 34-60% with the current algorithm. + // Fewer indices changed -> faster get_outputs_blob() because it has to do fewer new eph public key calculations. + + if (n > 1) { + hash h; + keccak(tip->m_txkeySecSeed.h, HASH_SIZE, h.h); + + uint64_t seed = *h.u64(); + if (seed == 0) seed = 1; + + for (uint64_t i = 0, k; i < n - 1; ++i) { + seed = xorshift64star(seed); + umul128(seed, n - i, &k); + std::swap(shares[i], shares[i + k]); + } + } + + LOGINFO(6, "get_shares: parent = " << tip->m_parent << ", " << n << " unique wallets in PPLNS window, PPLNS weight = " << pplns_weight); + return true; +} + +bool SideChain::incoming_block_seen(const PoolBlock& block) +{ + // Check if it's some old block + const PoolBlock* tip = m_chainTip; + + if (tip && tip->m_sidechainHeight > block.m_sidechainHeight + m_chainWindowSize * 2 && + block.m_cumulativeDifficulty < tip->m_cumulativeDifficulty) { + return true; + } + + const uint64_t cur_time = seconds_since_epoch(); + + // Check if it was received before + MutexLock lock(m_incomingBlocksLock); + return !m_incomingBlocks.emplace(block.get_full_id(), cur_time).second; +} + +void SideChain::forget_incoming_block(const PoolBlock& block) +{ + MutexLock lock(m_incomingBlocksLock); + m_incomingBlocks.erase(block.get_full_id()); +} + +void SideChain::cleanup_incoming_blocks() +{ + const uint64_t cur_time = seconds_since_epoch(); + + MutexLock lock(m_incomingBlocksLock); + + // Forget seen blocks that were added more than 10 minutes ago + for (auto i = m_incomingBlocks.begin(); i != m_incomingBlocks.end();) { + if (cur_time < i->second + 10ul * 60ul) { + ++i; + } + else { + i = m_incomingBlocks.erase(i); + } + } +} + +bool SideChain::add_external_block(PoolBlock& block, std::vector& missing_blocks) +{ + if (block.m_difficulty < m_minDifficulty) { + LOGWARN(3, "add_external_block: block mined by " << block.m_minerWallet << " has invalid difficulty " << block.m_difficulty << ", expected >= " << m_minDifficulty); + return false; + } + + const difficulty_type expected_diff = difficulty(); + bool too_low_diff = (block.m_difficulty < expected_diff); + { + ReadLock lock(m_sidechainLock); + if (m_blocksById.find(block.m_sidechainId) != m_blocksById.end()) { + LOGINFO(4, "add_external_block: block " << block.m_sidechainId << " is already added"); + return true; + } + + // This is mainly an anti-spam measure, not an actual verification step + if (too_low_diff) { + // Reduce required diff by 50% (by doubling this block's diff) to account for alternative chains + difficulty_type diff2 = block.m_difficulty; + diff2 += block.m_difficulty; + + const PoolBlock* tip = m_chainTip; + + for (const PoolBlock* tmp = tip; tmp && (tmp->m_sidechainHeight + m_chainWindowSize > tip->m_sidechainHeight); tmp = get_parent(tmp)) { + if (diff2 >= tmp->m_difficulty) { + too_low_diff = false; + break; + } + } + } + } + + LOGINFO(4, "add_external_block: height = " << block.m_sidechainHeight << ", id = " << block.m_sidechainId << ", mainchain height = " << block.m_txinGenHeight << ", difficulty = " << block.m_difficulty); + + if (too_low_diff) { + LOGWARN(4, "add_external_block: block mined by " << block.m_minerWallet << " has too low difficulty " << block.m_difficulty << ", expected >= ~" << expected_diff << ". Ignoring it."); + return true; + } + + // This check is not always possible to perform because of mainchain reorgs + ChainMain data; + if (m_pool->chainmain_get_by_hash(block.m_prevId, data)) { + if (data.height + 1 != block.m_txinGenHeight) { + LOGWARN(3, "add_external_block mined by " << block.m_minerWallet << ": wrong mainchain height " << block.m_txinGenHeight << ", expected " << data.height + 1); + return false; + } + } + else { + LOGWARN(3, "add_external_block: block is built on top of an unknown mainchain block " << block.m_prevId << ", mainchain reorg might've happened"); + } + + if (!m_pool->get_seed(block.m_txinGenHeight, block.m_seed)) { + LOGWARN(3, "add_external_block mined by " << block.m_minerWallet << ": couldn't get seed hash for mainchain height " << block.m_txinGenHeight); + forget_incoming_block(block); + return false; + } + + if (!block.get_pow_hash(m_pool->hasher(), block.m_txinGenHeight, block.m_seed, block.m_powHash, false, RandomX_Hasher_Base::VM_LANE_P2P)) { + LOGWARN(3, "add_external_block: couldn't get PoW hash for height = " << block.m_sidechainHeight << ", mainchain height " << block.m_txinGenHeight << ". Ignoring it."); + forget_incoming_block(block); + return true; + } + + // Check if it has the correct parent and difficulty to go right to monerod for checking + MinerData miner_data = m_pool->miner_data(); + if ((block.m_prevId == miner_data.prev_id) && miner_data.difficulty.check_pow(block.m_powHash)) { + LOGINFO(0, log::LightGreen() << "add_external_block: block " << block.m_sidechainId << " has enough PoW for Monero network, submitting it"); + m_pool->submit_block_async(block.serialize_mainchain_data()); + } + else { + difficulty_type diff; + if (!m_pool->get_difficulty_at_height(block.m_txinGenHeight, diff)) { + LOGWARN(3, "add_external_block: couldn't get mainchain difficulty for height = " << block.m_txinGenHeight); + } + else if (diff.check_pow(block.m_powHash)) { + LOGINFO(0, log::LightGreen() << "add_external_block: block " << block.m_sidechainId << " has enough PoW for Monero height " << block.m_txinGenHeight << ", submitting it"); + m_pool->submit_block_async(block.serialize_mainchain_data()); + } + } + + if (!block.m_difficulty.check_pow(block.m_powHash)) { + LOGWARN(3, + "add_external_block mined by " << block.m_minerWallet << + ": not enough PoW for height = " << block.m_sidechainHeight << + ", id = " << block.m_sidechainId << + ", nonce = " << block.m_nonce << + ", mainchain height = " << block.m_txinGenHeight + ); + + bool not_enough_pow = true; + + // Calculate the same hash second time to check if it's an unstable hardware that caused this + hash pow_hash2; + if (block.get_pow_hash(m_pool->hasher(), block.m_txinGenHeight, block.m_seed, pow_hash2, true, RandomX_Hasher_Base::VM_LANE_P2P) && (pow_hash2 != block.m_powHash)) { + LOGERR(0, "UNSTABLE HARDWARE DETECTED: Calculated the same hash twice, got different results: " << block.m_powHash << " != " << pow_hash2 << " (sidechain id = " << block.m_sidechainId << ')'); + if (block.m_difficulty.check_pow(pow_hash2)) { + LOGINFO(3, "add_external_block second result has enough PoW for height = " << block.m_sidechainHeight << ", id = " << block.m_sidechainId); + block.m_powHash = pow_hash2; + not_enough_pow = false; + } + } + + if (not_enough_pow) { + return false; + } + } + + m_pool->on_external_block(block); + + bool block_found = false; + + missing_blocks.clear(); + { + ReadLock lock(m_sidechainLock); + + if (!block.m_parent.empty() && (m_blocksById.find(block.m_parent) == m_blocksById.end())) { + missing_blocks.push_back(block.m_parent); + } + + for (const hash& h : block.m_uncles) { + if (!h.empty() && (m_blocksById.find(h) == m_blocksById.end())) { + missing_blocks.push_back(h); + } + } + } + + { + WriteLock lock(m_watchBlockLock); + + if (block.m_merkleRoot == m_watchBlockMerkleRoot) { + const Wallet& w = m_pool->params().m_miningWallet; + + const char* who = (block.m_minerWallet == w) ? "you" : "someone else in this p2pool"; + LOGINFO(0, log::LightGreen() << "BLOCK FOUND: main chain block at height " << m_watchBlock.height << " was mined by " << who << BLOCK_FOUND); + + m_watchBlockMerkleRoot = {}; + data = m_watchBlock; + block_found = true; + + const uint64_t payout = block.get_payout(w); + if (payout) { + LOGINFO(0, log::LightCyan() << "Your wallet " << log::LightGreen() << m_pool->params().m_displayWallet << log::LightCyan() << " got a payout of " << log::LightGreen() << log::XMRAmount(payout) << log::LightCyan() << " in block " << log::LightGreen() << data.height); + } + else { + LOGINFO(0, log::LightCyan() << "Your wallet " << log::LightYellow() << m_pool->params().m_displayWallet << log::LightCyan() << " didn't get a payout in block " << log::LightYellow() << data.height << log::LightCyan() << " because you had no shares in PPLNS window"); + } + } + } + + if (block_found) { + m_pool->api_update_block_found(&data, &block); + } + + return add_block(block); +} + +bool SideChain::add_block(const PoolBlock& block) +{ + LOGINFO(3, "add_block: height = " << block.m_sidechainHeight << + ", id = " << block.m_sidechainId << + ", mainchain height = " << block.m_txinGenHeight << + ", verified = " << (block.m_verified ? 1 : 0) + ); + + PoolBlock* new_block = new PoolBlock(block); + { + WriteLock lock(m_seenDataLock); + + m_seenWallets[new_block->m_minerWallet.spend_public_key()] = new_block->m_localTimestamp; + + auto it = new_block->m_mergeMiningExtra.find(keccak_onion_address_v3); + if ((it != new_block->m_mergeMiningExtra.end()) && (it->second.size() >= HASH_SIZE)) { + hash h; + memcpy(h.h, it->second.data(), HASH_SIZE); + m_seenOnionPubkeys[h] = new_block->m_localTimestamp; + } + + auto it2 = new_block->m_mergeMiningExtra.find(keccak_i2p_b32_address); + if ((it2 != new_block->m_mergeMiningExtra.end()) && (it2->second.size() >= HASH_SIZE)) { + hash h; + memcpy(h.h, it2->second.data(), HASH_SIZE); + m_seenI2PDestHashes[h] = new_block->m_localTimestamp; + } + + prune_seen_data(); + } + + WriteLock lock(m_sidechainLock); + + auto result = m_blocksById.insert({ new_block->m_sidechainId, new_block }); + if (!result.second) { + const PoolBlock* old_block = result.first->second; + + LOGWARN(3, "add_block: trying to add the same block twice:" + << "\nnew block id = " << new_block->m_sidechainId + << ", sidechain height = " << new_block->m_sidechainHeight + << ", height = " << new_block->m_txinGenHeight + << ", nonce = " << new_block->m_nonce + << ", extra_nonce = " << new_block->m_extraNonce + << "\nold block id = " << old_block->m_sidechainId + << ", sidechain height = " << old_block->m_sidechainHeight + << ", height = " << old_block->m_txinGenHeight + << ", nonce = " << old_block->m_nonce + << ", extra_nonce = " << old_block->m_extraNonce + ); + + delete new_block; + return false; + } + + m_blocksByHeight[new_block->m_sidechainHeight].push_back(new_block); + m_blocksByMerkleRoot.insert({ new_block->m_merkleRoot, new_block }); + + update_depths(new_block); + + if (new_block->m_verified) { + if (!new_block->m_invalid) { + update_chain_tip(new_block); + + // Save it for faster syncing on the next p2pool start + if (P2PServer* server = p2pServer()) { + server->store_in_cache(*new_block); + } + } + } + else { + verify_loop(new_block); + } + + return true; +} + +const PoolBlock* SideChain::find_block(const hash& id) const +{ + ReadLock lock(m_sidechainLock); + + auto it = m_blocksById.find(id); + if (it != m_blocksById.end()) { + return it->second; + } + + return nullptr; +} + +const PoolBlock* SideChain::find_block_by_merkle_root(const root_hash& merkle_root) const +{ + ReadLock lock(m_sidechainLock); + + auto it = m_blocksByMerkleRoot.find(merkle_root); + if (it != m_blocksByMerkleRoot.end()) { + return it->second; + } + + return nullptr; +} + +void SideChain::watch_mainchain_block(const ChainMain& data, const hash& possible_merkle_root) +{ + WriteLock lock(m_watchBlockLock); + m_watchBlock = data; + m_watchBlockMerkleRoot = possible_merkle_root; +} + +difficulty_type SideChain::get_cached_next_difficulty(const hash& id) const +{ + ReadLock lock(m_sidechainLock); + + auto it = m_blocksById.find(id); + if (it != m_blocksById.end()) { + return it->second->m_cachedNextDifficulty; + } + + return {}; +} + +const PoolBlock* SideChain::get_block_blob(const hash& id, std::vector& blob) const +{ + ReadLock lock(m_sidechainLock); + + const PoolBlock* block = nullptr; + + // Empty hash means we return current sidechain tip + if (id.empty()) { + block = m_chainTip; + + // Don't return stale chain tip + if (block && (block->m_txinGenHeight + 2 < m_pool->miner_data().height)) { + return nullptr; + } + } + else { + auto it = m_blocksById.find(id); + if (it != m_blocksById.end()) { + block = it->second; + } + } + + if (!block) { + return nullptr; + } + + blob = block->serialize_mainchain_data(); + const std::vector sidechain_data = block->serialize_sidechain_data(); + blob.insert(blob.end(), sidechain_data.begin(), sidechain_data.end()); + + return block; +} + +bool SideChain::get_outputs_blob(PoolBlock* block, uint64_t total_reward, std::vector& blob) const +{ + blob.clear(); + + hash txkeySec; + + std::vector tmpRewards; + std::vector tmpShares; + { + ReadLock lock(m_sidechainLock); + + auto it = block->m_sidechainId.empty() ? m_blocksById.end() : m_blocksById.find(block->m_sidechainId); + if (it != m_blocksById.end()) { + const PoolBlock* b = it->second; + const size_t n = b->m_outputAmounts.size(); + + blob.reserve(n * 39 + 64); + writeVarint(n, blob); + + uint64_t total_reward_check = 0; + + for (size_t i = 0; i < n; ++i) { + const PoolBlock::TxOutput& output = b->m_outputAmounts[i]; + + total_reward_check += output.m_reward; + + writeVarint(output.m_reward, blob); + blob.emplace_back(TXOUT_TO_TAGGED_KEY); + const hash h = b->m_ephPublicKeys[i]; + blob.insert(blob.end(), h.h, h.h + HASH_SIZE); + blob.emplace_back(static_cast(output.m_viewTag)); + } + + block->m_ephPublicKeys = b->m_ephPublicKeys; + block->m_outputAmounts = b->m_outputAmounts; + + return total_reward_check == total_reward; + } + + txkeySec = block->m_txkeySec; + + if (!get_shares(block, tmpShares) || !split_reward(total_reward, tmpShares, tmpRewards) || (tmpRewards.size() != tmpShares.size())) { + return false; + } + } + + const size_t n = tmpShares.size(); + + LOGINFO(6, "get_outputs_blob batch start"); + + std::vector> in; + std::vector> out; + + in.reserve(n); + for (size_t i = 0; i < n; ++i) { + in.emplace_back(tmpShares[i].m_wallet->view_public_key(), i); + } + + if (!batch_derivations(in, txkeySec, out)) { + for (size_t i = 0; i < n; ++i) { + if (out[i].second < 0) { + LOGWARN(6, "batch_derivations failed at index " << i); + } + } + return false; + } + + LOGINFO(6, "get_outputs_blob batch, stage 2 start"); + + std::vector in2; + std::vector> out2; + + in2.reserve(n); + for (size_t i = 0; i < n; ++i) { + in2.emplace_back(out[i].first, i, tmpShares[i].m_wallet->spend_public_key()); + } + + if (!batch_public_keys(in2, out2)) { + for (size_t i = 0; i < n; ++i) { + if (!out2[i].second) { + LOGWARN(6, "batch_public_keys failed at index " << i); + } + } + return false; + } + + LOGINFO(6, "get_outputs_blob batch end"); + + blob.reserve(n * 39 + 64); + + writeVarint(n, blob); + + block->m_ephPublicKeys.clear(); + block->m_outputAmounts.clear(); + + block->m_ephPublicKeys.reserve(n); + block->m_outputAmounts.reserve(n); + + for (size_t i = 0; i < n; ++i) { + writeVarint(tmpRewards[i], blob); + + const hash& eph_public_key = out2[i].first; + const uint8_t view_tag = static_cast(out[i].second); + + blob.emplace_back(TXOUT_TO_TAGGED_KEY); + blob.insert(blob.end(), eph_public_key.h, eph_public_key.h + HASH_SIZE); + + blob.emplace_back(view_tag); + + block->m_ephPublicKeys.emplace_back(eph_public_key); + block->m_outputAmounts.emplace_back(tmpRewards[i], view_tag); + } + + block->m_ephPublicKeys.shrink_to_fit(); + block->m_outputAmounts.shrink_to_fit(); + return true; +} + +void SideChain::print_status(bool obtain_sidechain_lock) const +{ + unordered_set blocks_in_window; + blocks_in_window.reserve(m_chainWindowSize * 9 / 8); + + const difficulty_type diff = difficulty(); + + if (obtain_sidechain_lock) uv_rwlock_rdlock(&m_sidechainLock); + ON_SCOPE_LEAVE([this, obtain_sidechain_lock]() { if (obtain_sidechain_lock) uv_rwlock_rdunlock(&m_sidechainLock); }); + + const uint64_t pool_hashrate = (diff / m_targetBlockTime).lo; + + const difficulty_type network_diff = m_pool->miner_data().difficulty; + const uint64_t network_hashrate = (network_diff / MONERO_BLOCK_TIME).lo; + + const PoolBlock* tip = m_chainTip; + + std::vector shares; + uint64_t bh = 0; + if (tip) { + if (!get_shares(tip, shares, &bh, true)) { + LOGERR(6, "print_status: get_shares failed"); + } + } + + const uint64_t window_size = (tip && bh) ? (tip->m_sidechainHeight - bh + 1U) : m_chainWindowSize; + + uint64_t block_depth = 0; + const PoolBlock* cur = tip; + const uint64_t tip_height = tip ? tip->m_sidechainHeight : 0; + + uint64_t total_blocks_in_window = 0; + uint64_t total_uncles_in_window = 0; + + // each dot corresponds to window_size / 30 shares, with current values, 2160 / 30 = 72 + constexpr size_t N = 30; + std::array our_blocks_in_window{}; + std::array our_uncles_in_window{}; + + const Wallet& w = m_pool->params().m_miningWallet; + + while (cur) { + blocks_in_window.emplace(cur->m_sidechainId); + ++total_blocks_in_window; + + // "block_depth <= window_size - 1" here (see the check below), so window_index will be <= N - 1 + // This will map the range [0, window_size - 1] into [0, N - 1] + const size_t window_index = (window_size > 1) ? (block_depth * (N - 1) / (window_size - 1)) : 0; + + if (cur->m_minerWallet == w) { + ++our_blocks_in_window[window_index]; + } + + ++block_depth; + if (block_depth >= window_size) { + break; + } + + for (const hash& uncle_id : cur->m_uncles) { + blocks_in_window.emplace(uncle_id); + auto it = m_blocksById.find(uncle_id); + if (it != m_blocksById.end()) { + const PoolBlock* uncle = it->second; + if (tip_height - uncle->m_sidechainHeight < window_size) { + ++total_uncles_in_window; + if (uncle->m_minerWallet == w) { + ++our_uncles_in_window[window_index]; + } + } + } + } + + cur = get_parent(cur); + } + + uint64_t total_orphans = 0; + uint64_t our_orphans = 0; + + if (tip) { + for (uint64_t i = 0; (i < window_size) && (i <= tip_height); ++i) { + auto it = m_blocksByHeight.find(tip_height - i); + if (it == m_blocksByHeight.end()) { + continue; + } + for (const PoolBlock* block : it->second) { + if (blocks_in_window.find(block->m_sidechainId) == blocks_in_window.end()) { + LOGINFO(4, "orphan block at height " << log::Gray() << block->m_sidechainHeight << log::NoColor() << ": " << log::Gray() << block->m_sidechainId); + ++total_orphans; + if (block->m_minerWallet == w) { + ++our_orphans; + } + } + } + } + } + + difficulty_type your_shares_weight, pplns_weight; + for (const MinerShare& s : shares) { + if (*s.m_wallet == w) { + your_shares_weight = s.m_weight; + } + pplns_weight += s.m_weight; + } + + if (pplns_weight == 0) { + pplns_weight = m_minDifficulty; + } + + const uint64_t total_reward = m_pool->block_template().get_reward(); + const uint64_t your_reward = ((your_shares_weight * total_reward) / pplns_weight).lo; + const uint64_t hashrate_est = ((your_shares_weight * pool_hashrate) / pplns_weight).lo; + + const double block_share = total_reward ? ((static_cast(your_reward) * 100.0) / static_cast(total_reward)) : 0.0; + + const uint64_t our_blocks_in_window_total = std::accumulate(our_blocks_in_window.begin(), our_blocks_in_window.end(), 0ULL); + const uint64_t our_uncles_in_window_total = std::accumulate(our_uncles_in_window.begin(), our_uncles_in_window.end(), 0ULL); + + std::string our_blocks_in_window_chart; + if (our_blocks_in_window_total) { + our_blocks_in_window_chart.reserve(our_blocks_in_window.size() + 32); + our_blocks_in_window_chart = "\nYour shares position = ["; + for (uint64_t p : our_blocks_in_window) { + our_blocks_in_window_chart += (p ? ((p > 9) ? '+' : static_cast('0' + p)) : '.'); + } + our_blocks_in_window_chart += ']'; + } + + std::string our_uncles_in_window_chart; + if (our_uncles_in_window_total) { + our_uncles_in_window_chart.reserve(our_uncles_in_window.size() + 32); + our_uncles_in_window_chart = "\nYour uncles position = ["; + for (uint64_t p : our_uncles_in_window) { + our_uncles_in_window_chart += (p ? ((p > 9) ? '+' : static_cast('0' + p)) : '.'); + } + our_uncles_in_window_chart += ']'; + } + + std::string fingerprint; + +#ifdef WITH_TLS + fingerprint.reserve(64); + fingerprint = m_pool->get_current_host_fingerprint(); + + if (!fingerprint.empty()) { + fingerprint.insert(0, ", fingerprint: "); + } +#endif + + LOGINFO(0, "status" << + "\nMonero node = " << m_pool->current_host().m_displayName << fingerprint << + "\nMain chain height = " << m_pool->block_template().get_height() << + "\nMain chain hashrate = " << log::Hashrate(network_hashrate) << + "\nSide chain ID = " << (is_default() ? "default" : (is_mini() ? "mini" : (is_nano() ? "nano" : m_consensusIdDisplayStr.c_str()))) << + "\nSide chain height = " << tip_height + 1 << + "\nSide chain hashrate = " << log::Hashrate(pool_hashrate) << + (hashrate_est ? "\nYour hashrate (pool-side) = " : "") << (hashrate_est ? log::Hashrate(hashrate_est) : log::Hashrate()) << + "\nPPLNS window = " << total_blocks_in_window << " blocks (+" << total_uncles_in_window << " uncles, " << total_orphans << " orphans)" << + "\nPPLNS window duration = " << log::Duration((pplns_weight / pool_hashrate).lo) << + "\nYour wallet address = " << m_pool->params().m_displayWallet << + "\nYour shares = " << our_blocks_in_window_total << " blocks (+" << our_uncles_in_window_total << " uncles, " << our_orphans << " orphans)" + << our_blocks_in_window_chart << our_uncles_in_window_chart << + "\nBlock reward share = " << block_share << "% (" << log::XMRAmount(your_reward) << ')' + ); +} + +double SideChain::get_reward_share(const Wallet& w) const +{ + uint64_t reward = 0; + uint64_t total_reward = 0; + { + ReadLock lock(m_sidechainLock); + + const PoolBlock* tip = m_chainTip; + if (tip) { + hash eph_public_key; + for (size_t i = 0, n = tip->m_outputAmounts.size(); i < n; ++i) { + const PoolBlock::TxOutput& out = tip->m_outputAmounts[i]; + if (!reward) { + uint8_t view_tag; + const uint8_t expected_view_tag = out.m_viewTag; + if (w.get_eph_public_key(tip->m_txkeySec, i, eph_public_key, view_tag, &expected_view_tag) && (tip->m_ephPublicKeys[i] == eph_public_key)) { + reward = out.m_reward; + } + } + total_reward += out.m_reward; + } + } + } + return total_reward ? (static_cast(reward) / static_cast(total_reward)) : 0.0; +} + +uint64_t SideChain::network_major_version(uint64_t height) +{ + const hardfork_t* hard_forks; + size_t num_hard_forks; + + switch (s_networkType) + { + case NetworkType::Mainnet: + default: + hard_forks = mainnet_hard_forks; + num_hard_forks = num_mainnet_hard_forks; + break; + + case NetworkType::Testnet: + hard_forks = testnet_hard_forks; + num_hard_forks = num_testnet_hard_forks; + break; + + case NetworkType::Stagenet: + hard_forks = stagenet_hard_forks; + num_hard_forks = num_stagenet_hard_forks; + break; + } + + uint64_t result = 1; + for (size_t i = 1; (i < num_hard_forks) && (height >= hard_forks[i].height); ++i) { + result = hard_forks[i].version; + } + return result; +} + +difficulty_type SideChain::total_hashes() const +{ + const PoolBlock* tip = m_chainTip; + return tip ? tip->m_cumulativeDifficulty : difficulty_type(); +} + +// Expects that m_seenDataLock is already locked for writing +void SideChain::prune_seen_data() +{ + const uint64_t cur_time = seconds_since_epoch(); + + // Every 5 minutes, delete wallets that haven't been seen for more than 72 hours and onion/I2P identifiers that haven't been seen for more than 12 hours + if (m_seenWalletsLastPruneTime + 5ul * 60ul <= cur_time) { + auto prune = [cur_time](auto& data, uint64_t timeout) { + for (auto it = data.begin(); it != data.end();) { + if (it->second + timeout < cur_time) { + it = data.erase(it); + } + else { + ++it; + } + } + }; + + constexpr uint64_t hour = 3600; + + prune(m_seenWallets, 72 * hour); + prune(m_seenOnionPubkeys, 12 * hour); + prune(m_seenI2PDestHashes, 12 * hour); + + m_seenWalletsLastPruneTime = cur_time; + } +} + +uint64_t SideChain::last_updated() const +{ + const PoolBlock* tip = m_chainTip; + return tip ? tip->m_localTimestamp : 0; +} + +bool SideChain::is_default() const +{ + return (memcmp(m_consensusId.data(), default_consensus_id, HASH_SIZE) == 0); +} + +bool SideChain::is_mini() const +{ + return (memcmp(m_consensusId.data(), mini_consensus_id, HASH_SIZE) == 0); +} + +bool SideChain::is_nano() const +{ + return (memcmp(m_consensusId.data(), nano_consensus_id, HASH_SIZE) == 0); +} + +uint64_t SideChain::get_bottom_height(const PoolBlock* tip) const +{ + if (!tip) { + return 0; + } + + uint64_t bottom_height; + std::vector shares; + + ReadLock lock(m_sidechainLock); + + if (!get_shares(tip, shares, &bottom_height, true)) { + return 0; + } + + return bottom_height; +} + +bool SideChain::split_reward(uint64_t reward, const std::vector& shares, std::vector& rewards) +{ + const size_t num_shares = shares.size(); + + const difficulty_type total_weight = std::accumulate(shares.begin(), shares.end(), difficulty_type(), [](const difficulty_type& a, const MinerShare& b) { return a + b.m_weight; }); + + if (total_weight.empty()) { + LOGERR(1, "total_weight is 0. Check the code!"); + return false; + } + + rewards.clear(); + rewards.reserve(num_shares); + + // Each miner gets a proportional fraction of the block reward + difficulty_type w; + uint64_t reward_given = 0; + for (uint64_t i = 0; i < num_shares; ++i) { + w += shares[i].m_weight; + + const difficulty_type next_value = w * reward / total_weight; + const uint64_t r = next_value.lo - reward_given; + reward_given = next_value.lo; + + if (r > MAX_OUTPUT_VALUE) { + LOGERR(1, "Reward of " << log::XMRAmount(reward) << " is too big for the current split."); + return false; + } + + rewards.emplace_back(r); + } + + // Double check that we gave out the exact amount + if (std::accumulate(rewards.begin(), rewards.end(), 0ULL) != reward) { + LOGERR(1, "miners got incorrect reward. This should never happen because math says so. Check the code!"); + return false; + } + + return true; +} + +int SideChain::get_difficulty(const PoolBlock* const tip, std::vector& difficultyData, difficulty_type& curDifficulty) const +{ + if (!pool_block_debug() && !tip->m_cachedNextDifficulty.empty()) { + curDifficulty = tip->m_cachedNextDifficulty; + return 0; + } + + difficultyData.clear(); + + const PoolBlock* cur = tip; + uint64_t oldest_timestamp = std::numeric_limits::max(); + + uint64_t block_depth = 0; + do { + oldest_timestamp = std::min(oldest_timestamp, cur->m_timestamp); + difficultyData.emplace_back(cur->m_timestamp, cur->m_cumulativeDifficulty); + + for (const hash& uncle_id : cur->m_uncles) { + auto it = m_blocksById.find(uncle_id); + if (it == m_blocksById.end()) { + LOGWARN(3, "get_difficulty: can't find uncle block at height = " << cur->m_sidechainHeight << ", id = " << uncle_id); + LOGWARN(3, "get_difficulty: can't calculate diff for block at height = " << tip->m_sidechainHeight << ", id = " << tip->m_sidechainId << ", mainchain height = " << tip->m_txinGenHeight); + return 1; + } + + const PoolBlock* uncle = it->second; + if (tip->m_sidechainHeight - uncle->m_sidechainHeight < m_chainWindowSize) { + oldest_timestamp = std::min(oldest_timestamp, uncle->m_timestamp); + difficultyData.emplace_back(uncle->m_timestamp, uncle->m_cumulativeDifficulty); + } + } + + ++block_depth; + if (block_depth >= m_chainWindowSize) { + break; + } + + // Reached the genesis block so we're done + if (cur->m_sidechainHeight == 0) { + break; + } + + auto it = m_blocksById.find(cur->m_parent); + if (it == m_blocksById.end()) { + LOGWARN(3, "get_difficulty: can't find parent block at height = " << cur->m_sidechainHeight - 1 << ", id = " << cur->m_parent); + LOGWARN(3, "get_difficulty: can't calculate diff for block at height = " << tip->m_sidechainHeight << ", id = " << tip->m_sidechainId << ", mainchain height = " << tip->m_txinGenHeight); + return 1; + } + + cur = it->second; + } while (true); + + // Discard 10% oldest and 10% newest (by timestamp) blocks + std::vector tmpTimestamps; + tmpTimestamps.reserve(difficultyData.size()); + + // Sanity check for the overall timestamp range + for (const DifficultyData& d : difficultyData) { + const uint64_t dt = d.m_timestamp - oldest_timestamp; + + if (dt > std::numeric_limits::max()) { + LOGWARN(3, "get_difficulty: too large timestamp delta " << dt); + LOGWARN(3, "get_difficulty: can't calculate diff for block at height = " << tip->m_sidechainHeight << ", id = " << tip->m_sidechainId << ", mainchain height = " << tip->m_txinGenHeight); + return 2; + } + + tmpTimestamps.emplace_back(static_cast(dt)); + } + + const uint64_t cut_size = (difficultyData.size() + 9) / 10; + const uint64_t index1 = cut_size - 1; + const uint64_t index2 = difficultyData.size() - cut_size; + + std::nth_element(tmpTimestamps.begin(), tmpTimestamps.begin() + static_cast(index1), tmpTimestamps.end()); + const uint64_t timestamp1 = oldest_timestamp + tmpTimestamps[index1]; + + std::nth_element(tmpTimestamps.begin(), tmpTimestamps.begin() + static_cast(index2), tmpTimestamps.end()); + const uint64_t timestamp2 = oldest_timestamp + tmpTimestamps[index2]; + + // Make a reasonable assumption that each block has higher timestamp, so delta_t can't be less than delta_index + // Because if it is, someone is trying to mess with timestamps + // In reality, delta_t ~ delta_index*10 (sidechain block time) + const uint64_t delta_index = (index2 > index1) ? (index2 - index1) : 1U; + const uint64_t delta_t = std::max((timestamp2 > timestamp1) ? (timestamp2 - timestamp1) : 0U, delta_index); + + difficulty_type diff1{ std::numeric_limits::max(), std::numeric_limits::max() }; + difficulty_type diff2{ 0, 0 }; + + for (const DifficultyData& d : difficultyData) { + if (timestamp1 <= d.m_timestamp && d.m_timestamp <= timestamp2) { + if (d.m_cumulativeDifficulty < diff1) { + diff1 = d.m_cumulativeDifficulty; + } + if (diff2 < d.m_cumulativeDifficulty) { + diff2 = d.m_cumulativeDifficulty; + } + } + } + + curDifficulty = (diff2 - diff1) * m_targetBlockTime / delta_t; + + if (curDifficulty < m_minDifficulty) { + curDifficulty = m_minDifficulty; + } + + if (pool_block_debug() && !tip->m_cachedNextDifficulty.empty() && (tip->m_cachedNextDifficulty != curDifficulty)) { + LOGERR(1, "SideChain::get_difficulty: difficulty caching is broken. Fix the code!"); + } + tip->m_cachedNextDifficulty = curDifficulty; + + return 0; +} + +bool SideChain::p2pool_update_available() const +{ + difficulty_type total_p2pool_diff, newer_p2pool_diff; + { + ReadLock lock(m_sidechainLock); + + const PoolBlock* cur = m_chainTip; + + for (uint64_t i = 0; (i < m_chainWindowSize) && cur; ++i, cur = get_parent(cur)) { + if (cur->m_sidechainExtraBuf[0] == static_cast(SoftwareID::P2Pool)) { + total_p2pool_diff += cur->m_difficulty; + if (cur->m_sidechainExtraBuf[1] > P2POOL_VERSION) { + newer_p2pool_diff += cur->m_difficulty; + } + } + } + } + + // Assume that a new version is out if >= 20% of hashrate is using it already + return !total_p2pool_diff.empty() && (newer_p2pool_diff * 5 >= total_p2pool_diff); +} + +std::vector SideChain::seen_onion_pubkeys() const +{ + std::vector result; + + ReadLock lock(m_seenDataLock); + + result.reserve(m_seenOnionPubkeys.size()); + + for (const auto& it : m_seenOnionPubkeys) { + result.push_back(it.first); + } + + return result; +} + +void SideChain::add_onion_pubkeys(const std::vector& pubkeys) +{ + if (pubkeys.empty()) { + return; + } + + const uint64_t cur_time = seconds_since_epoch(); + + WriteLock lock(m_seenDataLock); + + for (const hash& h : pubkeys) { + if (!h.empty()) { + m_seenOnionPubkeys[h] = cur_time; + } + } +} + +std::vector SideChain::seen_i2p_dest_hashes() const +{ + std::vector result; + + ReadLock lock(m_seenDataLock); + + result.reserve(m_seenI2PDestHashes.size()); + + for (const auto& it : m_seenI2PDestHashes) { + result.push_back(it.first); + } + + return result; +} + +void SideChain::add_i2p_dest_hashes(const std::vector& dest_hashes) +{ + if (dest_hashes.empty()) { + return; + } + + const uint64_t cur_time = seconds_since_epoch(); + + WriteLock lock(m_seenDataLock); + + for (const hash& h : dest_hashes) { + if (!h.empty()) { + m_seenI2PDestHashes[h] = cur_time; + } + } +} + +void SideChain::verify_loop(PoolBlock* block) +{ + // PoW is already checked at this point + + std::vector blocks_to_verify(1, block); + PoolBlock* highest_block = nullptr; + + while (!blocks_to_verify.empty()) { + block = blocks_to_verify.back(); + blocks_to_verify.pop_back(); + + if (block->m_verified) { + continue; + } + + verify(block); + + if (!block->m_verified) { + LOGINFO(6, "can't verify block at height = " << block->m_sidechainHeight << + ", id = " << block->m_sidechainId << + ", mainchain height = " << block->m_txinGenHeight << ": parent or uncle blocks are not available)"); + continue; + } + + if (block->m_invalid) { + LOGWARN(3, "block at height = " << block->m_sidechainHeight << + ", id = " << block->m_sidechainId << + ", mainchain height = " << block->m_txinGenHeight << ", mined by " << block->m_minerWallet << " is invalid"); + } + else { + LOGINFO(3, "verified block at height = " << block->m_sidechainHeight << + ", depth = " << block->m_depth << + ", id = " << block->m_sidechainId << + ", mainchain height = " << block->m_txinGenHeight); + + // This block is now verified + + bool is_alternative; + if (is_longer_chain(highest_block, block, is_alternative)) { + highest_block = block; + } + else if (highest_block && (highest_block->m_sidechainHeight > block->m_sidechainHeight)) { + LOGINFO(4, "block " << highest_block->m_sidechainId << + ", height = " << highest_block->m_sidechainHeight << + " is not a longer chain than " << block->m_sidechainId << + ", height " << block->m_sidechainHeight); + } + + P2PServer* server = p2pServer(); + + // If it came through a broadcast, send it to our peers + if (block->m_wantBroadcast && !block->m_broadcasted) { + block->m_broadcasted = true; + if (server && (block->m_depth < UNCLE_BLOCK_DEPTH)) { + if (m_pool && (block->m_minerWallet == m_pool->params().m_miningWallet)) { + LOGINFO(0, log::Green() << "SHARE ADDED: height = " << block->m_sidechainHeight << ", id = " << block->m_sidechainId << ", mainchain height = " << block->m_txinGenHeight); + } + server->broadcast(*block, get_parent(block)); + } + } + + // Save it for faster syncing on the next p2pool start + if (server) { + server->store_in_cache(*block); + } + + // Try to verify blocks on top of this one + for (size_t i = 1; i <= UNCLE_BLOCK_DEPTH; ++i) { + auto it = m_blocksByHeight.find(block->m_sidechainHeight + i); + if (it == m_blocksByHeight.end()) { + continue; + } + + for (PoolBlock* b : it->second) { + if ((i == 1) && (b->m_parent == block->m_sidechainId)) { + // Update depth if needed + if (b->m_depth + 1 < block->m_depth) { + b->m_depth = block->m_depth - 1; + } + blocks_to_verify.push_back(b); + } + else for (const hash& h : b->m_uncles) { + if (h == block->m_sidechainId) { + // Update depth if needed + if (b->m_depth + i < block->m_depth) { + b->m_depth = block->m_depth - i; + } + blocks_to_verify.push_back(b); + break; + } + } + } + } + } + } + + if (highest_block) { + update_chain_tip(highest_block); + } + + return; +} + +void SideChain::verify(PoolBlock* block) +{ + // Genesis block + if (block->m_sidechainHeight == 0) { + if (!block->m_parent.empty() || + !block->m_uncles.empty() || + (block->m_difficulty != m_minDifficulty) || + (block->m_cumulativeDifficulty != m_minDifficulty) || + (block->m_txkeySecSeed != m_consensusHash)) + { + block->m_invalid = true; + } + + block->m_verified = true; + return; + } + + // Deep block + // + // Having so many blocks on top of this one means it was verified by the network at some point + // We skip checks in this case to make pruning possible + // + // Blocks in PPLNS window (m_chainWindowSize = W) require up to m_chainWindowSize earlier blocks to verify + // Each block at depth N can also have uncle blocks at depths from N + 1 up to N + UNCLE_BLOCK_DEPTH (U) + // + // If a block is deeper than "2*W-1" it can't influence blocks in PPLNS window: + // + // get_difficulty requires uncle blocks to exist up to "2*W-1+U" depth, but only uses values of blocks at "<= 2*W-1" depth + // get_shares has the same constraints but starts 1 block higher, so it requires 1 less depth + // + // (W-1)*2 + U = W*2-2+U >= 2*W-1 if U >= 1 + // So if U >= 1, block's depth here will be > 2*W - 1 + // + if (block->m_depth > (m_chainWindowSize - 1) * 2 + UNCLE_BLOCK_DEPTH) { + LOGINFO(4, "block " << block->m_sidechainId << " skipped verification"); + block->m_verified = true; + block->m_invalid = false; + return; + } + + // Regular block + + // Must have a parent + if (block->m_parent.empty()) { + block->m_verified = true; + block->m_invalid = true; + return; + } + + // Check parent + auto it = m_blocksById.find(block->m_parent); + if ((it == m_blocksById.end()) || !it->second->m_verified) { + block->m_verified = false; + return; + } + + // If it's invalid then this block is also invalid + const PoolBlock* parent = it->second; + if (parent->m_invalid) { + block->m_verified = true; + block->m_invalid = true; + return; + } + + // Check m_txkeySecSeed + const hash h = (block->m_prevId == parent->m_prevId) ? parent->m_txkeySecSeed : parent->calculate_tx_key_seed(); + if (block->m_txkeySecSeed != h) { + LOGWARN(3, "block " << block->m_sidechainId << " has invalid tx key seed: expected " << h << ", got " << block->m_txkeySecSeed); + block->m_verified = true; + block->m_invalid = true; + return; + } + + const uint64_t expectedHeight = parent->m_sidechainHeight + 1; + if (block->m_sidechainHeight != expectedHeight) { + LOGWARN(3, "block at height = " << block->m_sidechainHeight << + ", id = " << block->m_sidechainId << + ", mainchain height = " << block->m_txinGenHeight << + " has wrong height: expected " << expectedHeight); + block->m_verified = true; + block->m_invalid = true; + return; + } + + if (block->m_uncles.size() > MAX_UNCLES_PER_BLOCK) { + LOGWARN(3, "block at height = " << block->m_sidechainHeight << + ", id = " << block->m_sidechainId << + ", mainchain height = " << block->m_txinGenHeight << " has too many uncles (" << block->m_uncles.size() << ')'); + block->m_verified = true; + block->m_invalid = true; + return; + } + + // Uncle hashes must be sorted in the ascending order to prevent cheating when the same hash is repeated multiple times + for (size_t i = 1, n = block->m_uncles.size(); i < n; ++i) { + if (!(block->m_uncles[i - 1] < block->m_uncles[i])) { + LOGWARN(3, "block at height = " << block->m_sidechainHeight << + ", id = " << block->m_sidechainId << + ", mainchain height = " << block->m_txinGenHeight << " has invalid uncle order"); + block->m_verified = true; + block->m_invalid = true; + return; + } + } + + difficulty_type expectedCumulativeDifficulty = parent->m_cumulativeDifficulty + block->m_difficulty; + + // Check uncles + + // First get a list of already mined blocks at possible uncle heights + std::vector mined_blocks; + + if (!block->m_uncles.empty()) { + mined_blocks.reserve(UNCLE_BLOCK_DEPTH * 2 + 1); + + const PoolBlock* tmp = parent; + for (uint64_t i = 0, n = std::min(UNCLE_BLOCK_DEPTH, block->m_sidechainHeight + 1); tmp && (i < n); ++i) { + mined_blocks.push_back(tmp->m_sidechainId); + mined_blocks.insert(mined_blocks.end(), tmp->m_uncles.begin(), tmp->m_uncles.end()); + tmp = get_parent(tmp); + } + } + + for (const hash& uncle_id : block->m_uncles) { + // Empty hash is only used in the genesis block and only for its parent + // Uncles can't be empty + if (uncle_id.empty()) { + LOGWARN(3, "block at height = " << block->m_sidechainHeight << + ", id = " << block->m_sidechainId << + ", mainchain height = " << block->m_txinGenHeight << " has empty uncle hash"); + block->m_verified = true; + block->m_invalid = true; + return; + } + + // Can't mine the same uncle block twice + if (std::find(mined_blocks.begin(), mined_blocks.end(), uncle_id) != mined_blocks.end()) { + LOGWARN(3, "block at height = " << block->m_sidechainHeight << + ", id = " << block->m_sidechainId << + ", mainchain height = " << block->m_txinGenHeight << " has an uncle (" << uncle_id << ") that's already been mined"); + block->m_verified = true; + block->m_invalid = true; + return; + } + + it = m_blocksById.find(uncle_id); + if ((it == m_blocksById.end()) || !it->second->m_verified) { + block->m_verified = false; + return; + } + + const PoolBlock* uncle = it->second; + + // If it's invalid then this block is also invalid + if (uncle->m_invalid) { + block->m_verified = true; + block->m_invalid = true; + return; + } + + // Check that it has correct height + if ((uncle->m_sidechainHeight >= block->m_sidechainHeight) || (uncle->m_sidechainHeight + UNCLE_BLOCK_DEPTH < block->m_sidechainHeight)) { + LOGWARN(3, "block at height = " << block->m_sidechainHeight << + ", id = " << block->m_sidechainId << + ", mainchain height = " << block->m_txinGenHeight << " has an uncle at the wrong height (" << uncle->m_sidechainHeight << ')'); + block->m_verified = true; + block->m_invalid = true; + return; + } + + // Check that uncle and parent have the same ancestor (they must be on the same chain) + const PoolBlock* tmp = parent; + while (tmp->m_sidechainHeight > uncle->m_sidechainHeight) { + tmp = get_parent(tmp); + if (!tmp) { + LOGWARN(3, "block at height = " << block->m_sidechainHeight << + ", id = " << block->m_sidechainId << + ", mainchain height = " << block->m_txinGenHeight << " has an uncle from a different chain (check 1 failed)"); + block->m_verified = true; + block->m_invalid = true; + return; + } + } + + if (tmp->m_sidechainHeight < uncle->m_sidechainHeight) { + LOGWARN(3, "block at height = " << block->m_sidechainHeight << + ", id = " << block->m_sidechainId << + ", mainchain height = " << block->m_txinGenHeight << " has an uncle from a different chain (check 2 failed)"); + block->m_verified = true; + block->m_invalid = true; + return; + } + + bool same_chain = false; + const PoolBlock* tmp2 = uncle; + for (size_t j = 0; (j < UNCLE_BLOCK_DEPTH) && tmp && tmp2 && (tmp->m_sidechainHeight + UNCLE_BLOCK_DEPTH >= block->m_sidechainHeight); ++j) { + if (tmp->m_parent == tmp2->m_parent) { + same_chain = true; + break; + } + tmp = get_parent(tmp); + tmp2 = get_parent(tmp2); + } + + if (!same_chain) { + LOGWARN(3, "block at height = " << block->m_sidechainHeight << + ", id = " << block->m_sidechainId << + ", mainchain height = " << block->m_txinGenHeight << " has an uncle from a different chain (check 3 failed)"); + block->m_verified = true; + block->m_invalid = true; + return; + } + + expectedCumulativeDifficulty += uncle->m_difficulty; + } + + // We can verify this block now (all previous blocks in the window are verified and valid) + // It can still turn out to be invalid + block->m_verified = true; + + if (block->m_cumulativeDifficulty != expectedCumulativeDifficulty) { + LOGWARN(3, "block at height = " << block->m_sidechainHeight << + ", id = " << block->m_sidechainId << + ", mainchain height = " << block->m_txinGenHeight << + " has wrong cumulative difficulty: got " << block->m_cumulativeDifficulty << ", expected " << expectedCumulativeDifficulty); + block->m_invalid = true; + return; + } + + // Verify difficulty and miner rewards only for blocks in PPLNS window + if (block->m_depth >= m_chainWindowSize) { + LOGINFO(4, "block " << block->m_sidechainId << " skipped diff/reward verification"); + block->m_invalid = false; + return; + } + + difficulty_type diff; + if (parent == m_chainTip) { + LOGINFO(6, "block " << block->m_sidechainId << " is built on top of the current chain tip, using current difficulty for verification"); + diff = difficulty(); + } + else { + const int err = get_difficulty(parent, m_difficultyData, diff); + if (err != 0) { + switch (err) { + // Parent/uncle or some other ancestor not found, verify it later + case 1: + block->m_verified = false; + return; + + // Invalid timestamp or some other error + case 2: + default: + block->m_invalid = true; + return; + } + } + } + + if (diff != block->m_difficulty) { + LOGWARN(3, "block at height = " << block->m_sidechainHeight << + ", id = " << block->m_sidechainId << + ", mainchain height = " << block->m_txinGenHeight << + " has wrong difficulty: got " << block->m_difficulty << ", expected " << diff); + block->m_invalid = true; + return; + } + + std::vector shares; + + if (block->m_precalculated) { + WriteLock lock(*PoolBlock::s_precalculatedSharesLock); + shares = std::move(block->m_precalculatedShares); + } + + if (shares.empty() && !get_shares(block, shares)) { + block->m_invalid = true; + return; + } + + if (shares.size() != block->m_outputAmounts.size()) { + LOGWARN(3, "block at height = " << block->m_sidechainHeight << + ", id = " << block->m_sidechainId << + ", mainchain height = " << block->m_txinGenHeight + << " has invalid number of outputs: got " << block->m_outputAmounts.size() << ", expected " << shares.size()); + block->m_invalid = true; + return; + } + + uint64_t total_reward = std::accumulate(block->m_outputAmounts.begin(), block->m_outputAmounts.end(), 0ULL, + [](uint64_t a, const PoolBlock::TxOutput& b) + { + return a + b.m_reward; + }); + + std::vector rewards; + if (!split_reward(total_reward, shares, rewards)) { + LOGWARN(3, "block at height = " << block->m_sidechainHeight << + ", id = " << block->m_sidechainId << + ", mainchain height = " << block->m_txinGenHeight << ": split_reward failed"); + block->m_invalid = true; + return; + } + + if (rewards.size() != block->m_outputAmounts.size()) { + LOGWARN(3, "block at height = " << block->m_sidechainHeight << + ", id = " << block->m_sidechainId << + ", mainchain height = " << block->m_txinGenHeight + << " has invalid number of outputs: got " << block->m_outputAmounts.size() << ", expected " << rewards.size()); + block->m_invalid = true; + return; + } + + for (size_t i = 0, n = rewards.size(); i < n; ++i) { + const PoolBlock::TxOutput& out = block->m_outputAmounts[i]; + + if (rewards[i] != out.m_reward) { + LOGWARN(3, "block at height = " << block->m_sidechainHeight << + ", id = " << block->m_sidechainId << + ", mainchain height = " << block->m_txinGenHeight << + " has invalid reward at index " << i << ": got " << out.m_reward << ", expected " << rewards[i]); + block->m_invalid = true; + return; + } + + hash eph_public_key; + uint8_t view_tag; + if (!shares[i].m_wallet->get_eph_public_key(block->m_txkeySec, i, eph_public_key, view_tag)) { + LOGWARN(3, "block at height = " << block->m_sidechainHeight << + ", id = " << block->m_sidechainId << + ", mainchain height = " << block->m_txinGenHeight << + " failed to eph_public_key at index " << i); + block->m_invalid = true; + return; + } + + if (out.m_viewTag != view_tag) { + LOGWARN(3, "block at height = " << block->m_sidechainHeight << + ", id = " << block->m_sidechainId << + ", mainchain height = " << block->m_txinGenHeight << + " has an incorrect view tag at index " << i); + block->m_invalid = true; + return; + } + + if (eph_public_key != block->m_ephPublicKeys[i]) { + LOGWARN(3, "block at height = " << block->m_sidechainHeight << + ", id = " << block->m_sidechainId << + ", mainchain height = " << block->m_txinGenHeight << + " pays out to a wrong wallet at index " << i); + block->m_invalid = true; + return; + } + } + + // All checks passed + block->m_invalid = false; +} + +void SideChain::update_chain_tip(PoolBlock* block) +{ + if (!block->m_verified || block->m_invalid) { + LOGERR(1, "trying to update chain tip to an unverified or invalid block, fix the code!"); + return; + } + + if (block->m_depth >= m_chainWindowSize) { + LOGINFO(5, "Trying to update chain tip to a block with depth " << block->m_depth << ". Ignoring it."); + return; + } + + PoolBlock* tip = m_chainTip; + + if (block == tip) { + LOGINFO(5, "Trying to update chain tip to the same block again. Ignoring it."); + return; + } + + bool is_alternative; + if (is_longer_chain(tip, block, is_alternative)) { + difficulty_type diff; + if (get_difficulty(block, m_difficultyData, diff) == 0) { + if (!m_chainTip.compare_exchange_strong(tip, block)) { + LOGINFO(5, "Trying to update an outdated chain tip. Ignoring it."); + return; + } + { + WriteLock lock(m_curDifficultyLock); + m_curDifficulty = diff; + } + + LOGINFO(2, "new chain tip: next height = " << log::Gray() << block->m_sidechainHeight + 1 << log::NoColor() << + ", next difficulty = " << log::Gray() << diff << log::NoColor() << + ", main chain height = " << log::Gray() << block->m_txinGenHeight); + + block->m_wantBroadcast = true; + if (m_pool) { + m_pool->update_block_template_async(is_alternative); + + // Reset stratum share counters when switching to an alternative chain to avoid confusion + if (is_alternative) { + StratumServer* s = m_pool->stratum_server(); + if (s) { + s->reset_share_counters(); + } + // Also clear cache because it has data from all old blocks now + clear_crypto_cache(); + LOGINFO(0, log::LightCyan() << "SYNCHRONIZED"); + } + } + prune_old_blocks(); + cleanup_incoming_blocks(); + } + } + else if (block->m_sidechainHeight > tip->m_sidechainHeight) { + LOGINFO(4, "block " << block->m_sidechainId << + ", height = " << block->m_sidechainHeight << + " is not a longer chain than " << tip->m_sidechainId << + ", height " << tip->m_sidechainHeight); + } + else if (m_pool && (block->m_sidechainHeight + UNCLE_BLOCK_DEPTH > tip->m_sidechainHeight)) { + LOGINFO(4, "possible uncle block: id = " << log::Gray() << block->m_sidechainId << log::NoColor() << + ", height = " << log::Gray() << block->m_sidechainHeight); + m_pool->update_block_template_async(); + } + + if (p2pServer() && block->m_wantBroadcast && !block->m_broadcasted) { + block->m_broadcasted = true; + p2pServer()->broadcast(*block, get_parent(block)); + } +} + +PoolBlock* SideChain::get_parent(const PoolBlock* block) const +{ + auto it = m_blocksById.find(block->m_parent); + return (it != m_blocksById.end()) ? it->second : nullptr; +} + +bool SideChain::is_longer_chain(const PoolBlock* const block, const PoolBlock* const candidate, bool& is_alternative) const +{ + is_alternative = false; + + if (!candidate || !candidate->m_verified || candidate->m_invalid) { + return false; + } + + if (!block) { + // Switching from an empty to a non-empty chain + is_alternative = true; + return true; + } + + // If these two blocks are on the same chain, they must have a common ancestor + + const PoolBlock* block_ancestor = block; + while (block_ancestor && (block_ancestor->m_sidechainHeight > candidate->m_sidechainHeight)) { + const hash& id = block_ancestor->m_parent; + block_ancestor = get_parent(block_ancestor); + if (!block_ancestor) { + LOGINFO(4, "couldn't find ancestor " << id << " of block " << block->m_sidechainId << " at height " << block->m_sidechainHeight); + break; + } + } + + if (block_ancestor) { + const PoolBlock* candidate_ancestor = candidate; + while (candidate_ancestor->m_sidechainHeight > block_ancestor->m_sidechainHeight) { + const hash& id = candidate_ancestor->m_parent; + candidate_ancestor = get_parent(candidate_ancestor); + if (!candidate_ancestor) { + LOGINFO(4, "couldn't find ancestor " << id << " of block " << candidate->m_sidechainId << " at height " << candidate->m_sidechainHeight); + break; + } + } + + // cppcheck-suppress knownConditionTrueFalse + while (block_ancestor && candidate_ancestor) { + if (block_ancestor->m_parent == candidate_ancestor->m_parent) { + // Too far away + if ((block->m_sidechainHeight - block_ancestor->m_sidechainHeight >= m_chainWindowSize) || + (candidate->m_sidechainHeight - candidate_ancestor->m_sidechainHeight >= m_chainWindowSize)) { + break; + } + + // If they are really on the same chain, we can just compare cumulative difficulties + return (block->m_cumulativeDifficulty < candidate->m_cumulativeDifficulty); + } + block_ancestor = get_parent(block_ancestor); + candidate_ancestor = get_parent(candidate_ancestor); + } + } + + // They're on totally different chains. Compare total difficulties over the last m_chainWindowSize blocks + is_alternative = true; + + // Fix for unit tests crashing + if (!m_pool) { + return false; + } + + difficulty_type block_total_diff; + difficulty_type candidate_total_diff; + + const PoolBlock* old_chain = block; + const PoolBlock* new_chain = candidate; + + uint64_t candidate_mainchain_height = 0; + uint64_t candidate_mainchain_min_height = 0; + + unordered_set current_chain_monero_blocks, candidate_chain_monero_blocks; + std::vector candidate_timestamps; + { + const uint64_t k = m_chainWindowSize * m_targetBlockTime * 2 / MONERO_BLOCK_TIME; + current_chain_monero_blocks.reserve(k); + candidate_chain_monero_blocks.reserve(k); + candidate_timestamps.reserve(m_chainWindowSize * 2); + } + + uint64_t candidate_ts_deviation = 0; + + for (uint64_t i = 0; (i < m_chainWindowSize) && (old_chain || new_chain); ++i) { + if (old_chain) { + block_total_diff += old_chain->m_difficulty; + + auto add_monero_block_from = [this, ¤t_chain_monero_blocks](const hash& h) { + ChainMain data; + if ((current_chain_monero_blocks.count(h) == 0) && m_pool->chainmain_get_by_hash(h, data)) { + current_chain_monero_blocks.insert(h); + } + }; + + for (const hash& uncle : old_chain->m_uncles) { + auto it = m_blocksById.find(uncle); + if ((it != m_blocksById.end()) && (block->m_sidechainHeight - it->second->m_sidechainHeight < m_chainWindowSize)) { + block_total_diff += it->second->m_difficulty; + add_monero_block_from(it->second->m_prevId); + } + } + + add_monero_block_from(old_chain->m_prevId); + old_chain = get_parent(old_chain); + } + + if (new_chain) { + candidate_mainchain_min_height = candidate_mainchain_min_height ? std::min(candidate_mainchain_min_height, new_chain->m_txinGenHeight) : new_chain->m_txinGenHeight; + candidate_total_diff += new_chain->m_difficulty; + candidate_timestamps.emplace_back(new_chain->m_timestamp); + + auto add_monero_block_from = [this, &candidate_chain_monero_blocks, &candidate_mainchain_height, &candidate_ts_deviation](const hash& h, uint64_t timestamp) { + ChainMain data; + if (!m_pool->chainmain_get_by_hash(h, data)) { + return; + } + + // Can it be zero? Most likely not, but just in case check it first... + if (data.timestamp) { + const uint64_t diff = (timestamp > data.timestamp) ? (timestamp - data.timestamp) : (data.timestamp - timestamp); + + if (candidate_ts_deviation < diff) { + candidate_ts_deviation = diff; + } + } + + if (candidate_chain_monero_blocks.count(h) == 0) { + candidate_chain_monero_blocks.insert(h); + candidate_mainchain_height = std::max(candidate_mainchain_height, data.height); + } + }; + + for (const hash& uncle : new_chain->m_uncles) { + auto it = m_blocksById.find(uncle); + if ((it != m_blocksById.end()) && (candidate->m_sidechainHeight - it->second->m_sidechainHeight < m_chainWindowSize)) { + candidate_mainchain_min_height = std::min(candidate_mainchain_min_height, it->second->m_txinGenHeight); + candidate_total_diff += it->second->m_difficulty; + candidate_timestamps.emplace_back(it->second->m_timestamp); + add_monero_block_from(it->second->m_prevId, it->second->m_timestamp); + } + } + + add_monero_block_from(new_chain->m_prevId, new_chain->m_timestamp); + new_chain = get_parent(new_chain); + } + } + + if (block_total_diff >= candidate_total_diff) { + return false; + } + + // Candidate chain must be built on top of recent mainchain blocks + MinerData data = m_pool->miner_data(); + if (candidate_mainchain_height + 10 < data.height) { + LOGWARN(3, "received a longer alternative chain but it's stale: height " << candidate_mainchain_height << ", current height " << data.height); + return false; + } + + const uint64_t limit = monero_headers_required(); + if (candidate_mainchain_min_height + limit < data.height) { + LOGWARN(3, "received a longer alternative chain but it's stale: min height " << candidate_mainchain_min_height << ", must be >= " << (data.height - limit)); + return false; + } + + // Candidate chain must have been mined on top of at least half as many known Monero blocks, compared to the current chain + if ((candidate_chain_monero_blocks.size() * 2 < current_chain_monero_blocks.size()) || (candidate_mainchain_height < candidate_mainchain_min_height)) { + LOGWARN(3, "received a longer alternative chain but it wasn't mined on current Monero blockchain: only " << candidate_chain_monero_blocks.size() << '/' << current_chain_monero_blocks.size() << " blocks found"); + return false; + } + + // Candidate chain's timestamps must not be altered to fake a high-difficulty chain + if (candidate_ts_deviation > 10800u) { + LOGWARN(3, "received a longer alternative chain but it was mined with fake timestamps: max deviation is " << candidate_ts_deviation << " seconds"); + return false; + } + + // Returns "90th percentile value - 10th percentile value" of a given vector when the values are sorted in non-decreasing order + auto span80 = [](std::vector& v) -> uint64_t { + // Handle a degenerate case + if (v.empty()) { + return 0; + } + + const uint64_t cut_size = (v.size() + 9) / 10; + + const uint64_t pos1 = cut_size - 1; + const uint64_t pos2 = v.size() - cut_size; + + // Handle the rest of degenerate cases + if (pos1 >= pos2) { + return 0; + } + + std::nth_element(v.begin(), v.begin() + static_cast(pos1), v.end()); + const uint64_t v1 = v[pos1]; + + std::nth_element(v.begin(), v.begin() + static_cast(pos2), v.end()); + const uint64_t v2 = v[pos2]; + + return v2 - v1; + }; + + // Candidate's span is based on timestamps + const uint64_t candidate_span = span80(candidate_timestamps); + + // Monero's span is based on blockchain heights and block time (also reduced to 80%). + // This is to anchor the span to the most recent Monero block in candidate's chain + const uint64_t candidate_monero_span = (candidate_mainchain_height + 1 - candidate_mainchain_min_height) * MONERO_BLOCK_TIME * 8 / 10; + + // Candidate's timestamps span must be between 2/3 and 4/3 of Monero's timestamps span + if ((candidate_span > std::numeric_limits::max() / 3) || // overflow check + (candidate_span * 3 < candidate_monero_span * 2) || (candidate_span * 3 > candidate_monero_span * 4)) { + LOGWARN(3, "received a longer alternative chain but it was mined with fake timestamps: span " << candidate_span << " vs Monero span " << candidate_monero_span); + return false; + } + + LOGINFO(3, "received a longer alternative chain: height " << + log::Gray() << block->m_sidechainHeight << log::NoColor() << " -> " << + log::Gray() << candidate->m_sidechainHeight << log::NoColor() << ", cumulative difficulty " << + log::Gray() << block->m_cumulativeDifficulty << log::NoColor() << " -> " << + log::Gray() << candidate->m_cumulativeDifficulty); + + return true; +} + +void SideChain::update_depths(PoolBlock* block) +{ + const uint64_t precalc_depth = m_chainWindowSize + UNCLE_BLOCK_DEPTH - 1; + + auto update_depth = [this, precalc_depth](PoolBlock* b, const uint64_t new_depth) { + const uint64_t old_depth = b->m_depth; + if (old_depth < new_depth) { + b->m_depth = new_depth; + if ((old_depth < precalc_depth) && (new_depth >= precalc_depth)) { + launch_precalc(b); + } + } + }; + + for (size_t i = 1; i <= UNCLE_BLOCK_DEPTH; ++i) { + auto it = m_blocksByHeight.find(block->m_sidechainHeight + i); + if (it == m_blocksByHeight.end()) { + continue; + } + for (const PoolBlock* child : it->second) { + if (child->m_parent == block->m_sidechainId) { + if (i != 1) { + LOGWARN(4, "Block " << block->m_sidechainId << ": m_sidechainHeight is inconsistent with child's m_sidechainHeight."); + } + else { + update_depth(block, child->m_depth + 1); + } + } + + if (std::find(child->m_uncles.begin(), child->m_uncles.end(), block->m_sidechainId) != child->m_uncles.end()) { + update_depth(block, child->m_depth + i); + } + } + } + + std::vector blocks_to_update(1, block); + + do { + block = blocks_to_update.back(); + blocks_to_update.pop_back(); + + // Verify this block and possibly other blocks on top of it when we're sure it will get verified + // + // Block at exactly "N = (m_chainWindowSize - 1) * 2 + UNCLE_BLOCK_DEPTH" can have an uncle at "N + UNCLE_BLOCK_DEPTH" + // This uncle has a parent at "N + UNCLE_BLOCK_DEPTH + 1" + // + // So a block at "N = (m_chainWindowSize - 1) * 2 + UNCLE_BLOCK_DEPTH" can be safely validated if there is a block + // at depth > (m_chainWindowSize - 1) * 2 + UNCLE_BLOCK_DEPTH * 2 + // + + if (!block->m_verified && ((block->m_depth > (m_chainWindowSize - 1) * 2 + UNCLE_BLOCK_DEPTH * 2) || (block->m_sidechainHeight == 0))) { + verify_loop(block); + } + + for (size_t i = 1; i <= UNCLE_BLOCK_DEPTH; ++i) { + auto it = m_blocksByHeight.find(block->m_sidechainHeight + i); + if (it == m_blocksByHeight.end()) { + continue; + } + for (PoolBlock* child : it->second) { + const uint64_t old_depth = child->m_depth; + + if (child->m_parent == block->m_sidechainId) { + if (i != 1) { + LOGWARN(4, "Block " << block->m_sidechainId << ": m_sidechainHeight is inconsistent with child's m_sidechainHeight."); + } + else if (block->m_depth > 0) { + update_depth(child, block->m_depth - 1); + } + } + + if (std::find(child->m_uncles.begin(), child->m_uncles.end(), block->m_sidechainId) != child->m_uncles.end()) { + if (block->m_depth > i) { + update_depth(child, block->m_depth - i); + } + } + + if (child->m_depth > old_depth) { + blocks_to_update.push_back(child); + } + } + } + + auto it = m_blocksById.find(block->m_parent); + if (it != m_blocksById.end()) { + if (it->second->m_sidechainHeight + 1 != block->m_sidechainHeight) { + LOGWARN(4, "Block " << block->m_sidechainId << ": m_sidechainHeight is inconsistent with parent's m_sidechainHeight."); + } + else if (it->second->m_depth < block->m_depth + 1) { + update_depth(it->second, block->m_depth + 1); + blocks_to_update.push_back(it->second); + } + } + + for (const hash& uncle_id : block->m_uncles) { + it = m_blocksById.find(uncle_id); + if (it == m_blocksById.end()) { + continue; + } + + if ((it->second->m_sidechainHeight >= block->m_sidechainHeight) || (it->second->m_sidechainHeight + UNCLE_BLOCK_DEPTH < block->m_sidechainHeight)) { + LOGWARN(4, "Block " << block->m_sidechainId << ": m_sidechainHeight is inconsistent with uncle's m_sidechainHeight."); + continue; + } + + const uint64_t d = block->m_sidechainHeight - it->second->m_sidechainHeight; + if (it->second->m_depth < block->m_depth + d) { + update_depth(it->second, block->m_depth + d); + blocks_to_update.push_back(it->second); + } + } + } while (!blocks_to_update.empty()); +} + +void SideChain::prune_old_blocks() +{ + // Leave >2 minutes worth of spare blocks in addition to 2xPPLNS window for lagging nodes which need to sync + const uint64_t prune_distance = (m_chainWindowSize - 1) * 2 + UNCLE_BLOCK_DEPTH * 2 + MONERO_BLOCK_TIME / m_targetBlockTime + 1; + + // Remove old blocks from alternative unconnected chains after long enough time + const uint64_t cur_time = seconds_since_epoch(); + const uint64_t prune_delay = m_chainWindowSize * 4 * m_targetBlockTime; + + const PoolBlock* tip = m_chainTip; + + if (!tip || (tip->m_sidechainHeight < prune_distance)) { + return; + } + + // Free blocks that were pruned at least 1 minute ago. By now any raw pointer to them that another + // thread might have grabbed (via find_block()/get_block_blob() without m_sidechainLock) is long gone. + while (!m_blocksToDelete.empty() && (cur_time >= m_blocksToDelete.front().first + 60)) { + delete m_blocksToDelete.front().second; + m_blocksToDelete.pop_front(); + } + + const uint64_t h = tip->m_sidechainHeight - prune_distance; + + std::vector blocks_to_prune; + + for (auto it = m_blocksByHeight.begin(); (it != m_blocksByHeight.end()) && (it->first < h);) { + const uint64_t height = it->first; + std::vector& v = it->second; + + v.erase(std::remove_if(v.begin(), v.end(), + [this, prune_distance, cur_time, prune_delay, &blocks_to_prune, height](PoolBlock* block) + { + if ((block->m_depth > prune_distance) || (cur_time >= block->m_localTimestamp + prune_delay)) { + blocks_to_prune.push_back(block); + + auto it2 = m_blocksById.find(block->m_sidechainId); + if (it2 != m_blocksById.end()) { + m_blocksById.erase(it2); + } + else { + LOGERR(1, "m_blocksByHeight and m_blocksById are inconsistent at height " << height << ". Fix the code!"); + } + + auto it3 = m_blocksByMerkleRoot.find(block->m_merkleRoot); + if (it3 != m_blocksByMerkleRoot.end()) { + m_blocksByMerkleRoot.erase(it3); + } + else { + LOGERR(1, "m_blocksByHeight and m_blocksByMerkleRoot are inconsistent at height " << height << ". Fix the code!"); + } + + return true; + } + return false; + }), v.end()); + + if (v.empty()) { + it = m_blocksByHeight.erase(it); + } + else { + ++it; + } + } + + if (!blocks_to_prune.empty()) { + LOGINFO(4, "pruned " << blocks_to_prune.size() << " old blocks at heights < " << h); + + // If side-chain started pruning blocks it means the initial sync is complete + // It's now safe to delete cached blocks + if (p2pServer()) { + p2pServer()->clear_cached_blocks(); + } + + // Pre-calc workers are not needed anymore + finish_precalc(); + + // These blocks have already been unlinked from m_blocksById/m_blocksByHeight/m_blocksByMerkleRoot + // above, so no new lookup can return them. Place them in a queue for deletion 1 minute later. + for (PoolBlock* b : blocks_to_prune) { + m_blocksToDelete.emplace_back(cur_time, b); + } + +#ifdef DEV_TEST_SYNC + if (m_firstPruneTime == 0) { + m_firstPruneTime = seconds_since_epoch(); + + // Test Monero node switching + m_pool->reconnect_to_host(); + } + + if ((cur_time >= m_firstPruneTime + 120) && !m_pool->stopped()) { + LOGINFO(0, log::LightGreen() << "[DEV] Synchronization finished successfully, stopping P2Pool now"); +#ifdef DEV_TRACK_MEMORY + show_top_10_allocations(); +#endif + StratumServer* server1 = m_pool->stratum_server(); + P2PServer* server2 = m_pool->p2p_server(); + + if (server1 && server2) { + server1->print_bans(); + server2->print_bans(); + + server1->show_workers_async(); + server2->show_peers_async(); + } + + m_pool->print_hosts(); + m_pool->stop(); + +#ifdef DEV_TRACK_MEMORY + // Give it 1 minute to shut down, otherwise save a minidump + minidump_and_crash(60 * 1000); +#endif + } +#endif + } +} + +void SideChain::get_missing_blocks(unordered_set& missing_blocks) const +{ + missing_blocks.clear(); + + ReadLock lock(m_sidechainLock); + + for (auto& b : m_blocksById) { + if (b.second->m_verified) { + continue; + } + + if (!b.second->m_parent.empty() && (m_blocksById.find(b.second->m_parent) == m_blocksById.end())) { + missing_blocks.insert(b.second->m_parent); + } + + int num_missing_uncles = 0; + + for (const hash& h : b.second->m_uncles) { + if (!h.empty() && (m_blocksById.find(h) == m_blocksById.end())) { + missing_blocks.insert(h); + + // Get no more than 2 first missing uncles at a time from each block + // Blocks with more than 2 uncles are very rare and they will be processed in several steps + ++num_missing_uncles; + if (num_missing_uncles >= 2) { + break; + } + } + } + } +} + +bool SideChain::load_config(const std::string& filename) +{ + if (filename.empty()) { + LOGINFO(1, "using default config"); + return true; + } + + LOGINFO(1, "loading config from " << log::Gray() << filename); + + std::ifstream f(filename); + if (!f.is_open()) { + LOGERR(1, "can't open " << filename); + return false; + } + + using namespace rapidjson; + + Document doc; + IStreamWrapper s(f); + if (doc.ParseStream(s).HasParseError()) { + LOGERR(1, "failed to parse JSON data in " << filename); + return false; + } + + if (!doc.IsObject()) { + LOGERR(1, "invalid JSON data in " << filename << ": top level is not an object"); + return false; + } + + parseValue(doc, "name", m_poolName); + parseValue(doc, "password", m_poolPassword); + parseValue(doc, "block_time", m_targetBlockTime); + + uint64_t min_diff; + if (parseValue(doc, "min_diff", min_diff) && min_diff) { + m_minDifficulty = { min_diff, 0 }; + } + + parseValue(doc, "pplns_window", m_chainWindowSize); + parseValue(doc, "uncle_penalty", m_unclePenalty); + + return true; +} + +bool SideChain::check_config() const +{ + if (m_poolName.empty()) { + LOGERR(1, "name can't be empty"); + return false; + } + + if (m_poolName.length() > 128) { + LOGERR(1, "name is too long (must be 128 characters max)"); + return false; + } + + if (m_poolPassword.length() > 128) { + LOGERR(1, "password is too long (must be 128 characters max)"); + return false; + } + + if ((m_targetBlockTime < 1) || (m_targetBlockTime > MONERO_BLOCK_TIME)) { + LOGERR(1, "block_time is invalid (must be between 1 and " << MONERO_BLOCK_TIME << ")"); + return false; + } + + if (s_networkType == NetworkType::Mainnet) { + const difficulty_type min_diff{ MIN_DIFFICULTY, 0 }; + const difficulty_type max_diff{ 1000000000, 0 }; + + if ((m_minDifficulty < min_diff) || (max_diff < m_minDifficulty)) { + LOGERR(1, "min_diff is invalid (must be between " << min_diff << " and " << max_diff << ')'); + return false; + } + } + + if ((m_chainWindowSize < 60) || (m_chainWindowSize > 2160)) { + LOGERR(1, "pplns_window is invalid (must be between 60 and 2160)"); + return false; + } + + if ((m_unclePenalty < 1) || (m_unclePenalty > 99)) { + LOGERR(1, "uncle_penalty is invalid (must be between 1 and 99)"); + return false; + } + + // When the nominal PPLNS window is more than 30 hours, the random 2x PPLNS sync horizon + // can span more than 2048 Monero blocks and require a RandomX seed older than the hasher keeps. + if (m_chainWindowSize * m_targetBlockTime > MAX_PPLNS_WINDOW_HOURS * 3600u) { + LOGERR(1, "PPLNS window is too large (more than " << MAX_PPLNS_WINDOW_HOURS << " hours), this is unsafe"); + return false; + } + + LOGINFO(1, log::LightCyan() << "pool name = " << m_poolName); + LOGINFO(1, log::LightCyan() << "block time = " << m_targetBlockTime << " seconds"); + LOGINFO(1, log::LightCyan() << "min diff = " << m_minDifficulty); + LOGINFO(1, log::LightCyan() << "PPLNS window = " << m_chainWindowSize << " blocks"); + LOGINFO(1, log::LightCyan() << "uncle penalty = " << m_unclePenalty << '%'); + + return true; +} + +void SideChain::launch_precalc(const PoolBlock* block) +{ + if (m_precalcFinished) { + return; + } + + for (int h = UNCLE_BLOCK_DEPTH; h >= 0; --h) { + auto it = m_blocksByHeight.find(block->m_sidechainHeight + m_chainWindowSize + h - 1); + if (it == m_blocksByHeight.end()) { + continue; + } + for (PoolBlock* b : it->second) { + if (b->m_precalculated) { + continue; + } + std::vector shares; + if (get_shares(b, shares, nullptr, true)) { + b->m_precalculated = true; + { + WriteLock lock(*PoolBlock::s_precalculatedSharesLock); + b->m_precalculatedShares = std::move(shares); + } + { + MutexLock lock2(m_precalcJobsMutex); + m_precalcJobs.push_back(b); + uv_cond_signal(&m_precalcJobsCond); + } + } + } + } +} + +void SideChain::precalc_worker() +{ + set_thread_name("Precalc"); + + std::vector> wallets; + wallets.reserve(m_chainWindowSize); + + std::vector> in; + std::vector> out; + + std::vector in2; + std::vector> out2; + + do { + const PoolBlock* job; + + { + MutexLock lock(m_precalcJobsMutex); + + if (m_precalcFinished) { + return; + } + + while (m_precalcJobs.empty()) { + uv_cond_wait(&m_precalcJobsCond, &m_precalcJobsMutex); + + if (m_precalcFinished) { + return; + } + } + + job = m_precalcJobs.back(); + m_precalcJobs.pop_back(); + + // Filter out duplicate inputs for get_eph_public_key() + uint8_t t[HASH_SIZE * 2 + sizeof(size_t)]; + memcpy(t, job->m_txkeySec.h, HASH_SIZE); + + wallets.clear(); + + ReadLock lock2(*PoolBlock::s_precalculatedSharesLock); + + const size_t n = job->m_precalculatedShares.size(); + + for (size_t i = 0; i < n; ++i) { + memcpy(t + HASH_SIZE, job->m_precalculatedShares[i].m_wallet->view_public_key().h, HASH_SIZE); + memcpy(t + HASH_SIZE * 2, &i, sizeof(i)); + if (m_uniquePrecalcInputs->insert(robin_hood::hash_bytes(t, array_size(t))).second) { + wallets.emplace_back(i, job->m_precalculatedShares[i].m_wallet); + } + } + } + + const size_t n = wallets.size(); + + in.clear(); + in.reserve(n); + + for (size_t i = 0; i < n; ++i) { + in.emplace_back(wallets[i].second->view_public_key(), wallets[i].first); + } + + if (!batch_derivations(in, job->m_txkeySec, out)) { + LOGWARN(6, "batch_derivations failed in precalc_worker"); + continue; + } + + in2.clear(); + in2.reserve(n); + + for (size_t i = 0; i < n; ++i) { + in2.emplace_back(out[i].first, wallets[i].first, wallets[i].second->spend_public_key()); + } + + if (!batch_public_keys(in2, out2)) { + LOGWARN(6, "batch_public_keys failed in precalc_worker"); + } + } while (true); +} + +void SideChain::finish_precalc() +{ + if (m_precalcFinished.exchange(true)) { + return; + } + + try + { + { + MutexLock lock(m_precalcJobsMutex); + m_precalcJobs.clear(); + m_precalcJobs.shrink_to_fit(); + uv_cond_broadcast(&m_precalcJobsCond); + } + + for (std::thread& t : m_precalcWorkers) { + t.join(); + } + m_precalcWorkers.clear(); + m_precalcWorkers.shrink_to_fit(); + + delete m_uniquePrecalcInputs; + m_uniquePrecalcInputs = nullptr; + + uv_mutex_destroy(&m_precalcJobsMutex); + uv_cond_destroy(&m_precalcJobsCond); + + // Also clear cache because it has data from all old blocks now + clear_crypto_cache(); + + LOGINFO(4, "pre-calculation workers stopped"); + } + catch (const std::exception& e) + { + LOGERR(1, "exception in finish_precalc(): " << e.what()); + } +} + +} // namespace p2pool diff --git a/docs/research/xvb-delivery-study/data/sources/xmrvsbeast-faq.html b/docs/research/xvb-delivery-study/data/sources/xmrvsbeast-faq.html new file mode 100644 index 00000000..2b35c9fa --- /dev/null +++ b/docs/research/xvb-delivery-study/data/sources/xmrvsbeast-faq.html @@ -0,0 +1,78 @@ + + + +XvB P2Pool Bonus Hash Rate Raffle + + + + +

P2Pool Bonus Hash Rate Raffle

+

FAQ

+ +
+

How much XMR can I earn if I join?

+

See: Estimated Rewards

+

Which P2Pool sidechains are supported?

+

See: Supported Sidechains

+

Do I need a live share in the p2pool PPLNS window to win the raffle?

+

Yes, a share on the main, mini, or nano sidechain is required to win.

+

How can I mine on P2Pool and donate to the raffle on a single computer?

+

Try GUPAX: https://gupax.io

+

How can I check if my donation hashrate is being properly accepted by the raffle?

+

Check the History page, you should see your donation HR avg. displayed.

+

How can I verify that raffle winners are randomly selected?

+

See: Verify Random Selections

+

Is there an API?

+

Public: https://xmrvsbeast.com/p2pool/stats

+

Miner Stats: https://xmrvsbeast.com/cgi-bin/p2pool_bonus_history_api.cgi?address=WALLET_ADDRESS

+

Miner Log: https://xmrvsbeast.com/cgi-bin/p2pool_bonus_history_log_api.cgi?address=WALLET_ADDRESS

+

Is there a list of public Monero nodes that can be used with P2Pool?

+

Use the node crawler tool on the P2Pool tab in Gupax

+

Is there a Tor or I2P gateway for this site?

+

I2P: http://xmrvsbeast.i2p

+

My question was not answered, where can I ask it?

+

Chatroom: https://matrix.to/#/#xmrvsbeast:monero.social

+

Community: https://monero.town/c/xmrvsbeast

+

+




+ + + + + + diff --git a/docs/research/xvb-delivery-study/data/sources/xmrvsbeast-p2pool-dashboard.html b/docs/research/xvb-delivery-study/data/sources/xmrvsbeast-p2pool-dashboard.html new file mode 100644 index 00000000..8518c282 --- /dev/null +++ b/docs/research/xvb-delivery-study/data/sources/xmrvsbeast-p2pool-dashboard.html @@ -0,0 +1,87 @@ + + + + +XvB P2Pool Bonus Hash Rate Raffle + + + + +

P2Pool Bonus Hash Rate Raffle

+
- How Much XMR Can I Earn If I Join? -
+

Raffle Round Time Remaining: -17 min.

+

Bonus HR: 131.1kH/s + 2880.3kH/s Donated by 74 Donors (49 using GUPAX) with 53 Miners

+ +
+

Current Raffle Winner (384 Registered)

+ 4B2Avc2j...5JCEaaNs (VIP Donor Round: 28 Playing) +

+ Shares position main: [..............................]
+ Share effort: 266.383% / Block reward: 0.000% (0.000000000000 XMR) +

+ Shares position mini: >>.1............................>>
+ Share effort: 44.313% / Block reward: 0.045% (0.000273129606 XMR) +

+ Shares position nano: >>1.......2.....................>>
+ Share effort: 0.000% / Block reward: 0.176% (0.001078294410 XMR) +
+ +

Recent Winners

+ +

Round Players

+ +




+
+ + + + + diff --git a/docs/research/xvb-delivery-study/data/sources/xmrvsbeast-reward_calc.sh b/docs/research/xvb-delivery-study/data/sources/xmrvsbeast-reward_calc.sh new file mode 100644 index 00000000..76cc0f8f --- /dev/null +++ b/docs/research/xvb-delivery-study/data/sources/xmrvsbeast-reward_calc.sh @@ -0,0 +1,90 @@ +#!/bin/bash + +winners_recent_full_file="$1" +blk_diff="$2" +blk_reward="$3" +seconds_year="31536000" + +#get avg bouns hr +rounds_count="168" +bonus_hr=$(head -$rounds_count $winners_recent_full_file |awk '{print $4}' |sed 's/kH\/s//g' |echo "$(paste -sd+ |bc)/$rounds_count" |bc -l |awk '{printf "%.2f\n", $1}') +bonus_hash_year=$(head -$rounds_count $winners_recent_full_file |awk '{print $4}' |sed 's/kH\/s//g' |echo "$(paste -sd+ |bc)/$rounds_count * (1000) * ($seconds_year)" |bc -l) + +#calc yearly raffle reward: (hashes / diff) * (reward_per_block) +reward=$(echo "($bonus_hash_year / $blk_diff) * ($blk_reward)" |bc -l |awk '{printf "%.2f\n", $1}') +echo "Raffle HR: $bonus_hr kH/s" +echo "Raffle Reward: $reward XMR/year" && echo + +#vip yearly reward +count=$(head -$rounds_count $winners_recent_full_file |grep -w "vip" |wc -l) +while [ "$count" -eq "0" ] +do + rounds_count=$(echo "$rounds_count + 24" |bc) + count=$(head -$rounds_count $winners_recent_full_file |grep -w "vip" |wc -l) +done +if [ "$count" -ne "0" ];then +players_avg=$(head -$rounds_count $winners_recent_full_file |grep -w "vip" |awk '{print $8}' |echo "$(paste -sd+ |bc)/$count" |bc -l) +reward_vip=$(echo "($reward * ($count / $rounds_count))" |bc -l |awk '{printf "%.2f\n", $1}') +reward_vip_player=$(echo "$reward_vip / $players_avg" |bc -l |awk '{printf "%.4f\n", $1}') +echo "Round vip: $reward_vip XMR/year" +echo "Round: vip Player: $reward_vip_player XMR/year" && echo +fi + +#mvp yearly reward +count=$(head -$rounds_count $winners_recent_full_file |grep -w "mvp" |wc -l) +while [ "$count" -eq "0" ] +do + rounds_count=$(echo "$rounds_count + 24" |bc) + count=$(head -$rounds_count $winners_recent_full_file |grep -w "mvp" |wc -l) +done +if [ "$count" -ne "0" ];then +players_avg=$(head -$rounds_count $winners_recent_full_file |grep -w "mvp" |awk '{print $8}' |echo "$(paste -sd+ |bc)/$count" |bc -l) +reward_mvp=$(echo "($reward * ($count / $rounds_count))" |bc -l |awk '{printf "%.2f\n", $1}') +reward_mvp_player=$(echo "$reward_mvp / $players_avg" |bc -l |awk '{printf "%.3f\n", $1}') +echo "Round mvp: $reward_mvp XMR/year" +echo "Round: mvp Player: $reward_mvp_player XMR/year" && echo +fi + +#donor yearly reward +count=$(head -$rounds_count $winners_recent_full_file |grep -w "donor" |wc -l) +while [ "$count" -eq "0" ] +do + rounds_count=$(echo "$rounds_count + 24" |bc) + count=$(head -$rounds_count $winners_recent_full_file |grep -w "donor" |wc -l) +done +if [ "$count" -ne "0" ];then +players_avg=$(head -$rounds_count $winners_recent_full_file |grep -w "donor" |awk '{print $8}' |echo "$(paste -sd+ |bc)/$count" |bc -l) +reward_donor=$(echo "($reward * ($count / $rounds_count))" |bc -l |awk '{printf "%.2f\n", $1}') +reward_donor_player=$(echo "$reward_donor / $players_avg + $reward_vip_player" |bc -l |awk '{printf "%.3f\n", $1}') +echo "Round: donor: $reward_donor XMR/year" +echo "Round: donor Player: $reward_donor_player XMR/year" && echo +fi + +#donor_vip yearly reward +count=$(head -$rounds_count $winners_recent_full_file |grep -w "donor_vip" |wc -l) +players_avg=$(head -$rounds_count $winners_recent_full_file |grep -w "donor_vip" |awk '{print $8}' |echo "$(paste -sd+ |bc)/$count" |bc -l) +reward_donor_vip=$(echo "($reward * ($count / $rounds_count))" |bc -l |awk '{printf "%.2f\n", $1}') +reward_donor_vip_player=$(echo "$reward_donor_vip / $players_avg + $reward_donor_player" |bc -l |awk '{printf "%.2f\n", $1}') +echo "Round: donor_vip: $reward_donor_vip XMR/year" +echo "Round: donor_vip Player: $reward_donor_vip_player XMR/year" && echo + +#donor_whale yearly reward +count=$(head -$rounds_count $winners_recent_full_file |grep -w "donor_whale" |wc -l) +players_avg=$(head -$rounds_count $winners_recent_full_file |grep -w "donor_whale" |awk '{print $8}' |echo "$(paste -sd+ |bc)/$count" |bc -l) +reward_donor_whale=$(echo "($reward * ($count / $rounds_count))" |bc -l |awk '{printf "%.2f\n", $1}') +reward_donor_whale_player=$(echo "$reward_donor_whale / $players_avg + $reward_donor_vip_player" |bc -l |awk '{printf "%.2f\n", $1}') +echo "Round: donor_whale: $reward_donor_whale XMR/year" +echo "Round: donor_whale Player: $reward_donor_whale_player XMR/year" && echo + +#donor_mega yearly reward +count=$(head -$rounds_count $winners_recent_full_file |grep -w "donor_mega" |wc -l) +if [ "$count" -ne "0" ];then + players_avg=$(head -$rounds_count $winners_recent_full_file |grep -w "donor_mega" |awk '{print $8}' |echo "$(paste -sd+ |bc)/$count" |bc -l) + reward_donor_mega=$(echo "($reward * ($count / $rounds_count))" |bc -l |awk '{printf "%.2f\n", $1}') + reward_donor_mega_player=$(echo "$reward_donor_mega / $players_avg + $reward_donor_whale_player" |bc -l |awk '{printf "%.2f\n", $1}') +else + reward_donor_mega="0" + reward_donor_mega_player="0" +fi +echo "Round: donor_mega: $reward_donor_mega XMR/year" +echo "Round: donor_mega Player: $reward_donor_mega_player XMR/year" && echo diff --git a/docs/research/xvb-delivery-study/data/sources/xmrvsbeast-reward_estimate_pub.txt b/docs/research/xvb-delivery-study/data/sources/xmrvsbeast-reward_estimate_pub.txt new file mode 100644 index 00000000..e6985d91 --- /dev/null +++ b/docs/research/xvb-delivery-study/data/sources/xmrvsbeast-reward_estimate_pub.txt @@ -0,0 +1,21 @@ +Raffle HR: 4133.04 kH/s +Raffle Reward: 113.38 XMR/year + +Round vip: 0.52 XMR/year +Round: vip Player: 0.0030 XMR/year + +Round mvp: 2.10 XMR/year +Round: mvp Player: 0.525 XMR/year + +Round: donor: 4.20 XMR/year +Round: donor Player: 0.064 XMR/year + +Round: donor_vip: 21.00 XMR/year +Round: donor_vip Player: 0.81 XMR/year + +Round: donor_whale: 35.69 XMR/year +Round: donor_whale Player: 4.67 XMR/year + +Round: donor_mega: 49.87 XMR/year +Round: donor_mega Player: 54.54 XMR/year + diff --git a/docs/research/xvb-delivery-study/data/sources/xmrvsbeast-rules.html b/docs/research/xvb-delivery-study/data/sources/xmrvsbeast-rules.html new file mode 100644 index 00000000..c052b437 --- /dev/null +++ b/docs/research/xvb-delivery-study/data/sources/xmrvsbeast-rules.html @@ -0,0 +1,77 @@ + + + +XvB P2Pool Bonus Hash Rate Raffle + + + + +

P2Pool Bonus Hash Rate Raffle

+

Rules

+ +
+

Winner is randomly selected from the list of registered miners.

+

Rounds last 60 minutes and until at least 1 share on p2pool main is found.

+

If you win and you are not a VIP miner, you are skipped and your fail count goes up.

+

Miners are removed from the raffle on the 3rd fail.

+

Fail count is automatically reset back to 0 after a successful win.

+

The hashrate is applied to your address on the main, mini, and nano p2pool sidechains.

+

Round types are randomly selected.

+

VIP Miners

+

If you have a share in the main, mini, or nano sidechain PPLNS window you are a "VIP".

+

MVP Players

+

If you maintain a high value project that contributes to P2Pool and promotes the raffle you can get on the "MVP" List.

+

Donor Miners

+

To qualify for the donor round you must be actively donating at least 1 kH/s (1hr and 24hr avg.)

+

If you win and your 1hr avg. hashrate drops below the round minimum the round will terminate.

+

You must use the first 8 characters of your registered wallet address as the worker name. Do NOT add anything else.

+

If you have multiple miners on multiple IP's proxy them first before donating

+

Example: xmrig -o eu.xmrvsbeast.com:4247 -u 4aEwcU26

+

Example: xmrig -o na.xmrvsbeast.com:4247 -u 4aEwcU26

+

All the above rules still apply to miners that are donating.

+ VIP Donor Round: To qualify you must be actively donating at least 10 kH/s (1hr and 24hr avg.)
+ Whale Donor Round: To qualify you must be actively donating at least 100 kH/s (1hr and 24hr avg.)
+ Mega Donor Round: To qualify you must be actively donating at least 1000 kH/s (1hr and 24hr avg.)
+

+




+ + + + + + diff --git a/docs/research/xvb-delivery-study/data/sources/xmrvsbeast-winners_recent_full_pub.txt b/docs/research/xvb-delivery-study/data/sources/xmrvsbeast-winners_recent_full_pub.txt new file mode 100644 index 00000000..e3110118 --- /dev/null +++ b/docs/research/xvb-delivery-study/data/sources/xmrvsbeast-winners_recent_full_pub.txt @@ -0,0 +1,1000 @@ +4B2Avc2j...5JCEaaNs 2026-08-11 01:01:10 5044.6kH/s 3737486 960123b477e4 1/1 28 donor_vip +4AyiUbKF...uJpsC4ym 2026-08-10 23:59:00 2806.0kH/s 3737454 c5e2ae11d8b1 1/1 28 donor_vip +47NF5Nbe...nMs9DDJU 2026-08-10 20:44:00 2758.7kH/s 3737372 3cdf5e39f166 1/1 7 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-10 19:41:28 2939.4kH/s 3737342 9df5a41633cd 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-10 18:42:12 3514.3kH/s 3737307 773dcac50697 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-08-10 17:32:11 3618.3kH/s 3737274 65d9fd722eb4 1/1 6 donor_whale +42H6D3BE...68vGB73F 2026-08-10 16:18:00 3922.9kH/s 3737236 07a6c45fa539 1/1 28 donor_vip +42NpvKMH...zAXwCRSb 2026-08-10 15:15:10 3257.1kH/s 3737203 bdb17370c18b 1/1 28 donor_vip +48M2j8Gj...d8KgGBwa 2026-08-10 14:13:02 3649.3kH/s 3737177 1bcf2f4ca0fb 1/1 1 donor_mega +425vwgiR...JRene2gb 2026-08-10 12:52:07 3650.8kH/s 3737133 aac54c6c20a9 1/1 28 donor_vip +48M2j8Gj...d8KgGBwa 2026-08-10 11:30:04 3276.2kH/s 3737097 b58f7be7fb3e 1/1 5 donor_whale +46Rb9Hjc...57AFUnq5 2026-08-10 10:28:03 3630.9kH/s 3737061 935b734b0086 1/1 5 donor_whale +425vwgiR...JRene2gb 2026-08-10 09:26:01 3747.4kH/s 3737017 be3c00481b05 1/1 28 donor_vip +48M2j8Gj...d8KgGBwa 2026-08-10 08:23:15 3882.6kH/s 3736979 ea566f892d1f 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-08-10 07:20:15 3773.4kH/s 3736938 87f906212f5d 1/1 26 donor_vip +487SyiQC...aSGcaBDE 2026-08-10 06:18:02 3290.3kH/s 3736911 6a53c1e18a9d 1/1 26 donor_vip +48M2j8Gj...d8KgGBwa 2026-08-10 05:16:02 3402.6kH/s 3736877 a93d8666bdc5 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-08-10 04:14:03 3536.6kH/s 3736840 ef90275f5ba0 1/1 65 donor +48M2j8Gj...d8KgGBwa 2026-08-10 03:11:29 3768.7kH/s 3736813 b0fac2e8d99b 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-10 01:55:30 3758.0kH/s 3736771 44bbaaf98227 1/1 5 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-10 00:57:01 2899.3kH/s 3736735 109639a859dd 1/1 1 donor_mega +48LNi6pk...5DomVmR2 2026-08-09 23:55:01 2766.8kH/s 3736697 643811f33f5c 1/1 5 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-09 22:52:27 3017.8kH/s 3736669 12efde5c560f 1/1 5 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-09 21:53:27 2690.1kH/s 3736635 8d449519b62e 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-09 20:54:39 3579.0kH/s 3736609 eee51d1a9770 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-09 19:56:02 2840.2kH/s 3736586 bfdb70b0098e 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-08-09 18:54:04 2769.1kH/s 3736557 8e6face5c5f4 1/1 5 donor_whale +42NpvKMH...zAXwCRSb 2026-08-09 17:52:05 3112.3kH/s 3736527 f29e85197e40 1/1 5 donor_whale +48LNi6pk...5DomVmR2 2026-08-09 16:49:13 2926.2kH/s 3736493 1793092885c8 1/1 6 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-09 15:46:39 2882.3kH/s 3736473 6af82273713a 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-09 14:48:02 2460.6kH/s 3736446 902d3b0fd2c1 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-08-09 12:01:02 2903.8kH/s 3736358 f9b2502d266e 1/1 8 donor_whale +45wQcnHH...kR5qUREN 2026-08-09 10:59:03 3142.6kH/s 3736312 d1aa8ecb6dd8 1/1 27 donor_vip +44aZ9ce8...i1Hxzm1M 2026-08-09 09:57:04 2745.4kH/s 3736282 5a58a6690afd 1/1 26 donor_vip +42NpvKMH...zAXwCRSb 2026-08-09 08:44:18 3225.4kH/s 3736243 0a4ff11c1cb4 1/1 8 donor_whale +42mefDQX...pJw9nygF 2026-08-09 07:42:03 3639.7kH/s 3736213 28975eee27e2 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-09 06:39:28 3733.2kH/s 3736182 2becb1eeaef2 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-09 05:41:03 3618.6kH/s 3736153 96fcd061c029 1/1 1 donor_mega +42m2kLta...aDULT2Qj 2026-08-09 04:38:13 3868.1kH/s 3736122 fdf53c3f2d72 1/1 27 donor_vip +4B2Avc2j...5JCEaaNs 2026-08-09 03:35:59 3969.4kH/s 3736096 9eb804caf0fa 1/1 28 donor_vip +48M2j8Gj...d8KgGBwa 2026-08-09 02:34:01 3803.2kH/s 3736060 a329815ede77 1/1 6 donor_whale +42NpvKMH...zAXwCRSb 2026-08-09 01:14:01 3558.2kH/s 3736007 cb065c4f1bd3 1/1 6 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-09 00:11:30 3944.9kH/s 3735982 dae40c2706d1 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-08 23:13:02 3875.1kH/s 3735948 ec04cf73bf72 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-08-08 22:11:01 4016.8kH/s 3735923 0a8b1a8352c6 1/1 6 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-08 20:54:02 4154.6kH/s 3735890 cc85273d2543 1/1 1 donor_mega +4B2Avc2j...5JCEaaNs 2026-08-08 19:52:02 4223.9kH/s 3735863 4659d56c73de 1/1 28 donor_vip +47NF5Nbe...nMs9DDJU 2026-08-08 18:50:00 3589.2kH/s 3735829 7fbe93dad890 1/1 27 donor_vip +46PsTAqp...o2VDhm5j 2026-08-08 17:48:00 3293.4kH/s 3735798 02b3255a9efa 1/1 27 donor_vip +421n6hRs...61UsZuDG 2026-08-08 16:46:02 3380.6kH/s 3735774 725c3162d51a 1/1 6 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-08 15:43:28 3112.3kH/s 3735745 dea7ce19a1ff 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-08 14:45:01 3393.8kH/s 3735705 c0ce807216fb 1/1 5 donor_whale +42NpvKMH...zAXwCRSb 2026-08-08 13:43:05 3264.4kH/s 3735674 c64ae9c8d553 1/1 28 donor_vip +48LNi6pk...5DomVmR2 2026-08-08 12:41:03 3597.1kH/s 3735649 8be3294ec515 1/1 5 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-08 11:38:32 3153.2kH/s 3735626 18b9d8025454 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-08 10:39:30 3381.1kH/s 3735604 9fd57ea3a519 1/1 5 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-08 09:40:35 3311.9kH/s 3735577 058a3d9de4ed 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-08 08:41:27 3177.6kH/s 3735545 d1575fd39995 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-08 07:42:28 2640.1kH/s 3735520 bb798f6b3a7d 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-08 06:43:28 3112.3kH/s 3735498 b09726ba5c74 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-08 05:45:01 2909.1kH/s 3735470 32ab7931b090 1/1 1 donor_mega +4AGJScWS...f6SvY5p5 2026-08-08 04:42:56 3080.1kH/s 3735433 b641d41320c0 1/1 4 mvp +48M2j8Gj...d8KgGBwa 2026-08-08 03:40:58 3192.4kH/s 3735394 050811453aff 1/1 1 donor_mega +43tg9ebV...GLspBx9P 2026-08-08 02:38:10 2962.0kH/s 3735354 7ff09f512c91 1/1 28 donor_vip +46Rb9Hjc...57AFUnq5 2026-08-08 01:35:10 2896.1kH/s 3735309 78534a33e872 1/1 5 donor_whale +47sctNyW...JBFt8g8K 2026-08-08 00:33:01 3003.4kH/s 3735269 a4c107f48827 1/1 26 donor_vip +48M2j8Gj...d8KgGBwa 2026-08-07 23:25:00 3054.3kH/s 3735230 ec169764085c 1/1 1 donor_mega +43tg9ebV...GLspBx9P 2026-08-07 21:37:01 2963.3kH/s 3735178 103288760694 1/1 27 donor_vip +4AYJotaL...USi2XQ7u 2026-08-07 20:34:12 2827.3kH/s 3735148 99bf931da79f 1/1 27 donor_vip +43nvW9WJ...e7SmCf3o 2026-08-07 19:32:11 3242.2kH/s 3735113 4b4dc58c8320 1/1 28 donor_vip +42NpvKMH...zAXwCRSb 2026-08-07 17:50:03 2878.7kH/s 3735062 9ed9b7e7d486 1/1 5 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-07 16:26:40 2907.4kH/s 3735022 920642ca9bae 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-07 15:21:01 3215.8kH/s 3734990 fee9703732fe 1/1 1 donor_mega +48xVox2n...oQM27PR1 2026-08-07 14:19:01 2825.6kH/s 3734958 79003b80712e 1/1 27 donor_vip +47NF5Nbe...nMs9DDJU 2026-08-07 13:17:01 2874.5kH/s 3734916 4478da30e5cc 1/1 5 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-07 09:40:02 3121.8kH/s 3734812 27cf3eeaede4 1/1 1 donor_mega +42m2kLta...aDULT2Qj 2026-08-07 08:29:04 2941.5kH/s 3734784 38419dd1e383 1/1 28 donor_vip +48M2j8Gj...d8KgGBwa 2026-08-07 04:26:26 2835.6kH/s 3734685 ea98ef282068 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-07 03:28:00 3278.9kH/s 3734645 dec01c253e62 1/1 1 donor_mega +4AeEwC2U...YQyoQtr7 2026-08-07 02:25:56 3645.2kH/s 3734612 accf3e499d8c 1/1 4 mvp +48iicDmb...6Fbzo28A 2026-08-07 01:24:01 3339.2kH/s 3734582 c26c7a3303a0 1/1 65 donor +48wF5CTP...zF7tEmWC 2026-08-07 00:22:00 3310.9kH/s 3734546 10b3d6423234 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-06 23:20:00 3515.3kH/s 3734524 ad3007d647fa 1/1 1 donor_mega +45wQcnHH...kR5qUREN 2026-08-06 19:31:59 3471.9kH/s 3734428 be48002cb1ce 1/1 68 donor +48M2j8Gj...d8KgGBwa 2026-08-06 18:29:26 3319.3kH/s 3734401 df4d76fabab2 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-06 16:22:27 3400.4kH/s 3734335 88edc7add175 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-06 15:24:01 3508.9kH/s 3734313 45e7e45d6ac6 1/1 1 donor_mega +48LNi6pk...5DomVmR2 2026-08-06 14:01:02 3536.5kH/s 3734265 c24f5cf60669 1/1 7 donor_whale +42NpvKMH...zAXwCRSb 2026-08-06 12:58:12 3129.3kH/s 3734226 18fdb9b9da29 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-08-06 11:55:27 3144.0kH/s 3734200 290c512f0c99 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-06 10:57:02 3461.6kH/s 3734161 b1b8b121c254 1/1 1 donor_mega +48LNi6pk...5DomVmR2 2026-08-06 08:25:01 3701.5kH/s 3734081 1b5e1e76c371 1/1 7 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-06 07:23:00 3662.5kH/s 3734039 edb1110efa97 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-08-06 06:21:00 5344.7kH/s 3734001 b0baf50364a2 1/1 11 donor_whale +46Rb9Hjc...57AFUnq5 2026-08-06 05:19:00 4377.4kH/s 3733977 6c01a68069b4 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-06 04:17:10 5978.5kH/s 3733952 b3a341299377 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-08-06 03:15:02 4697.3kH/s 3733916 ed990864d0e4 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-06 02:12:59 6019.9kH/s 3733887 ced10f07774a 1/1 1 donor_mega +44MnN1f3...a621jwyg 2026-08-06 01:10:56 4973.5kH/s 3733845 0afa868e1437 1/1 4 mvp +48M2j8Gj...d8KgGBwa 2026-08-06 00:08:59 6031.1kH/s 3733826 3554a636d890 1/1 1 donor_mega +421n6hRs...61UsZuDG 2026-08-05 23:07:01 4684.4kH/s 3733804 65337ffbae4a 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-05 22:05:00 5937.3kH/s 3733774 2d61f0f40875 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-08-05 21:03:01 4805.0kH/s 3733744 398f9349da9e 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-05 20:01:02 4104.7kH/s 3733713 48a001f2982e 1/1 1 donor_mega +49fV8TjN...GSgrDzrU 2026-08-05 18:19:01 4371.7kH/s 3733659 37acb999827f 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-05 17:09:00 3839.7kH/s 3733630 b0cd2db7478c 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-08-05 15:06:59 3713.7kH/s 3733560 166137eb8340 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-05 12:28:36 3267.5kH/s 3733485 097b16e40e59 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-05 09:58:37 3663.2kH/s 3733400 8bb5b2beef60 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-05 08:36:26 4517.8kH/s 3733355 ba5082ff1f8f 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-05 07:38:01 6404.4kH/s 3733318 848d6776d2d1 1/1 1 donor_mega +4AeEwC2U...YQyoQtr7 2026-08-05 06:35:57 6324.1kH/s 3733289 fd86ab25852a 1/1 4 mvp +48iicDmb...6Fbzo28A 2026-08-05 05:34:01 4111.4kH/s 3733258 b3d97ed9aa06 1/1 68 donor +42Mk3F3y...Q6fgUTJr 2026-08-05 04:19:09 5703.8kH/s 3733214 2278e4798002 1/1 27 donor_vip +43CcbPH8...uQWupVW5 2026-08-05 03:17:00 4910.4kH/s 3733181 b7a1cb5bcf59 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-05 02:14:28 4564.5kH/s 3733154 0f04ccf91023 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-05 01:15:13 5520.9kH/s 3733121 7afa4bc7af8d 1/1 1 donor_mega +48LNi6pk...5DomVmR2 2026-08-05 00:12:59 5246.3kH/s 3733091 de66ce9edc68 1/1 11 donor_whale +49fV8TjN...GSgrDzrU 2026-08-04 23:11:00 5788.1kH/s 3733062 02f9f2ac6c0c 1/1 11 donor_whale +4AuNNHgo...n8VXcgEe 2026-08-04 22:09:00 5773.0kH/s 3733038 59078085c95d 1/1 28 donor_vip +42m2kLta...aDULT2Qj 2026-08-04 21:07:00 5984.1kH/s 3733008 2e8ae6a19b72 1/1 27 donor_vip +42NpvKMH...zAXwCRSb 2026-08-04 20:05:00 4625.3kH/s 3732989 8cfe0e7bc1cf 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-04 19:02:28 4894.6kH/s 3732955 646f1a1bac15 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-04 18:04:03 5982.5kH/s 3732920 9ba24844fe5f 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-08-04 17:01:59 3900.3kH/s 3732897 7a8852589207 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-04 15:25:00 6080.9kH/s 3732858 1e571ea071e0 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-08-04 14:22:59 5951.9kH/s 3732830 1da0a63abb52 1/1 28 donor_vip +46Rb9Hjc...57AFUnq5 2026-08-04 13:21:08 5059.6kH/s 3732798 740a74321946 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-04 12:19:01 6285.8kH/s 3732765 6346093b4b2d 1/1 9 donor_whale +421n6hRs...61UsZuDG 2026-08-04 11:17:00 4672.1kH/s 3732724 d7d1a1bcc773 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-04 10:14:30 5198.1kH/s 3732695 2dbff20623e3 1/1 26 donor_vip +48M2j8Gj...d8KgGBwa 2026-08-04 09:15:44 4769.8kH/s 3732675 999e5e36f514 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-04 08:16:31 4922.8kH/s 3732645 3116e2a3acb4 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-04 07:17:35 4214.4kH/s 3732620 9651651924ed 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-04 06:19:07 5710.6kH/s 3732578 5cd824f2b6de 1/1 1 donor_mega +421n6hRs...61UsZuDG 2026-08-04 05:16:21 4300.8kH/s 3732539 8c4bb5abb016 1/1 26 donor_vip +48M2j8Gj...d8KgGBwa 2026-08-04 04:14:18 5681.0kH/s 3732505 87872ab2db13 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-08-04 03:12:01 4692.2kH/s 3732487 a5ddc9b8cb79 1/1 68 donor +48M2j8Gj...d8KgGBwa 2026-08-04 02:09:40 4606.7kH/s 3732455 a4a3b380ec79 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-04 01:11:01 6040.9kH/s 3732427 ecae1a4d62d0 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-08-04 00:09:02 4709.8kH/s 3732397 42c1c39542c4 1/1 67 donor +48M2j8Gj...d8KgGBwa 2026-08-03 23:06:13 5861.4kH/s 3732359 d28fc5e9f203 1/1 1 donor_mega +4B2Avc2j...5JCEaaNs 2026-08-03 22:03:18 5653.6kH/s 3732326 29ea43b12fd9 1/1 27 donor_vip +49YoCEDi...x97dHeGQ 2026-08-03 21:01:03 5258.7kH/s 3732286 b348a6d619cb 1/1 28 donor_vip +43tg9ebV...GLspBx9P 2026-08-03 19:59:06 5760.0kH/s 3732264 91d12269741c 1/1 28 donor_vip +42mefDQX...pJw9nygF 2026-08-03 18:57:02 4729.7kH/s 3732235 84c584ff72f9 1/1 12 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-03 17:55:04 6392.3kH/s 3732213 4ce709478ad3 1/1 1 donor_mega +4B2Avc2j...5JCEaaNs 2026-08-03 16:53:07 6185.2kH/s 3732175 b651f1edbc30 1/1 12 donor_whale +48wF5CTP...zF7tEmWC 2026-08-03 15:51:02 3699.7kH/s 3732145 d56dc08ea269 1/1 12 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-03 14:14:03 6073.0kH/s 3732109 a5719b25d36c 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-08-03 13:12:07 4805.5kH/s 3732076 4863e9f2f798 1/1 12 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-03 12:09:29 4893.5kH/s 3732049 e8fa24d95fd6 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-03 11:10:43 4199.4kH/s 3732017 b75ad1bc1c4d 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-03 08:32:13 6233.3kH/s 3731922 d9950bafbfcc 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-08-03 07:30:03 5865.0kH/s 3731888 3f9c4db049f8 1/1 12 donor_whale +47NF5Nbe...nMs9DDJU 2026-08-03 06:28:02 4713.6kH/s 3731854 9d964d6a648b 1/1 12 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-03 05:25:29 5043.2kH/s 3731830 11a3d7d4c4fb 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-03 04:26:28 4719.6kH/s 3731798 5e9ef6b540d2 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-03 03:28:03 5199.8kH/s 3731766 2c33a5998093 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-08-03 02:26:02 4742.2kH/s 3731732 5bc6706aa1b2 1/1 13 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-03 01:24:03 6000.7kH/s 3731707 d5f4d770974a 1/1 1 donor_mega +4B2Avc2j...5JCEaaNs 2026-08-03 00:22:01 5125.7kH/s 3731673 c02b377dc667 1/1 13 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-02 23:19:09 4643.3kH/s 3731648 476af7d92b47 1/1 1 donor_mega +48LNi6pk...5DomVmR2 2026-08-02 22:00:02 4996.1kH/s 3731602 6f36e744e0e5 1/1 13 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-02 20:58:03 6325.0kH/s 3731575 70af188a8e3d 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-08-02 19:56:02 5036.9kH/s 3731542 c7a057a52ac8 1/1 12 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-02 18:54:04 5746.7kH/s 3731516 fcc0bbf16add 1/1 1 donor_mega +45qivXhp...BSS1mtoq 2026-08-02 17:52:02 4381.6kH/s 3731483 31880406b4f3 1/1 29 donor_vip +48M2j8Gj...d8KgGBwa 2026-08-02 16:49:32 4993.1kH/s 3731461 0c0bd33c6913 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-02 15:51:03 5913.8kH/s 3731433 509703043f79 1/1 1 donor_mega +45xA3Kgd...7Ma7ttaf 2026-08-02 14:48:14 4680.4kH/s 3731392 d2db8559ac56 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-08-02 13:46:03 6087.7kH/s 3731362 4f654ce35d9f 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-08-02 12:44:04 6109.2kH/s 3731335 0b6c8fce8bf1 1/1 11 donor_whale +464Bdn7D...wTbYVfF1 2026-08-02 11:42:04 4871.3kH/s 3731302 d4e4e15d7790 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-08-02 10:39:14 6038.9kH/s 3731272 9ab60d422b37 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-08-02 09:36:28 6151.4kH/s 3731255 fa1591d46a4d 1/1 32 donor_vip +42NpvKMH...zAXwCRSb 2026-08-02 08:37:14 4839.1kH/s 3731234 09eac8f7a913 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-02 07:35:02 5673.8kH/s 3731199 ab14640f4711 1/1 1 donor_mega +49fV8TjN...GSgrDzrU 2026-08-02 06:33:00 5817.7kH/s 3731171 aa2848c4ad65 1/1 12 donor_whale +43nvW9WJ...e7SmCf3o 2026-08-02 05:31:01 4810.8kH/s 3731140 7d8da011425b 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-08-02 04:28:27 4649.0kH/s 3731115 1891259c67ad 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-02 03:29:59 5801.7kH/s 3731096 115611c3cc7b 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-08-02 02:28:06 4056.2kH/s 3731076 cc4047e26765 1/1 12 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-02 01:25:35 4588.3kH/s 3731047 f5e60d55f38f 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-02 00:26:34 4828.3kH/s 3731025 49b84d8ea745 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-01 23:27:59 5592.5kH/s 3730997 436a2e394e57 1/1 1 donor_mega +48LNi6pk...5DomVmR2 2026-08-01 22:26:02 5634.4kH/s 3730966 a06ad1657a54 1/1 12 donor_whale +48wF5CTP...zF7tEmWC 2026-08-01 21:24:01 5046.5kH/s 3730908 d9720bb7bdbe 1/1 12 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-01 20:21:16 6262.1kH/s 3730866 709c4007dfaa 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-08-01 19:19:01 6015.7kH/s 3730838 b83575d7b896 1/1 31 donor_vip +48wF5CTP...zF7tEmWC 2026-08-01 18:16:13 5560.2kH/s 3730804 b258eb4cbafb 1/1 12 donor_whale +49fSMFrM...c8i6VN6W 2026-08-01 17:13:10 4851.3kH/s 3730777 783c8625945a 1/1 73 donor +48M2j8Gj...d8KgGBwa 2026-08-01 16:10:28 4573.3kH/s 3730736 68b289eaa524 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-01 15:11:26 4289.6kH/s 3730702 624d82c2fc4f 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-01 14:12:27 4442.9kH/s 3730670 9d263791585b 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-01 13:14:03 5913.4kH/s 3730628 190980976116 1/1 1 donor_mega +4B2Avc2j...5JCEaaNs 2026-08-01 12:12:01 5636.2kH/s 3730593 596f02e8be9d 1/1 12 donor_whale +4AYJotaL...USi2XQ7u 2026-08-01 11:10:00 6189.8kH/s 3730561 86df4788f920 1/1 73 donor +42NpvKMH...zAXwCRSb 2026-08-01 10:08:03 5228.3kH/s 3730526 acbcd1c9d622 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-01 09:05:28 5121.2kH/s 3730491 5c8834bfe8ad 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-01 08:06:13 6130.5kH/s 3730458 2ad86adc9800 1/1 1 donor_mega +48xVox2n...oQM27PR1 2026-08-01 07:04:01 5991.4kH/s 3730423 5219af491e93 1/1 27 donor_vip +43CcbPH8...uQWupVW5 2026-08-01 06:02:00 6341.9kH/s 3730391 994b6cb19462 1/1 11 donor_whale +46Rb9Hjc...57AFUnq5 2026-08-01 05:00:00 5293.7kH/s 3730373 ca46424ef040 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-01 03:57:25 5412.4kH/s 3730346 0bb6d8c29a4a 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-01 02:59:00 6054.6kH/s 3730319 cc40499d15ee 1/1 1 donor_mega +49fV8TjN...GSgrDzrU 2026-08-01 01:56:58 6072.3kH/s 3730280 bdacc98099f8 1/1 11 donor_whale +42Mk3F3y...Q6fgUTJr 2026-08-01 00:55:01 5771.5kH/s 3730246 a65cef6fc99e 1/1 11 donor_whale +4B2Avc2j...5JCEaaNs 2026-07-31 23:52:10 4308.9kH/s 3730223 d7d0fafa2da8 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-31 22:50:01 5843.2kH/s 3730196 3071b0f5c86c 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-07-31 21:47:31 5922.4kH/s 3730156 2cf10a96652b 1/1 11 donor_whale +47NF5Nbe...nMs9DDJU 2026-07-31 20:49:03 4750.5kH/s 3730121 dffb51a21341 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-31 19:47:03 5647.0kH/s 3730101 05c020d9b914 1/1 1 donor_mega +4B9oJwgd...sPp6joE1 2026-07-31 18:44:56 5993.1kH/s 3730080 3ce3cbaf769e 1/1 176 vip +48LNi6pk...5DomVmR2 2026-07-31 17:43:04 4637.2kH/s 3730051 8c9d97f967dd 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-31 16:40:19 5644.5kH/s 3730026 79e07d52373e 1/1 1 donor_mega +43CcbPH8...uQWupVW5 2026-07-31 15:38:01 5851.9kH/s 3729999 7c4952c75882 1/1 11 donor_whale +48wF5CTP...zF7tEmWC 2026-07-31 14:35:12 5678.2kH/s 3729973 f66ee7b8d61c 1/1 11 donor_whale +49fV8TjN...GSgrDzrU 2026-07-31 13:33:00 5682.9kH/s 3729940 ce2beb19813a 1/1 11 donor_whale +48wF5CTP...zF7tEmWC 2026-07-31 12:30:12 4565.6kH/s 3729906 edc7e4829da3 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-31 11:28:01 5850.9kH/s 3729863 3a9374bf338b 1/1 1 donor_mega +48LNi6pk...5DomVmR2 2026-07-31 10:26:00 4509.4kH/s 3729831 cbc5b7258d11 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-31 09:24:02 5863.5kH/s 3729788 a7d28269f920 1/1 1 donor_mega +43CcbPH8...uQWupVW5 2026-07-31 08:21:14 4662.9kH/s 3729763 b9abc710d0f6 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-31 07:18:39 3356.3kH/s 3729737 18d4bb8cbc31 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-31 05:57:00 5666.3kH/s 3729684 ff8e7b23403d 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-07-31 04:54:59 3965.2kH/s 3729654 d4fbf85a6d0d 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-31 03:29:10 6337.9kH/s 3729612 91312e7b2025 1/1 11 donor_whale +48LNi6pk...5DomVmR2 2026-07-31 02:27:01 4989.0kH/s 3729573 9973ced663d1 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-31 01:24:27 4722.8kH/s 3729548 2f312dc7ea1d 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-31 00:25:26 4594.2kH/s 3729521 80107dcdd513 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-30 23:27:00 6129.5kH/s 3729489 76028171b8d3 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-07-30 22:24:14 6128.2kH/s 3729458 c6a531e1691b 1/1 11 donor_whale +42Mk3F3y...Q6fgUTJr 2026-07-30 21:22:02 4986.1kH/s 3729431 d355dbc04d3f 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-30 20:20:03 5649.5kH/s 3729403 2394df6a1c70 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-30 19:11:05 6378.5kH/s 3729367 22b11454a220 1/1 11 donor_whale +43CcbPH8...uQWupVW5 2026-07-30 18:09:09 6468.6kH/s 3729339 60a6ec305e37 1/1 11 donor_whale +42Mk3F3y...Q6fgUTJr 2026-07-30 17:07:02 4920.2kH/s 3729309 e4e811f9d612 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-30 16:05:03 5303.5kH/s 3729283 187f6abe695e 1/1 1 donor_mega +43CcbPH8...uQWupVW5 2026-07-30 15:02:12 4676.8kH/s 3729258 6d87e71b80d1 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-30 13:59:39 4585.2kH/s 3729231 e73b8ceb19e0 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-30 13:01:01 5876.6kH/s 3729202 99f3f1583580 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-07-30 11:59:03 5395.7kH/s 3729169 09a44799c73c 1/1 11 donor_whale +42NpvKMH...zAXwCRSb 2026-07-30 10:57:09 6009.4kH/s 3729139 93991a64be6d 1/1 11 donor_whale +42Mk3F3y...Q6fgUTJr 2026-07-30 09:54:59 5649.8kH/s 3729103 a1eac1baf7d1 1/1 11 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-30 08:53:01 4956.4kH/s 3729070 058309b3e9a5 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-30 07:50:29 4932.1kH/s 3729033 5c8741ec447c 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-30 06:51:59 6230.6kH/s 3728993 c6f851086803 1/1 1 donor_mega +45qivXhp...BSS1mtoq 2026-07-30 05:50:02 4459.1kH/s 3728958 0ebc874018a9 1/1 33 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-30 04:47:28 4323.8kH/s 3728936 fc026033e4c8 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-30 03:49:00 5952.9kH/s 3728912 c47af4d47503 1/1 1 donor_mega +421n6hRs...61UsZuDG 2026-07-30 02:47:00 6027.7kH/s 3728894 225092b75c51 1/1 11 donor_whale +42mefDQX...pJw9nygF 2026-07-30 01:45:01 5674.3kH/s 3728868 4c689c6e7bc7 1/1 11 donor_whale +43CcbPH8...uQWupVW5 2026-07-30 00:43:00 5849.3kH/s 3728826 e2e69f3facb3 1/1 11 donor_whale +481ELpyU...mCQhPM2f 2026-07-29 23:41:00 5538.6kH/s 3728785 79ac12977dff 1/1 32 donor_vip +45qivXhp...BSS1mtoq 2026-07-29 22:38:10 4637.7kH/s 3728751 144b310692be 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-29 21:36:02 5799.6kH/s 3728714 8a3e527a2409 1/1 1 donor_mega +421n6hRs...61UsZuDG 2026-07-29 20:33:17 5822.5kH/s 3728684 4176d740d2cf 1/1 34 donor_vip +48wF5CTP...zF7tEmWC 2026-07-29 19:31:02 4210.7kH/s 3728652 edbb72168688 1/1 32 donor_vip +42Mk3F3y...Q6fgUTJr 2026-07-29 18:13:02 5186.9kH/s 3728606 77058dabafda 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-29 17:10:40 5066.9kH/s 3728570 3064bdc4a7ed 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-29 16:12:02 5953.1kH/s 3728540 b348d893a43e 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-29 15:10:01 4708.5kH/s 3728505 1161b8e7a2a6 1/1 33 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-29 14:07:28 3816.0kH/s 3728472 51e9432f7d7a 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-29 12:21:28 4542.7kH/s 3728416 45a1181adc16 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-29 11:22:28 4355.2kH/s 3728378 cada8e88b219 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-29 10:24:01 5573.3kH/s 3728335 f18ce5ce5cec 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-07-29 09:22:07 3820.6kH/s 3728309 62a2ea0dd779 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-29 07:54:06 5943.4kH/s 3728251 7bf1f87d2003 1/1 1 donor_mega +49fV8TjN...GSgrDzrU 2026-07-29 06:52:02 4505.1kH/s 3728219 b9f37c4f8989 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-29 05:49:28 4310.1kH/s 3728193 a085ca1ea1fc 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-29 04:51:00 6140.0kH/s 3728160 38da68ca5840 1/1 1 donor_mega +464pdsyX...8QQVt1x3 2026-07-29 03:49:00 5731.5kH/s 3728132 20622ea9deea 1/1 70 donor +47NF5Nbe...nMs9DDJU 2026-07-29 02:47:01 5525.8kH/s 3728100 07c3a7dad621 1/1 9 donor_whale +45P4vJUA...TE4PUAu9 2026-07-29 01:44:55 5016.9kH/s 3728071 6998955ef2d1 1/1 167 vip +48M2j8Gj...d8KgGBwa 2026-07-29 00:42:38 4868.7kH/s 3728053 cb065a9c3967 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-28 23:44:02 5389.2kH/s 3728025 ab05415c2b1b 1/1 1 donor_mega +45qivXhp...BSS1mtoq 2026-07-28 22:41:10 5692.6kH/s 3728001 68a011e39053 1/1 31 donor_vip +48xVox2n...oQM27PR1 2026-07-28 21:39:00 5309.7kH/s 3727981 992aa5435e68 1/1 69 donor +4B2Avc2j...5JCEaaNs 2026-07-28 20:36:17 5279.3kH/s 3727951 1d72b8edc030 1/1 31 donor_vip +46Rb9Hjc...57AFUnq5 2026-07-28 19:34:03 3345.4kH/s 3727933 9514ed3ccaf2 1/1 31 donor_vip +4AYJotaL...USi2XQ7u 2026-07-28 17:43:02 4574.4kH/s 3727884 6d91e59e8633 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-28 16:41:05 5671.3kH/s 3727856 0bc82def1d08 1/1 1 donor_mega +481ELpyU...mCQhPM2f 2026-07-28 15:39:07 3677.8kH/s 3727834 868acf8de1e0 1/1 31 donor_vip +421n6hRs...61UsZuDG 2026-07-28 13:12:26 5658.3kH/s 3727773 70a65ea5e032 1/1 7 donor_whale +421n6hRs...61UsZuDG 2026-07-28 12:14:03 4776.6kH/s 3727744 de81dcc04c5f 1/1 7 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-28 11:12:00 6090.1kH/s 3727713 f3e2a0154c6d 1/1 1 donor_mega +45wQcnHH...kR5qUREN 2026-07-28 10:09:10 6301.2kH/s 3727682 f0f0f913705b 1/1 30 donor_vip +42NpvKMH...zAXwCRSb 2026-07-28 09:07:03 4890.1kH/s 3727645 0793fe1b9729 1/1 5 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-28 08:05:01 5952.8kH/s 3727611 6f345ca56d09 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-07-28 07:03:01 4896.2kH/s 3727583 e697113905a8 1/1 5 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-28 06:00:29 4755.6kH/s 3727557 8abbbe7c75b6 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-28 05:02:00 6010.8kH/s 3727526 6ca6a8aaca32 1/1 1 donor_mega +48LNi6pk...5DomVmR2 2026-07-28 04:00:00 4495.1kH/s 3727488 d8984507428a 1/1 5 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-28 02:57:27 4577.6kH/s 3727460 81deef289b97 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-28 01:58:26 4641.0kH/s 3727428 af4cf8a3f2ac 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-28 00:59:27 4354.0kH/s 3727395 fe64f01f1aac 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-28 00:00:29 4439.4kH/s 3727360 0e3b4521acd1 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-27 23:01:27 4485.3kH/s 3727328 7db427c7714d 1/1 5 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-27 22:02:12 5202.4kH/s 3727304 5faa9f8577ba 1/1 1 donor_mega +43tg9ebV...GLspBx9P 2026-07-27 21:00:02 3956.0kH/s 3727278 6ed840e22290 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-27 19:57:27 4382.1kH/s 3727252 504b5cf93efe 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-27 18:59:03 5351.0kH/s 3727239 3d383e77ec44 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-07-27 17:57:01 4937.1kH/s 3727203 1fd88daa1f49 1/1 5 donor_whale +42NpvKMH...zAXwCRSb 2026-07-27 16:55:03 3787.3kH/s 3727183 89527357cc11 1/1 5 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-27 15:52:28 2754.3kH/s 3727146 2b40ad29af20 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-27 14:12:11 4180.3kH/s 3727106 b9095b3700c6 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-07-27 13:10:03 4939.1kH/s 3727084 ae674dbff61f 1/1 5 donor_whale +48wF5CTP...zF7tEmWC 2026-07-27 12:08:01 4913.9kH/s 3727055 4ece5804c111 1/1 31 donor_vip +4AyiUbKF...uJpsC4ym 2026-07-27 11:06:01 3307.2kH/s 3727029 695ab34411fd 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-27 10:04:02 5092.8kH/s 3726994 b676ce3d9c1a 1/1 1 donor_mega +43nvW9WJ...e7SmCf3o 2026-07-27 09:02:01 4866.3kH/s 3726966 28baf765b943 1/1 30 donor_vip +42NpvKMH...zAXwCRSb 2026-07-27 07:59:25 2480.8kH/s 3726936 4293491a1a33 1/1 5 donor_whale +42NpvKMH...zAXwCRSb 2026-07-27 06:34:02 3725.9kH/s 3726891 7e24c0740589 1/1 5 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-27 05:31:27 3081.6kH/s 3726862 f0ff08618b77 1/1 5 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-27 04:22:26 3916.8kH/s 3726837 0cf2fd8034e3 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-27 03:24:00 4777.2kH/s 3726816 dc7ae22a0d5c 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-07-27 02:21:59 5133.8kH/s 3726787 1d92b0c93134 1/1 9 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-27 01:19:09 3996.6kH/s 3726758 ccebed353c33 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-27 00:16:59 5510.5kH/s 3726729 7ab0268f51e4 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-26 23:14:12 5529.2kH/s 3726693 355a4643780b 1/1 9 donor_whale +48LNi6pk...5DomVmR2 2026-07-26 22:11:58 4359.3kH/s 3726657 ff55d1517f46 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-26 21:09:15 5480.6kH/s 3726615 4d2b474a6d9b 1/1 1 donor_mega +4AYJotaL...USi2XQ7u 2026-07-26 20:07:00 5080.1kH/s 3726562 5a845fa9ce2f 1/1 34 donor_vip +43nvW9WJ...e7SmCf3o 2026-07-26 19:05:01 5829.5kH/s 3726510 a34fe1f11ec5 1/1 34 donor_vip +42NpvKMH...zAXwCRSb 2026-07-26 18:03:00 5300.4kH/s 3726463 edcb02862434 1/1 32 donor_vip +47NF5Nbe...nMs9DDJU 2026-07-26 17:01:00 5515.8kH/s 3726426 f35a9b41e28f 1/1 9 donor_whale +49fV8TjN...GSgrDzrU 2026-07-26 15:59:03 5543.8kH/s 3726392 d749d1f8c344 1/1 9 donor_whale +464Bdn7D...wTbYVfF1 2026-07-26 14:56:14 5395.6kH/s 3726360 3e1bd0ed947b 1/1 34 donor_vip +421n6hRs...61UsZuDG 2026-07-26 13:54:01 5400.9kH/s 3726325 fbfe68991165 1/1 34 donor_vip +4AGJScWS...f6SvY5p5 2026-07-26 12:51:56 4521.1kH/s 3726297 56f2a33b1d70 1/1 4 mvp +48M2j8Gj...d8KgGBwa 2026-07-26 11:50:01 3357.4kH/s 3726272 623e471b4a10 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-07-26 10:03:00 4707.8kH/s 3726222 9951637264ef 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-26 09:00:27 3246.5kH/s 3726189 7bba268a7a6d 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-26 07:36:37 4424.4kH/s 3726132 19e0a6f6568a 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-26 06:37:27 5033.7kH/s 3726098 b6229cfc474a 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-26 05:38:27 4990.5kH/s 3726070 aa5f69ccba60 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-26 04:40:08 6423.1kH/s 3726042 e54c52bc1b58 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-26 03:37:59 6059.7kH/s 3726015 5e10dcbcc796 1/1 10 donor_whale +49fV8TjN...GSgrDzrU 2026-07-26 02:35:59 4377.9kH/s 3725986 ac4db8b0bf82 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-26 01:33:38 4199.0kH/s 3725959 74bdd6959388 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-26 00:34:42 4354.9kH/s 3725924 4a89c3dd1e63 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-25 23:35:38 4419.4kH/s 3725887 4eeed55ae3cb 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-25 22:36:37 4357.9kH/s 3725866 770c761d7fb7 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-25 21:38:01 5791.5kH/s 3725832 138b19cfa901 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-07-25 20:36:02 4507.4kH/s 3725808 22a2d9b368d7 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-25 19:33:13 5915.1kH/s 3725778 cf0ffa506ef2 1/1 11 donor_whale +42Mk3F3y...Q6fgUTJr 2026-07-25 18:31:01 4719.6kH/s 3725744 a2e2bbc5aaf9 1/1 10 donor_whale +46PsTAqp...o2VDhm5j 2026-07-25 17:20:02 5036.0kH/s 3725704 d4814747586e 1/1 32 donor_vip +49fV8TjN...GSgrDzrU 2026-07-25 16:18:01 4621.3kH/s 3725676 2ebde127e5ec 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-25 15:15:28 4472.8kH/s 3725648 68c4ac42e58c 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-25 14:16:31 3690.2kH/s 3725624 f0e511b1d98d 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-25 13:07:18 5522.7kH/s 3725588 c589a19427fc 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-07-25 12:05:12 4431.5kH/s 3725552 294bf3881e36 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-25 11:02:26 4436.1kH/s 3725515 fecf5261f64c 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-25 10:03:29 3397.5kH/s 3725484 7eef4da92e64 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-25 09:04:31 4188.6kH/s 3725445 de47b156e2bd 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-25 08:06:00 5235.5kH/s 3725415 19cc42db0a92 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-07-25 07:04:03 5358.3kH/s 3725393 14146a035220 1/1 31 donor_vip +4AGJScWS...f6SvY5p5 2026-07-25 06:02:08 3880.4kH/s 3725371 f2e0ed5d059a 1/1 4 mvp +48M2j8Gj...d8KgGBwa 2026-07-25 05:00:01 4217.9kH/s 3725330 1b9fd6ee4546 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-07-25 03:57:26 5598.5kH/s 3725301 ba631411cba1 1/1 10 donor_whale +42NpvKMH...zAXwCRSb 2026-07-25 02:59:00 5823.4kH/s 3725281 54e0e644afe1 1/1 11 donor_whale +47sctNyW...JBFt8g8K 2026-07-25 01:56:11 4554.3kH/s 3725256 ea21201fd817 1/1 30 donor_vip +42Mk3F3y...Q6fgUTJr 2026-07-25 00:54:01 4041.6kH/s 3725227 5bb44d177f5c 1/1 11 donor_whale +4AEAX3qs...vTU56zMr 2026-07-24 23:36:00 5359.1kH/s 3725191 d0c0e64852d7 1/1 31 donor_vip +47NF5Nbe...nMs9DDJU 2026-07-24 22:34:01 5880.9kH/s 3725164 9752d30d2912 1/1 11 donor_whale +48wF5CTP...zF7tEmWC 2026-07-24 21:32:00 4185.9kH/s 3725130 876068c2c4a2 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-24 20:30:01 5531.2kH/s 3725099 3cf993ff565e 1/1 1 donor_mega +48LNi6pk...5DomVmR2 2026-07-24 19:28:00 5882.0kH/s 3725074 dcdf8003fdec 1/1 10 donor_whale +49fV8TjN...GSgrDzrU 2026-07-24 18:26:01 5194.2kH/s 3725036 3b55816a55d0 1/1 10 donor_whale +45qivXhp...BSS1mtoq 2026-07-24 17:16:01 3549.9kH/s 3725002 e937e887cb3a 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-24 14:36:01 5243.1kH/s 3724940 08ecd845cef7 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-24 13:33:12 5661.7kH/s 3724908 6521871487ab 1/1 10 donor_whale +42NpvKMH...zAXwCRSb 2026-07-24 12:31:02 5710.8kH/s 3724880 d282d4d0dc83 1/1 10 donor_whale +4895aAGt...g5P9n4Nq 2026-07-24 11:28:11 4555.8kH/s 3724849 eadf098703ab 1/1 70 donor +48M2j8Gj...d8KgGBwa 2026-07-24 10:25:26 4532.2kH/s 3724820 577431699d1d 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-24 09:26:28 4665.4kH/s 3724790 169bc39c4db0 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-24 08:27:26 4654.2kH/s 3724758 17b8a5bf0256 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-24 07:28:36 3609.8kH/s 3724729 f7321599ce9f 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-24 06:10:02 3524.5kH/s 3724681 a1f7f781197c 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-07-24 02:48:59 4151.2kH/s 3724611 45d6d3fa40c0 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-24 01:46:10 3632.3kH/s 3724577 261c4a0a9ed7 1/1 1 donor_mega +44aZ9ce8...i1Hxzm1M 2026-07-24 00:09:10 4292.3kH/s 3724535 6b3146bd4d08 1/1 29 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-23 23:06:59 5916.7kH/s 3724504 843f19ab4500 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-23 22:05:01 5695.6kH/s 3724471 4b61135b0d52 1/1 11 donor_whale +47NF5Nbe...nMs9DDJU 2026-07-23 21:02:59 4328.9kH/s 3724443 ec97df025ede 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-23 20:00:33 4843.7kH/s 3724416 1ed468fb2686 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-23 19:01:26 4136.4kH/s 3724389 a526977d87c3 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-23 18:02:09 5566.6kH/s 3724371 9849197d4330 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-23 17:00:01 3791.0kH/s 3724343 7a8055893792 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-23 15:51:11 5532.0kH/s 3724318 51b9d71d6c4a 1/1 1 donor_mega +49fV8TjN...GSgrDzrU 2026-07-23 14:48:27 5755.5kH/s 3724282 55b8a07547ed 1/1 11 donor_whale +49fV8TjN...GSgrDzrU 2026-07-23 13:49:00 5778.5kH/s 3724252 6f0de4ff561a 1/1 28 donor_vip +44MnN1f3...a621jwyg 2026-07-23 12:46:58 4423.9kH/s 3724222 9700a0ca36b5 1/1 4 mvp +48M2j8Gj...d8KgGBwa 2026-07-23 11:44:58 5016.3kH/s 3724191 ae5c01fa87c2 1/1 1 donor_mega +42m2kLta...aDULT2Qj 2026-07-23 10:41:58 4494.0kH/s 3724163 e21ecfd1dc66 1/1 27 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-23 09:39:36 4282.4kH/s 3724138 8cf5ec06b21a 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-23 08:40:28 3373.0kH/s 3724107 00668cfd5f25 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-23 07:24:58 3348.8kH/s 3724059 ff31a1bd3d63 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-23 05:43:01 5462.8kH/s 3724013 5614e61bc447 1/1 11 donor_whale +45wQcnHH...kR5qUREN 2026-07-23 04:40:10 4561.8kH/s 3723976 1579c895099d 1/1 27 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-23 03:37:25 4604.0kH/s 3723948 6e98b07a38d8 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-23 02:38:37 4649.6kH/s 3723916 a33598fd9ff2 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-23 01:40:00 5459.5kH/s 3723882 7a9e8203197b 1/1 1 donor_mega +48xVox2n...oQM27PR1 2026-07-23 00:38:04 4267.7kH/s 3723858 541813a7a52b 1/1 28 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-22 23:35:34 4330.4kH/s 3723832 0924ca8e429a 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-22 22:37:00 5857.5kH/s 3723796 9a5389a8b0e0 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-07-22 21:35:02 4500.2kH/s 3723763 3a54effc0012 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-22 20:33:04 5748.4kH/s 3723736 95540e9c71fc 1/1 1 donor_mega +48LNi6pk...5DomVmR2 2026-07-22 19:31:00 4717.8kH/s 3723719 c04cfd252d0a 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-22 18:28:36 4642.3kH/s 3723686 159c870ff571 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-22 17:29:36 4368.9kH/s 3723666 287168031449 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-22 16:30:38 4816.9kH/s 3723638 1428e685cb63 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-22 15:31:26 4626.1kH/s 3723619 459e2fb48c03 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-22 14:32:11 5794.8kH/s 3723593 26f0f93981bd 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-22 13:29:27 5333.2kH/s 3723570 a79162983914 1/1 11 donor_whale +42mefDQX...pJw9nygF 2026-07-22 12:30:59 3995.7kH/s 3723534 283eb8a2d6b6 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-22 11:28:26 3991.2kH/s 3723504 3160cd55ca64 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-22 10:29:28 4300.3kH/s 3723478 879d8c061dc0 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-22 09:30:29 3656.8kH/s 3723447 e28be640b303 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-22 07:59:08 5673.7kH/s 3723382 8367bdbece7e 1/1 1 donor_mega +46PsTAqp...o2VDhm5j 2026-07-22 06:57:00 4669.0kH/s 3723341 ac1eb47f1aa8 1/1 65 donor +48M2j8Gj...d8KgGBwa 2026-07-22 05:55:01 5770.7kH/s 3723304 739e92e0710a 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-07-22 04:52:26 5450.8kH/s 3723274 6d131f16f3ac 1/1 11 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-22 03:53:59 4418.7kH/s 3723247 52ef38cc2c08 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-22 02:51:31 4816.1kH/s 3723209 4690c27c00fa 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-22 01:52:35 4662.3kH/s 3723174 996944893ee6 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-22 00:53:25 4176.4kH/s 3723127 dc249379c958 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-21 23:54:26 4716.7kH/s 3723100 18d8133e2338 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-21 22:56:02 5531.2kH/s 3723057 47be0a672396 1/1 11 donor_whale +4AyiUbKF...uJpsC4ym 2026-07-21 21:54:01 4726.9kH/s 3723032 ea80fc511e15 1/1 33 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-21 20:52:08 5695.0kH/s 3722999 b357882e2814 1/1 1 donor_mega +421n6hRs...61UsZuDG 2026-07-21 19:50:00 4730.0kH/s 3722960 e3d353a96513 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-21 18:47:59 4550.9kH/s 3722925 857475dcb19c 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-21 17:45:58 4613.7kH/s 3722893 934b6efbf2df 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-21 16:43:26 4739.9kH/s 3722859 4e8e6ecf6acf 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-21 15:44:27 4882.8kH/s 3722833 3008f2578c07 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-21 14:46:01 5828.7kH/s 3722808 a7d665843aee 1/1 10 donor_whale +43CcbPH8...uQWupVW5 2026-07-21 13:44:03 5598.9kH/s 3722783 0c9e20627b7b 1/1 29 donor_vip +421n6hRs...61UsZuDG 2026-07-21 12:39:02 5831.0kH/s 3722745 e0a1a0a91c13 1/1 10 donor_whale +42mefDQX...pJw9nygF 2026-07-21 11:37:01 4829.6kH/s 3722709 bb20aa7e6ed3 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-21 10:35:01 4016.2kH/s 3722673 a67a70fad4c8 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-07-21 08:37:11 4289.6kH/s 3722604 5d212abdfdc4 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-21 07:34:27 4506.0kH/s 3722572 23928200d56c 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-21 06:35:59 5405.1kH/s 3722543 dacec3a0a77f 1/1 1 donor_mega +48LNi6pk...5DomVmR2 2026-07-21 05:33:09 5546.8kH/s 3722511 5a9739cca3eb 1/1 11 donor_whale +43CcbPH8...uQWupVW5 2026-07-21 04:30:27 5709.0kH/s 3722475 3fa849821629 1/1 12 donor_whale +47NF5Nbe...nMs9DDJU 2026-07-21 03:27:57 4404.9kH/s 3722439 347688f996e8 1/1 12 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-21 02:25:59 5705.7kH/s 3722411 ddf2425fe87a 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-07-21 01:24:00 5813.8kH/s 3722390 cf42a26e4b69 1/1 12 donor_whale +43tg9ebV...GLspBx9P 2026-07-21 00:21:59 4859.6kH/s 3722369 3491e6866485 1/1 33 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-20 23:19:35 4208.0kH/s 3722336 54e0ac1fa796 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-20 22:20:26 4220.8kH/s 3722316 256c0ba5d91e 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-20 21:21:27 4991.1kH/s 3722298 f5f79085ddab 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-20 20:22:27 4611.8kH/s 3722268 256cfee84c14 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-20 19:24:00 5603.9kH/s 3722230 f69c7a6dac0c 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-07-20 18:22:02 4470.2kH/s 3722199 914d85fec077 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-20 17:19:59 5894.2kH/s 3722172 a1b8c6fe134b 1/1 1 donor_mega +4AuNNHgo...n8VXcgEe 2026-07-20 16:17:58 5080.5kH/s 3722139 1b0896204d12 1/1 31 donor_vip +49m4aWKb...VT3dB1iR 2026-07-20 15:10:59 5847.9kH/s 3722104 b748588cd377 1/1 71 donor +486aGn4q...F8wjAE5R 2026-07-20 14:08:55 5969.8kH/s 3722078 e51bea234dac 1/1 4 mvp +42Mk3F3y...Q6fgUTJr 2026-07-20 13:06:59 5553.2kH/s 3722036 695d7c08d36e 1/1 11 donor_whale +42mefDQX...pJw9nygF 2026-07-20 12:04:59 4930.7kH/s 3721995 c8fa657040b0 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-20 11:02:26 4979.4kH/s 3721965 e9dcdc9d1152 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-20 10:04:00 6080.9kH/s 3721935 72cd9e0a8f69 1/1 1 donor_mega +45wQcnHH...kR5qUREN 2026-07-20 09:01:59 3930.2kH/s 3721902 72a481b9481d 1/1 32 donor_vip +47NF5Nbe...nMs9DDJU 2026-07-20 07:03:59 4855.8kH/s 3721840 3c9921175717 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-20 06:01:58 5331.1kH/s 3721818 823eb9c1b7de 1/1 1 donor_mega +4B2Avc2j...5JCEaaNs 2026-07-20 04:59:57 6210.2kH/s 3721796 e3d3436342b5 1/1 29 donor_vip +46Rb9Hjc...57AFUnq5 2026-07-20 03:58:06 6228.6kH/s 3721769 ab9e06c6274c 1/1 10 donor_whale +48LNi6pk...5DomVmR2 2026-07-20 02:55:57 4963.7kH/s 3721731 fb5df7f6d152 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-20 01:53:58 4126.6kH/s 3721699 40feefe40662 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-07-20 00:15:58 6406.7kH/s 3721647 451ceca4bf63 1/1 10 donor_whale +4AeEwC2U...YQyoQtr7 2026-07-19 23:14:02 5227.4kH/s 3721621 a52d7f3c706d 1/1 4 mvp +48M2j8Gj...d8KgGBwa 2026-07-19 22:11:58 5627.5kH/s 3721590 c9f38b3300b8 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-07-19 21:09:57 5643.3kH/s 3721552 6931aef5a22c 1/1 29 donor_vip +47NF5Nbe...nMs9DDJU 2026-07-19 20:07:58 5733.6kH/s 3721528 fb28ce076d4b 1/1 10 donor_whale +48LNi6pk...5DomVmR2 2026-07-19 19:05:59 5615.7kH/s 3721488 fde5ae16dd03 1/1 10 donor_whale +4298Vwxn...cJHXZb9k 2026-07-19 18:03:55 5612.0kH/s 3721460 d2ba432d75b0 1/1 178 vip +43nvW9WJ...e7SmCf3o 2026-07-19 17:01:58 5448.9kH/s 3721430 8451814bee84 1/1 30 donor_vip +48wF5CTP...zF7tEmWC 2026-07-19 15:59:09 5355.1kH/s 3721405 ff53a9546c7c 1/1 10 donor_whale +42NJbX1p...JBe7i8b2 2026-07-19 14:56:59 5190.4kH/s 3721380 b3de69d509c7 1/1 30 donor_vip +46YxbLMT...UUmVmbGn 2026-07-19 13:51:58 5864.9kH/s 3721342 3184c7cdf959 2/1 70 donor +4AEAX3qs...vTU56zMr 2026-07-19 12:49:58 3276.9kH/s 3721314 38a0c8b641ff 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-19 11:01:58 5709.5kH/s 3721272 bf28c0c09dc0 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-07-19 09:59:59 5670.2kH/s 3721245 8b19199b58c5 1/1 70 donor +42mefDQX...pJw9nygF 2026-07-19 08:58:03 4421.2kH/s 3721215 f469ec4700bc 1/1 28 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-19 07:55:59 5777.2kH/s 3721183 d13813570935 1/1 1 donor_mega +487SyiQC...aSGcaBDE 2026-07-19 06:53:10 4675.3kH/s 3721151 07b41bbdb3ce 1/1 27 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-19 05:50:25 4154.5kH/s 3721120 b00964a4674a 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-19 04:51:58 5555.9kH/s 3721083 4a8cd4b0cab0 1/1 1 donor_mega +49fV8TjN...GSgrDzrU 2026-07-19 03:49:55 4747.9kH/s 3721053 2ebbbffe54eb 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-19 02:47:24 4276.2kH/s 3721025 05bbf74c837e 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-19 01:49:07 5188.6kH/s 3720997 0248bbce4c7c 1/1 10 donor_whale +4AyiUbKF...uJpsC4ym 2026-07-19 00:47:08 4377.5kH/s 3720950 bc6c9dffb8d9 1/1 27 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-18 23:44:24 4337.9kH/s 3720917 7932e63b1a1b 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-18 22:45:57 5493.3kH/s 3720882 4965f4c63001 1/1 1 donor_mega +48C1CiKC...i9qJPCF9 2026-07-18 21:43:58 4306.9kH/s 3720855 3c97a2a4f3dd 1/1 75 donor +48M2j8Gj...d8KgGBwa 2026-07-18 20:41:38 4203.5kH/s 3720833 0525a913e879 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-18 19:42:24 4641.4kH/s 3720812 d414bfa3e054 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-18 18:44:01 5619.8kH/s 3720782 c351b2595f7c 1/1 1 donor_mega +47sctNyW...JBFt8g8K 2026-07-18 17:42:00 4027.1kH/s 3720742 630b59612166 1/1 27 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-18 16:39:25 4624.8kH/s 3720719 e05bea93bdce 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-18 15:40:26 4272.2kH/s 3720688 1776517ac4dd 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-18 14:41:35 4119.8kH/s 3720653 08b7f3178a72 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-18 13:43:01 5058.4kH/s 3720618 6a29b4bc97b1 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-18 12:40:58 5941.8kH/s 3720595 65c832683693 1/1 10 donor_whale +421n6hRs...61UsZuDG 2026-07-18 11:38:58 4223.7kH/s 3720566 a38a36362666 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-18 10:36:08 5555.3kH/s 3720538 211cc6bf2635 1/1 1 donor_mega +48LNi6pk...5DomVmR2 2026-07-18 09:33:59 6093.4kH/s 3720517 fad7967486e5 1/1 10 donor_whale +42Mk3F3y...Q6fgUTJr 2026-07-18 08:31:58 4683.7kH/s 3720478 37af4dd7244b 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-18 07:29:26 4160.9kH/s 3720453 0ba8adf8c7b4 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-18 06:30:26 4584.1kH/s 3720432 5dd77b0aca60 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-18 05:31:58 5704.3kH/s 3720404 8008e4f8b695 1/1 1 donor_mega +48b1zteM...a6BJoFL8 2026-07-18 04:29:57 5752.3kH/s 3720375 eb6db7cbcbe9 1/1 68 donor +46PsTAqp...o2VDhm5j 2026-07-18 03:27:58 5574.7kH/s 3720331 ce3461dc9491 1/1 27 donor_vip +42m2kLta...aDULT2Qj 2026-07-18 02:25:57 5921.5kH/s 3720292 dcd5dc3ec0a7 1/1 27 donor_vip +46Rb9Hjc...57AFUnq5 2026-07-18 01:23:56 4490.7kH/s 3720242 aa972db9ec4c 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-18 00:21:56 5638.4kH/s 3720215 390c14bf712f 1/1 1 donor_mega +42XnhJTN...EPxRtsmc 2026-07-17 23:20:03 5403.6kH/s 3720179 aea9d44ab542 1/1 177 vip +46Rb9Hjc...57AFUnq5 2026-07-17 22:17:58 5940.3kH/s 3720143 855a1c756e1a 1/1 9 donor_whale +48wF5CTP...zF7tEmWC 2026-07-17 21:16:08 4400.5kH/s 3720112 1738b92ff0ae 1/1 26 donor_vip +47NF5Nbe...nMs9DDJU 2026-07-17 19:55:08 5696.3kH/s 3720076 3b78e6783b76 1/1 9 donor_whale +421n6hRs...61UsZuDG 2026-07-17 18:51:25 5451.2kH/s 3720053 3e5a491fcbd0 1/1 9 donor_whale +421n6hRs...61UsZuDG 2026-07-17 17:52:58 4447.1kH/s 3720014 c2887677affb 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-17 16:50:09 5897.5kH/s 3719986 d8feb4003f12 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-17 15:47:59 5728.1kH/s 3719953 b4edeefe5c5e 1/1 8 donor_whale +421n6hRs...61UsZuDG 2026-07-17 14:45:59 5482.4kH/s 3719916 7e01d4a02ccb 1/1 28 donor_vip +42NpvKMH...zAXwCRSb 2026-07-17 13:43:27 5541.6kH/s 3719886 8aaf469913d3 1/1 8 donor_whale +42NpvKMH...zAXwCRSb 2026-07-17 12:45:00 4552.0kH/s 3719841 2a8e823af040 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-17 11:42:26 4248.3kH/s 3719811 6449b85cc2e7 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-17 10:44:01 3166.4kH/s 3719776 2e1b0b2fa9da 1/1 1 donor_mega +48LNi6pk...5DomVmR2 2026-07-17 08:27:59 5541.5kH/s 3719724 21ff13c97c12 1/1 26 donor_vip +486aGn4q...F8wjAE5R 2026-07-17 07:25:54 5273.0kH/s 3719699 e46e7eadad90 1/1 4 mvp +42NpvKMH...zAXwCRSb 2026-07-17 06:24:06 3480.9kH/s 3719666 c1dcb9f7f144 1/1 7 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-17 04:35:23 4321.6kH/s 3719605 6cdc11ea4b39 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-17 03:36:55 5260.8kH/s 3719574 5fedbe6be5f3 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-17 02:34:56 5181.3kH/s 3719535 963cdc49672e 1/1 8 donor_whale +47sctNyW...JBFt8g8K 2026-07-17 01:32:56 5048.8kH/s 3719505 81eef1f83699 1/1 27 donor_vip +47NF5Nbe...nMs9DDJU 2026-07-17 00:22:58 4210.0kH/s 3719468 cb52f4393c35 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-16 23:20:57 5234.0kH/s 3719446 dd522d1e7bfe 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-16 22:18:58 5320.6kH/s 3719413 d2ab4d1e8c0e 1/1 8 donor_whale +48wF5CTP...zF7tEmWC 2026-07-16 21:16:58 4398.2kH/s 3719379 d3d0a05acb83 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-16 20:15:00 3826.2kH/s 3719339 59450ca42519 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-16 18:58:59 2288.5kH/s 3719305 0aacecb1a97e 1/1 9 donor_whale +47NF5Nbe...nMs9DDJU 2026-07-16 16:51:59 5469.6kH/s 3719237 84f25b497474 1/1 9 donor_whale +49fV8TjN...GSgrDzrU 2026-07-16 15:49:08 4171.7kH/s 3719210 6566abce4808 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-16 14:46:25 4082.8kH/s 3719186 e7ea63461c92 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-16 13:47:59 5429.7kH/s 3719155 4e302cf3d823 1/1 1 donor_mega +421n6hRs...61UsZuDG 2026-07-16 12:46:00 4672.1kH/s 3719122 5a127a99b97e 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-16 11:44:00 5288.6kH/s 3719090 d72436140339 1/1 1 donor_mega +49YoCEDi...x97dHeGQ 2026-07-16 10:41:58 5754.7kH/s 3719063 c5202812f883 1/1 28 donor_vip +46Rb9Hjc...57AFUnq5 2026-07-16 09:39:58 3225.6kH/s 3719040 9a602c965031 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-16 07:41:35 4396.3kH/s 3718989 0a80aa9e5533 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-16 06:42:26 4429.8kH/s 3718969 7f8083d5836e 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-16 05:43:26 4359.7kH/s 3718946 f1faa2493074 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-16 04:44:58 5275.6kH/s 3718918 5f7df96778fa 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-07-16 03:42:59 5514.3kH/s 3718892 7225ec7ca701 1/1 10 donor_whale +48LNi6pk...5DomVmR2 2026-07-16 02:40:56 4429.8kH/s 3718861 835e6da5cb01 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-16 01:38:24 4435.1kH/s 3718832 49bf8474260c 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-16 00:40:04 5485.9kH/s 3718807 aa08e4b400d6 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-15 23:37:57 4668.1kH/s 3718778 7159a6285363 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-15 22:34:58 5360.5kH/s 3718750 1d40ae06616c 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-15 21:28:58 4875.1kH/s 3718717 e458ff23831a 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-15 20:26:39 4497.4kH/s 3718687 801bd67f9aed 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-15 19:28:00 3797.1kH/s 3718651 c7a7c0f46e04 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-15 17:47:07 5752.7kH/s 3718618 b43ed4b18d5e 1/1 8 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-15 16:44:36 5723.6kH/s 3718595 24266b10dfa3 1/1 8 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-15 15:45:08 4456.3kH/s 3718570 6ccbdb14a0c5 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-15 14:42:35 4302.8kH/s 3718541 d260b1f72905 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-15 13:44:00 5599.7kH/s 3718515 29d37ad42f36 1/1 1 donor_mega +49fV8TjN...GSgrDzrU 2026-07-15 12:41:59 4684.0kH/s 3718484 4901dc6ef903 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-15 11:39:26 4172.7kH/s 3718457 87a2af440c3b 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-15 10:40:58 5281.6kH/s 3718427 2cec1cbffbf9 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-07-15 09:39:01 4576.3kH/s 3718399 72c5fcfbbd26 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-15 08:37:07 5355.5kH/s 3718356 8f7f664db71f 1/1 31 donor_vip +421n6hRs...61UsZuDG 2026-07-15 07:34:57 5296.0kH/s 3718316 1d1f4632c41c 1/1 8 donor_whale +487SyiQC...aSGcaBDE 2026-07-15 06:32:58 5466.0kH/s 3718284 74afc8a1f24c 1/1 29 donor_vip +42NpvKMH...zAXwCRSb 2026-07-15 05:30:59 5238.8kH/s 3718253 88c2b61b7142 1/1 9 donor_whale +42mefDQX...pJw9nygF 2026-07-15 04:28:57 4469.9kH/s 3718223 5b8498f76da2 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-15 03:26:55 5758.3kH/s 3718191 05a4413d3435 1/1 1 donor_mega +42m2kLta...aDULT2Qj 2026-07-15 02:24:56 4165.1kH/s 3718160 9cbf7f455c21 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-15 01:22:23 4676.2kH/s 3718128 342682d5aab4 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-15 00:23:26 4207.4kH/s 3718089 f9c0aa6c8302 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-14 23:24:24 4502.3kH/s 3718059 a64f2354223e 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-14 22:25:24 4668.2kH/s 3718033 d9698104cccc 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-14 21:26:58 5394.8kH/s 3718012 60d82b874c13 1/1 1 donor_mega +48xVox2n...oQM27PR1 2026-07-14 20:24:10 5249.7kH/s 3717980 5e2a7146429b 1/1 32 donor_vip +47NF5Nbe...nMs9DDJU 2026-07-14 19:21:58 4246.0kH/s 3717952 ed7a97581379 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-14 18:19:59 5464.0kH/s 3717930 2388fe9bd52b 1/1 1 donor_mega +46PsTAqp...o2VDhm5j 2026-07-14 17:18:00 5106.2kH/s 3717911 408d5d2af6f7 1/1 31 donor_vip +47NF5Nbe...nMs9DDJU 2026-07-14 16:16:07 5102.7kH/s 3717893 2cfbbf9d8c4f 1/1 8 donor_whale +48wF5CTP...zF7tEmWC 2026-07-14 15:13:59 3985.4kH/s 3717859 62c34c56a47f 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-14 14:11:27 3720.3kH/s 3717835 97037644aaaa 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-14 13:12:25 4400.6kH/s 3717800 0c605570ec3b 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-14 12:14:00 5664.5kH/s 3717746 d06bf3e5ba29 1/1 1 donor_mega +43nvW9WJ...e7SmCf3o 2026-07-14 11:11:59 5323.0kH/s 3717714 e52de31296f9 1/1 30 donor_vip +42NpvKMH...zAXwCRSb 2026-07-14 10:09:07 4755.9kH/s 3717668 9944162bc084 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-14 09:06:57 5659.4kH/s 3717635 cb00ec5f50bd 1/1 9 donor_whale +45wQcnHH...kR5qUREN 2026-07-14 08:04:59 4421.6kH/s 3717591 5a3f6dc7efdc 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-14 07:02:24 4514.4kH/s 3717546 5f0bfd36a27a 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-14 06:03:24 4501.7kH/s 3717516 7abca6ac6427 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-14 05:04:59 5817.8kH/s 3717480 349e828e816e 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-07-14 04:02:56 4665.8kH/s 3717445 c6d02403cf3c 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-14 03:00:57 5732.0kH/s 3717417 0f240273b937 1/1 1 donor_mega +42cg1PYJ...o43XGcrP 2026-07-14 01:59:05 3593.8kH/s 3717390 895ecdab5723 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-14 00:43:03 5717.4kH/s 3717358 7aec1f5afe2a 1/1 8 donor_whale +47NF5Nbe...nMs9DDJU 2026-07-13 23:40:56 5677.7kH/s 3717323 e576817cdd64 1/1 8 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-13 22:38:24 5438.7kH/s 3717293 e255bca2a69d 1/1 8 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-13 21:40:06 4491.7kH/s 3717259 6a126003d938 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-13 20:37:24 4404.6kH/s 3717223 80b7e9dd9663 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-13 19:38:32 4368.0kH/s 3717196 b60e94709a21 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-13 18:39:26 4374.5kH/s 3717174 93ebea91c1a9 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-13 17:40:37 4409.3kH/s 3717139 6ed9224877d9 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-13 16:41:08 5182.8kH/s 3717118 3b048d88f04d 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-13 15:38:58 5529.4kH/s 3717092 c9c4f1cf10e3 1/1 8 donor_whale +487SyiQC...aSGcaBDE 2026-07-13 14:36:57 3207.0kH/s 3717068 d449544e2073 1/1 33 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-13 12:59:59 3252.8kH/s 3717015 fad6db3963af 1/1 1 donor_mega +43nvW9WJ...e7SmCf3o 2026-07-13 11:20:58 5598.3kH/s 3716966 9b0b1f8a6c08 1/1 33 donor_vip +46XNiJuL...DF62UR3s 2026-07-13 10:18:56 4087.6kH/s 3716945 c3b03cedf539 1/1 33 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-13 09:17:00 5226.6kH/s 3716921 65a61b0e496b 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-07-13 08:14:57 4284.8kH/s 3716902 beef94119938 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-13 07:13:00 5153.9kH/s 3716877 50b75743adf4 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-07-13 06:10:58 5775.0kH/s 3716853 8ac5d7f8ae40 1/1 32 donor_vip +46Rb9Hjc...57AFUnq5 2026-07-13 05:08:57 5930.2kH/s 3716823 61947cfcdbb8 1/1 12 donor_whale +464Bdn7D...wTbYVfF1 2026-07-13 04:06:56 3673.2kH/s 3716795 3cb36e5d57c9 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-13 02:17:32 4670.4kH/s 3716745 f6a25cf945bd 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-13 01:18:56 6021.1kH/s 3716716 a8661b9865b3 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-07-13 00:16:56 3819.6kH/s 3716682 1d0508fb8b98 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-12 22:57:55 5826.5kH/s 3716641 0e22a5b51732 1/1 1 donor_mega +43nvW9WJ...e7SmCf3o 2026-07-12 21:56:04 6068.0kH/s 3716602 c5217ade21d2 1/1 29 donor_vip +45S3XHby...A3Jwctmh 2026-07-12 20:53:56 5770.9kH/s 3716562 5116f090b3ab 2/1 175 vip +48wF5CTP...zF7tEmWC 2026-07-12 19:51:56 4833.0kH/s 3716537 440517e58f18 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-12 18:49:25 5015.8kH/s 3716508 79a4bb22c6b9 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-12 17:50:58 5441.4kH/s 3716480 02d9e5138709 1/1 1 donor_mega +4AEAX3qs...vTU56zMr 2026-07-12 16:49:07 6197.5kH/s 3716459 33e39e43f1ab 1/1 30 donor_vip +44aZ9ce8...i1Hxzm1M 2026-07-12 15:46:57 6162.3kH/s 3716437 67233045a8d8 1/1 31 donor_vip +42mefDQX...pJw9nygF 2026-07-12 14:44:57 4762.6kH/s 3716407 453c83e2ddf2 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-12 13:42:56 6057.8kH/s 3716378 94420ab47995 1/1 1 donor_mega +47d4QRof...jL5UqAKj 2026-07-12 12:40:56 5703.0kH/s 3716333 c4c8550ea750 1/1 66 donor +47NF5Nbe...nMs9DDJU 2026-07-12 11:39:03 3704.6kH/s 3716294 b1386004c338 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-12 10:24:55 5881.2kH/s 3716250 b9ed883c74c5 1/1 1 donor_mega +42m2kLta...aDULT2Qj 2026-07-12 09:22:56 4443.6kH/s 3716219 4bcff60d2b02 1/1 33 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-12 08:20:24 4441.9kH/s 3716184 b7f1604677ab 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-12 07:21:29 4721.1kH/s 3716147 77c0136c8d9f 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-12 06:22:22 3386.8kH/s 3716116 991f93853c61 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-12 04:44:55 5548.7kH/s 3716066 51e3b7069248 1/1 1 donor_mega +421n6hRs...61UsZuDG 2026-07-12 03:43:02 5685.4kH/s 3716030 2544f10ccb71 1/1 32 donor_vip +46Rb9Hjc...57AFUnq5 2026-07-12 02:40:57 5747.5kH/s 3715997 ca1d79e37455 1/1 12 donor_whale +487SyiQC...aSGcaBDE 2026-07-12 01:38:56 5148.3kH/s 3715952 680f7109722e 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-12 00:36:57 6141.6kH/s 3715912 7fef78808bd1 1/1 1 donor_mega +49fV8TjN...GSgrDzrU 2026-07-11 23:34:57 5007.5kH/s 3715867 44e300dda4f0 1/1 12 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-11 22:32:57 6086.5kH/s 3715824 f603ac3de16d 1/1 1 donor_mega +43nvW9WJ...e7SmCf3o 2026-07-11 21:31:03 6120.4kH/s 3715784 68ee8145ed6f 1/1 32 donor_vip +48b1zteM...a6BJoFL8 2026-07-11 20:29:00 5946.5kH/s 3715759 e30305855691 1/1 66 donor +464pdsyX...8QQVt1x3 2026-07-11 19:26:56 4842.8kH/s 3715728 2b555fce3e7a 1/1 67 donor +48M2j8Gj...d8KgGBwa 2026-07-11 18:24:23 3734.5kH/s 3715699 10c4a23132d3 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-11 17:11:24 4890.0kH/s 3715658 3af850c20343 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-11 16:12:57 5981.8kH/s 3715617 f57e2c92f41a 1/1 1 donor_mega +464Bdn7D...wTbYVfF1 2026-07-11 15:10:55 6308.0kH/s 3715590 0bd6a12835cc 1/1 179 vip +49fV8TjN...GSgrDzrU 2026-07-11 14:08:57 4797.3kH/s 3715566 9fed6f9221a0 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-11 13:07:06 5463.7kH/s 3715537 91c673fcb81a 1/1 1 donor_mega +421n6hRs...61UsZuDG 2026-07-11 12:04:12 5406.3kH/s 3715497 647bc6900dc8 1/1 10 donor_whale +4AyiUbKF...uJpsC4ym 2026-07-11 11:01:55 5702.1kH/s 3715469 f0dea3843aa1 1/1 33 donor_vip +4B2Avc2j...5JCEaaNs 2026-07-11 09:59:57 4508.6kH/s 3715437 e1885d6a38c4 1/1 34 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-11 08:57:57 5709.0kH/s 3715405 c972763fd72f 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-11 07:55:58 4036.6kH/s 3715376 84e18f9543c2 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-11 06:45:08 6001.7kH/s 3715336 1baef1fe6489 1/1 1 donor_mega +49ijD1Et...e7mEQxJ9 2026-07-11 05:42:56 5661.0kH/s 3715317 967186f0ef00 1/1 33 donor_vip +42Mk3F3y...Q6fgUTJr 2026-07-11 04:40:56 5572.2kH/s 3715291 e31666471196 1/1 10 donor_whale +47NF5Nbe...nMs9DDJU 2026-07-11 03:38:57 5786.8kH/s 3715261 ca6610948e19 1/1 10 donor_whale +45xA3Kgd...7Ma7ttaf 2026-07-11 02:36:54 4571.9kH/s 3715240 2d3ad1c46080 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-11 01:34:23 4357.8kH/s 3715207 0453e7754a26 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-11 00:35:59 6153.9kH/s 3715181 ee4e5b698172 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-07-10 23:33:57 5007.5kH/s 3715157 63c55c901dd1 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-10 22:31:24 5010.0kH/s 3715132 fb05df3aa86d 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-10 21:30:24 4835.8kH/s 3715114 53ced3e0f4b6 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-10 20:31:23 4870.2kH/s 3715087 3554adb0fe8b 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-10 19:32:23 4873.2kH/s 3715061 c63c2b64fb23 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-10 18:33:33 4999.6kH/s 3715043 597fb9d621e8 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-10 17:34:56 5963.1kH/s 3715015 7979530fda1f 1/1 1 donor_mega +49fV8TjN...GSgrDzrU 2026-07-10 16:32:57 4789.0kH/s 3714985 a78605a50f97 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-10 15:30:24 4543.3kH/s 3714954 cc4fade04245 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-10 14:31:22 4803.5kH/s 3714926 5b989794058e 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-10 13:32:22 4271.5kH/s 3714892 712e717a7dd6 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-10 12:30:58 5124.4kH/s 3714851 2ec33354c428 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-07-10 11:28:56 4315.2kH/s 3714815 dfad51ae8321 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-10 10:26:57 5509.1kH/s 3714780 846ffc6d0d63 1/1 1 donor_mega +43tg9ebV...GLspBx9P 2026-07-10 09:24:07 3263.4kH/s 3714744 27e0a82fb37a 1/1 30 donor_vip +49fV8TjN...GSgrDzrU 2026-07-10 08:01:05 5420.2kH/s 3714694 f8b002f8d6c0 1/1 10 donor_whale +48xVox2n...oQM27PR1 2026-07-10 06:58:56 5766.7kH/s 3714654 0597c6f2940f 1/1 30 donor_vip +42Mk3F3y...Q6fgUTJr 2026-07-10 05:56:56 4534.7kH/s 3714616 bb7333057c26 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-10 04:54:56 3664.8kH/s 3714584 666ef7fbcc54 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-10 03:22:55 5946.3kH/s 3714541 64c943375dad 1/1 9 donor_whale +4B2Avc2j...5JCEaaNs 2026-07-10 02:20:55 4058.5kH/s 3714509 de81bf0651a2 1/1 29 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-10 01:18:22 4124.7kH/s 3714473 f81504df31b4 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-10 00:19:22 4516.4kH/s 3714440 326ad0d5a8a2 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-09 23:20:31 4349.2kH/s 3714417 22038cfa33ae 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-09 22:21:58 5032.8kH/s 3714389 2cefee282dcf 1/1 1 donor_mega +46PsTAqp...o2VDhm5j 2026-07-09 21:17:03 5747.0kH/s 3714357 918df7eda1dc 1/1 30 donor_vip +48xVox2n...oQM27PR1 2026-07-09 20:14:56 5830.3kH/s 3714329 8337d85964a4 1/1 30 donor_vip +43CcbPH8...uQWupVW5 2026-07-09 19:13:05 4183.4kH/s 3714303 c10bf24b24e3 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-09 18:10:58 5412.8kH/s 3714273 6fd682b31ff1 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-09 17:08:57 5393.1kH/s 3714248 88aac9c50e2c 1/1 10 donor_whale +421n6hRs...61UsZuDG 2026-07-09 16:06:40 3208.7kH/s 3714225 0b0f049cc762 1/1 10 donor_whale +421n6hRs...61UsZuDG 2026-07-09 14:42:34 4475.1kH/s 3714189 b4612b1b1277 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-09 13:40:17 5498.7kH/s 3714152 b52eac8bb065 1/1 1 donor_mega +4B2Avc2j...5JCEaaNs 2026-07-09 12:38:17 5520.7kH/s 3714116 3c8d2b11828c 1/1 34 donor_vip +43CcbPH8...uQWupVW5 2026-07-09 11:36:13 5525.1kH/s 3714089 aa323ecc5bb5 1/1 10 donor_whale +42Mk3F3y...Q6fgUTJr 2026-07-09 10:33:37 3257.7kH/s 3714055 4a0e751d8d78 1/1 10 donor_whale +42Mk3F3y...Q6fgUTJr 2026-07-09 07:25:30 5551.0kH/s 3713970 370cd4322fab 1/1 10 donor_whale +48wF5CTP...zF7tEmWC 2026-07-09 06:22:35 5744.8kH/s 3713939 de7d61e521c0 1/1 34 donor_vip +45iHYVMq...UAz6KRyd 2026-07-09 05:20:21 5536.0kH/s 3713906 4f5edeffd07d 1/1 34 donor_vip +42mefDQX...pJw9nygF 2026-07-09 04:18:08 5365.6kH/s 3713879 6477cb0aa11b 1/1 10 donor_whale +42NpvKMH...zAXwCRSb 2026-07-09 03:15:27 6088.9kH/s 3713853 c1a2dd0fc38f 1/1 10 donor_whale +45iHYVMq...UAz6KRyd 2026-07-09 02:12:33 6015.4kH/s 3713821 ad09a06c3472 1/1 34 donor_vip +421n6hRs...61UsZuDG 2026-07-09 01:09:30 5834.0kH/s 3713786 2353972ce405 1/1 10 donor_whale +42NpvKMH...zAXwCRSb 2026-07-09 00:07:08 3992.5kH/s 3713750 c297b39ee032 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-08 23:04:13 5807.9kH/s 3713722 9a89df936a06 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-08 22:01:18 5645.7kH/s 3713694 af36894958b0 1/1 10 donor_whale +49fV8TjN...GSgrDzrU 2026-07-08 20:58:15 4562.7kH/s 3713658 597da6fa65e8 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-08 19:55:43 4664.5kH/s 3713619 ad0e8fd290ab 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-08 18:56:43 4789.4kH/s 3713589 80b07c8d1b78 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-08 17:58:03 4679.3kH/s 3713551 9a6ead785fba 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-08 16:58:41 4167.1kH/s 3713516 3f05d4527ea8 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-08 15:59:34 5107.6kH/s 3713481 bb7fcce4636c 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-07-08 14:57:02 5857.5kH/s 3713450 b787a78dccde 1/1 9 donor_whale +47NF5Nbe...nMs9DDJU 2026-07-08 13:57:17 5696.3kH/s 3713424 7bb4b2164de8 1/1 10 donor_whale +4B2Avc2j...5JCEaaNs 2026-07-08 12:54:39 3347.2kH/s 3713390 ab9e3900b36f 1/1 33 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-08 11:23:36 5661.6kH/s 3713347 85316014603b 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-08 10:20:19 5436.9kH/s 3713312 01e2817dee29 1/1 10 donor_whale +42NpvKMH...zAXwCRSb 2026-07-08 09:17:17 5981.2kH/s 3713283 a76c0365c321 1/1 10 donor_whale +42m2kLta...aDULT2Qj 2026-07-08 08:14:40 5801.1kH/s 3713255 8867d95fde39 1/1 31 donor_vip +42NpvKMH...zAXwCRSb 2026-07-08 07:12:34 5571.4kH/s 3713225 9e0001cfdc77 1/1 10 donor_whale +43GtdWdk...39LmdZuj 2026-07-08 06:09:32 5320.5kH/s 3713191 f4a144e9fc85 1/1 64 donor +46Rb9Hjc...57AFUnq5 2026-07-08 05:07:12 5807.3kH/s 3713160 aa0debe54eec 1/1 31 donor_vip +42m2kLta...aDULT2Qj 2026-07-08 04:04:31 5823.7kH/s 3713128 80446774b179 1/1 31 donor_vip +42mefDQX...pJw9nygF 2026-07-08 03:02:07 5392.3kH/s 3713095 367c64f49b62 1/1 10 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-08 02:00:08 5660.0kH/s 3713069 f702aa4b558a 1/1 10 donor_whale +42mefDQX...pJw9nygF 2026-07-08 00:57:29 4434.2kH/s 3713036 daa359423f09 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-07 23:54:11 5228.7kH/s 3713012 b1ee3e7efe0a 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-07-07 22:52:09 4293.2kH/s 3712976 a73e6962be62 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-07 21:50:00 4728.7kH/s 3712956 31f42a4065c5 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-07 20:51:15 4398.0kH/s 3712922 910cd4dc7f89 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-07 19:51:42 4523.8kH/s 3712897 3820bdaf1b42 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-07 18:53:05 4097.5kH/s 3712860 6c219ffe0584 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-07 17:53:15 5808.1kH/s 3712833 eac633a32317 1/1 30 donor_vip +46PsTAqp...o2VDhm5j 2026-07-07 16:50:40 4544.5kH/s 3712804 7014416c9e27 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-07 15:47:17 5432.4kH/s 3712769 be4590dfbd5c 1/1 1 donor_mega +43CcbPH8...uQWupVW5 2026-07-07 14:44:39 4349.1kH/s 3712740 512543f981a1 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-07 13:41:45 3497.4kH/s 3712710 f9b124d9f125 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-07 12:04:22 4330.5kH/s 3712663 fb2ddc46d833 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-07 11:02:05 4483.3kH/s 3712636 008090c0dd1e 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-07 10:02:15 3761.9kH/s 3712610 9171560f433b 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-07 08:41:14 4270.0kH/s 3712563 e3bb11b82c02 1/1 64 donor +48M2j8Gj...d8KgGBwa 2026-07-07 07:38:40 4584.9kH/s 3712522 d68fcea4fac9 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-07 06:39:14 5897.0kH/s 3712489 97a1374a8a22 1/1 1 donor_mega +43tg9ebV...GLspBx9P 2026-07-07 05:37:11 5674.1kH/s 3712466 f08c4495c408 1/1 30 donor_vip +42mefDQX...pJw9nygF 2026-07-07 04:34:14 4804.7kH/s 3712437 a6965fe03678 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-07 03:31:12 5232.1kH/s 3712407 0e372f375262 1/1 1 donor_mega +4B2Avc2j...5JCEaaNs 2026-07-07 02:23:31 5513.1kH/s 3712362 0ec324ad3895 1/1 29 donor_vip +47NF5Nbe...nMs9DDJU 2026-07-07 01:21:11 4473.6kH/s 3712331 acdeab48260f 1/1 7 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-07 00:18:38 4521.3kH/s 3712296 ebc9a3cc7045 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-06 23:19:30 5499.7kH/s 3712271 7ff61332c251 1/1 1 donor_mega +46PsTAqp...o2VDhm5j 2026-07-06 22:16:14 4490.4kH/s 3712248 e065ae6c3327 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-06 21:13:44 4424.5kH/s 3712214 6568f9c86b19 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-06 20:14:41 4444.0kH/s 3712193 acf8f198d110 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-06 19:15:15 4131.3kH/s 3712157 edd828f6abda 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-07-06 18:10:19 5527.3kH/s 3712124 45fd777cc633 1/1 7 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-06 17:08:06 4881.2kH/s 3712106 dc6a6f294f86 1/1 7 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-06 16:08:39 4375.4kH/s 3712069 d5271484534c 1/1 7 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-06 15:05:20 5518.8kH/s 3712040 f7128495c571 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-07-06 14:02:16 4279.8kH/s 3712002 f80e3aaf2ee8 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-06 12:59:42 4258.5kH/s 3711969 450df1a05cea 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-06 12:00:45 3997.0kH/s 3711940 22032f32333d 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-06 10:57:41 4182.5kH/s 3711909 d51686468006 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-06 09:58:14 5477.6kH/s 3711873 6160c02997cf 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-06 08:55:15 4335.5kH/s 3711842 41409b1bdc1b 1/1 33 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-06 07:52:43 3773.0kH/s 3711809 7bc97040a238 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-06 06:53:15 5058.0kH/s 3711781 4ebd05f6c12c 1/1 7 donor_whale +421n6hRs...61UsZuDG 2026-07-06 05:50:15 4036.9kH/s 3711749 0e45dd66e0db 1/1 7 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-06 04:47:41 4028.8kH/s 3711717 14c2a4644f10 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-06 03:48:14 4969.4kH/s 3711686 5ab59204881f 1/1 7 donor_whale +42NpvKMH...zAXwCRSb 2026-07-06 02:45:11 4068.7kH/s 3711646 59dcf8fdfa40 1/1 7 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-06 01:42:38 4134.7kH/s 3711608 ab793a23db28 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-06 00:44:02 4070.4kH/s 3711585 401ef2a0a658 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-05 23:44:14 4441.2kH/s 3711555 a2989235bed9 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-05 22:34:15 1939.2kH/s 3711524 d27aedb98c7e 1/1 7 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-05 20:34:06 1459.8kH/s 3711471 d5c93406e752 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-05 19:34:40 1370.8kH/s 3711445 5e71100a167b 1/1 1 donor_mega +464Bdn7D...wTbYVfF1 2026-07-05 18:32:17 1596.4kH/s 3711417 a25853717561 1/1 32 donor_vip +46PsTAqp...o2VDhm5j 2026-07-05 17:08:32 1875.2kH/s 3711385 86031b5617b5 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-05 16:05:43 4343.6kH/s 3711359 37a41d675628 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-05 15:07:13 5646.2kH/s 3711315 b1fafa81987e 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-07-05 14:04:41 3157.4kH/s 3711287 5702c9f9d71c 1/1 9 donor_whale +42Mk3F3y...Q6fgUTJr 2026-07-05 12:26:34 5586.2kH/s 3711232 a4e31cf1e679 1/1 9 donor_whale +42mefDQX...pJw9nygF 2026-07-05 11:24:16 5486.0kH/s 3711190 df843aa0649c 1/1 9 donor_whale +42Mk3F3y...Q6fgUTJr 2026-07-05 10:21:13 3521.9kH/s 3711161 73393b034c5d 1/1 9 donor_whale +42m2kLta...aDULT2Qj 2026-07-05 08:28:13 5563.2kH/s 3711101 27263b799ab2 1/1 31 donor_vip +4AEAX3qs...vTU56zMr 2026-07-05 07:25:13 4186.3kH/s 3711058 8edaf4bfd596 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-05 06:22:31 5813.3kH/s 3711030 11748c447b64 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-07-05 05:19:41 5329.5kH/s 3711003 03d5b07ec833 1/1 10 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-05 04:21:12 5781.6kH/s 3710975 f40d8d994ac2 1/1 10 donor_whale +49fV8TjN...GSgrDzrU 2026-07-05 03:19:12 3495.7kH/s 3710946 09eb5117649a 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-05 01:54:13 5566.4kH/s 3710886 5108e3acf453 1/1 1 donor_mega +4AGJScWS...f6SvY5p5 2026-07-05 00:52:03 4592.6kH/s 3710860 75a3d72d85a7 1/1 4 mvp +48M2j8Gj...d8KgGBwa 2026-07-04 23:50:11 3380.1kH/s 3710836 e51767bb3c19 1/1 1 donor_mega +46AdMVVk...KRL9YFCm 2026-07-04 22:15:13 5449.8kH/s 3710795 df6aaba9798f 1/1 33 donor_vip +47NF5Nbe...nMs9DDJU 2026-07-04 21:12:33 4244.8kH/s 3710764 c441cc7069f4 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-04 20:09:16 5722.7kH/s 3710738 481d7055ed4d 1/1 1 donor_mega +49fV8TjN...GSgrDzrU 2026-07-04 19:07:14 4354.7kH/s 3710715 5d9a5cd524d0 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-04 18:05:10 5792.9kH/s 3710691 be664d2f6d89 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-07-04 17:02:34 5496.0kH/s 3710661 6f23e466e59a 1/1 7 donor_whale +42mefDQX...pJw9nygF 2026-07-04 15:59:14 4192.8kH/s 3710631 73152d1c0bea 1/1 69 donor +48M2j8Gj...d8KgGBwa 2026-07-04 14:56:42 3647.8kH/s 3710595 ca6cfc4dbeab 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-04 13:57:31 6518.6kH/s 3710556 6b4e81eedc64 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-04 12:54:35 6638.3kH/s 3710529 c228700a4513 1/1 7 donor_whale +42mefDQX...pJw9nygF 2026-07-04 11:51:15 5182.2kH/s 3710485 8a392ceaacd1 1/1 7 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-04 10:48:14 3718.6kH/s 3710444 6bac328ac5c8 1/1 7 donor_whale +47NF5Nbe...nMs9DDJU 2026-07-04 08:47:15 3592.9kH/s 3710370 fbd3c7b2495c 1/1 7 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-04 07:44:15 3798.2kH/s 3710328 a541a22bd614 1/1 7 donor_whale +48wF5CTP...zF7tEmWC 2026-07-04 06:41:32 3749.1kH/s 3710297 dfaf482a7146 1/1 7 donor_whale +43tg9ebV...GLspBx9P 2026-07-04 05:38:13 3856.4kH/s 3710269 e6265bc08ce6 1/1 69 donor +48M2j8Gj...d8KgGBwa 2026-07-04 04:35:39 3674.6kH/s 3710241 cbee7c775ea3 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-04 03:36:29 3768.7kH/s 3710215 3683e68ea87c 1/1 6 donor_whale +42mefDQX...pJw9nygF 2026-07-04 02:33:31 3770.1kH/s 3710187 8b53e72a06d0 1/1 7 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-04 01:31:11 3909.3kH/s 3710153 9adbaa90197f 1/1 7 donor_whale +45xA3Kgd...7Ma7ttaf 2026-07-04 00:28:31 3831.2kH/s 3710120 52b7168e2df4 1/1 32 donor_vip +47NF5Nbe...nMs9DDJU 2026-07-03 23:26:11 3460.3kH/s 3710093 8860818ce1b5 1/1 7 donor_whale +4AyiUbKF...uJpsC4ym 2026-07-03 22:24:10 3404.2kH/s 3710061 04355cda07b2 2/1 30 donor_vip +46Rb9Hjc...57AFUnq5 2026-07-03 21:22:10 3099.6kH/s 3710033 4592806beafb 1/1 7 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-03 20:20:11 2919.7kH/s 3709992 f56d36542402 1/1 7 donor_whale +42NpvKMH...zAXwCRSb 2026-07-03 19:18:11 3128.7kH/s 3709966 77ca738d2173 1/1 7 donor_whale +421n6hRs...61UsZuDG 2026-07-03 18:15:13 3405.6kH/s 3709938 905f3bbe4c52 1/1 7 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-03 17:13:08 2981.4kH/s 3709903 61d479c9847e 1/1 7 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-03 16:10:37 2904.1kH/s 3709875 4dd4c261e4f6 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-03 15:11:38 3437.4kH/s 3709846 e8febb283003 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-03 14:12:13 2894.7kH/s 3709825 97b4eb64b10d 1/1 7 donor_whale +42mefDQX...pJw9nygF 2026-07-03 13:10:11 3401.5kH/s 3709788 c82d550762c5 1/1 7 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-03 12:07:28 3811.3kH/s 3709756 6766a3d93123 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-03 11:04:12 4149.4kH/s 3709729 32f461cc3f58 1/1 7 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-03 10:01:37 3792.3kH/s 3709700 5aaf70216e70 1/1 7 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-03 09:03:10 4084.2kH/s 3709669 173109d3ad3c 1/1 7 donor_whale +421n6hRs...61UsZuDG 2026-07-03 07:14:11 3705.4kH/s 3709608 e21e75784326 2/1 6 donor_whale +47NF5Nbe...nMs9DDJU 2026-07-03 06:11:27 3856.5kH/s 3709564 31e9a3ea930d 1/1 7 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-03 05:08:35 4249.9kH/s 3709527 2cc61c11cc4d 2/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-03 04:10:08 3726.1kH/s 3709496 970bca01f175 1/1 1 donor_mega +4AyiUbKF...uJpsC4ym 2026-07-03 03:08:08 4048.8kH/s 3709465 437b23021cbb 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-03 02:06:06 3982.2kH/s 3709432 90e47ed15798 1/1 7 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-03 01:03:28 4210.5kH/s 3709400 49b63e40280a 2/1 6 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-02 21:34:13 3744.1kH/s 3709303 86f65a922b79 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-07-02 20:31:11 4243.1kH/s 3709265 4be8eb047b23 2/1 7 donor_whale +42NpvKMH...zAXwCRSb 2026-07-02 18:45:10 3995.9kH/s 3709204 e44d0baed71a 1/1 12 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-02 17:35:10 4976.9kH/s 3709174 f1af4634d12f 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-07-02 16:33:11 4907.7kH/s 3709150 b2bbb1e4b758 1/1 12 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-02 15:30:13 5143.5kH/s 3709124 1473c0648f01 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-02 14:28:10 4125.4kH/s 3709092 4c85ea133e11 1/1 11 donor_whale +42NpvKMH...zAXwCRSb 2026-07-02 13:26:10 2627.6kH/s 3709067 88f37509cf60 1/1 32 donor_vip +48wF5CTP...zF7tEmWC 2026-07-02 09:21:47 4962.7kH/s 3708961 ef46db169bbd 1/1 33 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-02 08:18:42 4435.8kH/s 3708929 22cc13c0f9e5 2/1 1 donor_mega +45wQcnHH...kR5qUREN 2026-07-02 07:16:09 4398.7kH/s 3708893 103215eefec4 1/1 33 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-02 06:14:06 4630.4kH/s 3708860 0efac6463ac2 2/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-02 05:11:07 4696.5kH/s 3708824 bc0fee2bd4e3 1/1 12 donor_whale +47NF5Nbe...nMs9DDJU 2026-07-02 04:08:50 4420.1kH/s 3708795 64e2c1ab92ad 1/1 11 donor_whale +47NF5Nbe...nMs9DDJU 2026-07-02 03:10:07 4677.9kH/s 3708752 d72879a410c8 1/1 71 donor +42NpvKMH...zAXwCRSb 2026-07-02 02:07:20 4397.6kH/s 3708720 c62743253fdc 1/1 11 donor_whale +4Arsu3rc...wUtCc5e9 2026-07-02 01:05:09 4868.1kH/s 3708693 b123772973d0 1/1 73 donor +47NF5Nbe...nMs9DDJU 2026-07-02 00:03:07 5072.1kH/s 3708659 66b2055ca39b 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-01 23:00:24 4746.2kH/s 3708625 f462821d41a5 1/1 11 donor_whale +43CcbPH8...uQWupVW5 2026-07-01 21:58:09 4641.5kH/s 3708595 725a93cfcd6f 1/1 11 donor_whale +42mefDQX...pJw9nygF 2026-07-01 20:55:14 4872.2kH/s 3708568 95a97190b888 1/1 11 donor_whale +48MKrUo9...fEagtDE8 2026-07-01 19:52:32 5000.3kH/s 3708537 fd10ddc61bbd 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-01 18:49:13 4578.9kH/s 3708510 072c604f42ed 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-07-01 17:47:12 4415.5kH/s 3708479 d1546723a393 1/1 11 donor_whale +42NpvKMH...zAXwCRSb 2026-07-01 16:44:28 5219.3kH/s 3708449 9d2942aac9a2 1/1 11 donor_whale +43CcbPH8...uQWupVW5 2026-07-01 15:42:07 4925.2kH/s 3708419 0afc7962ea92 1/1 11 donor_whale +42NpvKMH...zAXwCRSb 2026-07-01 14:39:14 4400.7kH/s 3708390 dbd9232d943a 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-01 13:36:13 5004.8kH/s 3708360 7b35cfbcd930 1/1 1 donor_mega +487SyiQC...aSGcaBDE 2026-07-01 12:01:35 4628.1kH/s 3708312 713fd9f6b7bc 1/1 31 donor_vip +43CcbPH8...uQWupVW5 2026-07-01 10:58:12 4708.5kH/s 3708272 4b3909878c23 2/1 10 donor_whale +421n6hRs...61UsZuDG 2026-07-01 09:55:14 4388.6kH/s 3708240 e8dc30e0f265 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-01 07:50:39 4297.4kH/s 3708177 0714df5ccb5a 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-01 06:51:13 4716.9kH/s 3708143 ae3726bbc92e 1/1 11 donor_whale +42NpvKMH...zAXwCRSb 2026-07-01 05:49:11 4736.9kH/s 3708115 76208f735086 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-01 04:46:38 4343.3kH/s 3708083 447e72b4ffc4 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-01 03:26:10 4593.0kH/s 3708049 8c0546a9c51c 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-07-01 01:01:11 4777.2kH/s 3707988 43b546fec12a 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-30 23:58:39 4650.9kH/s 3707955 cc4063a12d4e 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-30 22:59:32 4659.9kH/s 3707932 52152d206efd 1/1 1 donor_mega +46PsTAqp...o2VDhm5j 2026-06-30 21:56:33 4025.4kH/s 3707902 99ba0edc0466 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-30 20:54:18 4382.3kH/s 3707870 2310869ae5e0 1/1 31 donor_vip +43N8v4Ma...277zUwJq 2026-06-30 19:51:16 4804.3kH/s 3707839 87beb66fa2c9 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-30 18:48:40 4974.3kH/s 3707813 1da0ca2b1554 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-30 17:50:01 4866.5kH/s 3707787 98a29f040926 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-30 16:50:53 4523.2kH/s 3707757 871a87c0c9bc 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-30 15:52:01 4747.0kH/s 3707729 74236fb5c794 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-30 14:52:31 6496.8kH/s 3707696 e1bdbb25d903 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-06-30 13:50:14 4845.1kH/s 3707670 a82f35ffcab2 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-30 12:47:42 6580.7kH/s 3707639 b64219b6841e 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-06-30 11:44:14 6210.8kH/s 3707603 07f48b5e9332 1/1 9 donor_whale +47NF5Nbe...nMs9DDJU 2026-06-30 10:41:13 6431.2kH/s 3707569 a5e726901fc5 1/1 30 donor_vip +46Rb9Hjc...57AFUnq5 2026-06-30 09:39:11 7419.4kH/s 3707526 6624b8829d45 1/1 10 donor_whale +49YoCEDi...x97dHeGQ 2026-06-30 08:36:12 6851.5kH/s 3707489 51467dafbc3e 1/1 31 donor_vip +46Rb9Hjc...57AFUnq5 2026-06-30 07:33:12 7202.7kH/s 3707449 dab23270dce6 1/1 10 donor_whale +42NpvKMH...zAXwCRSb 2026-06-30 06:30:30 4925.2kH/s 3707408 eeb330f7d725 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-30 05:27:12 6971.9kH/s 3707376 016e4109227d 1/1 1 donor_mega +4AyiUbKF...uJpsC4ym 2026-06-30 04:22:29 5183.3kH/s 3707348 438b5b2b9427 1/1 30 donor_vip +46Rb9Hjc...57AFUnq5 2026-06-30 03:05:08 3620.4kH/s 3707307 27c88d873814 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-30 01:12:09 7427.4kH/s 3707246 553086d13155 1/1 1 donor_mega +46PsTAqp...o2VDhm5j 2026-06-30 00:09:30 6808.9kH/s 3707223 a7c6270b325e 1/1 30 donor_vip +43nvW9WJ...e7SmCf3o 2026-06-29 23:07:10 5062.6kH/s 3707189 2f18af79c0fa 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-29 22:04:39 4715.0kH/s 3707172 43b2dc9afc6e 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-29 21:05:40 5623.8kH/s 3707144 dff8817f7325 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-29 20:07:02 5217.6kH/s 3707116 f795cf38e930 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-29 19:08:14 6630.4kH/s 3707084 e798a0ecf335 1/1 1 donor_mega +487SyiQC...aSGcaBDE 2026-06-29 18:05:37 5720.3kH/s 3707059 107b07483fb5 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-29 17:02:42 5321.6kH/s 3707036 eb1da4d70503 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-29 16:03:39 4734.2kH/s 3707009 0e798c8ac7f8 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-29 15:04:41 6302.9kH/s 3706982 893ef94e7563 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-06-29 14:01:13 5746.6kH/s 3706949 4df6237bc45e 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-29 12:58:32 7342.3kH/s 3706916 49e291e75b25 1/1 1 donor_mega +42NJbX1p...JBe7i8b2 2026-06-29 11:55:13 7095.2kH/s 3706873 320da7349460 1/1 30 donor_vip +46Rb9Hjc...57AFUnq5 2026-06-29 10:52:32 5051.7kH/s 3706843 72ca4b5bf741 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-29 09:49:45 4757.0kH/s 3706826 d1938b506e55 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-29 08:50:41 3758.8kH/s 3706797 1c044255ae5c 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-29 07:18:39 5049.2kH/s 3706745 03a085233423 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-29 06:19:38 4947.5kH/s 3706713 3fff24491636 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-29 05:21:11 6786.6kH/s 3706679 a10539fa7c43 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-06-29 04:19:10 6886.4kH/s 3706656 4c5ced4c2d7f 1/1 10 donor_whale +42Mk3F3y...Q6fgUTJr 2026-06-29 03:16:11 4859.5kH/s 3706627 4ae54aa39d82 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-29 02:13:11 6471.5kH/s 3706597 f36bd905d0e9 1/1 1 donor_mega +49fV8TjN...GSgrDzrU 2026-06-29 01:10:11 4708.6kH/s 3706572 309a101871aa 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-29 00:07:37 4975.8kH/s 3706543 caf7a3396b96 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-28 23:09:10 6604.7kH/s 3706515 08ab27d864c4 1/1 1 donor_mega +4AyiUbKF...uJpsC4ym 2026-06-28 22:06:12 4652.8kH/s 3706485 045cc0211d53 1/1 27 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-28 21:03:13 4209.1kH/s 3706452 f96c1788a3de 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-06-28 19:42:59 6600.5kH/s 3706418 a538e80a81d4 1/1 10 donor_whale +47NF5Nbe...nMs9DDJU 2026-06-28 18:43:33 7123.9kH/s 3706391 1509a42bd896 1/1 9 donor_whale +42mefDQX...pJw9nygF 2026-06-28 17:41:11 6628.2kH/s 3706358 d4763945c93a 1/1 8 donor_whale +49fV8TjN...GSgrDzrU 2026-06-28 16:38:33 4480.7kH/s 3706324 cf0bab3a0925 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-28 15:35:37 5082.8kH/s 3706290 544aede7980c 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-28 14:36:12 5666.3kH/s 3706260 c5f458dced52 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-06-28 13:30:31 6564.5kH/s 3706221 50fbe3497686 1/1 10 donor_whale +42NpvKMH...zAXwCRSb 2026-06-28 12:28:11 4691.5kH/s 3706186 f585882cbbde 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-28 11:25:39 3742.8kH/s 3706154 03bcc62458e9 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-28 09:36:14 3620.4kH/s 3706103 6f74e37550a2 1/1 1 donor_mega +43CcbPH8...uQWupVW5 2026-06-28 08:18:11 4577.1kH/s 3706056 ab440fd05b0a 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-28 07:15:11 6425.0kH/s 3706028 e9de85274bf4 1/1 1 donor_mega +49fV8TjN...GSgrDzrU 2026-06-28 06:12:12 4782.6kH/s 3706000 d2172377d98e 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-28 05:09:39 4513.6kH/s 3705969 77be0d3b9b39 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-28 04:10:56 4570.5kH/s 3705943 4d3df14d63ff 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-28 03:11:35 5092.0kH/s 3705919 f171345c7e53 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-28 02:13:09 6429.0kH/s 3705901 b36e6c055456 1/1 1 donor_mega +43CcbPH8...uQWupVW5 2026-06-28 01:11:10 6553.4kH/s 3705873 f3b0e9ca51a9 1/1 10 donor_whale +421n6hRs...61UsZuDG 2026-06-28 00:09:09 4794.0kH/s 3705841 3c282565aaef 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-27 23:07:09 6477.6kH/s 3705804 2c06e4374eba 1/1 1 donor_mega +4B2Avc2j...5JCEaaNs 2026-06-27 22:04:12 3406.0kH/s 3705774 563caffa3bb8 1/1 30 donor_vip +43nvW9WJ...e7SmCf3o 2026-06-27 20:22:12 4874.4kH/s 3705732 676f9749e727 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-27 19:19:13 6425.9kH/s 3705707 edbb7afdf690 1/1 1 donor_mega +43nvW9WJ...e7SmCf3o 2026-06-27 18:16:34 6957.1kH/s 3705676 45e89b8cca16 1/1 29 donor_vip +49YoCEDi...x97dHeGQ 2026-06-27 17:14:29 4715.3kH/s 3705639 04632428ff7a 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-27 16:11:39 4907.5kH/s 3705608 cfe767f82ae5 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-27 15:12:29 5060.9kH/s 3705577 71443f7ca0be 1/1 1 donor_mega +4AyiUbKF...uJpsC4ym 2026-06-27 14:02:10 4512.3kH/s 3705539 01004604c2ee 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-27 12:59:39 4565.1kH/s 3705516 7827ab009aed 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-27 12:00:30 7670.3kH/s 3705472 6fad4cc4df05 1/1 1 donor_mega +45wQcnHH...kR5qUREN 2026-06-27 10:58:27 7495.9kH/s 3705432 acef0fefd1a6 1/1 72 donor +421n6hRs...61UsZuDG 2026-06-27 09:55:33 5596.9kH/s 3705398 e19b29d8311c 1/1 29 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-27 08:52:13 3389.9kH/s 3705351 3b735e4caeb2 1/1 29 donor_vip +4AEAX3qs...vTU56zMr 2026-06-27 07:19:12 6247.4kH/s 3705292 98109da7f4a4 1/1 31 donor_vip +49YoCEDi...x97dHeGQ 2026-06-27 06:17:10 6601.4kH/s 3705260 9ea78cbd987b 1/1 31 donor_vip +47NF5Nbe...nMs9DDJU 2026-06-27 05:14:32 6670.9kH/s 3705225 dfe8e05fa56b 1/1 10 donor_whale +49fV8TjN...GSgrDzrU 2026-06-27 04:12:09 5562.0kH/s 3705191 7a9702fba949 1/1 71 donor +48M2j8Gj...d8KgGBwa 2026-06-27 03:09:36 5489.5kH/s 3705157 bd9690414e3f 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-27 02:10:35 5345.9kH/s 3705140 392abadd0eef 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-27 01:11:36 5307.9kH/s 3705115 0bdb6ab5506b 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-27 00:13:09 7195.3kH/s 3705088 222b8141b316 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-06-26 23:10:28 7093.3kH/s 3705049 e66abb166599 1/1 11 donor_whale +48wF5CTP...zF7tEmWC 2026-06-26 22:08:10 5395.4kH/s 3705015 6f448ff46d08 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-26 21:05:40 4856.9kH/s 3704988 b420bdbc3e3b 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-26 20:06:33 7296.1kH/s 3704948 dc02a50b334f 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-06-26 19:04:14 6811.7kH/s 3704921 04ed10f8628d 1/1 10 donor_whale +42Mk3F3y...Q6fgUTJr 2026-06-26 18:01:12 7055.3kH/s 3704897 d74f82bf6f70 1/1 10 donor_whale +42mefDQX...pJw9nygF 2026-06-26 16:58:16 6967.0kH/s 3704857 222d35d8ee37 1/1 10 donor_whale +45yonJgZ...41NDuzhs 2026-06-26 15:55:14 7050.3kH/s 3704834 d1faa08bcdcf 1/1 73 donor +47sctNyW...JBFt8g8K 2026-06-26 14:52:33 5307.9kH/s 3704803 17ea01377db2 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-26 13:49:59 4590.5kH/s 3704783 9cea29d7d0dc 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-26 12:50:37 6099.3kH/s 3704740 fbbb29c40520 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-06-26 11:47:12 6314.0kH/s 3704711 89d71ef56c0d 1/1 32 donor_vip +47d4QRof...jL5UqAKj 2026-06-26 10:44:32 5649.5kH/s 3704675 2933958a0f57 1/1 70 donor +48M2j8Gj...d8KgGBwa 2026-06-26 09:42:12 6820.6kH/s 3704649 6e0f106ff218 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-06-26 08:39:33 4903.8kH/s 3704617 91a3bc7543b1 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-26 07:36:39 5023.6kH/s 3704593 e06047d81ded 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-26 06:37:38 4309.3kH/s 3704563 4d97e760d61d 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-26 05:38:14 5964.7kH/s 3704530 e8dbb9dcadf9 1/1 1 donor_mega +49fV8TjN...GSgrDzrU 2026-06-26 04:36:08 4752.3kH/s 3704492 aca9c5cc5e71 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-26 03:33:52 4735.2kH/s 3704454 9fddb6e160c4 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-26 02:35:08 6361.2kH/s 3704429 2d81533ebf09 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-06-26 01:33:08 7025.5kH/s 3704399 9d7401cc3f4e 1/1 31 donor_vip diff --git a/docs/research/xvb-delivery-study/data/winners-20260802.txt b/docs/research/xvb-delivery-study/data/winners-20260802.txt new file mode 100644 index 00000000..13f89ffe --- /dev/null +++ b/docs/research/xvb-delivery-study/data/winners-20260802.txt @@ -0,0 +1,1000 @@ +48M2j8Gj...d8KgGBwa 2026-08-03 01:24:03 6000.7kH/s 3731707 d5f4d770974a 1/1 1 donor_mega +4B2Avc2j...5JCEaaNs 2026-08-03 00:22:01 5125.7kH/s 3731673 c02b377dc667 1/1 13 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-02 23:19:09 4643.3kH/s 3731648 476af7d92b47 1/1 1 donor_mega +48LNi6pk...5DomVmR2 2026-08-02 22:00:02 4996.1kH/s 3731602 6f36e744e0e5 1/1 13 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-02 20:58:03 6325.0kH/s 3731575 70af188a8e3d 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-08-02 19:56:02 5036.9kH/s 3731542 c7a057a52ac8 1/1 12 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-02 18:54:04 5746.7kH/s 3731516 fcc0bbf16add 1/1 1 donor_mega +45qivXhp...BSS1mtoq 2026-08-02 17:52:02 4381.6kH/s 3731483 31880406b4f3 1/1 29 donor_vip +48M2j8Gj...d8KgGBwa 2026-08-02 16:49:32 4993.1kH/s 3731461 0c0bd33c6913 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-02 15:51:03 5913.8kH/s 3731433 509703043f79 1/1 1 donor_mega +45xA3Kgd...7Ma7ttaf 2026-08-02 14:48:14 4680.4kH/s 3731392 d2db8559ac56 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-08-02 13:46:03 6087.7kH/s 3731362 4f654ce35d9f 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-08-02 12:44:04 6109.2kH/s 3731335 0b6c8fce8bf1 1/1 11 donor_whale +464Bdn7D...wTbYVfF1 2026-08-02 11:42:04 4871.3kH/s 3731302 d4e4e15d7790 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-08-02 10:39:14 6038.9kH/s 3731272 9ab60d422b37 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-08-02 09:36:28 6151.4kH/s 3731255 fa1591d46a4d 1/1 32 donor_vip +42NpvKMH...zAXwCRSb 2026-08-02 08:37:14 4839.1kH/s 3731234 09eac8f7a913 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-02 07:35:02 5673.8kH/s 3731199 ab14640f4711 1/1 1 donor_mega +49fV8TjN...GSgrDzrU 2026-08-02 06:33:00 5817.7kH/s 3731171 aa2848c4ad65 1/1 12 donor_whale +43nvW9WJ...e7SmCf3o 2026-08-02 05:31:01 4810.8kH/s 3731140 7d8da011425b 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-08-02 04:28:27 4649.0kH/s 3731115 1891259c67ad 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-02 03:29:59 5801.7kH/s 3731096 115611c3cc7b 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-08-02 02:28:06 4056.2kH/s 3731076 cc4047e26765 1/1 12 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-02 01:25:35 4588.3kH/s 3731047 f5e60d55f38f 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-02 00:26:34 4828.3kH/s 3731025 49b84d8ea745 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-01 23:27:59 5592.5kH/s 3730997 436a2e394e57 1/1 1 donor_mega +48LNi6pk...5DomVmR2 2026-08-01 22:26:02 5634.4kH/s 3730966 a06ad1657a54 1/1 12 donor_whale +48wF5CTP...zF7tEmWC 2026-08-01 21:24:01 5046.5kH/s 3730908 d9720bb7bdbe 1/1 12 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-01 20:21:16 6262.1kH/s 3730866 709c4007dfaa 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-08-01 19:19:01 6015.7kH/s 3730838 b83575d7b896 1/1 31 donor_vip +48wF5CTP...zF7tEmWC 2026-08-01 18:16:13 5560.2kH/s 3730804 b258eb4cbafb 1/1 12 donor_whale +49fSMFrM...c8i6VN6W 2026-08-01 17:13:10 4851.3kH/s 3730777 783c8625945a 1/1 73 donor +48M2j8Gj...d8KgGBwa 2026-08-01 16:10:28 4573.3kH/s 3730736 68b289eaa524 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-01 15:11:26 4289.6kH/s 3730702 624d82c2fc4f 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-01 14:12:27 4442.9kH/s 3730670 9d263791585b 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-01 13:14:03 5913.4kH/s 3730628 190980976116 1/1 1 donor_mega +4B2Avc2j...5JCEaaNs 2026-08-01 12:12:01 5636.2kH/s 3730593 596f02e8be9d 1/1 12 donor_whale +4AYJotaL...USi2XQ7u 2026-08-01 11:10:00 6189.8kH/s 3730561 86df4788f920 1/1 73 donor +42NpvKMH...zAXwCRSb 2026-08-01 10:08:03 5228.3kH/s 3730526 acbcd1c9d622 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-01 09:05:28 5121.2kH/s 3730491 5c8834bfe8ad 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-01 08:06:13 6130.5kH/s 3730458 2ad86adc9800 1/1 1 donor_mega +48xVox2n...oQM27PR1 2026-08-01 07:04:01 5991.4kH/s 3730423 5219af491e93 1/1 27 donor_vip +43CcbPH8...uQWupVW5 2026-08-01 06:02:00 6341.9kH/s 3730391 994b6cb19462 1/1 11 donor_whale +46Rb9Hjc...57AFUnq5 2026-08-01 05:00:00 5293.7kH/s 3730373 ca46424ef040 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-01 03:57:25 5412.4kH/s 3730346 0bb6d8c29a4a 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-01 02:59:00 6054.6kH/s 3730319 cc40499d15ee 1/1 1 donor_mega +49fV8TjN...GSgrDzrU 2026-08-01 01:56:58 6072.3kH/s 3730280 bdacc98099f8 1/1 11 donor_whale +42Mk3F3y...Q6fgUTJr 2026-08-01 00:55:01 5771.5kH/s 3730246 a65cef6fc99e 1/1 11 donor_whale +4B2Avc2j...5JCEaaNs 2026-07-31 23:52:10 4308.9kH/s 3730223 d7d0fafa2da8 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-31 22:50:01 5843.2kH/s 3730196 3071b0f5c86c 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-07-31 21:47:31 5922.4kH/s 3730156 2cf10a96652b 1/1 11 donor_whale +47NF5Nbe...nMs9DDJU 2026-07-31 20:49:03 4750.5kH/s 3730121 dffb51a21341 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-31 19:47:03 5647.0kH/s 3730101 05c020d9b914 1/1 1 donor_mega +4B9oJwgd...sPp6joE1 2026-07-31 18:44:56 5993.1kH/s 3730080 3ce3cbaf769e 1/1 176 vip +48LNi6pk...5DomVmR2 2026-07-31 17:43:04 4637.2kH/s 3730051 8c9d97f967dd 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-31 16:40:19 5644.5kH/s 3730026 79e07d52373e 1/1 1 donor_mega +43CcbPH8...uQWupVW5 2026-07-31 15:38:01 5851.9kH/s 3729999 7c4952c75882 1/1 11 donor_whale +48wF5CTP...zF7tEmWC 2026-07-31 14:35:12 5678.2kH/s 3729973 f66ee7b8d61c 1/1 11 donor_whale +49fV8TjN...GSgrDzrU 2026-07-31 13:33:00 5682.9kH/s 3729940 ce2beb19813a 1/1 11 donor_whale +48wF5CTP...zF7tEmWC 2026-07-31 12:30:12 4565.6kH/s 3729906 edc7e4829da3 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-31 11:28:01 5850.9kH/s 3729863 3a9374bf338b 1/1 1 donor_mega +48LNi6pk...5DomVmR2 2026-07-31 10:26:00 4509.4kH/s 3729831 cbc5b7258d11 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-31 09:24:02 5863.5kH/s 3729788 a7d28269f920 1/1 1 donor_mega +43CcbPH8...uQWupVW5 2026-07-31 08:21:14 4662.9kH/s 3729763 b9abc710d0f6 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-31 07:18:39 3356.3kH/s 3729737 18d4bb8cbc31 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-31 05:57:00 5666.3kH/s 3729684 ff8e7b23403d 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-07-31 04:54:59 3965.2kH/s 3729654 d4fbf85a6d0d 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-31 03:29:10 6337.9kH/s 3729612 91312e7b2025 1/1 11 donor_whale +48LNi6pk...5DomVmR2 2026-07-31 02:27:01 4989.0kH/s 3729573 9973ced663d1 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-31 01:24:27 4722.8kH/s 3729548 2f312dc7ea1d 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-31 00:25:26 4594.2kH/s 3729521 80107dcdd513 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-30 23:27:00 6129.5kH/s 3729489 76028171b8d3 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-07-30 22:24:14 6128.2kH/s 3729458 c6a531e1691b 1/1 11 donor_whale +42Mk3F3y...Q6fgUTJr 2026-07-30 21:22:02 4986.1kH/s 3729431 d355dbc04d3f 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-30 20:20:03 5649.5kH/s 3729403 2394df6a1c70 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-30 19:11:05 6378.5kH/s 3729367 22b11454a220 1/1 11 donor_whale +43CcbPH8...uQWupVW5 2026-07-30 18:09:09 6468.6kH/s 3729339 60a6ec305e37 1/1 11 donor_whale +42Mk3F3y...Q6fgUTJr 2026-07-30 17:07:02 4920.2kH/s 3729309 e4e811f9d612 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-30 16:05:03 5303.5kH/s 3729283 187f6abe695e 1/1 1 donor_mega +43CcbPH8...uQWupVW5 2026-07-30 15:02:12 4676.8kH/s 3729258 6d87e71b80d1 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-30 13:59:39 4585.2kH/s 3729231 e73b8ceb19e0 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-30 13:01:01 5876.6kH/s 3729202 99f3f1583580 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-07-30 11:59:03 5395.7kH/s 3729169 09a44799c73c 1/1 11 donor_whale +42NpvKMH...zAXwCRSb 2026-07-30 10:57:09 6009.4kH/s 3729139 93991a64be6d 1/1 11 donor_whale +42Mk3F3y...Q6fgUTJr 2026-07-30 09:54:59 5649.8kH/s 3729103 a1eac1baf7d1 1/1 11 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-30 08:53:01 4956.4kH/s 3729070 058309b3e9a5 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-30 07:50:29 4932.1kH/s 3729033 5c8741ec447c 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-30 06:51:59 6230.6kH/s 3728993 c6f851086803 1/1 1 donor_mega +45qivXhp...BSS1mtoq 2026-07-30 05:50:02 4459.1kH/s 3728958 0ebc874018a9 1/1 33 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-30 04:47:28 4323.8kH/s 3728936 fc026033e4c8 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-30 03:49:00 5952.9kH/s 3728912 c47af4d47503 1/1 1 donor_mega +421n6hRs...61UsZuDG 2026-07-30 02:47:00 6027.7kH/s 3728894 225092b75c51 1/1 11 donor_whale +42mefDQX...pJw9nygF 2026-07-30 01:45:01 5674.3kH/s 3728868 4c689c6e7bc7 1/1 11 donor_whale +43CcbPH8...uQWupVW5 2026-07-30 00:43:00 5849.3kH/s 3728826 e2e69f3facb3 1/1 11 donor_whale +481ELpyU...mCQhPM2f 2026-07-29 23:41:00 5538.6kH/s 3728785 79ac12977dff 1/1 32 donor_vip +45qivXhp...BSS1mtoq 2026-07-29 22:38:10 4637.7kH/s 3728751 144b310692be 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-29 21:36:02 5799.6kH/s 3728714 8a3e527a2409 1/1 1 donor_mega +421n6hRs...61UsZuDG 2026-07-29 20:33:17 5822.5kH/s 3728684 4176d740d2cf 1/1 34 donor_vip +48wF5CTP...zF7tEmWC 2026-07-29 19:31:02 4210.7kH/s 3728652 edbb72168688 1/1 32 donor_vip +42Mk3F3y...Q6fgUTJr 2026-07-29 18:13:02 5186.9kH/s 3728606 77058dabafda 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-29 17:10:40 5066.9kH/s 3728570 3064bdc4a7ed 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-29 16:12:02 5953.1kH/s 3728540 b348d893a43e 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-29 15:10:01 4708.5kH/s 3728505 1161b8e7a2a6 1/1 33 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-29 14:07:28 3816.0kH/s 3728472 51e9432f7d7a 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-29 12:21:28 4542.7kH/s 3728416 45a1181adc16 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-29 11:22:28 4355.2kH/s 3728378 cada8e88b219 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-29 10:24:01 5573.3kH/s 3728335 f18ce5ce5cec 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-07-29 09:22:07 3820.6kH/s 3728309 62a2ea0dd779 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-29 07:54:06 5943.4kH/s 3728251 7bf1f87d2003 1/1 1 donor_mega +49fV8TjN...GSgrDzrU 2026-07-29 06:52:02 4505.1kH/s 3728219 b9f37c4f8989 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-29 05:49:28 4310.1kH/s 3728193 a085ca1ea1fc 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-29 04:51:00 6140.0kH/s 3728160 38da68ca5840 1/1 1 donor_mega +464pdsyX...8QQVt1x3 2026-07-29 03:49:00 5731.5kH/s 3728132 20622ea9deea 1/1 70 donor +47NF5Nbe...nMs9DDJU 2026-07-29 02:47:01 5525.8kH/s 3728100 07c3a7dad621 1/1 9 donor_whale +45P4vJUA...TE4PUAu9 2026-07-29 01:44:55 5016.9kH/s 3728071 6998955ef2d1 1/1 167 vip +48M2j8Gj...d8KgGBwa 2026-07-29 00:42:38 4868.7kH/s 3728053 cb065a9c3967 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-28 23:44:02 5389.2kH/s 3728025 ab05415c2b1b 1/1 1 donor_mega +45qivXhp...BSS1mtoq 2026-07-28 22:41:10 5692.6kH/s 3728001 68a011e39053 1/1 31 donor_vip +48xVox2n...oQM27PR1 2026-07-28 21:39:00 5309.7kH/s 3727981 992aa5435e68 1/1 69 donor +4B2Avc2j...5JCEaaNs 2026-07-28 20:36:17 5279.3kH/s 3727951 1d72b8edc030 1/1 31 donor_vip +46Rb9Hjc...57AFUnq5 2026-07-28 19:34:03 3345.4kH/s 3727933 9514ed3ccaf2 1/1 31 donor_vip +4AYJotaL...USi2XQ7u 2026-07-28 17:43:02 4574.4kH/s 3727884 6d91e59e8633 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-28 16:41:05 5671.3kH/s 3727856 0bc82def1d08 1/1 1 donor_mega +481ELpyU...mCQhPM2f 2026-07-28 15:39:07 3677.8kH/s 3727834 868acf8de1e0 1/1 31 donor_vip +421n6hRs...61UsZuDG 2026-07-28 13:12:26 5658.3kH/s 3727773 70a65ea5e032 1/1 7 donor_whale +421n6hRs...61UsZuDG 2026-07-28 12:14:03 4776.6kH/s 3727744 de81dcc04c5f 1/1 7 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-28 11:12:00 6090.1kH/s 3727713 f3e2a0154c6d 1/1 1 donor_mega +45wQcnHH...kR5qUREN 2026-07-28 10:09:10 6301.2kH/s 3727682 f0f0f913705b 1/1 30 donor_vip +42NpvKMH...zAXwCRSb 2026-07-28 09:07:03 4890.1kH/s 3727645 0793fe1b9729 1/1 5 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-28 08:05:01 5952.8kH/s 3727611 6f345ca56d09 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-07-28 07:03:01 4896.2kH/s 3727583 e697113905a8 1/1 5 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-28 06:00:29 4755.6kH/s 3727557 8abbbe7c75b6 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-28 05:02:00 6010.8kH/s 3727526 6ca6a8aaca32 1/1 1 donor_mega +48LNi6pk...5DomVmR2 2026-07-28 04:00:00 4495.1kH/s 3727488 d8984507428a 1/1 5 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-28 02:57:27 4577.6kH/s 3727460 81deef289b97 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-28 01:58:26 4641.0kH/s 3727428 af4cf8a3f2ac 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-28 00:59:27 4354.0kH/s 3727395 fe64f01f1aac 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-28 00:00:29 4439.4kH/s 3727360 0e3b4521acd1 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-27 23:01:27 4485.3kH/s 3727328 7db427c7714d 1/1 5 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-27 22:02:12 5202.4kH/s 3727304 5faa9f8577ba 1/1 1 donor_mega +43tg9ebV...GLspBx9P 2026-07-27 21:00:02 3956.0kH/s 3727278 6ed840e22290 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-27 19:57:27 4382.1kH/s 3727252 504b5cf93efe 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-27 18:59:03 5351.0kH/s 3727239 3d383e77ec44 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-07-27 17:57:01 4937.1kH/s 3727203 1fd88daa1f49 1/1 5 donor_whale +42NpvKMH...zAXwCRSb 2026-07-27 16:55:03 3787.3kH/s 3727183 89527357cc11 1/1 5 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-27 15:52:28 2754.3kH/s 3727146 2b40ad29af20 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-27 14:12:11 4180.3kH/s 3727106 b9095b3700c6 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-07-27 13:10:03 4939.1kH/s 3727084 ae674dbff61f 1/1 5 donor_whale +48wF5CTP...zF7tEmWC 2026-07-27 12:08:01 4913.9kH/s 3727055 4ece5804c111 1/1 31 donor_vip +4AyiUbKF...uJpsC4ym 2026-07-27 11:06:01 3307.2kH/s 3727029 695ab34411fd 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-27 10:04:02 5092.8kH/s 3726994 b676ce3d9c1a 1/1 1 donor_mega +43nvW9WJ...e7SmCf3o 2026-07-27 09:02:01 4866.3kH/s 3726966 28baf765b943 1/1 30 donor_vip +42NpvKMH...zAXwCRSb 2026-07-27 07:59:25 2480.8kH/s 3726936 4293491a1a33 1/1 5 donor_whale +42NpvKMH...zAXwCRSb 2026-07-27 06:34:02 3725.9kH/s 3726891 7e24c0740589 1/1 5 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-27 05:31:27 3081.6kH/s 3726862 f0ff08618b77 1/1 5 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-27 04:22:26 3916.8kH/s 3726837 0cf2fd8034e3 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-27 03:24:00 4777.2kH/s 3726816 dc7ae22a0d5c 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-07-27 02:21:59 5133.8kH/s 3726787 1d92b0c93134 1/1 9 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-27 01:19:09 3996.6kH/s 3726758 ccebed353c33 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-27 00:16:59 5510.5kH/s 3726729 7ab0268f51e4 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-26 23:14:12 5529.2kH/s 3726693 355a4643780b 1/1 9 donor_whale +48LNi6pk...5DomVmR2 2026-07-26 22:11:58 4359.3kH/s 3726657 ff55d1517f46 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-26 21:09:15 5480.6kH/s 3726615 4d2b474a6d9b 1/1 1 donor_mega +4AYJotaL...USi2XQ7u 2026-07-26 20:07:00 5080.1kH/s 3726562 5a845fa9ce2f 1/1 34 donor_vip +43nvW9WJ...e7SmCf3o 2026-07-26 19:05:01 5829.5kH/s 3726510 a34fe1f11ec5 1/1 34 donor_vip +42NpvKMH...zAXwCRSb 2026-07-26 18:03:00 5300.4kH/s 3726463 edcb02862434 1/1 32 donor_vip +47NF5Nbe...nMs9DDJU 2026-07-26 17:01:00 5515.8kH/s 3726426 f35a9b41e28f 1/1 9 donor_whale +49fV8TjN...GSgrDzrU 2026-07-26 15:59:03 5543.8kH/s 3726392 d749d1f8c344 1/1 9 donor_whale +464Bdn7D...wTbYVfF1 2026-07-26 14:56:14 5395.6kH/s 3726360 3e1bd0ed947b 1/1 34 donor_vip +421n6hRs...61UsZuDG 2026-07-26 13:54:01 5400.9kH/s 3726325 fbfe68991165 1/1 34 donor_vip +4AGJScWS...f6SvY5p5 2026-07-26 12:51:56 4521.1kH/s 3726297 56f2a33b1d70 1/1 4 mvp +48M2j8Gj...d8KgGBwa 2026-07-26 11:50:01 3357.4kH/s 3726272 623e471b4a10 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-07-26 10:03:00 4707.8kH/s 3726222 9951637264ef 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-26 09:00:27 3246.5kH/s 3726189 7bba268a7a6d 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-26 07:36:37 4424.4kH/s 3726132 19e0a6f6568a 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-26 06:37:27 5033.7kH/s 3726098 b6229cfc474a 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-26 05:38:27 4990.5kH/s 3726070 aa5f69ccba60 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-26 04:40:08 6423.1kH/s 3726042 e54c52bc1b58 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-26 03:37:59 6059.7kH/s 3726015 5e10dcbcc796 1/1 10 donor_whale +49fV8TjN...GSgrDzrU 2026-07-26 02:35:59 4377.9kH/s 3725986 ac4db8b0bf82 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-26 01:33:38 4199.0kH/s 3725959 74bdd6959388 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-26 00:34:42 4354.9kH/s 3725924 4a89c3dd1e63 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-25 23:35:38 4419.4kH/s 3725887 4eeed55ae3cb 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-25 22:36:37 4357.9kH/s 3725866 770c761d7fb7 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-25 21:38:01 5791.5kH/s 3725832 138b19cfa901 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-07-25 20:36:02 4507.4kH/s 3725808 22a2d9b368d7 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-25 19:33:13 5915.1kH/s 3725778 cf0ffa506ef2 1/1 11 donor_whale +42Mk3F3y...Q6fgUTJr 2026-07-25 18:31:01 4719.6kH/s 3725744 a2e2bbc5aaf9 1/1 10 donor_whale +46PsTAqp...o2VDhm5j 2026-07-25 17:20:02 5036.0kH/s 3725704 d4814747586e 1/1 32 donor_vip +49fV8TjN...GSgrDzrU 2026-07-25 16:18:01 4621.3kH/s 3725676 2ebde127e5ec 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-25 15:15:28 4472.8kH/s 3725648 68c4ac42e58c 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-25 14:16:31 3690.2kH/s 3725624 f0e511b1d98d 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-25 13:07:18 5522.7kH/s 3725588 c589a19427fc 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-07-25 12:05:12 4431.5kH/s 3725552 294bf3881e36 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-25 11:02:26 4436.1kH/s 3725515 fecf5261f64c 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-25 10:03:29 3397.5kH/s 3725484 7eef4da92e64 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-25 09:04:31 4188.6kH/s 3725445 de47b156e2bd 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-25 08:06:00 5235.5kH/s 3725415 19cc42db0a92 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-07-25 07:04:03 5358.3kH/s 3725393 14146a035220 1/1 31 donor_vip +4AGJScWS...f6SvY5p5 2026-07-25 06:02:08 3880.4kH/s 3725371 f2e0ed5d059a 1/1 4 mvp +48M2j8Gj...d8KgGBwa 2026-07-25 05:00:01 4217.9kH/s 3725330 1b9fd6ee4546 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-07-25 03:57:26 5598.5kH/s 3725301 ba631411cba1 1/1 10 donor_whale +42NpvKMH...zAXwCRSb 2026-07-25 02:59:00 5823.4kH/s 3725281 54e0e644afe1 1/1 11 donor_whale +47sctNyW...JBFt8g8K 2026-07-25 01:56:11 4554.3kH/s 3725256 ea21201fd817 1/1 30 donor_vip +42Mk3F3y...Q6fgUTJr 2026-07-25 00:54:01 4041.6kH/s 3725227 5bb44d177f5c 1/1 11 donor_whale +4AEAX3qs...vTU56zMr 2026-07-24 23:36:00 5359.1kH/s 3725191 d0c0e64852d7 1/1 31 donor_vip +47NF5Nbe...nMs9DDJU 2026-07-24 22:34:01 5880.9kH/s 3725164 9752d30d2912 1/1 11 donor_whale +48wF5CTP...zF7tEmWC 2026-07-24 21:32:00 4185.9kH/s 3725130 876068c2c4a2 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-24 20:30:01 5531.2kH/s 3725099 3cf993ff565e 1/1 1 donor_mega +48LNi6pk...5DomVmR2 2026-07-24 19:28:00 5882.0kH/s 3725074 dcdf8003fdec 1/1 10 donor_whale +49fV8TjN...GSgrDzrU 2026-07-24 18:26:01 5194.2kH/s 3725036 3b55816a55d0 1/1 10 donor_whale +45qivXhp...BSS1mtoq 2026-07-24 17:16:01 3549.9kH/s 3725002 e937e887cb3a 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-24 14:36:01 5243.1kH/s 3724940 08ecd845cef7 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-24 13:33:12 5661.7kH/s 3724908 6521871487ab 1/1 10 donor_whale +42NpvKMH...zAXwCRSb 2026-07-24 12:31:02 5710.8kH/s 3724880 d282d4d0dc83 1/1 10 donor_whale +4895aAGt...g5P9n4Nq 2026-07-24 11:28:11 4555.8kH/s 3724849 eadf098703ab 1/1 70 donor +48M2j8Gj...d8KgGBwa 2026-07-24 10:25:26 4532.2kH/s 3724820 577431699d1d 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-24 09:26:28 4665.4kH/s 3724790 169bc39c4db0 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-24 08:27:26 4654.2kH/s 3724758 17b8a5bf0256 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-24 07:28:36 3609.8kH/s 3724729 f7321599ce9f 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-24 06:10:02 3524.5kH/s 3724681 a1f7f781197c 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-07-24 02:48:59 4151.2kH/s 3724611 45d6d3fa40c0 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-24 01:46:10 3632.3kH/s 3724577 261c4a0a9ed7 1/1 1 donor_mega +44aZ9ce8...i1Hxzm1M 2026-07-24 00:09:10 4292.3kH/s 3724535 6b3146bd4d08 1/1 29 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-23 23:06:59 5916.7kH/s 3724504 843f19ab4500 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-23 22:05:01 5695.6kH/s 3724471 4b61135b0d52 1/1 11 donor_whale +47NF5Nbe...nMs9DDJU 2026-07-23 21:02:59 4328.9kH/s 3724443 ec97df025ede 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-23 20:00:33 4843.7kH/s 3724416 1ed468fb2686 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-23 19:01:26 4136.4kH/s 3724389 a526977d87c3 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-23 18:02:09 5566.6kH/s 3724371 9849197d4330 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-23 17:00:01 3791.0kH/s 3724343 7a8055893792 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-23 15:51:11 5532.0kH/s 3724318 51b9d71d6c4a 1/1 1 donor_mega +49fV8TjN...GSgrDzrU 2026-07-23 14:48:27 5755.5kH/s 3724282 55b8a07547ed 1/1 11 donor_whale +49fV8TjN...GSgrDzrU 2026-07-23 13:49:00 5778.5kH/s 3724252 6f0de4ff561a 1/1 28 donor_vip +44MnN1f3...a621jwyg 2026-07-23 12:46:58 4423.9kH/s 3724222 9700a0ca36b5 1/1 4 mvp +48M2j8Gj...d8KgGBwa 2026-07-23 11:44:58 5016.3kH/s 3724191 ae5c01fa87c2 1/1 1 donor_mega +42m2kLta...aDULT2Qj 2026-07-23 10:41:58 4494.0kH/s 3724163 e21ecfd1dc66 1/1 27 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-23 09:39:36 4282.4kH/s 3724138 8cf5ec06b21a 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-23 08:40:28 3373.0kH/s 3724107 00668cfd5f25 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-23 07:24:58 3348.8kH/s 3724059 ff31a1bd3d63 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-23 05:43:01 5462.8kH/s 3724013 5614e61bc447 1/1 11 donor_whale +45wQcnHH...kR5qUREN 2026-07-23 04:40:10 4561.8kH/s 3723976 1579c895099d 1/1 27 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-23 03:37:25 4604.0kH/s 3723948 6e98b07a38d8 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-23 02:38:37 4649.6kH/s 3723916 a33598fd9ff2 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-23 01:40:00 5459.5kH/s 3723882 7a9e8203197b 1/1 1 donor_mega +48xVox2n...oQM27PR1 2026-07-23 00:38:04 4267.7kH/s 3723858 541813a7a52b 1/1 28 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-22 23:35:34 4330.4kH/s 3723832 0924ca8e429a 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-22 22:37:00 5857.5kH/s 3723796 9a5389a8b0e0 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-07-22 21:35:02 4500.2kH/s 3723763 3a54effc0012 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-22 20:33:04 5748.4kH/s 3723736 95540e9c71fc 1/1 1 donor_mega +48LNi6pk...5DomVmR2 2026-07-22 19:31:00 4717.8kH/s 3723719 c04cfd252d0a 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-22 18:28:36 4642.3kH/s 3723686 159c870ff571 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-22 17:29:36 4368.9kH/s 3723666 287168031449 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-22 16:30:38 4816.9kH/s 3723638 1428e685cb63 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-22 15:31:26 4626.1kH/s 3723619 459e2fb48c03 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-22 14:32:11 5794.8kH/s 3723593 26f0f93981bd 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-22 13:29:27 5333.2kH/s 3723570 a79162983914 1/1 11 donor_whale +42mefDQX...pJw9nygF 2026-07-22 12:30:59 3995.7kH/s 3723534 283eb8a2d6b6 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-22 11:28:26 3991.2kH/s 3723504 3160cd55ca64 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-22 10:29:28 4300.3kH/s 3723478 879d8c061dc0 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-22 09:30:29 3656.8kH/s 3723447 e28be640b303 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-22 07:59:08 5673.7kH/s 3723382 8367bdbece7e 1/1 1 donor_mega +46PsTAqp...o2VDhm5j 2026-07-22 06:57:00 4669.0kH/s 3723341 ac1eb47f1aa8 1/1 65 donor +48M2j8Gj...d8KgGBwa 2026-07-22 05:55:01 5770.7kH/s 3723304 739e92e0710a 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-07-22 04:52:26 5450.8kH/s 3723274 6d131f16f3ac 1/1 11 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-22 03:53:59 4418.7kH/s 3723247 52ef38cc2c08 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-22 02:51:31 4816.1kH/s 3723209 4690c27c00fa 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-22 01:52:35 4662.3kH/s 3723174 996944893ee6 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-22 00:53:25 4176.4kH/s 3723127 dc249379c958 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-21 23:54:26 4716.7kH/s 3723100 18d8133e2338 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-21 22:56:02 5531.2kH/s 3723057 47be0a672396 1/1 11 donor_whale +4AyiUbKF...uJpsC4ym 2026-07-21 21:54:01 4726.9kH/s 3723032 ea80fc511e15 1/1 33 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-21 20:52:08 5695.0kH/s 3722999 b357882e2814 1/1 1 donor_mega +421n6hRs...61UsZuDG 2026-07-21 19:50:00 4730.0kH/s 3722960 e3d353a96513 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-21 18:47:59 4550.9kH/s 3722925 857475dcb19c 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-21 17:45:58 4613.7kH/s 3722893 934b6efbf2df 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-21 16:43:26 4739.9kH/s 3722859 4e8e6ecf6acf 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-21 15:44:27 4882.8kH/s 3722833 3008f2578c07 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-21 14:46:01 5828.7kH/s 3722808 a7d665843aee 1/1 10 donor_whale +43CcbPH8...uQWupVW5 2026-07-21 13:44:03 5598.9kH/s 3722783 0c9e20627b7b 1/1 29 donor_vip +421n6hRs...61UsZuDG 2026-07-21 12:39:02 5831.0kH/s 3722745 e0a1a0a91c13 1/1 10 donor_whale +42mefDQX...pJw9nygF 2026-07-21 11:37:01 4829.6kH/s 3722709 bb20aa7e6ed3 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-21 10:35:01 4016.2kH/s 3722673 a67a70fad4c8 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-07-21 08:37:11 4289.6kH/s 3722604 5d212abdfdc4 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-21 07:34:27 4506.0kH/s 3722572 23928200d56c 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-21 06:35:59 5405.1kH/s 3722543 dacec3a0a77f 1/1 1 donor_mega +48LNi6pk...5DomVmR2 2026-07-21 05:33:09 5546.8kH/s 3722511 5a9739cca3eb 1/1 11 donor_whale +43CcbPH8...uQWupVW5 2026-07-21 04:30:27 5709.0kH/s 3722475 3fa849821629 1/1 12 donor_whale +47NF5Nbe...nMs9DDJU 2026-07-21 03:27:57 4404.9kH/s 3722439 347688f996e8 1/1 12 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-21 02:25:59 5705.7kH/s 3722411 ddf2425fe87a 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-07-21 01:24:00 5813.8kH/s 3722390 cf42a26e4b69 1/1 12 donor_whale +43tg9ebV...GLspBx9P 2026-07-21 00:21:59 4859.6kH/s 3722369 3491e6866485 1/1 33 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-20 23:19:35 4208.0kH/s 3722336 54e0ac1fa796 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-20 22:20:26 4220.8kH/s 3722316 256c0ba5d91e 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-20 21:21:27 4991.1kH/s 3722298 f5f79085ddab 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-20 20:22:27 4611.8kH/s 3722268 256cfee84c14 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-20 19:24:00 5603.9kH/s 3722230 f69c7a6dac0c 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-07-20 18:22:02 4470.2kH/s 3722199 914d85fec077 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-20 17:19:59 5894.2kH/s 3722172 a1b8c6fe134b 1/1 1 donor_mega +4AuNNHgo...n8VXcgEe 2026-07-20 16:17:58 5080.5kH/s 3722139 1b0896204d12 1/1 31 donor_vip +49m4aWKb...VT3dB1iR 2026-07-20 15:10:59 5847.9kH/s 3722104 b748588cd377 1/1 71 donor +486aGn4q...F8wjAE5R 2026-07-20 14:08:55 5969.8kH/s 3722078 e51bea234dac 1/1 4 mvp +42Mk3F3y...Q6fgUTJr 2026-07-20 13:06:59 5553.2kH/s 3722036 695d7c08d36e 1/1 11 donor_whale +42mefDQX...pJw9nygF 2026-07-20 12:04:59 4930.7kH/s 3721995 c8fa657040b0 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-20 11:02:26 4979.4kH/s 3721965 e9dcdc9d1152 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-20 10:04:00 6080.9kH/s 3721935 72cd9e0a8f69 1/1 1 donor_mega +45wQcnHH...kR5qUREN 2026-07-20 09:01:59 3930.2kH/s 3721902 72a481b9481d 1/1 32 donor_vip +47NF5Nbe...nMs9DDJU 2026-07-20 07:03:59 4855.8kH/s 3721840 3c9921175717 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-20 06:01:58 5331.1kH/s 3721818 823eb9c1b7de 1/1 1 donor_mega +4B2Avc2j...5JCEaaNs 2026-07-20 04:59:57 6210.2kH/s 3721796 e3d3436342b5 1/1 29 donor_vip +46Rb9Hjc...57AFUnq5 2026-07-20 03:58:06 6228.6kH/s 3721769 ab9e06c6274c 1/1 10 donor_whale +48LNi6pk...5DomVmR2 2026-07-20 02:55:57 4963.7kH/s 3721731 fb5df7f6d152 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-20 01:53:58 4126.6kH/s 3721699 40feefe40662 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-07-20 00:15:58 6406.7kH/s 3721647 451ceca4bf63 1/1 10 donor_whale +4AeEwC2U...YQyoQtr7 2026-07-19 23:14:02 5227.4kH/s 3721621 a52d7f3c706d 1/1 4 mvp +48M2j8Gj...d8KgGBwa 2026-07-19 22:11:58 5627.5kH/s 3721590 c9f38b3300b8 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-07-19 21:09:57 5643.3kH/s 3721552 6931aef5a22c 1/1 29 donor_vip +47NF5Nbe...nMs9DDJU 2026-07-19 20:07:58 5733.6kH/s 3721528 fb28ce076d4b 1/1 10 donor_whale +48LNi6pk...5DomVmR2 2026-07-19 19:05:59 5615.7kH/s 3721488 fde5ae16dd03 1/1 10 donor_whale +4298Vwxn...cJHXZb9k 2026-07-19 18:03:55 5612.0kH/s 3721460 d2ba432d75b0 1/1 178 vip +43nvW9WJ...e7SmCf3o 2026-07-19 17:01:58 5448.9kH/s 3721430 8451814bee84 1/1 30 donor_vip +48wF5CTP...zF7tEmWC 2026-07-19 15:59:09 5355.1kH/s 3721405 ff53a9546c7c 1/1 10 donor_whale +42NJbX1p...JBe7i8b2 2026-07-19 14:56:59 5190.4kH/s 3721380 b3de69d509c7 1/1 30 donor_vip +46YxbLMT...UUmVmbGn 2026-07-19 13:51:58 5864.9kH/s 3721342 3184c7cdf959 2/1 70 donor +4AEAX3qs...vTU56zMr 2026-07-19 12:49:58 3276.9kH/s 3721314 38a0c8b641ff 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-19 11:01:58 5709.5kH/s 3721272 bf28c0c09dc0 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-07-19 09:59:59 5670.2kH/s 3721245 8b19199b58c5 1/1 70 donor +42mefDQX...pJw9nygF 2026-07-19 08:58:03 4421.2kH/s 3721215 f469ec4700bc 1/1 28 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-19 07:55:59 5777.2kH/s 3721183 d13813570935 1/1 1 donor_mega +487SyiQC...aSGcaBDE 2026-07-19 06:53:10 4675.3kH/s 3721151 07b41bbdb3ce 1/1 27 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-19 05:50:25 4154.5kH/s 3721120 b00964a4674a 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-19 04:51:58 5555.9kH/s 3721083 4a8cd4b0cab0 1/1 1 donor_mega +49fV8TjN...GSgrDzrU 2026-07-19 03:49:55 4747.9kH/s 3721053 2ebbbffe54eb 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-19 02:47:24 4276.2kH/s 3721025 05bbf74c837e 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-19 01:49:07 5188.6kH/s 3720997 0248bbce4c7c 1/1 10 donor_whale +4AyiUbKF...uJpsC4ym 2026-07-19 00:47:08 4377.5kH/s 3720950 bc6c9dffb8d9 1/1 27 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-18 23:44:24 4337.9kH/s 3720917 7932e63b1a1b 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-18 22:45:57 5493.3kH/s 3720882 4965f4c63001 1/1 1 donor_mega +48C1CiKC...i9qJPCF9 2026-07-18 21:43:58 4306.9kH/s 3720855 3c97a2a4f3dd 1/1 75 donor +48M2j8Gj...d8KgGBwa 2026-07-18 20:41:38 4203.5kH/s 3720833 0525a913e879 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-18 19:42:24 4641.4kH/s 3720812 d414bfa3e054 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-18 18:44:01 5619.8kH/s 3720782 c351b2595f7c 1/1 1 donor_mega +47sctNyW...JBFt8g8K 2026-07-18 17:42:00 4027.1kH/s 3720742 630b59612166 1/1 27 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-18 16:39:25 4624.8kH/s 3720719 e05bea93bdce 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-18 15:40:26 4272.2kH/s 3720688 1776517ac4dd 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-18 14:41:35 4119.8kH/s 3720653 08b7f3178a72 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-18 13:43:01 5058.4kH/s 3720618 6a29b4bc97b1 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-18 12:40:58 5941.8kH/s 3720595 65c832683693 1/1 10 donor_whale +421n6hRs...61UsZuDG 2026-07-18 11:38:58 4223.7kH/s 3720566 a38a36362666 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-18 10:36:08 5555.3kH/s 3720538 211cc6bf2635 1/1 1 donor_mega +48LNi6pk...5DomVmR2 2026-07-18 09:33:59 6093.4kH/s 3720517 fad7967486e5 1/1 10 donor_whale +42Mk3F3y...Q6fgUTJr 2026-07-18 08:31:58 4683.7kH/s 3720478 37af4dd7244b 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-18 07:29:26 4160.9kH/s 3720453 0ba8adf8c7b4 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-18 06:30:26 4584.1kH/s 3720432 5dd77b0aca60 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-18 05:31:58 5704.3kH/s 3720404 8008e4f8b695 1/1 1 donor_mega +48b1zteM...a6BJoFL8 2026-07-18 04:29:57 5752.3kH/s 3720375 eb6db7cbcbe9 1/1 68 donor +46PsTAqp...o2VDhm5j 2026-07-18 03:27:58 5574.7kH/s 3720331 ce3461dc9491 1/1 27 donor_vip +42m2kLta...aDULT2Qj 2026-07-18 02:25:57 5921.5kH/s 3720292 dcd5dc3ec0a7 1/1 27 donor_vip +46Rb9Hjc...57AFUnq5 2026-07-18 01:23:56 4490.7kH/s 3720242 aa972db9ec4c 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-18 00:21:56 5638.4kH/s 3720215 390c14bf712f 1/1 1 donor_mega +42XnhJTN...EPxRtsmc 2026-07-17 23:20:03 5403.6kH/s 3720179 aea9d44ab542 1/1 177 vip +46Rb9Hjc...57AFUnq5 2026-07-17 22:17:58 5940.3kH/s 3720143 855a1c756e1a 1/1 9 donor_whale +48wF5CTP...zF7tEmWC 2026-07-17 21:16:08 4400.5kH/s 3720112 1738b92ff0ae 1/1 26 donor_vip +47NF5Nbe...nMs9DDJU 2026-07-17 19:55:08 5696.3kH/s 3720076 3b78e6783b76 1/1 9 donor_whale +421n6hRs...61UsZuDG 2026-07-17 18:51:25 5451.2kH/s 3720053 3e5a491fcbd0 1/1 9 donor_whale +421n6hRs...61UsZuDG 2026-07-17 17:52:58 4447.1kH/s 3720014 c2887677affb 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-17 16:50:09 5897.5kH/s 3719986 d8feb4003f12 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-17 15:47:59 5728.1kH/s 3719953 b4edeefe5c5e 1/1 8 donor_whale +421n6hRs...61UsZuDG 2026-07-17 14:45:59 5482.4kH/s 3719916 7e01d4a02ccb 1/1 28 donor_vip +42NpvKMH...zAXwCRSb 2026-07-17 13:43:27 5541.6kH/s 3719886 8aaf469913d3 1/1 8 donor_whale +42NpvKMH...zAXwCRSb 2026-07-17 12:45:00 4552.0kH/s 3719841 2a8e823af040 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-17 11:42:26 4248.3kH/s 3719811 6449b85cc2e7 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-17 10:44:01 3166.4kH/s 3719776 2e1b0b2fa9da 1/1 1 donor_mega +48LNi6pk...5DomVmR2 2026-07-17 08:27:59 5541.5kH/s 3719724 21ff13c97c12 1/1 26 donor_vip +486aGn4q...F8wjAE5R 2026-07-17 07:25:54 5273.0kH/s 3719699 e46e7eadad90 1/1 4 mvp +42NpvKMH...zAXwCRSb 2026-07-17 06:24:06 3480.9kH/s 3719666 c1dcb9f7f144 1/1 7 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-17 04:35:23 4321.6kH/s 3719605 6cdc11ea4b39 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-17 03:36:55 5260.8kH/s 3719574 5fedbe6be5f3 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-17 02:34:56 5181.3kH/s 3719535 963cdc49672e 1/1 8 donor_whale +47sctNyW...JBFt8g8K 2026-07-17 01:32:56 5048.8kH/s 3719505 81eef1f83699 1/1 27 donor_vip +47NF5Nbe...nMs9DDJU 2026-07-17 00:22:58 4210.0kH/s 3719468 cb52f4393c35 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-16 23:20:57 5234.0kH/s 3719446 dd522d1e7bfe 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-16 22:18:58 5320.6kH/s 3719413 d2ab4d1e8c0e 1/1 8 donor_whale +48wF5CTP...zF7tEmWC 2026-07-16 21:16:58 4398.2kH/s 3719379 d3d0a05acb83 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-16 20:15:00 3826.2kH/s 3719339 59450ca42519 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-16 18:58:59 2288.5kH/s 3719305 0aacecb1a97e 1/1 9 donor_whale +47NF5Nbe...nMs9DDJU 2026-07-16 16:51:59 5469.6kH/s 3719237 84f25b497474 1/1 9 donor_whale +49fV8TjN...GSgrDzrU 2026-07-16 15:49:08 4171.7kH/s 3719210 6566abce4808 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-16 14:46:25 4082.8kH/s 3719186 e7ea63461c92 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-16 13:47:59 5429.7kH/s 3719155 4e302cf3d823 1/1 1 donor_mega +421n6hRs...61UsZuDG 2026-07-16 12:46:00 4672.1kH/s 3719122 5a127a99b97e 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-16 11:44:00 5288.6kH/s 3719090 d72436140339 1/1 1 donor_mega +49YoCEDi...x97dHeGQ 2026-07-16 10:41:58 5754.7kH/s 3719063 c5202812f883 1/1 28 donor_vip +46Rb9Hjc...57AFUnq5 2026-07-16 09:39:58 3225.6kH/s 3719040 9a602c965031 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-16 07:41:35 4396.3kH/s 3718989 0a80aa9e5533 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-16 06:42:26 4429.8kH/s 3718969 7f8083d5836e 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-16 05:43:26 4359.7kH/s 3718946 f1faa2493074 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-16 04:44:58 5275.6kH/s 3718918 5f7df96778fa 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-07-16 03:42:59 5514.3kH/s 3718892 7225ec7ca701 1/1 10 donor_whale +48LNi6pk...5DomVmR2 2026-07-16 02:40:56 4429.8kH/s 3718861 835e6da5cb01 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-16 01:38:24 4435.1kH/s 3718832 49bf8474260c 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-16 00:40:04 5485.9kH/s 3718807 aa08e4b400d6 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-15 23:37:57 4668.1kH/s 3718778 7159a6285363 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-15 22:34:58 5360.5kH/s 3718750 1d40ae06616c 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-15 21:28:58 4875.1kH/s 3718717 e458ff23831a 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-15 20:26:39 4497.4kH/s 3718687 801bd67f9aed 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-15 19:28:00 3797.1kH/s 3718651 c7a7c0f46e04 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-15 17:47:07 5752.7kH/s 3718618 b43ed4b18d5e 1/1 8 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-15 16:44:36 5723.6kH/s 3718595 24266b10dfa3 1/1 8 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-15 15:45:08 4456.3kH/s 3718570 6ccbdb14a0c5 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-15 14:42:35 4302.8kH/s 3718541 d260b1f72905 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-15 13:44:00 5599.7kH/s 3718515 29d37ad42f36 1/1 1 donor_mega +49fV8TjN...GSgrDzrU 2026-07-15 12:41:59 4684.0kH/s 3718484 4901dc6ef903 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-15 11:39:26 4172.7kH/s 3718457 87a2af440c3b 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-15 10:40:58 5281.6kH/s 3718427 2cec1cbffbf9 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-07-15 09:39:01 4576.3kH/s 3718399 72c5fcfbbd26 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-15 08:37:07 5355.5kH/s 3718356 8f7f664db71f 1/1 31 donor_vip +421n6hRs...61UsZuDG 2026-07-15 07:34:57 5296.0kH/s 3718316 1d1f4632c41c 1/1 8 donor_whale +487SyiQC...aSGcaBDE 2026-07-15 06:32:58 5466.0kH/s 3718284 74afc8a1f24c 1/1 29 donor_vip +42NpvKMH...zAXwCRSb 2026-07-15 05:30:59 5238.8kH/s 3718253 88c2b61b7142 1/1 9 donor_whale +42mefDQX...pJw9nygF 2026-07-15 04:28:57 4469.9kH/s 3718223 5b8498f76da2 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-15 03:26:55 5758.3kH/s 3718191 05a4413d3435 1/1 1 donor_mega +42m2kLta...aDULT2Qj 2026-07-15 02:24:56 4165.1kH/s 3718160 9cbf7f455c21 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-15 01:22:23 4676.2kH/s 3718128 342682d5aab4 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-15 00:23:26 4207.4kH/s 3718089 f9c0aa6c8302 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-14 23:24:24 4502.3kH/s 3718059 a64f2354223e 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-14 22:25:24 4668.2kH/s 3718033 d9698104cccc 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-14 21:26:58 5394.8kH/s 3718012 60d82b874c13 1/1 1 donor_mega +48xVox2n...oQM27PR1 2026-07-14 20:24:10 5249.7kH/s 3717980 5e2a7146429b 1/1 32 donor_vip +47NF5Nbe...nMs9DDJU 2026-07-14 19:21:58 4246.0kH/s 3717952 ed7a97581379 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-14 18:19:59 5464.0kH/s 3717930 2388fe9bd52b 1/1 1 donor_mega +46PsTAqp...o2VDhm5j 2026-07-14 17:18:00 5106.2kH/s 3717911 408d5d2af6f7 1/1 31 donor_vip +47NF5Nbe...nMs9DDJU 2026-07-14 16:16:07 5102.7kH/s 3717893 2cfbbf9d8c4f 1/1 8 donor_whale +48wF5CTP...zF7tEmWC 2026-07-14 15:13:59 3985.4kH/s 3717859 62c34c56a47f 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-14 14:11:27 3720.3kH/s 3717835 97037644aaaa 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-14 13:12:25 4400.6kH/s 3717800 0c605570ec3b 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-14 12:14:00 5664.5kH/s 3717746 d06bf3e5ba29 1/1 1 donor_mega +43nvW9WJ...e7SmCf3o 2026-07-14 11:11:59 5323.0kH/s 3717714 e52de31296f9 1/1 30 donor_vip +42NpvKMH...zAXwCRSb 2026-07-14 10:09:07 4755.9kH/s 3717668 9944162bc084 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-14 09:06:57 5659.4kH/s 3717635 cb00ec5f50bd 1/1 9 donor_whale +45wQcnHH...kR5qUREN 2026-07-14 08:04:59 4421.6kH/s 3717591 5a3f6dc7efdc 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-14 07:02:24 4514.4kH/s 3717546 5f0bfd36a27a 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-14 06:03:24 4501.7kH/s 3717516 7abca6ac6427 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-14 05:04:59 5817.8kH/s 3717480 349e828e816e 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-07-14 04:02:56 4665.8kH/s 3717445 c6d02403cf3c 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-14 03:00:57 5732.0kH/s 3717417 0f240273b937 1/1 1 donor_mega +42cg1PYJ...o43XGcrP 2026-07-14 01:59:05 3593.8kH/s 3717390 895ecdab5723 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-14 00:43:03 5717.4kH/s 3717358 7aec1f5afe2a 1/1 8 donor_whale +47NF5Nbe...nMs9DDJU 2026-07-13 23:40:56 5677.7kH/s 3717323 e576817cdd64 1/1 8 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-13 22:38:24 5438.7kH/s 3717293 e255bca2a69d 1/1 8 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-13 21:40:06 4491.7kH/s 3717259 6a126003d938 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-13 20:37:24 4404.6kH/s 3717223 80b7e9dd9663 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-13 19:38:32 4368.0kH/s 3717196 b60e94709a21 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-13 18:39:26 4374.5kH/s 3717174 93ebea91c1a9 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-13 17:40:37 4409.3kH/s 3717139 6ed9224877d9 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-13 16:41:08 5182.8kH/s 3717118 3b048d88f04d 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-13 15:38:58 5529.4kH/s 3717092 c9c4f1cf10e3 1/1 8 donor_whale +487SyiQC...aSGcaBDE 2026-07-13 14:36:57 3207.0kH/s 3717068 d449544e2073 1/1 33 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-13 12:59:59 3252.8kH/s 3717015 fad6db3963af 1/1 1 donor_mega +43nvW9WJ...e7SmCf3o 2026-07-13 11:20:58 5598.3kH/s 3716966 9b0b1f8a6c08 1/1 33 donor_vip +46XNiJuL...DF62UR3s 2026-07-13 10:18:56 4087.6kH/s 3716945 c3b03cedf539 1/1 33 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-13 09:17:00 5226.6kH/s 3716921 65a61b0e496b 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-07-13 08:14:57 4284.8kH/s 3716902 beef94119938 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-13 07:13:00 5153.9kH/s 3716877 50b75743adf4 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-07-13 06:10:58 5775.0kH/s 3716853 8ac5d7f8ae40 1/1 32 donor_vip +46Rb9Hjc...57AFUnq5 2026-07-13 05:08:57 5930.2kH/s 3716823 61947cfcdbb8 1/1 12 donor_whale +464Bdn7D...wTbYVfF1 2026-07-13 04:06:56 3673.2kH/s 3716795 3cb36e5d57c9 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-13 02:17:32 4670.4kH/s 3716745 f6a25cf945bd 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-13 01:18:56 6021.1kH/s 3716716 a8661b9865b3 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-07-13 00:16:56 3819.6kH/s 3716682 1d0508fb8b98 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-12 22:57:55 5826.5kH/s 3716641 0e22a5b51732 1/1 1 donor_mega +43nvW9WJ...e7SmCf3o 2026-07-12 21:56:04 6068.0kH/s 3716602 c5217ade21d2 1/1 29 donor_vip +45S3XHby...A3Jwctmh 2026-07-12 20:53:56 5770.9kH/s 3716562 5116f090b3ab 2/1 175 vip +48wF5CTP...zF7tEmWC 2026-07-12 19:51:56 4833.0kH/s 3716537 440517e58f18 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-12 18:49:25 5015.8kH/s 3716508 79a4bb22c6b9 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-12 17:50:58 5441.4kH/s 3716480 02d9e5138709 1/1 1 donor_mega +4AEAX3qs...vTU56zMr 2026-07-12 16:49:07 6197.5kH/s 3716459 33e39e43f1ab 1/1 30 donor_vip +44aZ9ce8...i1Hxzm1M 2026-07-12 15:46:57 6162.3kH/s 3716437 67233045a8d8 1/1 31 donor_vip +42mefDQX...pJw9nygF 2026-07-12 14:44:57 4762.6kH/s 3716407 453c83e2ddf2 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-12 13:42:56 6057.8kH/s 3716378 94420ab47995 1/1 1 donor_mega +47d4QRof...jL5UqAKj 2026-07-12 12:40:56 5703.0kH/s 3716333 c4c8550ea750 1/1 66 donor +47NF5Nbe...nMs9DDJU 2026-07-12 11:39:03 3704.6kH/s 3716294 b1386004c338 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-12 10:24:55 5881.2kH/s 3716250 b9ed883c74c5 1/1 1 donor_mega +42m2kLta...aDULT2Qj 2026-07-12 09:22:56 4443.6kH/s 3716219 4bcff60d2b02 1/1 33 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-12 08:20:24 4441.9kH/s 3716184 b7f1604677ab 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-12 07:21:29 4721.1kH/s 3716147 77c0136c8d9f 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-12 06:22:22 3386.8kH/s 3716116 991f93853c61 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-12 04:44:55 5548.7kH/s 3716066 51e3b7069248 1/1 1 donor_mega +421n6hRs...61UsZuDG 2026-07-12 03:43:02 5685.4kH/s 3716030 2544f10ccb71 1/1 32 donor_vip +46Rb9Hjc...57AFUnq5 2026-07-12 02:40:57 5747.5kH/s 3715997 ca1d79e37455 1/1 12 donor_whale +487SyiQC...aSGcaBDE 2026-07-12 01:38:56 5148.3kH/s 3715952 680f7109722e 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-12 00:36:57 6141.6kH/s 3715912 7fef78808bd1 1/1 1 donor_mega +49fV8TjN...GSgrDzrU 2026-07-11 23:34:57 5007.5kH/s 3715867 44e300dda4f0 1/1 12 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-11 22:32:57 6086.5kH/s 3715824 f603ac3de16d 1/1 1 donor_mega +43nvW9WJ...e7SmCf3o 2026-07-11 21:31:03 6120.4kH/s 3715784 68ee8145ed6f 1/1 32 donor_vip +48b1zteM...a6BJoFL8 2026-07-11 20:29:00 5946.5kH/s 3715759 e30305855691 1/1 66 donor +464pdsyX...8QQVt1x3 2026-07-11 19:26:56 4842.8kH/s 3715728 2b555fce3e7a 1/1 67 donor +48M2j8Gj...d8KgGBwa 2026-07-11 18:24:23 3734.5kH/s 3715699 10c4a23132d3 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-11 17:11:24 4890.0kH/s 3715658 3af850c20343 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-11 16:12:57 5981.8kH/s 3715617 f57e2c92f41a 1/1 1 donor_mega +464Bdn7D...wTbYVfF1 2026-07-11 15:10:55 6308.0kH/s 3715590 0bd6a12835cc 1/1 179 vip +49fV8TjN...GSgrDzrU 2026-07-11 14:08:57 4797.3kH/s 3715566 9fed6f9221a0 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-11 13:07:06 5463.7kH/s 3715537 91c673fcb81a 1/1 1 donor_mega +421n6hRs...61UsZuDG 2026-07-11 12:04:12 5406.3kH/s 3715497 647bc6900dc8 1/1 10 donor_whale +4AyiUbKF...uJpsC4ym 2026-07-11 11:01:55 5702.1kH/s 3715469 f0dea3843aa1 1/1 33 donor_vip +4B2Avc2j...5JCEaaNs 2026-07-11 09:59:57 4508.6kH/s 3715437 e1885d6a38c4 1/1 34 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-11 08:57:57 5709.0kH/s 3715405 c972763fd72f 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-11 07:55:58 4036.6kH/s 3715376 84e18f9543c2 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-11 06:45:08 6001.7kH/s 3715336 1baef1fe6489 1/1 1 donor_mega +49ijD1Et...e7mEQxJ9 2026-07-11 05:42:56 5661.0kH/s 3715317 967186f0ef00 1/1 33 donor_vip +42Mk3F3y...Q6fgUTJr 2026-07-11 04:40:56 5572.2kH/s 3715291 e31666471196 1/1 10 donor_whale +47NF5Nbe...nMs9DDJU 2026-07-11 03:38:57 5786.8kH/s 3715261 ca6610948e19 1/1 10 donor_whale +45xA3Kgd...7Ma7ttaf 2026-07-11 02:36:54 4571.9kH/s 3715240 2d3ad1c46080 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-11 01:34:23 4357.8kH/s 3715207 0453e7754a26 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-11 00:35:59 6153.9kH/s 3715181 ee4e5b698172 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-07-10 23:33:57 5007.5kH/s 3715157 63c55c901dd1 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-10 22:31:24 5010.0kH/s 3715132 fb05df3aa86d 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-10 21:30:24 4835.8kH/s 3715114 53ced3e0f4b6 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-10 20:31:23 4870.2kH/s 3715087 3554adb0fe8b 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-10 19:32:23 4873.2kH/s 3715061 c63c2b64fb23 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-10 18:33:33 4999.6kH/s 3715043 597fb9d621e8 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-10 17:34:56 5963.1kH/s 3715015 7979530fda1f 1/1 1 donor_mega +49fV8TjN...GSgrDzrU 2026-07-10 16:32:57 4789.0kH/s 3714985 a78605a50f97 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-10 15:30:24 4543.3kH/s 3714954 cc4fade04245 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-10 14:31:22 4803.5kH/s 3714926 5b989794058e 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-10 13:32:22 4271.5kH/s 3714892 712e717a7dd6 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-10 12:30:58 5124.4kH/s 3714851 2ec33354c428 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-07-10 11:28:56 4315.2kH/s 3714815 dfad51ae8321 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-10 10:26:57 5509.1kH/s 3714780 846ffc6d0d63 1/1 1 donor_mega +43tg9ebV...GLspBx9P 2026-07-10 09:24:07 3263.4kH/s 3714744 27e0a82fb37a 1/1 30 donor_vip +49fV8TjN...GSgrDzrU 2026-07-10 08:01:05 5420.2kH/s 3714694 f8b002f8d6c0 1/1 10 donor_whale +48xVox2n...oQM27PR1 2026-07-10 06:58:56 5766.7kH/s 3714654 0597c6f2940f 1/1 30 donor_vip +42Mk3F3y...Q6fgUTJr 2026-07-10 05:56:56 4534.7kH/s 3714616 bb7333057c26 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-10 04:54:56 3664.8kH/s 3714584 666ef7fbcc54 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-10 03:22:55 5946.3kH/s 3714541 64c943375dad 1/1 9 donor_whale +4B2Avc2j...5JCEaaNs 2026-07-10 02:20:55 4058.5kH/s 3714509 de81bf0651a2 1/1 29 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-10 01:18:22 4124.7kH/s 3714473 f81504df31b4 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-10 00:19:22 4516.4kH/s 3714440 326ad0d5a8a2 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-09 23:20:31 4349.2kH/s 3714417 22038cfa33ae 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-09 22:21:58 5032.8kH/s 3714389 2cefee282dcf 1/1 1 donor_mega +46PsTAqp...o2VDhm5j 2026-07-09 21:17:03 5747.0kH/s 3714357 918df7eda1dc 1/1 30 donor_vip +48xVox2n...oQM27PR1 2026-07-09 20:14:56 5830.3kH/s 3714329 8337d85964a4 1/1 30 donor_vip +43CcbPH8...uQWupVW5 2026-07-09 19:13:05 4183.4kH/s 3714303 c10bf24b24e3 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-09 18:10:58 5412.8kH/s 3714273 6fd682b31ff1 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-09 17:08:57 5393.1kH/s 3714248 88aac9c50e2c 1/1 10 donor_whale +421n6hRs...61UsZuDG 2026-07-09 16:06:40 3208.7kH/s 3714225 0b0f049cc762 1/1 10 donor_whale +421n6hRs...61UsZuDG 2026-07-09 14:42:34 4475.1kH/s 3714189 b4612b1b1277 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-09 13:40:17 5498.7kH/s 3714152 b52eac8bb065 1/1 1 donor_mega +4B2Avc2j...5JCEaaNs 2026-07-09 12:38:17 5520.7kH/s 3714116 3c8d2b11828c 1/1 34 donor_vip +43CcbPH8...uQWupVW5 2026-07-09 11:36:13 5525.1kH/s 3714089 aa323ecc5bb5 1/1 10 donor_whale +42Mk3F3y...Q6fgUTJr 2026-07-09 10:33:37 3257.7kH/s 3714055 4a0e751d8d78 1/1 10 donor_whale +42Mk3F3y...Q6fgUTJr 2026-07-09 07:25:30 5551.0kH/s 3713970 370cd4322fab 1/1 10 donor_whale +48wF5CTP...zF7tEmWC 2026-07-09 06:22:35 5744.8kH/s 3713939 de7d61e521c0 1/1 34 donor_vip +45iHYVMq...UAz6KRyd 2026-07-09 05:20:21 5536.0kH/s 3713906 4f5edeffd07d 1/1 34 donor_vip +42mefDQX...pJw9nygF 2026-07-09 04:18:08 5365.6kH/s 3713879 6477cb0aa11b 1/1 10 donor_whale +42NpvKMH...zAXwCRSb 2026-07-09 03:15:27 6088.9kH/s 3713853 c1a2dd0fc38f 1/1 10 donor_whale +45iHYVMq...UAz6KRyd 2026-07-09 02:12:33 6015.4kH/s 3713821 ad09a06c3472 1/1 34 donor_vip +421n6hRs...61UsZuDG 2026-07-09 01:09:30 5834.0kH/s 3713786 2353972ce405 1/1 10 donor_whale +42NpvKMH...zAXwCRSb 2026-07-09 00:07:08 3992.5kH/s 3713750 c297b39ee032 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-08 23:04:13 5807.9kH/s 3713722 9a89df936a06 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-08 22:01:18 5645.7kH/s 3713694 af36894958b0 1/1 10 donor_whale +49fV8TjN...GSgrDzrU 2026-07-08 20:58:15 4562.7kH/s 3713658 597da6fa65e8 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-08 19:55:43 4664.5kH/s 3713619 ad0e8fd290ab 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-08 18:56:43 4789.4kH/s 3713589 80b07c8d1b78 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-08 17:58:03 4679.3kH/s 3713551 9a6ead785fba 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-08 16:58:41 4167.1kH/s 3713516 3f05d4527ea8 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-08 15:59:34 5107.6kH/s 3713481 bb7fcce4636c 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-07-08 14:57:02 5857.5kH/s 3713450 b787a78dccde 1/1 9 donor_whale +47NF5Nbe...nMs9DDJU 2026-07-08 13:57:17 5696.3kH/s 3713424 7bb4b2164de8 1/1 10 donor_whale +4B2Avc2j...5JCEaaNs 2026-07-08 12:54:39 3347.2kH/s 3713390 ab9e3900b36f 1/1 33 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-08 11:23:36 5661.6kH/s 3713347 85316014603b 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-08 10:20:19 5436.9kH/s 3713312 01e2817dee29 1/1 10 donor_whale +42NpvKMH...zAXwCRSb 2026-07-08 09:17:17 5981.2kH/s 3713283 a76c0365c321 1/1 10 donor_whale +42m2kLta...aDULT2Qj 2026-07-08 08:14:40 5801.1kH/s 3713255 8867d95fde39 1/1 31 donor_vip +42NpvKMH...zAXwCRSb 2026-07-08 07:12:34 5571.4kH/s 3713225 9e0001cfdc77 1/1 10 donor_whale +43GtdWdk...39LmdZuj 2026-07-08 06:09:32 5320.5kH/s 3713191 f4a144e9fc85 1/1 64 donor +46Rb9Hjc...57AFUnq5 2026-07-08 05:07:12 5807.3kH/s 3713160 aa0debe54eec 1/1 31 donor_vip +42m2kLta...aDULT2Qj 2026-07-08 04:04:31 5823.7kH/s 3713128 80446774b179 1/1 31 donor_vip +42mefDQX...pJw9nygF 2026-07-08 03:02:07 5392.3kH/s 3713095 367c64f49b62 1/1 10 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-08 02:00:08 5660.0kH/s 3713069 f702aa4b558a 1/1 10 donor_whale +42mefDQX...pJw9nygF 2026-07-08 00:57:29 4434.2kH/s 3713036 daa359423f09 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-07 23:54:11 5228.7kH/s 3713012 b1ee3e7efe0a 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-07-07 22:52:09 4293.2kH/s 3712976 a73e6962be62 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-07 21:50:00 4728.7kH/s 3712956 31f42a4065c5 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-07 20:51:15 4398.0kH/s 3712922 910cd4dc7f89 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-07 19:51:42 4523.8kH/s 3712897 3820bdaf1b42 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-07 18:53:05 4097.5kH/s 3712860 6c219ffe0584 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-07 17:53:15 5808.1kH/s 3712833 eac633a32317 1/1 30 donor_vip +46PsTAqp...o2VDhm5j 2026-07-07 16:50:40 4544.5kH/s 3712804 7014416c9e27 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-07 15:47:17 5432.4kH/s 3712769 be4590dfbd5c 1/1 1 donor_mega +43CcbPH8...uQWupVW5 2026-07-07 14:44:39 4349.1kH/s 3712740 512543f981a1 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-07 13:41:45 3497.4kH/s 3712710 f9b124d9f125 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-07 12:04:22 4330.5kH/s 3712663 fb2ddc46d833 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-07 11:02:05 4483.3kH/s 3712636 008090c0dd1e 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-07 10:02:15 3761.9kH/s 3712610 9171560f433b 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-07 08:41:14 4270.0kH/s 3712563 e3bb11b82c02 1/1 64 donor +48M2j8Gj...d8KgGBwa 2026-07-07 07:38:40 4584.9kH/s 3712522 d68fcea4fac9 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-07 06:39:14 5897.0kH/s 3712489 97a1374a8a22 1/1 1 donor_mega +43tg9ebV...GLspBx9P 2026-07-07 05:37:11 5674.1kH/s 3712466 f08c4495c408 1/1 30 donor_vip +42mefDQX...pJw9nygF 2026-07-07 04:34:14 4804.7kH/s 3712437 a6965fe03678 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-07 03:31:12 5232.1kH/s 3712407 0e372f375262 1/1 1 donor_mega +4B2Avc2j...5JCEaaNs 2026-07-07 02:23:31 5513.1kH/s 3712362 0ec324ad3895 1/1 29 donor_vip +47NF5Nbe...nMs9DDJU 2026-07-07 01:21:11 4473.6kH/s 3712331 acdeab48260f 1/1 7 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-07 00:18:38 4521.3kH/s 3712296 ebc9a3cc7045 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-06 23:19:30 5499.7kH/s 3712271 7ff61332c251 1/1 1 donor_mega +46PsTAqp...o2VDhm5j 2026-07-06 22:16:14 4490.4kH/s 3712248 e065ae6c3327 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-06 21:13:44 4424.5kH/s 3712214 6568f9c86b19 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-06 20:14:41 4444.0kH/s 3712193 acf8f198d110 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-06 19:15:15 4131.3kH/s 3712157 edd828f6abda 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-07-06 18:10:19 5527.3kH/s 3712124 45fd777cc633 1/1 7 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-06 17:08:06 4881.2kH/s 3712106 dc6a6f294f86 1/1 7 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-06 16:08:39 4375.4kH/s 3712069 d5271484534c 1/1 7 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-06 15:05:20 5518.8kH/s 3712040 f7128495c571 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-07-06 14:02:16 4279.8kH/s 3712002 f80e3aaf2ee8 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-06 12:59:42 4258.5kH/s 3711969 450df1a05cea 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-06 12:00:45 3997.0kH/s 3711940 22032f32333d 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-06 10:57:41 4182.5kH/s 3711909 d51686468006 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-06 09:58:14 5477.6kH/s 3711873 6160c02997cf 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-06 08:55:15 4335.5kH/s 3711842 41409b1bdc1b 1/1 33 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-06 07:52:43 3773.0kH/s 3711809 7bc97040a238 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-06 06:53:15 5058.0kH/s 3711781 4ebd05f6c12c 1/1 7 donor_whale +421n6hRs...61UsZuDG 2026-07-06 05:50:15 4036.9kH/s 3711749 0e45dd66e0db 1/1 7 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-06 04:47:41 4028.8kH/s 3711717 14c2a4644f10 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-06 03:48:14 4969.4kH/s 3711686 5ab59204881f 1/1 7 donor_whale +42NpvKMH...zAXwCRSb 2026-07-06 02:45:11 4068.7kH/s 3711646 59dcf8fdfa40 1/1 7 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-06 01:42:38 4134.7kH/s 3711608 ab793a23db28 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-06 00:44:02 4070.4kH/s 3711585 401ef2a0a658 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-05 23:44:14 4441.2kH/s 3711555 a2989235bed9 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-05 22:34:15 1939.2kH/s 3711524 d27aedb98c7e 1/1 7 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-05 20:34:06 1459.8kH/s 3711471 d5c93406e752 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-05 19:34:40 1370.8kH/s 3711445 5e71100a167b 1/1 1 donor_mega +464Bdn7D...wTbYVfF1 2026-07-05 18:32:17 1596.4kH/s 3711417 a25853717561 1/1 32 donor_vip +46PsTAqp...o2VDhm5j 2026-07-05 17:08:32 1875.2kH/s 3711385 86031b5617b5 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-05 16:05:43 4343.6kH/s 3711359 37a41d675628 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-05 15:07:13 5646.2kH/s 3711315 b1fafa81987e 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-07-05 14:04:41 3157.4kH/s 3711287 5702c9f9d71c 1/1 9 donor_whale +42Mk3F3y...Q6fgUTJr 2026-07-05 12:26:34 5586.2kH/s 3711232 a4e31cf1e679 1/1 9 donor_whale +42mefDQX...pJw9nygF 2026-07-05 11:24:16 5486.0kH/s 3711190 df843aa0649c 1/1 9 donor_whale +42Mk3F3y...Q6fgUTJr 2026-07-05 10:21:13 3521.9kH/s 3711161 73393b034c5d 1/1 9 donor_whale +42m2kLta...aDULT2Qj 2026-07-05 08:28:13 5563.2kH/s 3711101 27263b799ab2 1/1 31 donor_vip +4AEAX3qs...vTU56zMr 2026-07-05 07:25:13 4186.3kH/s 3711058 8edaf4bfd596 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-05 06:22:31 5813.3kH/s 3711030 11748c447b64 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-07-05 05:19:41 5329.5kH/s 3711003 03d5b07ec833 1/1 10 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-05 04:21:12 5781.6kH/s 3710975 f40d8d994ac2 1/1 10 donor_whale +49fV8TjN...GSgrDzrU 2026-07-05 03:19:12 3495.7kH/s 3710946 09eb5117649a 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-05 01:54:13 5566.4kH/s 3710886 5108e3acf453 1/1 1 donor_mega +4AGJScWS...f6SvY5p5 2026-07-05 00:52:03 4592.6kH/s 3710860 75a3d72d85a7 1/1 4 mvp +48M2j8Gj...d8KgGBwa 2026-07-04 23:50:11 3380.1kH/s 3710836 e51767bb3c19 1/1 1 donor_mega +46AdMVVk...KRL9YFCm 2026-07-04 22:15:13 5449.8kH/s 3710795 df6aaba9798f 1/1 33 donor_vip +47NF5Nbe...nMs9DDJU 2026-07-04 21:12:33 4244.8kH/s 3710764 c441cc7069f4 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-04 20:09:16 5722.7kH/s 3710738 481d7055ed4d 1/1 1 donor_mega +49fV8TjN...GSgrDzrU 2026-07-04 19:07:14 4354.7kH/s 3710715 5d9a5cd524d0 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-04 18:05:10 5792.9kH/s 3710691 be664d2f6d89 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-07-04 17:02:34 5496.0kH/s 3710661 6f23e466e59a 1/1 7 donor_whale +42mefDQX...pJw9nygF 2026-07-04 15:59:14 4192.8kH/s 3710631 73152d1c0bea 1/1 69 donor +48M2j8Gj...d8KgGBwa 2026-07-04 14:56:42 3647.8kH/s 3710595 ca6cfc4dbeab 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-04 13:57:31 6518.6kH/s 3710556 6b4e81eedc64 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-04 12:54:35 6638.3kH/s 3710529 c228700a4513 1/1 7 donor_whale +42mefDQX...pJw9nygF 2026-07-04 11:51:15 5182.2kH/s 3710485 8a392ceaacd1 1/1 7 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-04 10:48:14 3718.6kH/s 3710444 6bac328ac5c8 1/1 7 donor_whale +47NF5Nbe...nMs9DDJU 2026-07-04 08:47:15 3592.9kH/s 3710370 fbd3c7b2495c 1/1 7 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-04 07:44:15 3798.2kH/s 3710328 a541a22bd614 1/1 7 donor_whale +48wF5CTP...zF7tEmWC 2026-07-04 06:41:32 3749.1kH/s 3710297 dfaf482a7146 1/1 7 donor_whale +43tg9ebV...GLspBx9P 2026-07-04 05:38:13 3856.4kH/s 3710269 e6265bc08ce6 1/1 69 donor +48M2j8Gj...d8KgGBwa 2026-07-04 04:35:39 3674.6kH/s 3710241 cbee7c775ea3 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-04 03:36:29 3768.7kH/s 3710215 3683e68ea87c 1/1 6 donor_whale +42mefDQX...pJw9nygF 2026-07-04 02:33:31 3770.1kH/s 3710187 8b53e72a06d0 1/1 7 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-04 01:31:11 3909.3kH/s 3710153 9adbaa90197f 1/1 7 donor_whale +45xA3Kgd...7Ma7ttaf 2026-07-04 00:28:31 3831.2kH/s 3710120 52b7168e2df4 1/1 32 donor_vip +47NF5Nbe...nMs9DDJU 2026-07-03 23:26:11 3460.3kH/s 3710093 8860818ce1b5 1/1 7 donor_whale +4AyiUbKF...uJpsC4ym 2026-07-03 22:24:10 3404.2kH/s 3710061 04355cda07b2 2/1 30 donor_vip +46Rb9Hjc...57AFUnq5 2026-07-03 21:22:10 3099.6kH/s 3710033 4592806beafb 1/1 7 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-03 20:20:11 2919.7kH/s 3709992 f56d36542402 1/1 7 donor_whale +42NpvKMH...zAXwCRSb 2026-07-03 19:18:11 3128.7kH/s 3709966 77ca738d2173 1/1 7 donor_whale +421n6hRs...61UsZuDG 2026-07-03 18:15:13 3405.6kH/s 3709938 905f3bbe4c52 1/1 7 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-03 17:13:08 2981.4kH/s 3709903 61d479c9847e 1/1 7 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-03 16:10:37 2904.1kH/s 3709875 4dd4c261e4f6 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-03 15:11:38 3437.4kH/s 3709846 e8febb283003 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-03 14:12:13 2894.7kH/s 3709825 97b4eb64b10d 1/1 7 donor_whale +42mefDQX...pJw9nygF 2026-07-03 13:10:11 3401.5kH/s 3709788 c82d550762c5 1/1 7 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-03 12:07:28 3811.3kH/s 3709756 6766a3d93123 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-03 11:04:12 4149.4kH/s 3709729 32f461cc3f58 1/1 7 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-03 10:01:37 3792.3kH/s 3709700 5aaf70216e70 1/1 7 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-03 09:03:10 4084.2kH/s 3709669 173109d3ad3c 1/1 7 donor_whale +421n6hRs...61UsZuDG 2026-07-03 07:14:11 3705.4kH/s 3709608 e21e75784326 2/1 6 donor_whale +47NF5Nbe...nMs9DDJU 2026-07-03 06:11:27 3856.5kH/s 3709564 31e9a3ea930d 1/1 7 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-03 05:08:35 4249.9kH/s 3709527 2cc61c11cc4d 2/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-03 04:10:08 3726.1kH/s 3709496 970bca01f175 1/1 1 donor_mega +4AyiUbKF...uJpsC4ym 2026-07-03 03:08:08 4048.8kH/s 3709465 437b23021cbb 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-03 02:06:06 3982.2kH/s 3709432 90e47ed15798 1/1 7 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-03 01:03:28 4210.5kH/s 3709400 49b63e40280a 2/1 6 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-02 21:34:13 3744.1kH/s 3709303 86f65a922b79 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-07-02 20:31:11 4243.1kH/s 3709265 4be8eb047b23 2/1 7 donor_whale +42NpvKMH...zAXwCRSb 2026-07-02 18:45:10 3995.9kH/s 3709204 e44d0baed71a 1/1 12 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-02 17:35:10 4976.9kH/s 3709174 f1af4634d12f 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-07-02 16:33:11 4907.7kH/s 3709150 b2bbb1e4b758 1/1 12 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-02 15:30:13 5143.5kH/s 3709124 1473c0648f01 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-02 14:28:10 4125.4kH/s 3709092 4c85ea133e11 1/1 11 donor_whale +42NpvKMH...zAXwCRSb 2026-07-02 13:26:10 2627.6kH/s 3709067 88f37509cf60 1/1 32 donor_vip +48wF5CTP...zF7tEmWC 2026-07-02 09:21:47 4962.7kH/s 3708961 ef46db169bbd 1/1 33 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-02 08:18:42 4435.8kH/s 3708929 22cc13c0f9e5 2/1 1 donor_mega +45wQcnHH...kR5qUREN 2026-07-02 07:16:09 4398.7kH/s 3708893 103215eefec4 1/1 33 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-02 06:14:06 4630.4kH/s 3708860 0efac6463ac2 2/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-02 05:11:07 4696.5kH/s 3708824 bc0fee2bd4e3 1/1 12 donor_whale +47NF5Nbe...nMs9DDJU 2026-07-02 04:08:50 4420.1kH/s 3708795 64e2c1ab92ad 1/1 11 donor_whale +47NF5Nbe...nMs9DDJU 2026-07-02 03:10:07 4677.9kH/s 3708752 d72879a410c8 1/1 71 donor +42NpvKMH...zAXwCRSb 2026-07-02 02:07:20 4397.6kH/s 3708720 c62743253fdc 1/1 11 donor_whale +4Arsu3rc...wUtCc5e9 2026-07-02 01:05:09 4868.1kH/s 3708693 b123772973d0 1/1 73 donor +47NF5Nbe...nMs9DDJU 2026-07-02 00:03:07 5072.1kH/s 3708659 66b2055ca39b 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-01 23:00:24 4746.2kH/s 3708625 f462821d41a5 1/1 11 donor_whale +43CcbPH8...uQWupVW5 2026-07-01 21:58:09 4641.5kH/s 3708595 725a93cfcd6f 1/1 11 donor_whale +42mefDQX...pJw9nygF 2026-07-01 20:55:14 4872.2kH/s 3708568 95a97190b888 1/1 11 donor_whale +48MKrUo9...fEagtDE8 2026-07-01 19:52:32 5000.3kH/s 3708537 fd10ddc61bbd 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-01 18:49:13 4578.9kH/s 3708510 072c604f42ed 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-07-01 17:47:12 4415.5kH/s 3708479 d1546723a393 1/1 11 donor_whale +42NpvKMH...zAXwCRSb 2026-07-01 16:44:28 5219.3kH/s 3708449 9d2942aac9a2 1/1 11 donor_whale +43CcbPH8...uQWupVW5 2026-07-01 15:42:07 4925.2kH/s 3708419 0afc7962ea92 1/1 11 donor_whale +42NpvKMH...zAXwCRSb 2026-07-01 14:39:14 4400.7kH/s 3708390 dbd9232d943a 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-01 13:36:13 5004.8kH/s 3708360 7b35cfbcd930 1/1 1 donor_mega +487SyiQC...aSGcaBDE 2026-07-01 12:01:35 4628.1kH/s 3708312 713fd9f6b7bc 1/1 31 donor_vip +43CcbPH8...uQWupVW5 2026-07-01 10:58:12 4708.5kH/s 3708272 4b3909878c23 2/1 10 donor_whale +421n6hRs...61UsZuDG 2026-07-01 09:55:14 4388.6kH/s 3708240 e8dc30e0f265 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-01 07:50:39 4297.4kH/s 3708177 0714df5ccb5a 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-01 06:51:13 4716.9kH/s 3708143 ae3726bbc92e 1/1 11 donor_whale +42NpvKMH...zAXwCRSb 2026-07-01 05:49:11 4736.9kH/s 3708115 76208f735086 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-01 04:46:38 4343.3kH/s 3708083 447e72b4ffc4 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-01 03:26:10 4593.0kH/s 3708049 8c0546a9c51c 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-07-01 01:01:11 4777.2kH/s 3707988 43b546fec12a 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-30 23:58:39 4650.9kH/s 3707955 cc4063a12d4e 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-30 22:59:32 4659.9kH/s 3707932 52152d206efd 1/1 1 donor_mega +46PsTAqp...o2VDhm5j 2026-06-30 21:56:33 4025.4kH/s 3707902 99ba0edc0466 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-30 20:54:18 4382.3kH/s 3707870 2310869ae5e0 1/1 31 donor_vip +43N8v4Ma...277zUwJq 2026-06-30 19:51:16 4804.3kH/s 3707839 87beb66fa2c9 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-30 18:48:40 4974.3kH/s 3707813 1da0ca2b1554 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-30 17:50:01 4866.5kH/s 3707787 98a29f040926 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-30 16:50:53 4523.2kH/s 3707757 871a87c0c9bc 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-30 15:52:01 4747.0kH/s 3707729 74236fb5c794 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-30 14:52:31 6496.8kH/s 3707696 e1bdbb25d903 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-06-30 13:50:14 4845.1kH/s 3707670 a82f35ffcab2 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-30 12:47:42 6580.7kH/s 3707639 b64219b6841e 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-06-30 11:44:14 6210.8kH/s 3707603 07f48b5e9332 1/1 9 donor_whale +47NF5Nbe...nMs9DDJU 2026-06-30 10:41:13 6431.2kH/s 3707569 a5e726901fc5 1/1 30 donor_vip +46Rb9Hjc...57AFUnq5 2026-06-30 09:39:11 7419.4kH/s 3707526 6624b8829d45 1/1 10 donor_whale +49YoCEDi...x97dHeGQ 2026-06-30 08:36:12 6851.5kH/s 3707489 51467dafbc3e 1/1 31 donor_vip +46Rb9Hjc...57AFUnq5 2026-06-30 07:33:12 7202.7kH/s 3707449 dab23270dce6 1/1 10 donor_whale +42NpvKMH...zAXwCRSb 2026-06-30 06:30:30 4925.2kH/s 3707408 eeb330f7d725 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-30 05:27:12 6971.9kH/s 3707376 016e4109227d 1/1 1 donor_mega +4AyiUbKF...uJpsC4ym 2026-06-30 04:22:29 5183.3kH/s 3707348 438b5b2b9427 1/1 30 donor_vip +46Rb9Hjc...57AFUnq5 2026-06-30 03:05:08 3620.4kH/s 3707307 27c88d873814 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-30 01:12:09 7427.4kH/s 3707246 553086d13155 1/1 1 donor_mega +46PsTAqp...o2VDhm5j 2026-06-30 00:09:30 6808.9kH/s 3707223 a7c6270b325e 1/1 30 donor_vip +43nvW9WJ...e7SmCf3o 2026-06-29 23:07:10 5062.6kH/s 3707189 2f18af79c0fa 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-29 22:04:39 4715.0kH/s 3707172 43b2dc9afc6e 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-29 21:05:40 5623.8kH/s 3707144 dff8817f7325 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-29 20:07:02 5217.6kH/s 3707116 f795cf38e930 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-29 19:08:14 6630.4kH/s 3707084 e798a0ecf335 1/1 1 donor_mega +487SyiQC...aSGcaBDE 2026-06-29 18:05:37 5720.3kH/s 3707059 107b07483fb5 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-29 17:02:42 5321.6kH/s 3707036 eb1da4d70503 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-29 16:03:39 4734.2kH/s 3707009 0e798c8ac7f8 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-29 15:04:41 6302.9kH/s 3706982 893ef94e7563 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-06-29 14:01:13 5746.6kH/s 3706949 4df6237bc45e 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-29 12:58:32 7342.3kH/s 3706916 49e291e75b25 1/1 1 donor_mega +42NJbX1p...JBe7i8b2 2026-06-29 11:55:13 7095.2kH/s 3706873 320da7349460 1/1 30 donor_vip +46Rb9Hjc...57AFUnq5 2026-06-29 10:52:32 5051.7kH/s 3706843 72ca4b5bf741 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-29 09:49:45 4757.0kH/s 3706826 d1938b506e55 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-29 08:50:41 3758.8kH/s 3706797 1c044255ae5c 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-29 07:18:39 5049.2kH/s 3706745 03a085233423 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-29 06:19:38 4947.5kH/s 3706713 3fff24491636 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-29 05:21:11 6786.6kH/s 3706679 a10539fa7c43 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-06-29 04:19:10 6886.4kH/s 3706656 4c5ced4c2d7f 1/1 10 donor_whale +42Mk3F3y...Q6fgUTJr 2026-06-29 03:16:11 4859.5kH/s 3706627 4ae54aa39d82 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-29 02:13:11 6471.5kH/s 3706597 f36bd905d0e9 1/1 1 donor_mega +49fV8TjN...GSgrDzrU 2026-06-29 01:10:11 4708.6kH/s 3706572 309a101871aa 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-29 00:07:37 4975.8kH/s 3706543 caf7a3396b96 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-28 23:09:10 6604.7kH/s 3706515 08ab27d864c4 1/1 1 donor_mega +4AyiUbKF...uJpsC4ym 2026-06-28 22:06:12 4652.8kH/s 3706485 045cc0211d53 1/1 27 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-28 21:03:13 4209.1kH/s 3706452 f96c1788a3de 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-06-28 19:42:59 6600.5kH/s 3706418 a538e80a81d4 1/1 10 donor_whale +47NF5Nbe...nMs9DDJU 2026-06-28 18:43:33 7123.9kH/s 3706391 1509a42bd896 1/1 9 donor_whale +42mefDQX...pJw9nygF 2026-06-28 17:41:11 6628.2kH/s 3706358 d4763945c93a 1/1 8 donor_whale +49fV8TjN...GSgrDzrU 2026-06-28 16:38:33 4480.7kH/s 3706324 cf0bab3a0925 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-28 15:35:37 5082.8kH/s 3706290 544aede7980c 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-28 14:36:12 5666.3kH/s 3706260 c5f458dced52 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-06-28 13:30:31 6564.5kH/s 3706221 50fbe3497686 1/1 10 donor_whale +42NpvKMH...zAXwCRSb 2026-06-28 12:28:11 4691.5kH/s 3706186 f585882cbbde 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-28 11:25:39 3742.8kH/s 3706154 03bcc62458e9 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-28 09:36:14 3620.4kH/s 3706103 6f74e37550a2 1/1 1 donor_mega +43CcbPH8...uQWupVW5 2026-06-28 08:18:11 4577.1kH/s 3706056 ab440fd05b0a 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-28 07:15:11 6425.0kH/s 3706028 e9de85274bf4 1/1 1 donor_mega +49fV8TjN...GSgrDzrU 2026-06-28 06:12:12 4782.6kH/s 3706000 d2172377d98e 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-28 05:09:39 4513.6kH/s 3705969 77be0d3b9b39 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-28 04:10:56 4570.5kH/s 3705943 4d3df14d63ff 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-28 03:11:35 5092.0kH/s 3705919 f171345c7e53 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-28 02:13:09 6429.0kH/s 3705901 b36e6c055456 1/1 1 donor_mega +43CcbPH8...uQWupVW5 2026-06-28 01:11:10 6553.4kH/s 3705873 f3b0e9ca51a9 1/1 10 donor_whale +421n6hRs...61UsZuDG 2026-06-28 00:09:09 4794.0kH/s 3705841 3c282565aaef 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-27 23:07:09 6477.6kH/s 3705804 2c06e4374eba 1/1 1 donor_mega +4B2Avc2j...5JCEaaNs 2026-06-27 22:04:12 3406.0kH/s 3705774 563caffa3bb8 1/1 30 donor_vip +43nvW9WJ...e7SmCf3o 2026-06-27 20:22:12 4874.4kH/s 3705732 676f9749e727 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-27 19:19:13 6425.9kH/s 3705707 edbb7afdf690 1/1 1 donor_mega +43nvW9WJ...e7SmCf3o 2026-06-27 18:16:34 6957.1kH/s 3705676 45e89b8cca16 1/1 29 donor_vip +49YoCEDi...x97dHeGQ 2026-06-27 17:14:29 4715.3kH/s 3705639 04632428ff7a 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-27 16:11:39 4907.5kH/s 3705608 cfe767f82ae5 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-27 15:12:29 5060.9kH/s 3705577 71443f7ca0be 1/1 1 donor_mega +4AyiUbKF...uJpsC4ym 2026-06-27 14:02:10 4512.3kH/s 3705539 01004604c2ee 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-27 12:59:39 4565.1kH/s 3705516 7827ab009aed 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-27 12:00:30 7670.3kH/s 3705472 6fad4cc4df05 1/1 1 donor_mega +45wQcnHH...kR5qUREN 2026-06-27 10:58:27 7495.9kH/s 3705432 acef0fefd1a6 1/1 72 donor +421n6hRs...61UsZuDG 2026-06-27 09:55:33 5596.9kH/s 3705398 e19b29d8311c 1/1 29 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-27 08:52:13 3389.9kH/s 3705351 3b735e4caeb2 1/1 29 donor_vip +4AEAX3qs...vTU56zMr 2026-06-27 07:19:12 6247.4kH/s 3705292 98109da7f4a4 1/1 31 donor_vip +49YoCEDi...x97dHeGQ 2026-06-27 06:17:10 6601.4kH/s 3705260 9ea78cbd987b 1/1 31 donor_vip +47NF5Nbe...nMs9DDJU 2026-06-27 05:14:32 6670.9kH/s 3705225 dfe8e05fa56b 1/1 10 donor_whale +49fV8TjN...GSgrDzrU 2026-06-27 04:12:09 5562.0kH/s 3705191 7a9702fba949 1/1 71 donor +48M2j8Gj...d8KgGBwa 2026-06-27 03:09:36 5489.5kH/s 3705157 bd9690414e3f 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-27 02:10:35 5345.9kH/s 3705140 392abadd0eef 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-27 01:11:36 5307.9kH/s 3705115 0bdb6ab5506b 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-27 00:13:09 7195.3kH/s 3705088 222b8141b316 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-06-26 23:10:28 7093.3kH/s 3705049 e66abb166599 1/1 11 donor_whale +48wF5CTP...zF7tEmWC 2026-06-26 22:08:10 5395.4kH/s 3705015 6f448ff46d08 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-26 21:05:40 4856.9kH/s 3704988 b420bdbc3e3b 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-26 20:06:33 7296.1kH/s 3704948 dc02a50b334f 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-06-26 19:04:14 6811.7kH/s 3704921 04ed10f8628d 1/1 10 donor_whale +42Mk3F3y...Q6fgUTJr 2026-06-26 18:01:12 7055.3kH/s 3704897 d74f82bf6f70 1/1 10 donor_whale +42mefDQX...pJw9nygF 2026-06-26 16:58:16 6967.0kH/s 3704857 222d35d8ee37 1/1 10 donor_whale +45yonJgZ...41NDuzhs 2026-06-26 15:55:14 7050.3kH/s 3704834 d1faa08bcdcf 1/1 73 donor +47sctNyW...JBFt8g8K 2026-06-26 14:52:33 5307.9kH/s 3704803 17ea01377db2 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-26 13:49:59 4590.5kH/s 3704783 9cea29d7d0dc 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-26 12:50:37 6099.3kH/s 3704740 fbbb29c40520 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-06-26 11:47:12 6314.0kH/s 3704711 89d71ef56c0d 1/1 32 donor_vip +47d4QRof...jL5UqAKj 2026-06-26 10:44:32 5649.5kH/s 3704675 2933958a0f57 1/1 70 donor +48M2j8Gj...d8KgGBwa 2026-06-26 09:42:12 6820.6kH/s 3704649 6e0f106ff218 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-06-26 08:39:33 4903.8kH/s 3704617 91a3bc7543b1 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-26 07:36:39 5023.6kH/s 3704593 e06047d81ded 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-26 06:37:38 4309.3kH/s 3704563 4d97e760d61d 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-26 05:38:14 5964.7kH/s 3704530 e8dbb9dcadf9 1/1 1 donor_mega +49fV8TjN...GSgrDzrU 2026-06-26 04:36:08 4752.3kH/s 3704492 aca9c5cc5e71 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-26 03:33:52 4735.2kH/s 3704454 9fddb6e160c4 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-26 02:35:08 6361.2kH/s 3704429 2d81533ebf09 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-06-26 01:33:08 7025.5kH/s 3704399 9d7401cc3f4e 1/1 31 donor_vip +49fV8TjN...GSgrDzrU 2026-06-26 00:31:07 5753.7kH/s 3704376 bf121fcdba7b 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-25 23:28:36 5798.9kH/s 3704345 002ddc878e25 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-25 22:29:11 7513.0kH/s 3704324 67ff1c699fa9 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-06-25 21:27:11 5725.8kH/s 3704292 1b37214c7e0d 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-25 20:24:14 3600.8kH/s 3704261 cfef4a241a8c 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-06-25 18:13:12 6467.6kH/s 3704194 e94cc15e5173 1/1 10 donor_whale +42mefDQX...pJw9nygF 2026-06-25 17:10:13 6778.5kH/s 3704158 0e1a760d8e8c 1/1 10 donor_whale +44aZ9ce8...i1Hxzm1M 2026-06-25 16:07:13 5005.3kH/s 3704122 4406d3f80bb2 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-25 15:04:43 6309.1kH/s 3704088 da2c65fcb73b 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-06-25 14:01:13 3606.4kH/s 3704052 585462ee21aa 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-25 12:58:17 7055.6kH/s 3704018 b5b4873a93e9 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-06-25 11:55:13 6539.6kH/s 3703977 6b21b3172b49 1/1 71 donor +49fV8TjN...GSgrDzrU 2026-06-25 10:52:14 6160.6kH/s 3703951 affd6a57731a 1/1 10 donor_whale +43CcbPH8...uQWupVW5 2026-06-25 09:49:14 6655.5kH/s 3703920 7e35824d16b6 1/1 10 donor_whale +42mefDQX...pJw9nygF 2026-06-25 08:46:13 5021.0kH/s 3703885 18f4c62317ce 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-25 07:43:13 6442.1kH/s 3703844 fa22c5cf8987 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-06-25 06:40:32 6513.7kH/s 3703807 5cc6a7048c66 1/1 10 donor_whale +42NpvKMH...zAXwCRSb 2026-06-25 05:37:12 6274.9kH/s 3703782 a41671901dac 1/1 10 donor_whale +42cg1PYJ...o43XGcrP 2026-06-25 04:34:12 5059.1kH/s 3703754 33d5dedddfb7 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-25 03:31:35 4893.7kH/s 3703724 970f68d18ab0 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-25 02:33:08 6333.7kH/s 3703688 c428b6b1e2db 1/1 1 donor_mega +481ELpyU...mCQhPM2f 2026-06-25 01:31:08 6336.6kH/s 3703652 ba1e5e6501ca 1/1 32 donor_vip +42Mk3F3y...Q6fgUTJr 2026-06-25 00:29:09 6380.5kH/s 3703624 d7793e32a155 1/1 9 donor_whale +421n6hRs...61UsZuDG 2026-06-24 23:27:09 4709.9kH/s 3703601 21b3b7c6ef1b 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-24 22:24:40 4524.4kH/s 3703576 55a9f5484699 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-24 21:22:14 6619.6kH/s 3703551 10b211f0cdd3 1/1 1 donor_mega +47sctNyW...JBFt8g8K 2026-06-24 20:19:35 5065.7kH/s 3703532 9d98dc6c2037 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-24 19:16:12 6864.2kH/s 3703502 482a7a63d00e 1/1 1 donor_mega +49fV8TjN...GSgrDzrU 2026-06-24 18:13:33 6826.0kH/s 3703477 82054c9f958c 1/1 32 donor_vip +481ELpyU...mCQhPM2f 2026-06-24 17:10:13 6652.4kH/s 3703443 46eaef0b697f 1/1 33 donor_vip +42NpvKMH...zAXwCRSb 2026-06-24 16:08:11 4417.1kH/s 3703417 804451b6b226 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-24 15:05:13 6861.2kH/s 3703389 f13e31d010cd 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-06-24 14:02:13 6910.9kH/s 3703361 d86e7e678412 1/1 8 donor_whale +421n6hRs...61UsZuDG 2026-06-24 12:59:16 4998.7kH/s 3703335 dacc7fb84ded 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-24 11:57:11 6922.0kH/s 3703302 c4c5f0a59a03 1/1 1 donor_mega +49fV8TjN...GSgrDzrU 2026-06-24 10:54:36 4639.9kH/s 3703274 3c3983210e4e 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-24 09:51:39 4620.8kH/s 3703251 05415e0c1668 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-24 08:52:35 6608.4kH/s 3703216 129cb9077c4c 1/1 1 donor_mega +4AVuFPr9...TBC6mvDr 2026-06-24 07:49:13 4983.8kH/s 3703186 4b9686875a56 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-24 06:47:10 6823.6kH/s 3703151 75118600cb7c 1/1 1 donor_mega +49fV8TjN...GSgrDzrU 2026-06-24 05:45:10 4799.9kH/s 3703122 7063f06af877 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-24 04:42:27 6614.7kH/s 3703093 0d209ccfac96 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-06-24 03:40:10 4813.1kH/s 3703054 48a290037fe2 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-24 02:37:26 6452.0kH/s 3703028 4de7ce50966f 1/1 1 donor_mega +41r5LLfb...UQqaezSK 2026-06-24 01:35:04 6497.3kH/s 3702991 6005eabdbc2e 1/1 181 vip +449jPnW2...KBPdgEsM 2026-06-24 00:33:02 3651.4kH/s 3702959 25ae281170b4 1/1 327 vip +42NpvKMH...zAXwCRSb 2026-06-23 22:51:12 5037.9kH/s 3702895 efdb57923ee8 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-23 21:48:38 3143.5kH/s 3702872 831710cf67a9 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-23 19:26:38 6126.2kH/s 3702814 7d8c841cb5b6 1/1 1 donor_mega +421n6hRs...61UsZuDG 2026-06-23 18:23:14 6033.0kH/s 3702779 93906f79776a 1/1 9 donor_whale +42Mk3F3y...Q6fgUTJr 2026-06-23 17:20:34 6503.5kH/s 3702747 a7774500045c 1/1 9 donor_whale +47NF5Nbe...nMs9DDJU 2026-06-23 16:18:13 6532.2kH/s 3702725 9e8f3ccf2783 1/1 35 donor_vip +46XNiJuL...DF62UR3s 2026-06-23 15:15:12 6316.6kH/s 3702694 f2fcb95d3f34 1/1 77 donor +48LNi6pk...5DomVmR2 2026-06-23 14:12:15 6367.9kH/s 3702663 19c5e8b03864 1/1 35 donor_vip +48wF5CTP...zF7tEmWC 2026-06-23 13:09:15 5301.0kH/s 3702637 81e0e2e0a19b 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-23 12:06:40 5061.2kH/s 3702605 432729b12464 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-23 11:07:36 5084.8kH/s 3702573 349a242eb12f 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-23 10:08:40 6615.4kH/s 3702528 b1d1e0fb9e38 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-06-23 09:05:26 6713.1kH/s 3702488 877f90759efd 1/1 8 donor_whale +4AEetwiY...N8hCJiNL 2026-06-23 08:02:33 5243.7kH/s 3702449 0b9e0d9c21ad 1/1 337 vip +48M2j8Gj...d8KgGBwa 2026-06-23 06:59:11 4696.6kH/s 3702424 cfb110e5f80f 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-23 06:00:08 5038.0kH/s 3702393 08a4d05cceab 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-23 05:00:17 7017.3kH/s 3702363 0b234ac49453 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-06-23 03:57:15 7001.7kH/s 3702333 67b24863cdfc 1/1 8 donor_whale +42mefDQX...pJw9nygF 2026-06-23 02:54:17 5108.5kH/s 3702300 4af4e63c5431 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-23 01:51:15 7055.8kH/s 3702277 a3307879136f 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-06-23 00:48:39 4219.4kH/s 3702238 9efe1c0b4583 1/1 6 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-22 23:46:00 4015.5kH/s 3702203 9d9c813d80d6 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-22 22:46:43 4369.4kH/s 3702165 f4ba3dce57be 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-22 21:47:45 4689.8kH/s 3702138 69096c240058 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-22 20:48:54 4398.7kH/s 3702113 68eee2fd2361 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-22 19:49:46 6500.7kH/s 3702079 bf0ae85ea5c4 1/1 1 donor_mega +43nvW9WJ...e7SmCf3o 2026-06-22 18:47:19 4655.2kH/s 3702051 38e55da31c69 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-22 17:45:04 4923.0kH/s 3702030 b50ae4080bc2 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-22 16:45:18 6815.1kH/s 3701986 6461afe2206c 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-06-22 15:42:18 6089.6kH/s 3701952 a98f8febd9df 1/1 8 donor_whale +48wF5CTP...zF7tEmWC 2026-06-22 14:39:21 6648.7kH/s 3701926 8797b0a47452 1/1 8 donor_whale +41gtJH9K...kBBoALUs 2026-06-22 13:36:14 6381.6kH/s 3701901 2fb215cc9d8b 4/1 337 vip +47NF5Nbe...nMs9DDJU 2026-06-22 12:33:41 6382.1kH/s 3701859 2c16e1905596 1/1 8 donor_whale +42NpvKMH...zAXwCRSb 2026-06-22 11:30:19 4372.3kH/s 3701822 365cc47564f4 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-22 10:27:44 4755.2kH/s 3701794 ec05127a1954 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-22 09:28:47 4298.1kH/s 3701767 3a4be432fff5 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-22 08:24:40 6268.3kH/s 3701733 0e366df541e5 1/1 1 donor_mega +431Nxj7w...4D7yyU3q 2026-06-22 07:21:20 2858.4kH/s 3701696 6e985ef329f4 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-22 06:03:20 6253.1kH/s 3701655 7f6a78d7db3d 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-06-22 05:00:16 6583.9kH/s 3701628 38281a71c2ea 1/1 33 donor_vip +42mefDQX...pJw9nygF 2026-06-22 03:57:43 6076.4kH/s 3701602 57f3077754a3 1/1 10 donor_whale +42mefDQX...pJw9nygF 2026-06-22 02:58:14 6421.0kH/s 3701581 a1f63211a01b 1/1 33 donor_vip +49fV8TjN...GSgrDzrU 2026-06-22 01:55:31 4891.7kH/s 3701549 25545ce59717 1/1 33 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-22 00:52:20 6604.2kH/s 3701517 9c4a26d4afb0 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-06-21 23:49:15 4985.9kH/s 3701483 5306ba3da3af 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-21 22:46:43 4477.1kH/s 3701456 54d44a09b057 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-21 21:47:43 4785.6kH/s 3701420 ad4265707030 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-21 20:48:46 7087.9kH/s 3701387 f1ad7fd6a9c8 1/1 1 donor_mega +43CcbPH8...uQWupVW5 2026-06-21 19:46:19 6334.1kH/s 3701352 bf4d518d9f60 1/1 10 donor_whale +42mefDQX...pJw9nygF 2026-06-21 18:43:40 4594.2kH/s 3701324 9f09c72a2c73 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-21 17:40:19 6543.5kH/s 3701297 ae99b32ed8ad 1/1 1 donor_mega +48xVox2n...oQM27PR1 2026-06-21 16:37:38 7074.5kH/s 3701270 725dee32a780 1/1 32 donor_vip +49fV8TjN...GSgrDzrU 2026-06-21 15:34:22 6914.4kH/s 3701234 5953317066cb 1/1 32 donor_vip +48wF5CTP...zF7tEmWC 2026-06-21 14:31:16 5160.1kH/s 3701205 5a40e2c188da 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-21 13:28:45 5373.2kH/s 3701166 d2fe70cdd8d8 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-21 12:28:19 6599.6kH/s 3701140 9b31ae828304 1/1 1 donor_mega +44MnN1f3...a621jwyg 2026-06-21 11:25:13 6400.4kH/s 3701107 073452a77e50 1/1 4 mvp +42NpvKMH...zAXwCRSb 2026-06-21 10:22:18 4719.2kH/s 3701081 1e521b256c59 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-21 09:19:42 6821.3kH/s 3701046 507bb38f5d11 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-06-21 08:16:15 6621.8kH/s 3701024 b24bec88b972 1/1 9 donor_whale +421n6hRs...61UsZuDG 2026-06-21 07:13:39 6439.0kH/s 3700995 12dc79c4b16f 1/1 32 donor_vip +46nRjvst...H2CR2bBX 2026-06-21 06:11:07 4558.8kH/s 3700956 48a87eb35437 1/1 187 vip +48M2j8Gj...d8KgGBwa 2026-06-21 05:08:17 6621.7kH/s 3700930 6389be18e6b3 1/1 9 donor_whale +481ELpyU...mCQhPM2f 2026-06-21 04:05:16 6719.5kH/s 3700898 58fb1f217b2a 1/1 32 donor_vip +487SyiQC...aSGcaBDE 2026-06-21 03:02:30 7197.2kH/s 3700869 f9c8a17ef16c 1/1 32 donor_vip +47NF5Nbe...nMs9DDJU 2026-06-21 01:59:12 5411.7kH/s 3700835 b8385af1c96a 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-21 00:56:33 7402.2kH/s 3700804 413a4550e6b9 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-06-20 23:54:15 4423.3kH/s 3700778 0de15610a82c 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-20 22:51:14 6381.9kH/s 3700744 9a3af07d1701 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-06-20 21:48:15 4502.0kH/s 3700718 9cafcf988902 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-20 20:45:58 4719.0kH/s 3700691 a19eb1730bcd 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-20 19:46:43 5192.6kH/s 3700651 5ec647fdf2b8 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-20 18:47:16 5557.7kH/s 3700623 3147c20a4a7f 1/1 1 donor_mega +42m2kLta...aDULT2Qj 2026-06-20 17:40:18 4676.2kH/s 3700589 ed5896e1c4cc 1/1 33 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-20 16:37:24 6640.5kH/s 3700556 6b1852dda650 1/1 1 donor_mega +42NJbX1p...JBe7i8b2 2026-06-20 15:34:21 4991.4kH/s 3700530 d4d7bb8645f5 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-20 14:31:49 6655.3kH/s 3700490 2e35cf0df4dc 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-06-20 13:29:34 4562.8kH/s 3700462 2ba09564303c 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-20 12:26:16 6425.7kH/s 3700432 5eaa1d8e2a8c 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-06-20 11:23:17 4978.4kH/s 3700397 6795361029eb 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-20 10:20:19 6036.1kH/s 3700364 2bab9b94493c 1/1 1 donor_mega +44uEmaK2...hMZB7faF 2026-06-20 09:17:21 4781.5kH/s 3700329 9267f7e300cb 1/1 77 donor +48M2j8Gj...d8KgGBwa 2026-06-20 08:15:02 4777.9kH/s 3700300 e3ddeb030a3e 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-20 07:16:01 4865.1kH/s 3700269 158130084135 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-20 06:16:16 6634.4kH/s 3700240 ffe866c7e097 1/1 1 donor_mega +421n6hRs...61UsZuDG 2026-06-20 05:13:33 6974.2kH/s 3700215 a017913b0be6 1/1 8 donor_whale +4AeEwC2U...YQyoQtr7 2026-06-20 04:10:25 6991.9kH/s 3700184 c5d5cfc28b3e 1/1 4 mvp +43rwcyy6...JHhw1PHJ 2026-06-20 03:08:04 6660.1kH/s 3700155 cf38960c908b 1/1 185 vip +42mefDQX...pJw9nygF 2026-06-20 02:05:42 6588.8kH/s 3700126 f60b6f437cf2 1/1 8 donor_whale +42mefDQX...pJw9nygF 2026-06-20 01:06:18 5095.5kH/s 3700089 3d7c30194205 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-20 00:03:16 6931.7kH/s 3700056 bdf1e61f5949 1/1 1 donor_mega +42NJbX1p...JBe7i8b2 2026-06-19 23:00:35 4428.5kH/s 3700029 c83a39987018 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-19 21:57:44 4796.7kH/s 3700002 54884bbab39d 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-19 20:58:46 4902.1kH/s 3699965 cb8b3b94fe24 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-19 19:59:48 4318.1kH/s 3699937 b3037d4886a8 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-19 19:00:20 6224.7kH/s 3699902 835fb2ab86cd 1/1 1 donor_mega +45wQcnHH...kR5qUREN 2026-06-19 17:57:38 5944.6kH/s 3699883 dd03469b242b 1/1 34 donor_vip +49fV8TjN...GSgrDzrU 2026-06-19 16:54:50 4193.0kH/s 3699853 fa714dec98f7 1/1 34 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-19 15:51:46 4484.8kH/s 3699815 48e758054ae9 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-19 14:52:22 6551.5kH/s 3699786 d374013f55c6 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-06-19 13:49:30 6779.5kH/s 3699754 7e26e8573b7d 1/1 10 donor_whale +4B2Avc2j...5JCEaaNs 2026-06-19 12:46:27 6718.8kH/s 3699725 601797b3f518 1/1 35 donor_vip +47NF5Nbe...nMs9DDJU 2026-06-19 11:43:51 6611.1kH/s 3699697 e7c867a6b9c6 1/1 10 donor_whale +47NF5Nbe...nMs9DDJU 2026-06-19 10:44:22 4304.1kH/s 3699670 76d6be0cfad6 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-19 09:42:09 4915.8kH/s 3699642 dded6aecd670 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-19 08:43:12 4785.8kH/s 3699617 3400d44d724b 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-19 07:43:17 6463.0kH/s 3699570 a4997b7a18fb 1/1 1 donor_mega +421n6hRs...61UsZuDG 2026-06-19 06:40:41 5961.6kH/s 3699532 6bdab16c5e1b 1/1 9 donor_whale +42m2kLta...aDULT2Qj 2026-06-19 05:37:17 6365.8kH/s 3699495 fc3b8530c1b9 1/1 34 donor_vip +49fV8TjN...GSgrDzrU 2026-06-19 04:34:43 5149.4kH/s 3699462 bd28fac5ed2e 1/1 35 donor_vip +42NpvKMH...zAXwCRSb 2026-06-19 03:19:18 6407.0kH/s 3699422 2e50618cb39e 1/1 10 donor_whale +45wQcnHH...kR5qUREN 2026-06-19 02:16:41 5395.1kH/s 3699393 77689cacd9d2 1/1 35 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-19 01:14:30 6684.4kH/s 3699361 3a2ddcfcdaaa 1/1 1 donor_mega +44aZ9ce8...i1Hxzm1M 2026-06-19 00:11:44 6956.0kH/s 3699327 a3506f96a3da 1/1 35 donor_vip diff --git a/docs/research/xvb-delivery-study/data/winners-20260807.txt b/docs/research/xvb-delivery-study/data/winners-20260807.txt new file mode 100644 index 00000000..e69de29b diff --git a/docs/research/xvb-delivery-study/data/winners-20260808.txt b/docs/research/xvb-delivery-study/data/winners-20260808.txt new file mode 100644 index 00000000..e69de29b diff --git a/docs/research/xvb-delivery-study/data/winners-20260809.txt b/docs/research/xvb-delivery-study/data/winners-20260809.txt new file mode 100644 index 00000000..9adc4a8f --- /dev/null +++ b/docs/research/xvb-delivery-study/data/winners-20260809.txt @@ -0,0 +1,1000 @@ +44aZ9ce8...i1Hxzm1M 2026-08-09 09:57:04 2745.4kH/s 3736282 5a58a6690afd 1/1 26 donor_vip +42NpvKMH...zAXwCRSb 2026-08-09 08:44:18 3225.4kH/s 3736243 0a4ff11c1cb4 1/1 8 donor_whale +42mefDQX...pJw9nygF 2026-08-09 07:42:03 3639.7kH/s 3736213 28975eee27e2 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-09 06:39:28 3733.2kH/s 3736182 2becb1eeaef2 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-09 05:41:03 3618.6kH/s 3736153 96fcd061c029 1/1 1 donor_mega +42m2kLta...aDULT2Qj 2026-08-09 04:38:13 3868.1kH/s 3736122 fdf53c3f2d72 1/1 27 donor_vip +4B2Avc2j...5JCEaaNs 2026-08-09 03:35:59 3969.4kH/s 3736096 9eb804caf0fa 1/1 28 donor_vip +48M2j8Gj...d8KgGBwa 2026-08-09 02:34:01 3803.2kH/s 3736060 a329815ede77 1/1 6 donor_whale +42NpvKMH...zAXwCRSb 2026-08-09 01:14:01 3558.2kH/s 3736007 cb065c4f1bd3 1/1 6 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-09 00:11:30 3944.9kH/s 3735982 dae40c2706d1 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-08 23:13:02 3875.1kH/s 3735948 ec04cf73bf72 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-08-08 22:11:01 4016.8kH/s 3735923 0a8b1a8352c6 1/1 6 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-08 20:54:02 4154.6kH/s 3735890 cc85273d2543 1/1 1 donor_mega +4B2Avc2j...5JCEaaNs 2026-08-08 19:52:02 4223.9kH/s 3735863 4659d56c73de 1/1 28 donor_vip +47NF5Nbe...nMs9DDJU 2026-08-08 18:50:00 3589.2kH/s 3735829 7fbe93dad890 1/1 27 donor_vip +46PsTAqp...o2VDhm5j 2026-08-08 17:48:00 3293.4kH/s 3735798 02b3255a9efa 1/1 27 donor_vip +421n6hRs...61UsZuDG 2026-08-08 16:46:02 3380.6kH/s 3735774 725c3162d51a 1/1 6 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-08 15:43:28 3112.3kH/s 3735745 dea7ce19a1ff 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-08 14:45:01 3393.8kH/s 3735705 c0ce807216fb 1/1 5 donor_whale +42NpvKMH...zAXwCRSb 2026-08-08 13:43:05 3264.4kH/s 3735674 c64ae9c8d553 1/1 28 donor_vip +48LNi6pk...5DomVmR2 2026-08-08 12:41:03 3597.1kH/s 3735649 8be3294ec515 1/1 5 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-08 11:38:32 3153.2kH/s 3735626 18b9d8025454 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-08 10:39:30 3381.1kH/s 3735604 9fd57ea3a519 1/1 5 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-08 09:40:35 3311.9kH/s 3735577 058a3d9de4ed 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-08 08:41:27 3177.6kH/s 3735545 d1575fd39995 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-08 07:42:28 2640.1kH/s 3735520 bb798f6b3a7d 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-08 06:43:28 3112.3kH/s 3735498 b09726ba5c74 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-08 05:45:01 2909.1kH/s 3735470 32ab7931b090 1/1 1 donor_mega +4AGJScWS...f6SvY5p5 2026-08-08 04:42:56 3080.1kH/s 3735433 b641d41320c0 1/1 4 mvp +48M2j8Gj...d8KgGBwa 2026-08-08 03:40:58 3192.4kH/s 3735394 050811453aff 1/1 1 donor_mega +43tg9ebV...GLspBx9P 2026-08-08 02:38:10 2962.0kH/s 3735354 7ff09f512c91 1/1 28 donor_vip +46Rb9Hjc...57AFUnq5 2026-08-08 01:35:10 2896.1kH/s 3735309 78534a33e872 1/1 5 donor_whale +47sctNyW...JBFt8g8K 2026-08-08 00:33:01 3003.4kH/s 3735269 a4c107f48827 1/1 26 donor_vip +48M2j8Gj...d8KgGBwa 2026-08-07 23:25:00 3054.3kH/s 3735230 ec169764085c 1/1 1 donor_mega +43tg9ebV...GLspBx9P 2026-08-07 21:37:01 2963.3kH/s 3735178 103288760694 1/1 27 donor_vip +4AYJotaL...USi2XQ7u 2026-08-07 20:34:12 2827.3kH/s 3735148 99bf931da79f 1/1 27 donor_vip +43nvW9WJ...e7SmCf3o 2026-08-07 19:32:11 3242.2kH/s 3735113 4b4dc58c8320 1/1 28 donor_vip +42NpvKMH...zAXwCRSb 2026-08-07 17:50:03 2878.7kH/s 3735062 9ed9b7e7d486 1/1 5 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-07 16:26:40 2907.4kH/s 3735022 920642ca9bae 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-07 15:21:01 3215.8kH/s 3734990 fee9703732fe 1/1 1 donor_mega +48xVox2n...oQM27PR1 2026-08-07 14:19:01 2825.6kH/s 3734958 79003b80712e 1/1 27 donor_vip +47NF5Nbe...nMs9DDJU 2026-08-07 13:17:01 2874.5kH/s 3734916 4478da30e5cc 1/1 5 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-07 09:40:02 3121.8kH/s 3734812 27cf3eeaede4 1/1 1 donor_mega +42m2kLta...aDULT2Qj 2026-08-07 08:29:04 2941.5kH/s 3734784 38419dd1e383 1/1 28 donor_vip +48M2j8Gj...d8KgGBwa 2026-08-07 04:26:26 2835.6kH/s 3734685 ea98ef282068 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-07 03:28:00 3278.9kH/s 3734645 dec01c253e62 1/1 1 donor_mega +4AeEwC2U...YQyoQtr7 2026-08-07 02:25:56 3645.2kH/s 3734612 accf3e499d8c 1/1 4 mvp +48iicDmb...6Fbzo28A 2026-08-07 01:24:01 3339.2kH/s 3734582 c26c7a3303a0 1/1 65 donor +48wF5CTP...zF7tEmWC 2026-08-07 00:22:00 3310.9kH/s 3734546 10b3d6423234 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-06 23:20:00 3515.3kH/s 3734524 ad3007d647fa 1/1 1 donor_mega +45wQcnHH...kR5qUREN 2026-08-06 19:31:59 3471.9kH/s 3734428 be48002cb1ce 1/1 68 donor +48M2j8Gj...d8KgGBwa 2026-08-06 18:29:26 3319.3kH/s 3734401 df4d76fabab2 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-06 16:22:27 3400.4kH/s 3734335 88edc7add175 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-06 15:24:01 3508.9kH/s 3734313 45e7e45d6ac6 1/1 1 donor_mega +48LNi6pk...5DomVmR2 2026-08-06 14:01:02 3536.5kH/s 3734265 c24f5cf60669 1/1 7 donor_whale +42NpvKMH...zAXwCRSb 2026-08-06 12:58:12 3129.3kH/s 3734226 18fdb9b9da29 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-08-06 11:55:27 3144.0kH/s 3734200 290c512f0c99 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-06 10:57:02 3461.6kH/s 3734161 b1b8b121c254 1/1 1 donor_mega +48LNi6pk...5DomVmR2 2026-08-06 08:25:01 3701.5kH/s 3734081 1b5e1e76c371 1/1 7 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-06 07:23:00 3662.5kH/s 3734039 edb1110efa97 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-08-06 06:21:00 5344.7kH/s 3734001 b0baf50364a2 1/1 11 donor_whale +46Rb9Hjc...57AFUnq5 2026-08-06 05:19:00 4377.4kH/s 3733977 6c01a68069b4 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-06 04:17:10 5978.5kH/s 3733952 b3a341299377 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-08-06 03:15:02 4697.3kH/s 3733916 ed990864d0e4 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-06 02:12:59 6019.9kH/s 3733887 ced10f07774a 1/1 1 donor_mega +44MnN1f3...a621jwyg 2026-08-06 01:10:56 4973.5kH/s 3733845 0afa868e1437 1/1 4 mvp +48M2j8Gj...d8KgGBwa 2026-08-06 00:08:59 6031.1kH/s 3733826 3554a636d890 1/1 1 donor_mega +421n6hRs...61UsZuDG 2026-08-05 23:07:01 4684.4kH/s 3733804 65337ffbae4a 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-05 22:05:00 5937.3kH/s 3733774 2d61f0f40875 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-08-05 21:03:01 4805.0kH/s 3733744 398f9349da9e 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-05 20:01:02 4104.7kH/s 3733713 48a001f2982e 1/1 1 donor_mega +49fV8TjN...GSgrDzrU 2026-08-05 18:19:01 4371.7kH/s 3733659 37acb999827f 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-05 17:09:00 3839.7kH/s 3733630 b0cd2db7478c 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-08-05 15:06:59 3713.7kH/s 3733560 166137eb8340 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-05 12:28:36 3267.5kH/s 3733485 097b16e40e59 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-05 09:58:37 3663.2kH/s 3733400 8bb5b2beef60 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-05 08:36:26 4517.8kH/s 3733355 ba5082ff1f8f 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-05 07:38:01 6404.4kH/s 3733318 848d6776d2d1 1/1 1 donor_mega +4AeEwC2U...YQyoQtr7 2026-08-05 06:35:57 6324.1kH/s 3733289 fd86ab25852a 1/1 4 mvp +48iicDmb...6Fbzo28A 2026-08-05 05:34:01 4111.4kH/s 3733258 b3d97ed9aa06 1/1 68 donor +42Mk3F3y...Q6fgUTJr 2026-08-05 04:19:09 5703.8kH/s 3733214 2278e4798002 1/1 27 donor_vip +43CcbPH8...uQWupVW5 2026-08-05 03:17:00 4910.4kH/s 3733181 b7a1cb5bcf59 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-05 02:14:28 4564.5kH/s 3733154 0f04ccf91023 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-05 01:15:13 5520.9kH/s 3733121 7afa4bc7af8d 1/1 1 donor_mega +48LNi6pk...5DomVmR2 2026-08-05 00:12:59 5246.3kH/s 3733091 de66ce9edc68 1/1 11 donor_whale +49fV8TjN...GSgrDzrU 2026-08-04 23:11:00 5788.1kH/s 3733062 02f9f2ac6c0c 1/1 11 donor_whale +4AuNNHgo...n8VXcgEe 2026-08-04 22:09:00 5773.0kH/s 3733038 59078085c95d 1/1 28 donor_vip +42m2kLta...aDULT2Qj 2026-08-04 21:07:00 5984.1kH/s 3733008 2e8ae6a19b72 1/1 27 donor_vip +42NpvKMH...zAXwCRSb 2026-08-04 20:05:00 4625.3kH/s 3732989 8cfe0e7bc1cf 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-04 19:02:28 4894.6kH/s 3732955 646f1a1bac15 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-04 18:04:03 5982.5kH/s 3732920 9ba24844fe5f 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-08-04 17:01:59 3900.3kH/s 3732897 7a8852589207 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-04 15:25:00 6080.9kH/s 3732858 1e571ea071e0 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-08-04 14:22:59 5951.9kH/s 3732830 1da0a63abb52 1/1 28 donor_vip +46Rb9Hjc...57AFUnq5 2026-08-04 13:21:08 5059.6kH/s 3732798 740a74321946 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-04 12:19:01 6285.8kH/s 3732765 6346093b4b2d 1/1 9 donor_whale +421n6hRs...61UsZuDG 2026-08-04 11:17:00 4672.1kH/s 3732724 d7d1a1bcc773 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-04 10:14:30 5198.1kH/s 3732695 2dbff20623e3 1/1 26 donor_vip +48M2j8Gj...d8KgGBwa 2026-08-04 09:15:44 4769.8kH/s 3732675 999e5e36f514 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-04 08:16:31 4922.8kH/s 3732645 3116e2a3acb4 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-04 07:17:35 4214.4kH/s 3732620 9651651924ed 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-04 06:19:07 5710.6kH/s 3732578 5cd824f2b6de 1/1 1 donor_mega +421n6hRs...61UsZuDG 2026-08-04 05:16:21 4300.8kH/s 3732539 8c4bb5abb016 1/1 26 donor_vip +48M2j8Gj...d8KgGBwa 2026-08-04 04:14:18 5681.0kH/s 3732505 87872ab2db13 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-08-04 03:12:01 4692.2kH/s 3732487 a5ddc9b8cb79 1/1 68 donor +48M2j8Gj...d8KgGBwa 2026-08-04 02:09:40 4606.7kH/s 3732455 a4a3b380ec79 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-04 01:11:01 6040.9kH/s 3732427 ecae1a4d62d0 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-08-04 00:09:02 4709.8kH/s 3732397 42c1c39542c4 1/1 67 donor +48M2j8Gj...d8KgGBwa 2026-08-03 23:06:13 5861.4kH/s 3732359 d28fc5e9f203 1/1 1 donor_mega +4B2Avc2j...5JCEaaNs 2026-08-03 22:03:18 5653.6kH/s 3732326 29ea43b12fd9 1/1 27 donor_vip +49YoCEDi...x97dHeGQ 2026-08-03 21:01:03 5258.7kH/s 3732286 b348a6d619cb 1/1 28 donor_vip +43tg9ebV...GLspBx9P 2026-08-03 19:59:06 5760.0kH/s 3732264 91d12269741c 1/1 28 donor_vip +42mefDQX...pJw9nygF 2026-08-03 18:57:02 4729.7kH/s 3732235 84c584ff72f9 1/1 12 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-03 17:55:04 6392.3kH/s 3732213 4ce709478ad3 1/1 1 donor_mega +4B2Avc2j...5JCEaaNs 2026-08-03 16:53:07 6185.2kH/s 3732175 b651f1edbc30 1/1 12 donor_whale +48wF5CTP...zF7tEmWC 2026-08-03 15:51:02 3699.7kH/s 3732145 d56dc08ea269 1/1 12 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-03 14:14:03 6073.0kH/s 3732109 a5719b25d36c 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-08-03 13:12:07 4805.5kH/s 3732076 4863e9f2f798 1/1 12 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-03 12:09:29 4893.5kH/s 3732049 e8fa24d95fd6 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-03 11:10:43 4199.4kH/s 3732017 b75ad1bc1c4d 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-03 08:32:13 6233.3kH/s 3731922 d9950bafbfcc 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-08-03 07:30:03 5865.0kH/s 3731888 3f9c4db049f8 1/1 12 donor_whale +47NF5Nbe...nMs9DDJU 2026-08-03 06:28:02 4713.6kH/s 3731854 9d964d6a648b 1/1 12 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-03 05:25:29 5043.2kH/s 3731830 11a3d7d4c4fb 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-03 04:26:28 4719.6kH/s 3731798 5e9ef6b540d2 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-03 03:28:03 5199.8kH/s 3731766 2c33a5998093 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-08-03 02:26:02 4742.2kH/s 3731732 5bc6706aa1b2 1/1 13 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-03 01:24:03 6000.7kH/s 3731707 d5f4d770974a 1/1 1 donor_mega +4B2Avc2j...5JCEaaNs 2026-08-03 00:22:01 5125.7kH/s 3731673 c02b377dc667 1/1 13 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-02 23:19:09 4643.3kH/s 3731648 476af7d92b47 1/1 1 donor_mega +48LNi6pk...5DomVmR2 2026-08-02 22:00:02 4996.1kH/s 3731602 6f36e744e0e5 1/1 13 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-02 20:58:03 6325.0kH/s 3731575 70af188a8e3d 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-08-02 19:56:02 5036.9kH/s 3731542 c7a057a52ac8 1/1 12 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-02 18:54:04 5746.7kH/s 3731516 fcc0bbf16add 1/1 1 donor_mega +45qivXhp...BSS1mtoq 2026-08-02 17:52:02 4381.6kH/s 3731483 31880406b4f3 1/1 29 donor_vip +48M2j8Gj...d8KgGBwa 2026-08-02 16:49:32 4993.1kH/s 3731461 0c0bd33c6913 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-02 15:51:03 5913.8kH/s 3731433 509703043f79 1/1 1 donor_mega +45xA3Kgd...7Ma7ttaf 2026-08-02 14:48:14 4680.4kH/s 3731392 d2db8559ac56 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-08-02 13:46:03 6087.7kH/s 3731362 4f654ce35d9f 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-08-02 12:44:04 6109.2kH/s 3731335 0b6c8fce8bf1 1/1 11 donor_whale +464Bdn7D...wTbYVfF1 2026-08-02 11:42:04 4871.3kH/s 3731302 d4e4e15d7790 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-08-02 10:39:14 6038.9kH/s 3731272 9ab60d422b37 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-08-02 09:36:28 6151.4kH/s 3731255 fa1591d46a4d 1/1 32 donor_vip +42NpvKMH...zAXwCRSb 2026-08-02 08:37:14 4839.1kH/s 3731234 09eac8f7a913 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-02 07:35:02 5673.8kH/s 3731199 ab14640f4711 1/1 1 donor_mega +49fV8TjN...GSgrDzrU 2026-08-02 06:33:00 5817.7kH/s 3731171 aa2848c4ad65 1/1 12 donor_whale +43nvW9WJ...e7SmCf3o 2026-08-02 05:31:01 4810.8kH/s 3731140 7d8da011425b 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-08-02 04:28:27 4649.0kH/s 3731115 1891259c67ad 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-02 03:29:59 5801.7kH/s 3731096 115611c3cc7b 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-08-02 02:28:06 4056.2kH/s 3731076 cc4047e26765 1/1 12 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-02 01:25:35 4588.3kH/s 3731047 f5e60d55f38f 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-02 00:26:34 4828.3kH/s 3731025 49b84d8ea745 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-01 23:27:59 5592.5kH/s 3730997 436a2e394e57 1/1 1 donor_mega +48LNi6pk...5DomVmR2 2026-08-01 22:26:02 5634.4kH/s 3730966 a06ad1657a54 1/1 12 donor_whale +48wF5CTP...zF7tEmWC 2026-08-01 21:24:01 5046.5kH/s 3730908 d9720bb7bdbe 1/1 12 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-01 20:21:16 6262.1kH/s 3730866 709c4007dfaa 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-08-01 19:19:01 6015.7kH/s 3730838 b83575d7b896 1/1 31 donor_vip +48wF5CTP...zF7tEmWC 2026-08-01 18:16:13 5560.2kH/s 3730804 b258eb4cbafb 1/1 12 donor_whale +49fSMFrM...c8i6VN6W 2026-08-01 17:13:10 4851.3kH/s 3730777 783c8625945a 1/1 73 donor +48M2j8Gj...d8KgGBwa 2026-08-01 16:10:28 4573.3kH/s 3730736 68b289eaa524 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-01 15:11:26 4289.6kH/s 3730702 624d82c2fc4f 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-01 14:12:27 4442.9kH/s 3730670 9d263791585b 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-01 13:14:03 5913.4kH/s 3730628 190980976116 1/1 1 donor_mega +4B2Avc2j...5JCEaaNs 2026-08-01 12:12:01 5636.2kH/s 3730593 596f02e8be9d 1/1 12 donor_whale +4AYJotaL...USi2XQ7u 2026-08-01 11:10:00 6189.8kH/s 3730561 86df4788f920 1/1 73 donor +42NpvKMH...zAXwCRSb 2026-08-01 10:08:03 5228.3kH/s 3730526 acbcd1c9d622 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-01 09:05:28 5121.2kH/s 3730491 5c8834bfe8ad 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-01 08:06:13 6130.5kH/s 3730458 2ad86adc9800 1/1 1 donor_mega +48xVox2n...oQM27PR1 2026-08-01 07:04:01 5991.4kH/s 3730423 5219af491e93 1/1 27 donor_vip +43CcbPH8...uQWupVW5 2026-08-01 06:02:00 6341.9kH/s 3730391 994b6cb19462 1/1 11 donor_whale +46Rb9Hjc...57AFUnq5 2026-08-01 05:00:00 5293.7kH/s 3730373 ca46424ef040 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-01 03:57:25 5412.4kH/s 3730346 0bb6d8c29a4a 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-01 02:59:00 6054.6kH/s 3730319 cc40499d15ee 1/1 1 donor_mega +49fV8TjN...GSgrDzrU 2026-08-01 01:56:58 6072.3kH/s 3730280 bdacc98099f8 1/1 11 donor_whale +42Mk3F3y...Q6fgUTJr 2026-08-01 00:55:01 5771.5kH/s 3730246 a65cef6fc99e 1/1 11 donor_whale +4B2Avc2j...5JCEaaNs 2026-07-31 23:52:10 4308.9kH/s 3730223 d7d0fafa2da8 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-31 22:50:01 5843.2kH/s 3730196 3071b0f5c86c 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-07-31 21:47:31 5922.4kH/s 3730156 2cf10a96652b 1/1 11 donor_whale +47NF5Nbe...nMs9DDJU 2026-07-31 20:49:03 4750.5kH/s 3730121 dffb51a21341 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-31 19:47:03 5647.0kH/s 3730101 05c020d9b914 1/1 1 donor_mega +4B9oJwgd...sPp6joE1 2026-07-31 18:44:56 5993.1kH/s 3730080 3ce3cbaf769e 1/1 176 vip +48LNi6pk...5DomVmR2 2026-07-31 17:43:04 4637.2kH/s 3730051 8c9d97f967dd 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-31 16:40:19 5644.5kH/s 3730026 79e07d52373e 1/1 1 donor_mega +43CcbPH8...uQWupVW5 2026-07-31 15:38:01 5851.9kH/s 3729999 7c4952c75882 1/1 11 donor_whale +48wF5CTP...zF7tEmWC 2026-07-31 14:35:12 5678.2kH/s 3729973 f66ee7b8d61c 1/1 11 donor_whale +49fV8TjN...GSgrDzrU 2026-07-31 13:33:00 5682.9kH/s 3729940 ce2beb19813a 1/1 11 donor_whale +48wF5CTP...zF7tEmWC 2026-07-31 12:30:12 4565.6kH/s 3729906 edc7e4829da3 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-31 11:28:01 5850.9kH/s 3729863 3a9374bf338b 1/1 1 donor_mega +48LNi6pk...5DomVmR2 2026-07-31 10:26:00 4509.4kH/s 3729831 cbc5b7258d11 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-31 09:24:02 5863.5kH/s 3729788 a7d28269f920 1/1 1 donor_mega +43CcbPH8...uQWupVW5 2026-07-31 08:21:14 4662.9kH/s 3729763 b9abc710d0f6 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-31 07:18:39 3356.3kH/s 3729737 18d4bb8cbc31 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-31 05:57:00 5666.3kH/s 3729684 ff8e7b23403d 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-07-31 04:54:59 3965.2kH/s 3729654 d4fbf85a6d0d 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-31 03:29:10 6337.9kH/s 3729612 91312e7b2025 1/1 11 donor_whale +48LNi6pk...5DomVmR2 2026-07-31 02:27:01 4989.0kH/s 3729573 9973ced663d1 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-31 01:24:27 4722.8kH/s 3729548 2f312dc7ea1d 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-31 00:25:26 4594.2kH/s 3729521 80107dcdd513 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-30 23:27:00 6129.5kH/s 3729489 76028171b8d3 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-07-30 22:24:14 6128.2kH/s 3729458 c6a531e1691b 1/1 11 donor_whale +42Mk3F3y...Q6fgUTJr 2026-07-30 21:22:02 4986.1kH/s 3729431 d355dbc04d3f 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-30 20:20:03 5649.5kH/s 3729403 2394df6a1c70 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-30 19:11:05 6378.5kH/s 3729367 22b11454a220 1/1 11 donor_whale +43CcbPH8...uQWupVW5 2026-07-30 18:09:09 6468.6kH/s 3729339 60a6ec305e37 1/1 11 donor_whale +42Mk3F3y...Q6fgUTJr 2026-07-30 17:07:02 4920.2kH/s 3729309 e4e811f9d612 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-30 16:05:03 5303.5kH/s 3729283 187f6abe695e 1/1 1 donor_mega +43CcbPH8...uQWupVW5 2026-07-30 15:02:12 4676.8kH/s 3729258 6d87e71b80d1 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-30 13:59:39 4585.2kH/s 3729231 e73b8ceb19e0 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-30 13:01:01 5876.6kH/s 3729202 99f3f1583580 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-07-30 11:59:03 5395.7kH/s 3729169 09a44799c73c 1/1 11 donor_whale +42NpvKMH...zAXwCRSb 2026-07-30 10:57:09 6009.4kH/s 3729139 93991a64be6d 1/1 11 donor_whale +42Mk3F3y...Q6fgUTJr 2026-07-30 09:54:59 5649.8kH/s 3729103 a1eac1baf7d1 1/1 11 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-30 08:53:01 4956.4kH/s 3729070 058309b3e9a5 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-30 07:50:29 4932.1kH/s 3729033 5c8741ec447c 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-30 06:51:59 6230.6kH/s 3728993 c6f851086803 1/1 1 donor_mega +45qivXhp...BSS1mtoq 2026-07-30 05:50:02 4459.1kH/s 3728958 0ebc874018a9 1/1 33 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-30 04:47:28 4323.8kH/s 3728936 fc026033e4c8 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-30 03:49:00 5952.9kH/s 3728912 c47af4d47503 1/1 1 donor_mega +421n6hRs...61UsZuDG 2026-07-30 02:47:00 6027.7kH/s 3728894 225092b75c51 1/1 11 donor_whale +42mefDQX...pJw9nygF 2026-07-30 01:45:01 5674.3kH/s 3728868 4c689c6e7bc7 1/1 11 donor_whale +43CcbPH8...uQWupVW5 2026-07-30 00:43:00 5849.3kH/s 3728826 e2e69f3facb3 1/1 11 donor_whale +481ELpyU...mCQhPM2f 2026-07-29 23:41:00 5538.6kH/s 3728785 79ac12977dff 1/1 32 donor_vip +45qivXhp...BSS1mtoq 2026-07-29 22:38:10 4637.7kH/s 3728751 144b310692be 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-29 21:36:02 5799.6kH/s 3728714 8a3e527a2409 1/1 1 donor_mega +421n6hRs...61UsZuDG 2026-07-29 20:33:17 5822.5kH/s 3728684 4176d740d2cf 1/1 34 donor_vip +48wF5CTP...zF7tEmWC 2026-07-29 19:31:02 4210.7kH/s 3728652 edbb72168688 1/1 32 donor_vip +42Mk3F3y...Q6fgUTJr 2026-07-29 18:13:02 5186.9kH/s 3728606 77058dabafda 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-29 17:10:40 5066.9kH/s 3728570 3064bdc4a7ed 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-29 16:12:02 5953.1kH/s 3728540 b348d893a43e 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-29 15:10:01 4708.5kH/s 3728505 1161b8e7a2a6 1/1 33 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-29 14:07:28 3816.0kH/s 3728472 51e9432f7d7a 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-29 12:21:28 4542.7kH/s 3728416 45a1181adc16 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-29 11:22:28 4355.2kH/s 3728378 cada8e88b219 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-29 10:24:01 5573.3kH/s 3728335 f18ce5ce5cec 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-07-29 09:22:07 3820.6kH/s 3728309 62a2ea0dd779 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-29 07:54:06 5943.4kH/s 3728251 7bf1f87d2003 1/1 1 donor_mega +49fV8TjN...GSgrDzrU 2026-07-29 06:52:02 4505.1kH/s 3728219 b9f37c4f8989 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-29 05:49:28 4310.1kH/s 3728193 a085ca1ea1fc 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-29 04:51:00 6140.0kH/s 3728160 38da68ca5840 1/1 1 donor_mega +464pdsyX...8QQVt1x3 2026-07-29 03:49:00 5731.5kH/s 3728132 20622ea9deea 1/1 70 donor +47NF5Nbe...nMs9DDJU 2026-07-29 02:47:01 5525.8kH/s 3728100 07c3a7dad621 1/1 9 donor_whale +45P4vJUA...TE4PUAu9 2026-07-29 01:44:55 5016.9kH/s 3728071 6998955ef2d1 1/1 167 vip +48M2j8Gj...d8KgGBwa 2026-07-29 00:42:38 4868.7kH/s 3728053 cb065a9c3967 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-28 23:44:02 5389.2kH/s 3728025 ab05415c2b1b 1/1 1 donor_mega +45qivXhp...BSS1mtoq 2026-07-28 22:41:10 5692.6kH/s 3728001 68a011e39053 1/1 31 donor_vip +48xVox2n...oQM27PR1 2026-07-28 21:39:00 5309.7kH/s 3727981 992aa5435e68 1/1 69 donor +4B2Avc2j...5JCEaaNs 2026-07-28 20:36:17 5279.3kH/s 3727951 1d72b8edc030 1/1 31 donor_vip +46Rb9Hjc...57AFUnq5 2026-07-28 19:34:03 3345.4kH/s 3727933 9514ed3ccaf2 1/1 31 donor_vip +4AYJotaL...USi2XQ7u 2026-07-28 17:43:02 4574.4kH/s 3727884 6d91e59e8633 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-28 16:41:05 5671.3kH/s 3727856 0bc82def1d08 1/1 1 donor_mega +481ELpyU...mCQhPM2f 2026-07-28 15:39:07 3677.8kH/s 3727834 868acf8de1e0 1/1 31 donor_vip +421n6hRs...61UsZuDG 2026-07-28 13:12:26 5658.3kH/s 3727773 70a65ea5e032 1/1 7 donor_whale +421n6hRs...61UsZuDG 2026-07-28 12:14:03 4776.6kH/s 3727744 de81dcc04c5f 1/1 7 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-28 11:12:00 6090.1kH/s 3727713 f3e2a0154c6d 1/1 1 donor_mega +45wQcnHH...kR5qUREN 2026-07-28 10:09:10 6301.2kH/s 3727682 f0f0f913705b 1/1 30 donor_vip +42NpvKMH...zAXwCRSb 2026-07-28 09:07:03 4890.1kH/s 3727645 0793fe1b9729 1/1 5 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-28 08:05:01 5952.8kH/s 3727611 6f345ca56d09 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-07-28 07:03:01 4896.2kH/s 3727583 e697113905a8 1/1 5 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-28 06:00:29 4755.6kH/s 3727557 8abbbe7c75b6 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-28 05:02:00 6010.8kH/s 3727526 6ca6a8aaca32 1/1 1 donor_mega +48LNi6pk...5DomVmR2 2026-07-28 04:00:00 4495.1kH/s 3727488 d8984507428a 1/1 5 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-28 02:57:27 4577.6kH/s 3727460 81deef289b97 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-28 01:58:26 4641.0kH/s 3727428 af4cf8a3f2ac 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-28 00:59:27 4354.0kH/s 3727395 fe64f01f1aac 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-28 00:00:29 4439.4kH/s 3727360 0e3b4521acd1 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-27 23:01:27 4485.3kH/s 3727328 7db427c7714d 1/1 5 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-27 22:02:12 5202.4kH/s 3727304 5faa9f8577ba 1/1 1 donor_mega +43tg9ebV...GLspBx9P 2026-07-27 21:00:02 3956.0kH/s 3727278 6ed840e22290 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-27 19:57:27 4382.1kH/s 3727252 504b5cf93efe 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-27 18:59:03 5351.0kH/s 3727239 3d383e77ec44 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-07-27 17:57:01 4937.1kH/s 3727203 1fd88daa1f49 1/1 5 donor_whale +42NpvKMH...zAXwCRSb 2026-07-27 16:55:03 3787.3kH/s 3727183 89527357cc11 1/1 5 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-27 15:52:28 2754.3kH/s 3727146 2b40ad29af20 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-27 14:12:11 4180.3kH/s 3727106 b9095b3700c6 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-07-27 13:10:03 4939.1kH/s 3727084 ae674dbff61f 1/1 5 donor_whale +48wF5CTP...zF7tEmWC 2026-07-27 12:08:01 4913.9kH/s 3727055 4ece5804c111 1/1 31 donor_vip +4AyiUbKF...uJpsC4ym 2026-07-27 11:06:01 3307.2kH/s 3727029 695ab34411fd 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-27 10:04:02 5092.8kH/s 3726994 b676ce3d9c1a 1/1 1 donor_mega +43nvW9WJ...e7SmCf3o 2026-07-27 09:02:01 4866.3kH/s 3726966 28baf765b943 1/1 30 donor_vip +42NpvKMH...zAXwCRSb 2026-07-27 07:59:25 2480.8kH/s 3726936 4293491a1a33 1/1 5 donor_whale +42NpvKMH...zAXwCRSb 2026-07-27 06:34:02 3725.9kH/s 3726891 7e24c0740589 1/1 5 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-27 05:31:27 3081.6kH/s 3726862 f0ff08618b77 1/1 5 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-27 04:22:26 3916.8kH/s 3726837 0cf2fd8034e3 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-27 03:24:00 4777.2kH/s 3726816 dc7ae22a0d5c 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-07-27 02:21:59 5133.8kH/s 3726787 1d92b0c93134 1/1 9 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-27 01:19:09 3996.6kH/s 3726758 ccebed353c33 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-27 00:16:59 5510.5kH/s 3726729 7ab0268f51e4 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-26 23:14:12 5529.2kH/s 3726693 355a4643780b 1/1 9 donor_whale +48LNi6pk...5DomVmR2 2026-07-26 22:11:58 4359.3kH/s 3726657 ff55d1517f46 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-26 21:09:15 5480.6kH/s 3726615 4d2b474a6d9b 1/1 1 donor_mega +4AYJotaL...USi2XQ7u 2026-07-26 20:07:00 5080.1kH/s 3726562 5a845fa9ce2f 1/1 34 donor_vip +43nvW9WJ...e7SmCf3o 2026-07-26 19:05:01 5829.5kH/s 3726510 a34fe1f11ec5 1/1 34 donor_vip +42NpvKMH...zAXwCRSb 2026-07-26 18:03:00 5300.4kH/s 3726463 edcb02862434 1/1 32 donor_vip +47NF5Nbe...nMs9DDJU 2026-07-26 17:01:00 5515.8kH/s 3726426 f35a9b41e28f 1/1 9 donor_whale +49fV8TjN...GSgrDzrU 2026-07-26 15:59:03 5543.8kH/s 3726392 d749d1f8c344 1/1 9 donor_whale +464Bdn7D...wTbYVfF1 2026-07-26 14:56:14 5395.6kH/s 3726360 3e1bd0ed947b 1/1 34 donor_vip +421n6hRs...61UsZuDG 2026-07-26 13:54:01 5400.9kH/s 3726325 fbfe68991165 1/1 34 donor_vip +4AGJScWS...f6SvY5p5 2026-07-26 12:51:56 4521.1kH/s 3726297 56f2a33b1d70 1/1 4 mvp +48M2j8Gj...d8KgGBwa 2026-07-26 11:50:01 3357.4kH/s 3726272 623e471b4a10 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-07-26 10:03:00 4707.8kH/s 3726222 9951637264ef 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-26 09:00:27 3246.5kH/s 3726189 7bba268a7a6d 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-26 07:36:37 4424.4kH/s 3726132 19e0a6f6568a 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-26 06:37:27 5033.7kH/s 3726098 b6229cfc474a 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-26 05:38:27 4990.5kH/s 3726070 aa5f69ccba60 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-26 04:40:08 6423.1kH/s 3726042 e54c52bc1b58 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-26 03:37:59 6059.7kH/s 3726015 5e10dcbcc796 1/1 10 donor_whale +49fV8TjN...GSgrDzrU 2026-07-26 02:35:59 4377.9kH/s 3725986 ac4db8b0bf82 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-26 01:33:38 4199.0kH/s 3725959 74bdd6959388 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-26 00:34:42 4354.9kH/s 3725924 4a89c3dd1e63 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-25 23:35:38 4419.4kH/s 3725887 4eeed55ae3cb 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-25 22:36:37 4357.9kH/s 3725866 770c761d7fb7 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-25 21:38:01 5791.5kH/s 3725832 138b19cfa901 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-07-25 20:36:02 4507.4kH/s 3725808 22a2d9b368d7 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-25 19:33:13 5915.1kH/s 3725778 cf0ffa506ef2 1/1 11 donor_whale +42Mk3F3y...Q6fgUTJr 2026-07-25 18:31:01 4719.6kH/s 3725744 a2e2bbc5aaf9 1/1 10 donor_whale +46PsTAqp...o2VDhm5j 2026-07-25 17:20:02 5036.0kH/s 3725704 d4814747586e 1/1 32 donor_vip +49fV8TjN...GSgrDzrU 2026-07-25 16:18:01 4621.3kH/s 3725676 2ebde127e5ec 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-25 15:15:28 4472.8kH/s 3725648 68c4ac42e58c 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-25 14:16:31 3690.2kH/s 3725624 f0e511b1d98d 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-25 13:07:18 5522.7kH/s 3725588 c589a19427fc 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-07-25 12:05:12 4431.5kH/s 3725552 294bf3881e36 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-25 11:02:26 4436.1kH/s 3725515 fecf5261f64c 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-25 10:03:29 3397.5kH/s 3725484 7eef4da92e64 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-25 09:04:31 4188.6kH/s 3725445 de47b156e2bd 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-25 08:06:00 5235.5kH/s 3725415 19cc42db0a92 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-07-25 07:04:03 5358.3kH/s 3725393 14146a035220 1/1 31 donor_vip +4AGJScWS...f6SvY5p5 2026-07-25 06:02:08 3880.4kH/s 3725371 f2e0ed5d059a 1/1 4 mvp +48M2j8Gj...d8KgGBwa 2026-07-25 05:00:01 4217.9kH/s 3725330 1b9fd6ee4546 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-07-25 03:57:26 5598.5kH/s 3725301 ba631411cba1 1/1 10 donor_whale +42NpvKMH...zAXwCRSb 2026-07-25 02:59:00 5823.4kH/s 3725281 54e0e644afe1 1/1 11 donor_whale +47sctNyW...JBFt8g8K 2026-07-25 01:56:11 4554.3kH/s 3725256 ea21201fd817 1/1 30 donor_vip +42Mk3F3y...Q6fgUTJr 2026-07-25 00:54:01 4041.6kH/s 3725227 5bb44d177f5c 1/1 11 donor_whale +4AEAX3qs...vTU56zMr 2026-07-24 23:36:00 5359.1kH/s 3725191 d0c0e64852d7 1/1 31 donor_vip +47NF5Nbe...nMs9DDJU 2026-07-24 22:34:01 5880.9kH/s 3725164 9752d30d2912 1/1 11 donor_whale +48wF5CTP...zF7tEmWC 2026-07-24 21:32:00 4185.9kH/s 3725130 876068c2c4a2 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-24 20:30:01 5531.2kH/s 3725099 3cf993ff565e 1/1 1 donor_mega +48LNi6pk...5DomVmR2 2026-07-24 19:28:00 5882.0kH/s 3725074 dcdf8003fdec 1/1 10 donor_whale +49fV8TjN...GSgrDzrU 2026-07-24 18:26:01 5194.2kH/s 3725036 3b55816a55d0 1/1 10 donor_whale +45qivXhp...BSS1mtoq 2026-07-24 17:16:01 3549.9kH/s 3725002 e937e887cb3a 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-24 14:36:01 5243.1kH/s 3724940 08ecd845cef7 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-24 13:33:12 5661.7kH/s 3724908 6521871487ab 1/1 10 donor_whale +42NpvKMH...zAXwCRSb 2026-07-24 12:31:02 5710.8kH/s 3724880 d282d4d0dc83 1/1 10 donor_whale +4895aAGt...g5P9n4Nq 2026-07-24 11:28:11 4555.8kH/s 3724849 eadf098703ab 1/1 70 donor +48M2j8Gj...d8KgGBwa 2026-07-24 10:25:26 4532.2kH/s 3724820 577431699d1d 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-24 09:26:28 4665.4kH/s 3724790 169bc39c4db0 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-24 08:27:26 4654.2kH/s 3724758 17b8a5bf0256 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-24 07:28:36 3609.8kH/s 3724729 f7321599ce9f 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-24 06:10:02 3524.5kH/s 3724681 a1f7f781197c 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-07-24 02:48:59 4151.2kH/s 3724611 45d6d3fa40c0 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-24 01:46:10 3632.3kH/s 3724577 261c4a0a9ed7 1/1 1 donor_mega +44aZ9ce8...i1Hxzm1M 2026-07-24 00:09:10 4292.3kH/s 3724535 6b3146bd4d08 1/1 29 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-23 23:06:59 5916.7kH/s 3724504 843f19ab4500 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-23 22:05:01 5695.6kH/s 3724471 4b61135b0d52 1/1 11 donor_whale +47NF5Nbe...nMs9DDJU 2026-07-23 21:02:59 4328.9kH/s 3724443 ec97df025ede 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-23 20:00:33 4843.7kH/s 3724416 1ed468fb2686 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-23 19:01:26 4136.4kH/s 3724389 a526977d87c3 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-23 18:02:09 5566.6kH/s 3724371 9849197d4330 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-23 17:00:01 3791.0kH/s 3724343 7a8055893792 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-23 15:51:11 5532.0kH/s 3724318 51b9d71d6c4a 1/1 1 donor_mega +49fV8TjN...GSgrDzrU 2026-07-23 14:48:27 5755.5kH/s 3724282 55b8a07547ed 1/1 11 donor_whale +49fV8TjN...GSgrDzrU 2026-07-23 13:49:00 5778.5kH/s 3724252 6f0de4ff561a 1/1 28 donor_vip +44MnN1f3...a621jwyg 2026-07-23 12:46:58 4423.9kH/s 3724222 9700a0ca36b5 1/1 4 mvp +48M2j8Gj...d8KgGBwa 2026-07-23 11:44:58 5016.3kH/s 3724191 ae5c01fa87c2 1/1 1 donor_mega +42m2kLta...aDULT2Qj 2026-07-23 10:41:58 4494.0kH/s 3724163 e21ecfd1dc66 1/1 27 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-23 09:39:36 4282.4kH/s 3724138 8cf5ec06b21a 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-23 08:40:28 3373.0kH/s 3724107 00668cfd5f25 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-23 07:24:58 3348.8kH/s 3724059 ff31a1bd3d63 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-23 05:43:01 5462.8kH/s 3724013 5614e61bc447 1/1 11 donor_whale +45wQcnHH...kR5qUREN 2026-07-23 04:40:10 4561.8kH/s 3723976 1579c895099d 1/1 27 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-23 03:37:25 4604.0kH/s 3723948 6e98b07a38d8 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-23 02:38:37 4649.6kH/s 3723916 a33598fd9ff2 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-23 01:40:00 5459.5kH/s 3723882 7a9e8203197b 1/1 1 donor_mega +48xVox2n...oQM27PR1 2026-07-23 00:38:04 4267.7kH/s 3723858 541813a7a52b 1/1 28 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-22 23:35:34 4330.4kH/s 3723832 0924ca8e429a 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-22 22:37:00 5857.5kH/s 3723796 9a5389a8b0e0 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-07-22 21:35:02 4500.2kH/s 3723763 3a54effc0012 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-22 20:33:04 5748.4kH/s 3723736 95540e9c71fc 1/1 1 donor_mega +48LNi6pk...5DomVmR2 2026-07-22 19:31:00 4717.8kH/s 3723719 c04cfd252d0a 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-22 18:28:36 4642.3kH/s 3723686 159c870ff571 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-22 17:29:36 4368.9kH/s 3723666 287168031449 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-22 16:30:38 4816.9kH/s 3723638 1428e685cb63 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-22 15:31:26 4626.1kH/s 3723619 459e2fb48c03 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-22 14:32:11 5794.8kH/s 3723593 26f0f93981bd 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-22 13:29:27 5333.2kH/s 3723570 a79162983914 1/1 11 donor_whale +42mefDQX...pJw9nygF 2026-07-22 12:30:59 3995.7kH/s 3723534 283eb8a2d6b6 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-22 11:28:26 3991.2kH/s 3723504 3160cd55ca64 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-22 10:29:28 4300.3kH/s 3723478 879d8c061dc0 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-22 09:30:29 3656.8kH/s 3723447 e28be640b303 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-22 07:59:08 5673.7kH/s 3723382 8367bdbece7e 1/1 1 donor_mega +46PsTAqp...o2VDhm5j 2026-07-22 06:57:00 4669.0kH/s 3723341 ac1eb47f1aa8 1/1 65 donor +48M2j8Gj...d8KgGBwa 2026-07-22 05:55:01 5770.7kH/s 3723304 739e92e0710a 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-07-22 04:52:26 5450.8kH/s 3723274 6d131f16f3ac 1/1 11 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-22 03:53:59 4418.7kH/s 3723247 52ef38cc2c08 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-22 02:51:31 4816.1kH/s 3723209 4690c27c00fa 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-22 01:52:35 4662.3kH/s 3723174 996944893ee6 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-22 00:53:25 4176.4kH/s 3723127 dc249379c958 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-21 23:54:26 4716.7kH/s 3723100 18d8133e2338 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-21 22:56:02 5531.2kH/s 3723057 47be0a672396 1/1 11 donor_whale +4AyiUbKF...uJpsC4ym 2026-07-21 21:54:01 4726.9kH/s 3723032 ea80fc511e15 1/1 33 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-21 20:52:08 5695.0kH/s 3722999 b357882e2814 1/1 1 donor_mega +421n6hRs...61UsZuDG 2026-07-21 19:50:00 4730.0kH/s 3722960 e3d353a96513 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-21 18:47:59 4550.9kH/s 3722925 857475dcb19c 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-21 17:45:58 4613.7kH/s 3722893 934b6efbf2df 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-21 16:43:26 4739.9kH/s 3722859 4e8e6ecf6acf 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-21 15:44:27 4882.8kH/s 3722833 3008f2578c07 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-21 14:46:01 5828.7kH/s 3722808 a7d665843aee 1/1 10 donor_whale +43CcbPH8...uQWupVW5 2026-07-21 13:44:03 5598.9kH/s 3722783 0c9e20627b7b 1/1 29 donor_vip +421n6hRs...61UsZuDG 2026-07-21 12:39:02 5831.0kH/s 3722745 e0a1a0a91c13 1/1 10 donor_whale +42mefDQX...pJw9nygF 2026-07-21 11:37:01 4829.6kH/s 3722709 bb20aa7e6ed3 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-21 10:35:01 4016.2kH/s 3722673 a67a70fad4c8 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-07-21 08:37:11 4289.6kH/s 3722604 5d212abdfdc4 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-21 07:34:27 4506.0kH/s 3722572 23928200d56c 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-21 06:35:59 5405.1kH/s 3722543 dacec3a0a77f 1/1 1 donor_mega +48LNi6pk...5DomVmR2 2026-07-21 05:33:09 5546.8kH/s 3722511 5a9739cca3eb 1/1 11 donor_whale +43CcbPH8...uQWupVW5 2026-07-21 04:30:27 5709.0kH/s 3722475 3fa849821629 1/1 12 donor_whale +47NF5Nbe...nMs9DDJU 2026-07-21 03:27:57 4404.9kH/s 3722439 347688f996e8 1/1 12 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-21 02:25:59 5705.7kH/s 3722411 ddf2425fe87a 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-07-21 01:24:00 5813.8kH/s 3722390 cf42a26e4b69 1/1 12 donor_whale +43tg9ebV...GLspBx9P 2026-07-21 00:21:59 4859.6kH/s 3722369 3491e6866485 1/1 33 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-20 23:19:35 4208.0kH/s 3722336 54e0ac1fa796 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-20 22:20:26 4220.8kH/s 3722316 256c0ba5d91e 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-20 21:21:27 4991.1kH/s 3722298 f5f79085ddab 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-20 20:22:27 4611.8kH/s 3722268 256cfee84c14 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-20 19:24:00 5603.9kH/s 3722230 f69c7a6dac0c 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-07-20 18:22:02 4470.2kH/s 3722199 914d85fec077 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-20 17:19:59 5894.2kH/s 3722172 a1b8c6fe134b 1/1 1 donor_mega +4AuNNHgo...n8VXcgEe 2026-07-20 16:17:58 5080.5kH/s 3722139 1b0896204d12 1/1 31 donor_vip +49m4aWKb...VT3dB1iR 2026-07-20 15:10:59 5847.9kH/s 3722104 b748588cd377 1/1 71 donor +486aGn4q...F8wjAE5R 2026-07-20 14:08:55 5969.8kH/s 3722078 e51bea234dac 1/1 4 mvp +42Mk3F3y...Q6fgUTJr 2026-07-20 13:06:59 5553.2kH/s 3722036 695d7c08d36e 1/1 11 donor_whale +42mefDQX...pJw9nygF 2026-07-20 12:04:59 4930.7kH/s 3721995 c8fa657040b0 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-20 11:02:26 4979.4kH/s 3721965 e9dcdc9d1152 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-20 10:04:00 6080.9kH/s 3721935 72cd9e0a8f69 1/1 1 donor_mega +45wQcnHH...kR5qUREN 2026-07-20 09:01:59 3930.2kH/s 3721902 72a481b9481d 1/1 32 donor_vip +47NF5Nbe...nMs9DDJU 2026-07-20 07:03:59 4855.8kH/s 3721840 3c9921175717 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-20 06:01:58 5331.1kH/s 3721818 823eb9c1b7de 1/1 1 donor_mega +4B2Avc2j...5JCEaaNs 2026-07-20 04:59:57 6210.2kH/s 3721796 e3d3436342b5 1/1 29 donor_vip +46Rb9Hjc...57AFUnq5 2026-07-20 03:58:06 6228.6kH/s 3721769 ab9e06c6274c 1/1 10 donor_whale +48LNi6pk...5DomVmR2 2026-07-20 02:55:57 4963.7kH/s 3721731 fb5df7f6d152 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-20 01:53:58 4126.6kH/s 3721699 40feefe40662 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-07-20 00:15:58 6406.7kH/s 3721647 451ceca4bf63 1/1 10 donor_whale +4AeEwC2U...YQyoQtr7 2026-07-19 23:14:02 5227.4kH/s 3721621 a52d7f3c706d 1/1 4 mvp +48M2j8Gj...d8KgGBwa 2026-07-19 22:11:58 5627.5kH/s 3721590 c9f38b3300b8 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-07-19 21:09:57 5643.3kH/s 3721552 6931aef5a22c 1/1 29 donor_vip +47NF5Nbe...nMs9DDJU 2026-07-19 20:07:58 5733.6kH/s 3721528 fb28ce076d4b 1/1 10 donor_whale +48LNi6pk...5DomVmR2 2026-07-19 19:05:59 5615.7kH/s 3721488 fde5ae16dd03 1/1 10 donor_whale +4298Vwxn...cJHXZb9k 2026-07-19 18:03:55 5612.0kH/s 3721460 d2ba432d75b0 1/1 178 vip +43nvW9WJ...e7SmCf3o 2026-07-19 17:01:58 5448.9kH/s 3721430 8451814bee84 1/1 30 donor_vip +48wF5CTP...zF7tEmWC 2026-07-19 15:59:09 5355.1kH/s 3721405 ff53a9546c7c 1/1 10 donor_whale +42NJbX1p...JBe7i8b2 2026-07-19 14:56:59 5190.4kH/s 3721380 b3de69d509c7 1/1 30 donor_vip +46YxbLMT...UUmVmbGn 2026-07-19 13:51:58 5864.9kH/s 3721342 3184c7cdf959 2/1 70 donor +4AEAX3qs...vTU56zMr 2026-07-19 12:49:58 3276.9kH/s 3721314 38a0c8b641ff 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-19 11:01:58 5709.5kH/s 3721272 bf28c0c09dc0 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-07-19 09:59:59 5670.2kH/s 3721245 8b19199b58c5 1/1 70 donor +42mefDQX...pJw9nygF 2026-07-19 08:58:03 4421.2kH/s 3721215 f469ec4700bc 1/1 28 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-19 07:55:59 5777.2kH/s 3721183 d13813570935 1/1 1 donor_mega +487SyiQC...aSGcaBDE 2026-07-19 06:53:10 4675.3kH/s 3721151 07b41bbdb3ce 1/1 27 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-19 05:50:25 4154.5kH/s 3721120 b00964a4674a 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-19 04:51:58 5555.9kH/s 3721083 4a8cd4b0cab0 1/1 1 donor_mega +49fV8TjN...GSgrDzrU 2026-07-19 03:49:55 4747.9kH/s 3721053 2ebbbffe54eb 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-19 02:47:24 4276.2kH/s 3721025 05bbf74c837e 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-19 01:49:07 5188.6kH/s 3720997 0248bbce4c7c 1/1 10 donor_whale +4AyiUbKF...uJpsC4ym 2026-07-19 00:47:08 4377.5kH/s 3720950 bc6c9dffb8d9 1/1 27 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-18 23:44:24 4337.9kH/s 3720917 7932e63b1a1b 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-18 22:45:57 5493.3kH/s 3720882 4965f4c63001 1/1 1 donor_mega +48C1CiKC...i9qJPCF9 2026-07-18 21:43:58 4306.9kH/s 3720855 3c97a2a4f3dd 1/1 75 donor +48M2j8Gj...d8KgGBwa 2026-07-18 20:41:38 4203.5kH/s 3720833 0525a913e879 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-18 19:42:24 4641.4kH/s 3720812 d414bfa3e054 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-18 18:44:01 5619.8kH/s 3720782 c351b2595f7c 1/1 1 donor_mega +47sctNyW...JBFt8g8K 2026-07-18 17:42:00 4027.1kH/s 3720742 630b59612166 1/1 27 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-18 16:39:25 4624.8kH/s 3720719 e05bea93bdce 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-18 15:40:26 4272.2kH/s 3720688 1776517ac4dd 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-18 14:41:35 4119.8kH/s 3720653 08b7f3178a72 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-18 13:43:01 5058.4kH/s 3720618 6a29b4bc97b1 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-18 12:40:58 5941.8kH/s 3720595 65c832683693 1/1 10 donor_whale +421n6hRs...61UsZuDG 2026-07-18 11:38:58 4223.7kH/s 3720566 a38a36362666 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-18 10:36:08 5555.3kH/s 3720538 211cc6bf2635 1/1 1 donor_mega +48LNi6pk...5DomVmR2 2026-07-18 09:33:59 6093.4kH/s 3720517 fad7967486e5 1/1 10 donor_whale +42Mk3F3y...Q6fgUTJr 2026-07-18 08:31:58 4683.7kH/s 3720478 37af4dd7244b 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-18 07:29:26 4160.9kH/s 3720453 0ba8adf8c7b4 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-18 06:30:26 4584.1kH/s 3720432 5dd77b0aca60 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-18 05:31:58 5704.3kH/s 3720404 8008e4f8b695 1/1 1 donor_mega +48b1zteM...a6BJoFL8 2026-07-18 04:29:57 5752.3kH/s 3720375 eb6db7cbcbe9 1/1 68 donor +46PsTAqp...o2VDhm5j 2026-07-18 03:27:58 5574.7kH/s 3720331 ce3461dc9491 1/1 27 donor_vip +42m2kLta...aDULT2Qj 2026-07-18 02:25:57 5921.5kH/s 3720292 dcd5dc3ec0a7 1/1 27 donor_vip +46Rb9Hjc...57AFUnq5 2026-07-18 01:23:56 4490.7kH/s 3720242 aa972db9ec4c 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-18 00:21:56 5638.4kH/s 3720215 390c14bf712f 1/1 1 donor_mega +42XnhJTN...EPxRtsmc 2026-07-17 23:20:03 5403.6kH/s 3720179 aea9d44ab542 1/1 177 vip +46Rb9Hjc...57AFUnq5 2026-07-17 22:17:58 5940.3kH/s 3720143 855a1c756e1a 1/1 9 donor_whale +48wF5CTP...zF7tEmWC 2026-07-17 21:16:08 4400.5kH/s 3720112 1738b92ff0ae 1/1 26 donor_vip +47NF5Nbe...nMs9DDJU 2026-07-17 19:55:08 5696.3kH/s 3720076 3b78e6783b76 1/1 9 donor_whale +421n6hRs...61UsZuDG 2026-07-17 18:51:25 5451.2kH/s 3720053 3e5a491fcbd0 1/1 9 donor_whale +421n6hRs...61UsZuDG 2026-07-17 17:52:58 4447.1kH/s 3720014 c2887677affb 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-17 16:50:09 5897.5kH/s 3719986 d8feb4003f12 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-17 15:47:59 5728.1kH/s 3719953 b4edeefe5c5e 1/1 8 donor_whale +421n6hRs...61UsZuDG 2026-07-17 14:45:59 5482.4kH/s 3719916 7e01d4a02ccb 1/1 28 donor_vip +42NpvKMH...zAXwCRSb 2026-07-17 13:43:27 5541.6kH/s 3719886 8aaf469913d3 1/1 8 donor_whale +42NpvKMH...zAXwCRSb 2026-07-17 12:45:00 4552.0kH/s 3719841 2a8e823af040 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-17 11:42:26 4248.3kH/s 3719811 6449b85cc2e7 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-17 10:44:01 3166.4kH/s 3719776 2e1b0b2fa9da 1/1 1 donor_mega +48LNi6pk...5DomVmR2 2026-07-17 08:27:59 5541.5kH/s 3719724 21ff13c97c12 1/1 26 donor_vip +486aGn4q...F8wjAE5R 2026-07-17 07:25:54 5273.0kH/s 3719699 e46e7eadad90 1/1 4 mvp +42NpvKMH...zAXwCRSb 2026-07-17 06:24:06 3480.9kH/s 3719666 c1dcb9f7f144 1/1 7 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-17 04:35:23 4321.6kH/s 3719605 6cdc11ea4b39 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-17 03:36:55 5260.8kH/s 3719574 5fedbe6be5f3 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-17 02:34:56 5181.3kH/s 3719535 963cdc49672e 1/1 8 donor_whale +47sctNyW...JBFt8g8K 2026-07-17 01:32:56 5048.8kH/s 3719505 81eef1f83699 1/1 27 donor_vip +47NF5Nbe...nMs9DDJU 2026-07-17 00:22:58 4210.0kH/s 3719468 cb52f4393c35 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-16 23:20:57 5234.0kH/s 3719446 dd522d1e7bfe 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-16 22:18:58 5320.6kH/s 3719413 d2ab4d1e8c0e 1/1 8 donor_whale +48wF5CTP...zF7tEmWC 2026-07-16 21:16:58 4398.2kH/s 3719379 d3d0a05acb83 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-16 20:15:00 3826.2kH/s 3719339 59450ca42519 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-16 18:58:59 2288.5kH/s 3719305 0aacecb1a97e 1/1 9 donor_whale +47NF5Nbe...nMs9DDJU 2026-07-16 16:51:59 5469.6kH/s 3719237 84f25b497474 1/1 9 donor_whale +49fV8TjN...GSgrDzrU 2026-07-16 15:49:08 4171.7kH/s 3719210 6566abce4808 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-16 14:46:25 4082.8kH/s 3719186 e7ea63461c92 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-16 13:47:59 5429.7kH/s 3719155 4e302cf3d823 1/1 1 donor_mega +421n6hRs...61UsZuDG 2026-07-16 12:46:00 4672.1kH/s 3719122 5a127a99b97e 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-16 11:44:00 5288.6kH/s 3719090 d72436140339 1/1 1 donor_mega +49YoCEDi...x97dHeGQ 2026-07-16 10:41:58 5754.7kH/s 3719063 c5202812f883 1/1 28 donor_vip +46Rb9Hjc...57AFUnq5 2026-07-16 09:39:58 3225.6kH/s 3719040 9a602c965031 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-16 07:41:35 4396.3kH/s 3718989 0a80aa9e5533 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-16 06:42:26 4429.8kH/s 3718969 7f8083d5836e 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-16 05:43:26 4359.7kH/s 3718946 f1faa2493074 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-16 04:44:58 5275.6kH/s 3718918 5f7df96778fa 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-07-16 03:42:59 5514.3kH/s 3718892 7225ec7ca701 1/1 10 donor_whale +48LNi6pk...5DomVmR2 2026-07-16 02:40:56 4429.8kH/s 3718861 835e6da5cb01 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-16 01:38:24 4435.1kH/s 3718832 49bf8474260c 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-16 00:40:04 5485.9kH/s 3718807 aa08e4b400d6 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-15 23:37:57 4668.1kH/s 3718778 7159a6285363 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-15 22:34:58 5360.5kH/s 3718750 1d40ae06616c 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-15 21:28:58 4875.1kH/s 3718717 e458ff23831a 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-15 20:26:39 4497.4kH/s 3718687 801bd67f9aed 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-15 19:28:00 3797.1kH/s 3718651 c7a7c0f46e04 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-15 17:47:07 5752.7kH/s 3718618 b43ed4b18d5e 1/1 8 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-15 16:44:36 5723.6kH/s 3718595 24266b10dfa3 1/1 8 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-15 15:45:08 4456.3kH/s 3718570 6ccbdb14a0c5 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-15 14:42:35 4302.8kH/s 3718541 d260b1f72905 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-15 13:44:00 5599.7kH/s 3718515 29d37ad42f36 1/1 1 donor_mega +49fV8TjN...GSgrDzrU 2026-07-15 12:41:59 4684.0kH/s 3718484 4901dc6ef903 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-15 11:39:26 4172.7kH/s 3718457 87a2af440c3b 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-15 10:40:58 5281.6kH/s 3718427 2cec1cbffbf9 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-07-15 09:39:01 4576.3kH/s 3718399 72c5fcfbbd26 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-15 08:37:07 5355.5kH/s 3718356 8f7f664db71f 1/1 31 donor_vip +421n6hRs...61UsZuDG 2026-07-15 07:34:57 5296.0kH/s 3718316 1d1f4632c41c 1/1 8 donor_whale +487SyiQC...aSGcaBDE 2026-07-15 06:32:58 5466.0kH/s 3718284 74afc8a1f24c 1/1 29 donor_vip +42NpvKMH...zAXwCRSb 2026-07-15 05:30:59 5238.8kH/s 3718253 88c2b61b7142 1/1 9 donor_whale +42mefDQX...pJw9nygF 2026-07-15 04:28:57 4469.9kH/s 3718223 5b8498f76da2 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-15 03:26:55 5758.3kH/s 3718191 05a4413d3435 1/1 1 donor_mega +42m2kLta...aDULT2Qj 2026-07-15 02:24:56 4165.1kH/s 3718160 9cbf7f455c21 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-15 01:22:23 4676.2kH/s 3718128 342682d5aab4 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-15 00:23:26 4207.4kH/s 3718089 f9c0aa6c8302 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-14 23:24:24 4502.3kH/s 3718059 a64f2354223e 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-14 22:25:24 4668.2kH/s 3718033 d9698104cccc 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-14 21:26:58 5394.8kH/s 3718012 60d82b874c13 1/1 1 donor_mega +48xVox2n...oQM27PR1 2026-07-14 20:24:10 5249.7kH/s 3717980 5e2a7146429b 1/1 32 donor_vip +47NF5Nbe...nMs9DDJU 2026-07-14 19:21:58 4246.0kH/s 3717952 ed7a97581379 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-14 18:19:59 5464.0kH/s 3717930 2388fe9bd52b 1/1 1 donor_mega +46PsTAqp...o2VDhm5j 2026-07-14 17:18:00 5106.2kH/s 3717911 408d5d2af6f7 1/1 31 donor_vip +47NF5Nbe...nMs9DDJU 2026-07-14 16:16:07 5102.7kH/s 3717893 2cfbbf9d8c4f 1/1 8 donor_whale +48wF5CTP...zF7tEmWC 2026-07-14 15:13:59 3985.4kH/s 3717859 62c34c56a47f 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-14 14:11:27 3720.3kH/s 3717835 97037644aaaa 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-14 13:12:25 4400.6kH/s 3717800 0c605570ec3b 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-14 12:14:00 5664.5kH/s 3717746 d06bf3e5ba29 1/1 1 donor_mega +43nvW9WJ...e7SmCf3o 2026-07-14 11:11:59 5323.0kH/s 3717714 e52de31296f9 1/1 30 donor_vip +42NpvKMH...zAXwCRSb 2026-07-14 10:09:07 4755.9kH/s 3717668 9944162bc084 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-14 09:06:57 5659.4kH/s 3717635 cb00ec5f50bd 1/1 9 donor_whale +45wQcnHH...kR5qUREN 2026-07-14 08:04:59 4421.6kH/s 3717591 5a3f6dc7efdc 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-14 07:02:24 4514.4kH/s 3717546 5f0bfd36a27a 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-14 06:03:24 4501.7kH/s 3717516 7abca6ac6427 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-14 05:04:59 5817.8kH/s 3717480 349e828e816e 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-07-14 04:02:56 4665.8kH/s 3717445 c6d02403cf3c 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-14 03:00:57 5732.0kH/s 3717417 0f240273b937 1/1 1 donor_mega +42cg1PYJ...o43XGcrP 2026-07-14 01:59:05 3593.8kH/s 3717390 895ecdab5723 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-14 00:43:03 5717.4kH/s 3717358 7aec1f5afe2a 1/1 8 donor_whale +47NF5Nbe...nMs9DDJU 2026-07-13 23:40:56 5677.7kH/s 3717323 e576817cdd64 1/1 8 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-13 22:38:24 5438.7kH/s 3717293 e255bca2a69d 1/1 8 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-13 21:40:06 4491.7kH/s 3717259 6a126003d938 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-13 20:37:24 4404.6kH/s 3717223 80b7e9dd9663 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-13 19:38:32 4368.0kH/s 3717196 b60e94709a21 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-13 18:39:26 4374.5kH/s 3717174 93ebea91c1a9 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-13 17:40:37 4409.3kH/s 3717139 6ed9224877d9 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-13 16:41:08 5182.8kH/s 3717118 3b048d88f04d 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-13 15:38:58 5529.4kH/s 3717092 c9c4f1cf10e3 1/1 8 donor_whale +487SyiQC...aSGcaBDE 2026-07-13 14:36:57 3207.0kH/s 3717068 d449544e2073 1/1 33 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-13 12:59:59 3252.8kH/s 3717015 fad6db3963af 1/1 1 donor_mega +43nvW9WJ...e7SmCf3o 2026-07-13 11:20:58 5598.3kH/s 3716966 9b0b1f8a6c08 1/1 33 donor_vip +46XNiJuL...DF62UR3s 2026-07-13 10:18:56 4087.6kH/s 3716945 c3b03cedf539 1/1 33 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-13 09:17:00 5226.6kH/s 3716921 65a61b0e496b 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-07-13 08:14:57 4284.8kH/s 3716902 beef94119938 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-13 07:13:00 5153.9kH/s 3716877 50b75743adf4 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-07-13 06:10:58 5775.0kH/s 3716853 8ac5d7f8ae40 1/1 32 donor_vip +46Rb9Hjc...57AFUnq5 2026-07-13 05:08:57 5930.2kH/s 3716823 61947cfcdbb8 1/1 12 donor_whale +464Bdn7D...wTbYVfF1 2026-07-13 04:06:56 3673.2kH/s 3716795 3cb36e5d57c9 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-13 02:17:32 4670.4kH/s 3716745 f6a25cf945bd 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-13 01:18:56 6021.1kH/s 3716716 a8661b9865b3 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-07-13 00:16:56 3819.6kH/s 3716682 1d0508fb8b98 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-12 22:57:55 5826.5kH/s 3716641 0e22a5b51732 1/1 1 donor_mega +43nvW9WJ...e7SmCf3o 2026-07-12 21:56:04 6068.0kH/s 3716602 c5217ade21d2 1/1 29 donor_vip +45S3XHby...A3Jwctmh 2026-07-12 20:53:56 5770.9kH/s 3716562 5116f090b3ab 2/1 175 vip +48wF5CTP...zF7tEmWC 2026-07-12 19:51:56 4833.0kH/s 3716537 440517e58f18 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-12 18:49:25 5015.8kH/s 3716508 79a4bb22c6b9 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-12 17:50:58 5441.4kH/s 3716480 02d9e5138709 1/1 1 donor_mega +4AEAX3qs...vTU56zMr 2026-07-12 16:49:07 6197.5kH/s 3716459 33e39e43f1ab 1/1 30 donor_vip +44aZ9ce8...i1Hxzm1M 2026-07-12 15:46:57 6162.3kH/s 3716437 67233045a8d8 1/1 31 donor_vip +42mefDQX...pJw9nygF 2026-07-12 14:44:57 4762.6kH/s 3716407 453c83e2ddf2 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-12 13:42:56 6057.8kH/s 3716378 94420ab47995 1/1 1 donor_mega +47d4QRof...jL5UqAKj 2026-07-12 12:40:56 5703.0kH/s 3716333 c4c8550ea750 1/1 66 donor +47NF5Nbe...nMs9DDJU 2026-07-12 11:39:03 3704.6kH/s 3716294 b1386004c338 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-12 10:24:55 5881.2kH/s 3716250 b9ed883c74c5 1/1 1 donor_mega +42m2kLta...aDULT2Qj 2026-07-12 09:22:56 4443.6kH/s 3716219 4bcff60d2b02 1/1 33 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-12 08:20:24 4441.9kH/s 3716184 b7f1604677ab 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-12 07:21:29 4721.1kH/s 3716147 77c0136c8d9f 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-12 06:22:22 3386.8kH/s 3716116 991f93853c61 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-12 04:44:55 5548.7kH/s 3716066 51e3b7069248 1/1 1 donor_mega +421n6hRs...61UsZuDG 2026-07-12 03:43:02 5685.4kH/s 3716030 2544f10ccb71 1/1 32 donor_vip +46Rb9Hjc...57AFUnq5 2026-07-12 02:40:57 5747.5kH/s 3715997 ca1d79e37455 1/1 12 donor_whale +487SyiQC...aSGcaBDE 2026-07-12 01:38:56 5148.3kH/s 3715952 680f7109722e 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-12 00:36:57 6141.6kH/s 3715912 7fef78808bd1 1/1 1 donor_mega +49fV8TjN...GSgrDzrU 2026-07-11 23:34:57 5007.5kH/s 3715867 44e300dda4f0 1/1 12 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-11 22:32:57 6086.5kH/s 3715824 f603ac3de16d 1/1 1 donor_mega +43nvW9WJ...e7SmCf3o 2026-07-11 21:31:03 6120.4kH/s 3715784 68ee8145ed6f 1/1 32 donor_vip +48b1zteM...a6BJoFL8 2026-07-11 20:29:00 5946.5kH/s 3715759 e30305855691 1/1 66 donor +464pdsyX...8QQVt1x3 2026-07-11 19:26:56 4842.8kH/s 3715728 2b555fce3e7a 1/1 67 donor +48M2j8Gj...d8KgGBwa 2026-07-11 18:24:23 3734.5kH/s 3715699 10c4a23132d3 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-11 17:11:24 4890.0kH/s 3715658 3af850c20343 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-11 16:12:57 5981.8kH/s 3715617 f57e2c92f41a 1/1 1 donor_mega +464Bdn7D...wTbYVfF1 2026-07-11 15:10:55 6308.0kH/s 3715590 0bd6a12835cc 1/1 179 vip +49fV8TjN...GSgrDzrU 2026-07-11 14:08:57 4797.3kH/s 3715566 9fed6f9221a0 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-11 13:07:06 5463.7kH/s 3715537 91c673fcb81a 1/1 1 donor_mega +421n6hRs...61UsZuDG 2026-07-11 12:04:12 5406.3kH/s 3715497 647bc6900dc8 1/1 10 donor_whale +4AyiUbKF...uJpsC4ym 2026-07-11 11:01:55 5702.1kH/s 3715469 f0dea3843aa1 1/1 33 donor_vip +4B2Avc2j...5JCEaaNs 2026-07-11 09:59:57 4508.6kH/s 3715437 e1885d6a38c4 1/1 34 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-11 08:57:57 5709.0kH/s 3715405 c972763fd72f 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-11 07:55:58 4036.6kH/s 3715376 84e18f9543c2 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-11 06:45:08 6001.7kH/s 3715336 1baef1fe6489 1/1 1 donor_mega +49ijD1Et...e7mEQxJ9 2026-07-11 05:42:56 5661.0kH/s 3715317 967186f0ef00 1/1 33 donor_vip +42Mk3F3y...Q6fgUTJr 2026-07-11 04:40:56 5572.2kH/s 3715291 e31666471196 1/1 10 donor_whale +47NF5Nbe...nMs9DDJU 2026-07-11 03:38:57 5786.8kH/s 3715261 ca6610948e19 1/1 10 donor_whale +45xA3Kgd...7Ma7ttaf 2026-07-11 02:36:54 4571.9kH/s 3715240 2d3ad1c46080 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-11 01:34:23 4357.8kH/s 3715207 0453e7754a26 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-11 00:35:59 6153.9kH/s 3715181 ee4e5b698172 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-07-10 23:33:57 5007.5kH/s 3715157 63c55c901dd1 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-10 22:31:24 5010.0kH/s 3715132 fb05df3aa86d 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-10 21:30:24 4835.8kH/s 3715114 53ced3e0f4b6 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-10 20:31:23 4870.2kH/s 3715087 3554adb0fe8b 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-10 19:32:23 4873.2kH/s 3715061 c63c2b64fb23 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-10 18:33:33 4999.6kH/s 3715043 597fb9d621e8 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-10 17:34:56 5963.1kH/s 3715015 7979530fda1f 1/1 1 donor_mega +49fV8TjN...GSgrDzrU 2026-07-10 16:32:57 4789.0kH/s 3714985 a78605a50f97 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-10 15:30:24 4543.3kH/s 3714954 cc4fade04245 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-10 14:31:22 4803.5kH/s 3714926 5b989794058e 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-10 13:32:22 4271.5kH/s 3714892 712e717a7dd6 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-10 12:30:58 5124.4kH/s 3714851 2ec33354c428 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-07-10 11:28:56 4315.2kH/s 3714815 dfad51ae8321 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-10 10:26:57 5509.1kH/s 3714780 846ffc6d0d63 1/1 1 donor_mega +43tg9ebV...GLspBx9P 2026-07-10 09:24:07 3263.4kH/s 3714744 27e0a82fb37a 1/1 30 donor_vip +49fV8TjN...GSgrDzrU 2026-07-10 08:01:05 5420.2kH/s 3714694 f8b002f8d6c0 1/1 10 donor_whale +48xVox2n...oQM27PR1 2026-07-10 06:58:56 5766.7kH/s 3714654 0597c6f2940f 1/1 30 donor_vip +42Mk3F3y...Q6fgUTJr 2026-07-10 05:56:56 4534.7kH/s 3714616 bb7333057c26 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-10 04:54:56 3664.8kH/s 3714584 666ef7fbcc54 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-10 03:22:55 5946.3kH/s 3714541 64c943375dad 1/1 9 donor_whale +4B2Avc2j...5JCEaaNs 2026-07-10 02:20:55 4058.5kH/s 3714509 de81bf0651a2 1/1 29 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-10 01:18:22 4124.7kH/s 3714473 f81504df31b4 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-10 00:19:22 4516.4kH/s 3714440 326ad0d5a8a2 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-09 23:20:31 4349.2kH/s 3714417 22038cfa33ae 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-09 22:21:58 5032.8kH/s 3714389 2cefee282dcf 1/1 1 donor_mega +46PsTAqp...o2VDhm5j 2026-07-09 21:17:03 5747.0kH/s 3714357 918df7eda1dc 1/1 30 donor_vip +48xVox2n...oQM27PR1 2026-07-09 20:14:56 5830.3kH/s 3714329 8337d85964a4 1/1 30 donor_vip +43CcbPH8...uQWupVW5 2026-07-09 19:13:05 4183.4kH/s 3714303 c10bf24b24e3 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-09 18:10:58 5412.8kH/s 3714273 6fd682b31ff1 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-09 17:08:57 5393.1kH/s 3714248 88aac9c50e2c 1/1 10 donor_whale +421n6hRs...61UsZuDG 2026-07-09 16:06:40 3208.7kH/s 3714225 0b0f049cc762 1/1 10 donor_whale +421n6hRs...61UsZuDG 2026-07-09 14:42:34 4475.1kH/s 3714189 b4612b1b1277 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-09 13:40:17 5498.7kH/s 3714152 b52eac8bb065 1/1 1 donor_mega +4B2Avc2j...5JCEaaNs 2026-07-09 12:38:17 5520.7kH/s 3714116 3c8d2b11828c 1/1 34 donor_vip +43CcbPH8...uQWupVW5 2026-07-09 11:36:13 5525.1kH/s 3714089 aa323ecc5bb5 1/1 10 donor_whale +42Mk3F3y...Q6fgUTJr 2026-07-09 10:33:37 3257.7kH/s 3714055 4a0e751d8d78 1/1 10 donor_whale +42Mk3F3y...Q6fgUTJr 2026-07-09 07:25:30 5551.0kH/s 3713970 370cd4322fab 1/1 10 donor_whale +48wF5CTP...zF7tEmWC 2026-07-09 06:22:35 5744.8kH/s 3713939 de7d61e521c0 1/1 34 donor_vip +45iHYVMq...UAz6KRyd 2026-07-09 05:20:21 5536.0kH/s 3713906 4f5edeffd07d 1/1 34 donor_vip +42mefDQX...pJw9nygF 2026-07-09 04:18:08 5365.6kH/s 3713879 6477cb0aa11b 1/1 10 donor_whale +42NpvKMH...zAXwCRSb 2026-07-09 03:15:27 6088.9kH/s 3713853 c1a2dd0fc38f 1/1 10 donor_whale +45iHYVMq...UAz6KRyd 2026-07-09 02:12:33 6015.4kH/s 3713821 ad09a06c3472 1/1 34 donor_vip +421n6hRs...61UsZuDG 2026-07-09 01:09:30 5834.0kH/s 3713786 2353972ce405 1/1 10 donor_whale +42NpvKMH...zAXwCRSb 2026-07-09 00:07:08 3992.5kH/s 3713750 c297b39ee032 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-08 23:04:13 5807.9kH/s 3713722 9a89df936a06 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-08 22:01:18 5645.7kH/s 3713694 af36894958b0 1/1 10 donor_whale +49fV8TjN...GSgrDzrU 2026-07-08 20:58:15 4562.7kH/s 3713658 597da6fa65e8 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-08 19:55:43 4664.5kH/s 3713619 ad0e8fd290ab 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-08 18:56:43 4789.4kH/s 3713589 80b07c8d1b78 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-08 17:58:03 4679.3kH/s 3713551 9a6ead785fba 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-08 16:58:41 4167.1kH/s 3713516 3f05d4527ea8 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-08 15:59:34 5107.6kH/s 3713481 bb7fcce4636c 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-07-08 14:57:02 5857.5kH/s 3713450 b787a78dccde 1/1 9 donor_whale +47NF5Nbe...nMs9DDJU 2026-07-08 13:57:17 5696.3kH/s 3713424 7bb4b2164de8 1/1 10 donor_whale +4B2Avc2j...5JCEaaNs 2026-07-08 12:54:39 3347.2kH/s 3713390 ab9e3900b36f 1/1 33 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-08 11:23:36 5661.6kH/s 3713347 85316014603b 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-08 10:20:19 5436.9kH/s 3713312 01e2817dee29 1/1 10 donor_whale +42NpvKMH...zAXwCRSb 2026-07-08 09:17:17 5981.2kH/s 3713283 a76c0365c321 1/1 10 donor_whale +42m2kLta...aDULT2Qj 2026-07-08 08:14:40 5801.1kH/s 3713255 8867d95fde39 1/1 31 donor_vip +42NpvKMH...zAXwCRSb 2026-07-08 07:12:34 5571.4kH/s 3713225 9e0001cfdc77 1/1 10 donor_whale +43GtdWdk...39LmdZuj 2026-07-08 06:09:32 5320.5kH/s 3713191 f4a144e9fc85 1/1 64 donor +46Rb9Hjc...57AFUnq5 2026-07-08 05:07:12 5807.3kH/s 3713160 aa0debe54eec 1/1 31 donor_vip +42m2kLta...aDULT2Qj 2026-07-08 04:04:31 5823.7kH/s 3713128 80446774b179 1/1 31 donor_vip +42mefDQX...pJw9nygF 2026-07-08 03:02:07 5392.3kH/s 3713095 367c64f49b62 1/1 10 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-08 02:00:08 5660.0kH/s 3713069 f702aa4b558a 1/1 10 donor_whale +42mefDQX...pJw9nygF 2026-07-08 00:57:29 4434.2kH/s 3713036 daa359423f09 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-07 23:54:11 5228.7kH/s 3713012 b1ee3e7efe0a 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-07-07 22:52:09 4293.2kH/s 3712976 a73e6962be62 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-07 21:50:00 4728.7kH/s 3712956 31f42a4065c5 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-07 20:51:15 4398.0kH/s 3712922 910cd4dc7f89 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-07 19:51:42 4523.8kH/s 3712897 3820bdaf1b42 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-07 18:53:05 4097.5kH/s 3712860 6c219ffe0584 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-07 17:53:15 5808.1kH/s 3712833 eac633a32317 1/1 30 donor_vip +46PsTAqp...o2VDhm5j 2026-07-07 16:50:40 4544.5kH/s 3712804 7014416c9e27 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-07 15:47:17 5432.4kH/s 3712769 be4590dfbd5c 1/1 1 donor_mega +43CcbPH8...uQWupVW5 2026-07-07 14:44:39 4349.1kH/s 3712740 512543f981a1 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-07 13:41:45 3497.4kH/s 3712710 f9b124d9f125 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-07 12:04:22 4330.5kH/s 3712663 fb2ddc46d833 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-07 11:02:05 4483.3kH/s 3712636 008090c0dd1e 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-07 10:02:15 3761.9kH/s 3712610 9171560f433b 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-07 08:41:14 4270.0kH/s 3712563 e3bb11b82c02 1/1 64 donor +48M2j8Gj...d8KgGBwa 2026-07-07 07:38:40 4584.9kH/s 3712522 d68fcea4fac9 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-07 06:39:14 5897.0kH/s 3712489 97a1374a8a22 1/1 1 donor_mega +43tg9ebV...GLspBx9P 2026-07-07 05:37:11 5674.1kH/s 3712466 f08c4495c408 1/1 30 donor_vip +42mefDQX...pJw9nygF 2026-07-07 04:34:14 4804.7kH/s 3712437 a6965fe03678 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-07 03:31:12 5232.1kH/s 3712407 0e372f375262 1/1 1 donor_mega +4B2Avc2j...5JCEaaNs 2026-07-07 02:23:31 5513.1kH/s 3712362 0ec324ad3895 1/1 29 donor_vip +47NF5Nbe...nMs9DDJU 2026-07-07 01:21:11 4473.6kH/s 3712331 acdeab48260f 1/1 7 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-07 00:18:38 4521.3kH/s 3712296 ebc9a3cc7045 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-06 23:19:30 5499.7kH/s 3712271 7ff61332c251 1/1 1 donor_mega +46PsTAqp...o2VDhm5j 2026-07-06 22:16:14 4490.4kH/s 3712248 e065ae6c3327 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-06 21:13:44 4424.5kH/s 3712214 6568f9c86b19 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-06 20:14:41 4444.0kH/s 3712193 acf8f198d110 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-06 19:15:15 4131.3kH/s 3712157 edd828f6abda 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-07-06 18:10:19 5527.3kH/s 3712124 45fd777cc633 1/1 7 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-06 17:08:06 4881.2kH/s 3712106 dc6a6f294f86 1/1 7 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-06 16:08:39 4375.4kH/s 3712069 d5271484534c 1/1 7 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-06 15:05:20 5518.8kH/s 3712040 f7128495c571 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-07-06 14:02:16 4279.8kH/s 3712002 f80e3aaf2ee8 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-06 12:59:42 4258.5kH/s 3711969 450df1a05cea 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-06 12:00:45 3997.0kH/s 3711940 22032f32333d 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-06 10:57:41 4182.5kH/s 3711909 d51686468006 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-06 09:58:14 5477.6kH/s 3711873 6160c02997cf 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-06 08:55:15 4335.5kH/s 3711842 41409b1bdc1b 1/1 33 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-06 07:52:43 3773.0kH/s 3711809 7bc97040a238 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-06 06:53:15 5058.0kH/s 3711781 4ebd05f6c12c 1/1 7 donor_whale +421n6hRs...61UsZuDG 2026-07-06 05:50:15 4036.9kH/s 3711749 0e45dd66e0db 1/1 7 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-06 04:47:41 4028.8kH/s 3711717 14c2a4644f10 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-06 03:48:14 4969.4kH/s 3711686 5ab59204881f 1/1 7 donor_whale +42NpvKMH...zAXwCRSb 2026-07-06 02:45:11 4068.7kH/s 3711646 59dcf8fdfa40 1/1 7 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-06 01:42:38 4134.7kH/s 3711608 ab793a23db28 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-06 00:44:02 4070.4kH/s 3711585 401ef2a0a658 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-05 23:44:14 4441.2kH/s 3711555 a2989235bed9 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-05 22:34:15 1939.2kH/s 3711524 d27aedb98c7e 1/1 7 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-05 20:34:06 1459.8kH/s 3711471 d5c93406e752 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-05 19:34:40 1370.8kH/s 3711445 5e71100a167b 1/1 1 donor_mega +464Bdn7D...wTbYVfF1 2026-07-05 18:32:17 1596.4kH/s 3711417 a25853717561 1/1 32 donor_vip +46PsTAqp...o2VDhm5j 2026-07-05 17:08:32 1875.2kH/s 3711385 86031b5617b5 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-05 16:05:43 4343.6kH/s 3711359 37a41d675628 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-05 15:07:13 5646.2kH/s 3711315 b1fafa81987e 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-07-05 14:04:41 3157.4kH/s 3711287 5702c9f9d71c 1/1 9 donor_whale +42Mk3F3y...Q6fgUTJr 2026-07-05 12:26:34 5586.2kH/s 3711232 a4e31cf1e679 1/1 9 donor_whale +42mefDQX...pJw9nygF 2026-07-05 11:24:16 5486.0kH/s 3711190 df843aa0649c 1/1 9 donor_whale +42Mk3F3y...Q6fgUTJr 2026-07-05 10:21:13 3521.9kH/s 3711161 73393b034c5d 1/1 9 donor_whale +42m2kLta...aDULT2Qj 2026-07-05 08:28:13 5563.2kH/s 3711101 27263b799ab2 1/1 31 donor_vip +4AEAX3qs...vTU56zMr 2026-07-05 07:25:13 4186.3kH/s 3711058 8edaf4bfd596 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-05 06:22:31 5813.3kH/s 3711030 11748c447b64 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-07-05 05:19:41 5329.5kH/s 3711003 03d5b07ec833 1/1 10 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-05 04:21:12 5781.6kH/s 3710975 f40d8d994ac2 1/1 10 donor_whale +49fV8TjN...GSgrDzrU 2026-07-05 03:19:12 3495.7kH/s 3710946 09eb5117649a 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-05 01:54:13 5566.4kH/s 3710886 5108e3acf453 1/1 1 donor_mega +4AGJScWS...f6SvY5p5 2026-07-05 00:52:03 4592.6kH/s 3710860 75a3d72d85a7 1/1 4 mvp +48M2j8Gj...d8KgGBwa 2026-07-04 23:50:11 3380.1kH/s 3710836 e51767bb3c19 1/1 1 donor_mega +46AdMVVk...KRL9YFCm 2026-07-04 22:15:13 5449.8kH/s 3710795 df6aaba9798f 1/1 33 donor_vip +47NF5Nbe...nMs9DDJU 2026-07-04 21:12:33 4244.8kH/s 3710764 c441cc7069f4 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-04 20:09:16 5722.7kH/s 3710738 481d7055ed4d 1/1 1 donor_mega +49fV8TjN...GSgrDzrU 2026-07-04 19:07:14 4354.7kH/s 3710715 5d9a5cd524d0 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-04 18:05:10 5792.9kH/s 3710691 be664d2f6d89 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-07-04 17:02:34 5496.0kH/s 3710661 6f23e466e59a 1/1 7 donor_whale +42mefDQX...pJw9nygF 2026-07-04 15:59:14 4192.8kH/s 3710631 73152d1c0bea 1/1 69 donor +48M2j8Gj...d8KgGBwa 2026-07-04 14:56:42 3647.8kH/s 3710595 ca6cfc4dbeab 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-04 13:57:31 6518.6kH/s 3710556 6b4e81eedc64 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-04 12:54:35 6638.3kH/s 3710529 c228700a4513 1/1 7 donor_whale +42mefDQX...pJw9nygF 2026-07-04 11:51:15 5182.2kH/s 3710485 8a392ceaacd1 1/1 7 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-04 10:48:14 3718.6kH/s 3710444 6bac328ac5c8 1/1 7 donor_whale +47NF5Nbe...nMs9DDJU 2026-07-04 08:47:15 3592.9kH/s 3710370 fbd3c7b2495c 1/1 7 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-04 07:44:15 3798.2kH/s 3710328 a541a22bd614 1/1 7 donor_whale +48wF5CTP...zF7tEmWC 2026-07-04 06:41:32 3749.1kH/s 3710297 dfaf482a7146 1/1 7 donor_whale +43tg9ebV...GLspBx9P 2026-07-04 05:38:13 3856.4kH/s 3710269 e6265bc08ce6 1/1 69 donor +48M2j8Gj...d8KgGBwa 2026-07-04 04:35:39 3674.6kH/s 3710241 cbee7c775ea3 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-04 03:36:29 3768.7kH/s 3710215 3683e68ea87c 1/1 6 donor_whale +42mefDQX...pJw9nygF 2026-07-04 02:33:31 3770.1kH/s 3710187 8b53e72a06d0 1/1 7 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-04 01:31:11 3909.3kH/s 3710153 9adbaa90197f 1/1 7 donor_whale +45xA3Kgd...7Ma7ttaf 2026-07-04 00:28:31 3831.2kH/s 3710120 52b7168e2df4 1/1 32 donor_vip +47NF5Nbe...nMs9DDJU 2026-07-03 23:26:11 3460.3kH/s 3710093 8860818ce1b5 1/1 7 donor_whale +4AyiUbKF...uJpsC4ym 2026-07-03 22:24:10 3404.2kH/s 3710061 04355cda07b2 2/1 30 donor_vip +46Rb9Hjc...57AFUnq5 2026-07-03 21:22:10 3099.6kH/s 3710033 4592806beafb 1/1 7 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-03 20:20:11 2919.7kH/s 3709992 f56d36542402 1/1 7 donor_whale +42NpvKMH...zAXwCRSb 2026-07-03 19:18:11 3128.7kH/s 3709966 77ca738d2173 1/1 7 donor_whale +421n6hRs...61UsZuDG 2026-07-03 18:15:13 3405.6kH/s 3709938 905f3bbe4c52 1/1 7 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-03 17:13:08 2981.4kH/s 3709903 61d479c9847e 1/1 7 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-03 16:10:37 2904.1kH/s 3709875 4dd4c261e4f6 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-03 15:11:38 3437.4kH/s 3709846 e8febb283003 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-03 14:12:13 2894.7kH/s 3709825 97b4eb64b10d 1/1 7 donor_whale +42mefDQX...pJw9nygF 2026-07-03 13:10:11 3401.5kH/s 3709788 c82d550762c5 1/1 7 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-03 12:07:28 3811.3kH/s 3709756 6766a3d93123 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-03 11:04:12 4149.4kH/s 3709729 32f461cc3f58 1/1 7 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-03 10:01:37 3792.3kH/s 3709700 5aaf70216e70 1/1 7 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-03 09:03:10 4084.2kH/s 3709669 173109d3ad3c 1/1 7 donor_whale +421n6hRs...61UsZuDG 2026-07-03 07:14:11 3705.4kH/s 3709608 e21e75784326 2/1 6 donor_whale +47NF5Nbe...nMs9DDJU 2026-07-03 06:11:27 3856.5kH/s 3709564 31e9a3ea930d 1/1 7 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-03 05:08:35 4249.9kH/s 3709527 2cc61c11cc4d 2/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-03 04:10:08 3726.1kH/s 3709496 970bca01f175 1/1 1 donor_mega +4AyiUbKF...uJpsC4ym 2026-07-03 03:08:08 4048.8kH/s 3709465 437b23021cbb 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-03 02:06:06 3982.2kH/s 3709432 90e47ed15798 1/1 7 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-03 01:03:28 4210.5kH/s 3709400 49b63e40280a 2/1 6 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-02 21:34:13 3744.1kH/s 3709303 86f65a922b79 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-07-02 20:31:11 4243.1kH/s 3709265 4be8eb047b23 2/1 7 donor_whale +42NpvKMH...zAXwCRSb 2026-07-02 18:45:10 3995.9kH/s 3709204 e44d0baed71a 1/1 12 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-02 17:35:10 4976.9kH/s 3709174 f1af4634d12f 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-07-02 16:33:11 4907.7kH/s 3709150 b2bbb1e4b758 1/1 12 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-02 15:30:13 5143.5kH/s 3709124 1473c0648f01 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-02 14:28:10 4125.4kH/s 3709092 4c85ea133e11 1/1 11 donor_whale +42NpvKMH...zAXwCRSb 2026-07-02 13:26:10 2627.6kH/s 3709067 88f37509cf60 1/1 32 donor_vip +48wF5CTP...zF7tEmWC 2026-07-02 09:21:47 4962.7kH/s 3708961 ef46db169bbd 1/1 33 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-02 08:18:42 4435.8kH/s 3708929 22cc13c0f9e5 2/1 1 donor_mega +45wQcnHH...kR5qUREN 2026-07-02 07:16:09 4398.7kH/s 3708893 103215eefec4 1/1 33 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-02 06:14:06 4630.4kH/s 3708860 0efac6463ac2 2/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-02 05:11:07 4696.5kH/s 3708824 bc0fee2bd4e3 1/1 12 donor_whale +47NF5Nbe...nMs9DDJU 2026-07-02 04:08:50 4420.1kH/s 3708795 64e2c1ab92ad 1/1 11 donor_whale +47NF5Nbe...nMs9DDJU 2026-07-02 03:10:07 4677.9kH/s 3708752 d72879a410c8 1/1 71 donor +42NpvKMH...zAXwCRSb 2026-07-02 02:07:20 4397.6kH/s 3708720 c62743253fdc 1/1 11 donor_whale +4Arsu3rc...wUtCc5e9 2026-07-02 01:05:09 4868.1kH/s 3708693 b123772973d0 1/1 73 donor +47NF5Nbe...nMs9DDJU 2026-07-02 00:03:07 5072.1kH/s 3708659 66b2055ca39b 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-01 23:00:24 4746.2kH/s 3708625 f462821d41a5 1/1 11 donor_whale +43CcbPH8...uQWupVW5 2026-07-01 21:58:09 4641.5kH/s 3708595 725a93cfcd6f 1/1 11 donor_whale +42mefDQX...pJw9nygF 2026-07-01 20:55:14 4872.2kH/s 3708568 95a97190b888 1/1 11 donor_whale +48MKrUo9...fEagtDE8 2026-07-01 19:52:32 5000.3kH/s 3708537 fd10ddc61bbd 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-01 18:49:13 4578.9kH/s 3708510 072c604f42ed 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-07-01 17:47:12 4415.5kH/s 3708479 d1546723a393 1/1 11 donor_whale +42NpvKMH...zAXwCRSb 2026-07-01 16:44:28 5219.3kH/s 3708449 9d2942aac9a2 1/1 11 donor_whale +43CcbPH8...uQWupVW5 2026-07-01 15:42:07 4925.2kH/s 3708419 0afc7962ea92 1/1 11 donor_whale +42NpvKMH...zAXwCRSb 2026-07-01 14:39:14 4400.7kH/s 3708390 dbd9232d943a 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-01 13:36:13 5004.8kH/s 3708360 7b35cfbcd930 1/1 1 donor_mega +487SyiQC...aSGcaBDE 2026-07-01 12:01:35 4628.1kH/s 3708312 713fd9f6b7bc 1/1 31 donor_vip +43CcbPH8...uQWupVW5 2026-07-01 10:58:12 4708.5kH/s 3708272 4b3909878c23 2/1 10 donor_whale +421n6hRs...61UsZuDG 2026-07-01 09:55:14 4388.6kH/s 3708240 e8dc30e0f265 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-01 07:50:39 4297.4kH/s 3708177 0714df5ccb5a 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-01 06:51:13 4716.9kH/s 3708143 ae3726bbc92e 1/1 11 donor_whale +42NpvKMH...zAXwCRSb 2026-07-01 05:49:11 4736.9kH/s 3708115 76208f735086 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-01 04:46:38 4343.3kH/s 3708083 447e72b4ffc4 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-01 03:26:10 4593.0kH/s 3708049 8c0546a9c51c 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-07-01 01:01:11 4777.2kH/s 3707988 43b546fec12a 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-30 23:58:39 4650.9kH/s 3707955 cc4063a12d4e 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-30 22:59:32 4659.9kH/s 3707932 52152d206efd 1/1 1 donor_mega +46PsTAqp...o2VDhm5j 2026-06-30 21:56:33 4025.4kH/s 3707902 99ba0edc0466 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-30 20:54:18 4382.3kH/s 3707870 2310869ae5e0 1/1 31 donor_vip +43N8v4Ma...277zUwJq 2026-06-30 19:51:16 4804.3kH/s 3707839 87beb66fa2c9 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-30 18:48:40 4974.3kH/s 3707813 1da0ca2b1554 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-30 17:50:01 4866.5kH/s 3707787 98a29f040926 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-30 16:50:53 4523.2kH/s 3707757 871a87c0c9bc 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-30 15:52:01 4747.0kH/s 3707729 74236fb5c794 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-30 14:52:31 6496.8kH/s 3707696 e1bdbb25d903 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-06-30 13:50:14 4845.1kH/s 3707670 a82f35ffcab2 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-30 12:47:42 6580.7kH/s 3707639 b64219b6841e 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-06-30 11:44:14 6210.8kH/s 3707603 07f48b5e9332 1/1 9 donor_whale +47NF5Nbe...nMs9DDJU 2026-06-30 10:41:13 6431.2kH/s 3707569 a5e726901fc5 1/1 30 donor_vip +46Rb9Hjc...57AFUnq5 2026-06-30 09:39:11 7419.4kH/s 3707526 6624b8829d45 1/1 10 donor_whale +49YoCEDi...x97dHeGQ 2026-06-30 08:36:12 6851.5kH/s 3707489 51467dafbc3e 1/1 31 donor_vip +46Rb9Hjc...57AFUnq5 2026-06-30 07:33:12 7202.7kH/s 3707449 dab23270dce6 1/1 10 donor_whale +42NpvKMH...zAXwCRSb 2026-06-30 06:30:30 4925.2kH/s 3707408 eeb330f7d725 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-30 05:27:12 6971.9kH/s 3707376 016e4109227d 1/1 1 donor_mega +4AyiUbKF...uJpsC4ym 2026-06-30 04:22:29 5183.3kH/s 3707348 438b5b2b9427 1/1 30 donor_vip +46Rb9Hjc...57AFUnq5 2026-06-30 03:05:08 3620.4kH/s 3707307 27c88d873814 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-30 01:12:09 7427.4kH/s 3707246 553086d13155 1/1 1 donor_mega +46PsTAqp...o2VDhm5j 2026-06-30 00:09:30 6808.9kH/s 3707223 a7c6270b325e 1/1 30 donor_vip +43nvW9WJ...e7SmCf3o 2026-06-29 23:07:10 5062.6kH/s 3707189 2f18af79c0fa 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-29 22:04:39 4715.0kH/s 3707172 43b2dc9afc6e 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-29 21:05:40 5623.8kH/s 3707144 dff8817f7325 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-29 20:07:02 5217.6kH/s 3707116 f795cf38e930 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-29 19:08:14 6630.4kH/s 3707084 e798a0ecf335 1/1 1 donor_mega +487SyiQC...aSGcaBDE 2026-06-29 18:05:37 5720.3kH/s 3707059 107b07483fb5 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-29 17:02:42 5321.6kH/s 3707036 eb1da4d70503 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-29 16:03:39 4734.2kH/s 3707009 0e798c8ac7f8 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-29 15:04:41 6302.9kH/s 3706982 893ef94e7563 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-06-29 14:01:13 5746.6kH/s 3706949 4df6237bc45e 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-29 12:58:32 7342.3kH/s 3706916 49e291e75b25 1/1 1 donor_mega +42NJbX1p...JBe7i8b2 2026-06-29 11:55:13 7095.2kH/s 3706873 320da7349460 1/1 30 donor_vip +46Rb9Hjc...57AFUnq5 2026-06-29 10:52:32 5051.7kH/s 3706843 72ca4b5bf741 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-29 09:49:45 4757.0kH/s 3706826 d1938b506e55 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-29 08:50:41 3758.8kH/s 3706797 1c044255ae5c 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-29 07:18:39 5049.2kH/s 3706745 03a085233423 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-29 06:19:38 4947.5kH/s 3706713 3fff24491636 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-29 05:21:11 6786.6kH/s 3706679 a10539fa7c43 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-06-29 04:19:10 6886.4kH/s 3706656 4c5ced4c2d7f 1/1 10 donor_whale +42Mk3F3y...Q6fgUTJr 2026-06-29 03:16:11 4859.5kH/s 3706627 4ae54aa39d82 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-29 02:13:11 6471.5kH/s 3706597 f36bd905d0e9 1/1 1 donor_mega +49fV8TjN...GSgrDzrU 2026-06-29 01:10:11 4708.6kH/s 3706572 309a101871aa 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-29 00:07:37 4975.8kH/s 3706543 caf7a3396b96 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-28 23:09:10 6604.7kH/s 3706515 08ab27d864c4 1/1 1 donor_mega +4AyiUbKF...uJpsC4ym 2026-06-28 22:06:12 4652.8kH/s 3706485 045cc0211d53 1/1 27 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-28 21:03:13 4209.1kH/s 3706452 f96c1788a3de 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-06-28 19:42:59 6600.5kH/s 3706418 a538e80a81d4 1/1 10 donor_whale +47NF5Nbe...nMs9DDJU 2026-06-28 18:43:33 7123.9kH/s 3706391 1509a42bd896 1/1 9 donor_whale +42mefDQX...pJw9nygF 2026-06-28 17:41:11 6628.2kH/s 3706358 d4763945c93a 1/1 8 donor_whale +49fV8TjN...GSgrDzrU 2026-06-28 16:38:33 4480.7kH/s 3706324 cf0bab3a0925 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-28 15:35:37 5082.8kH/s 3706290 544aede7980c 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-28 14:36:12 5666.3kH/s 3706260 c5f458dced52 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-06-28 13:30:31 6564.5kH/s 3706221 50fbe3497686 1/1 10 donor_whale +42NpvKMH...zAXwCRSb 2026-06-28 12:28:11 4691.5kH/s 3706186 f585882cbbde 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-28 11:25:39 3742.8kH/s 3706154 03bcc62458e9 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-28 09:36:14 3620.4kH/s 3706103 6f74e37550a2 1/1 1 donor_mega +43CcbPH8...uQWupVW5 2026-06-28 08:18:11 4577.1kH/s 3706056 ab440fd05b0a 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-28 07:15:11 6425.0kH/s 3706028 e9de85274bf4 1/1 1 donor_mega +49fV8TjN...GSgrDzrU 2026-06-28 06:12:12 4782.6kH/s 3706000 d2172377d98e 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-28 05:09:39 4513.6kH/s 3705969 77be0d3b9b39 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-28 04:10:56 4570.5kH/s 3705943 4d3df14d63ff 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-28 03:11:35 5092.0kH/s 3705919 f171345c7e53 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-28 02:13:09 6429.0kH/s 3705901 b36e6c055456 1/1 1 donor_mega +43CcbPH8...uQWupVW5 2026-06-28 01:11:10 6553.4kH/s 3705873 f3b0e9ca51a9 1/1 10 donor_whale +421n6hRs...61UsZuDG 2026-06-28 00:09:09 4794.0kH/s 3705841 3c282565aaef 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-27 23:07:09 6477.6kH/s 3705804 2c06e4374eba 1/1 1 donor_mega +4B2Avc2j...5JCEaaNs 2026-06-27 22:04:12 3406.0kH/s 3705774 563caffa3bb8 1/1 30 donor_vip +43nvW9WJ...e7SmCf3o 2026-06-27 20:22:12 4874.4kH/s 3705732 676f9749e727 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-27 19:19:13 6425.9kH/s 3705707 edbb7afdf690 1/1 1 donor_mega +43nvW9WJ...e7SmCf3o 2026-06-27 18:16:34 6957.1kH/s 3705676 45e89b8cca16 1/1 29 donor_vip +49YoCEDi...x97dHeGQ 2026-06-27 17:14:29 4715.3kH/s 3705639 04632428ff7a 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-27 16:11:39 4907.5kH/s 3705608 cfe767f82ae5 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-27 15:12:29 5060.9kH/s 3705577 71443f7ca0be 1/1 1 donor_mega +4AyiUbKF...uJpsC4ym 2026-06-27 14:02:10 4512.3kH/s 3705539 01004604c2ee 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-27 12:59:39 4565.1kH/s 3705516 7827ab009aed 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-27 12:00:30 7670.3kH/s 3705472 6fad4cc4df05 1/1 1 donor_mega +45wQcnHH...kR5qUREN 2026-06-27 10:58:27 7495.9kH/s 3705432 acef0fefd1a6 1/1 72 donor +421n6hRs...61UsZuDG 2026-06-27 09:55:33 5596.9kH/s 3705398 e19b29d8311c 1/1 29 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-27 08:52:13 3389.9kH/s 3705351 3b735e4caeb2 1/1 29 donor_vip +4AEAX3qs...vTU56zMr 2026-06-27 07:19:12 6247.4kH/s 3705292 98109da7f4a4 1/1 31 donor_vip +49YoCEDi...x97dHeGQ 2026-06-27 06:17:10 6601.4kH/s 3705260 9ea78cbd987b 1/1 31 donor_vip +47NF5Nbe...nMs9DDJU 2026-06-27 05:14:32 6670.9kH/s 3705225 dfe8e05fa56b 1/1 10 donor_whale +49fV8TjN...GSgrDzrU 2026-06-27 04:12:09 5562.0kH/s 3705191 7a9702fba949 1/1 71 donor +48M2j8Gj...d8KgGBwa 2026-06-27 03:09:36 5489.5kH/s 3705157 bd9690414e3f 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-27 02:10:35 5345.9kH/s 3705140 392abadd0eef 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-27 01:11:36 5307.9kH/s 3705115 0bdb6ab5506b 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-27 00:13:09 7195.3kH/s 3705088 222b8141b316 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-06-26 23:10:28 7093.3kH/s 3705049 e66abb166599 1/1 11 donor_whale +48wF5CTP...zF7tEmWC 2026-06-26 22:08:10 5395.4kH/s 3705015 6f448ff46d08 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-26 21:05:40 4856.9kH/s 3704988 b420bdbc3e3b 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-26 20:06:33 7296.1kH/s 3704948 dc02a50b334f 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-06-26 19:04:14 6811.7kH/s 3704921 04ed10f8628d 1/1 10 donor_whale +42Mk3F3y...Q6fgUTJr 2026-06-26 18:01:12 7055.3kH/s 3704897 d74f82bf6f70 1/1 10 donor_whale +42mefDQX...pJw9nygF 2026-06-26 16:58:16 6967.0kH/s 3704857 222d35d8ee37 1/1 10 donor_whale +45yonJgZ...41NDuzhs 2026-06-26 15:55:14 7050.3kH/s 3704834 d1faa08bcdcf 1/1 73 donor +47sctNyW...JBFt8g8K 2026-06-26 14:52:33 5307.9kH/s 3704803 17ea01377db2 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-26 13:49:59 4590.5kH/s 3704783 9cea29d7d0dc 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-26 12:50:37 6099.3kH/s 3704740 fbbb29c40520 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-06-26 11:47:12 6314.0kH/s 3704711 89d71ef56c0d 1/1 32 donor_vip +47d4QRof...jL5UqAKj 2026-06-26 10:44:32 5649.5kH/s 3704675 2933958a0f57 1/1 70 donor +48M2j8Gj...d8KgGBwa 2026-06-26 09:42:12 6820.6kH/s 3704649 6e0f106ff218 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-06-26 08:39:33 4903.8kH/s 3704617 91a3bc7543b1 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-26 07:36:39 5023.6kH/s 3704593 e06047d81ded 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-26 06:37:38 4309.3kH/s 3704563 4d97e760d61d 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-26 05:38:14 5964.7kH/s 3704530 e8dbb9dcadf9 1/1 1 donor_mega +49fV8TjN...GSgrDzrU 2026-06-26 04:36:08 4752.3kH/s 3704492 aca9c5cc5e71 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-26 03:33:52 4735.2kH/s 3704454 9fddb6e160c4 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-26 02:35:08 6361.2kH/s 3704429 2d81533ebf09 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-06-26 01:33:08 7025.5kH/s 3704399 9d7401cc3f4e 1/1 31 donor_vip +49fV8TjN...GSgrDzrU 2026-06-26 00:31:07 5753.7kH/s 3704376 bf121fcdba7b 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-25 23:28:36 5798.9kH/s 3704345 002ddc878e25 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-25 22:29:11 7513.0kH/s 3704324 67ff1c699fa9 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-06-25 21:27:11 5725.8kH/s 3704292 1b37214c7e0d 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-25 20:24:14 3600.8kH/s 3704261 cfef4a241a8c 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-06-25 18:13:12 6467.6kH/s 3704194 e94cc15e5173 1/1 10 donor_whale +42mefDQX...pJw9nygF 2026-06-25 17:10:13 6778.5kH/s 3704158 0e1a760d8e8c 1/1 10 donor_whale +44aZ9ce8...i1Hxzm1M 2026-06-25 16:07:13 5005.3kH/s 3704122 4406d3f80bb2 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-25 15:04:43 6309.1kH/s 3704088 da2c65fcb73b 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-06-25 14:01:13 3606.4kH/s 3704052 585462ee21aa 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-25 12:58:17 7055.6kH/s 3704018 b5b4873a93e9 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-06-25 11:55:13 6539.6kH/s 3703977 6b21b3172b49 1/1 71 donor +49fV8TjN...GSgrDzrU 2026-06-25 10:52:14 6160.6kH/s 3703951 affd6a57731a 1/1 10 donor_whale +43CcbPH8...uQWupVW5 2026-06-25 09:49:14 6655.5kH/s 3703920 7e35824d16b6 1/1 10 donor_whale +42mefDQX...pJw9nygF 2026-06-25 08:46:13 5021.0kH/s 3703885 18f4c62317ce 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-25 07:43:13 6442.1kH/s 3703844 fa22c5cf8987 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-06-25 06:40:32 6513.7kH/s 3703807 5cc6a7048c66 1/1 10 donor_whale +42NpvKMH...zAXwCRSb 2026-06-25 05:37:12 6274.9kH/s 3703782 a41671901dac 1/1 10 donor_whale +42cg1PYJ...o43XGcrP 2026-06-25 04:34:12 5059.1kH/s 3703754 33d5dedddfb7 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-25 03:31:35 4893.7kH/s 3703724 970f68d18ab0 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-25 02:33:08 6333.7kH/s 3703688 c428b6b1e2db 1/1 1 donor_mega +481ELpyU...mCQhPM2f 2026-06-25 01:31:08 6336.6kH/s 3703652 ba1e5e6501ca 1/1 32 donor_vip +42Mk3F3y...Q6fgUTJr 2026-06-25 00:29:09 6380.5kH/s 3703624 d7793e32a155 1/1 9 donor_whale +421n6hRs...61UsZuDG 2026-06-24 23:27:09 4709.9kH/s 3703601 21b3b7c6ef1b 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-24 22:24:40 4524.4kH/s 3703576 55a9f5484699 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-24 21:22:14 6619.6kH/s 3703551 10b211f0cdd3 1/1 1 donor_mega +47sctNyW...JBFt8g8K 2026-06-24 20:19:35 5065.7kH/s 3703532 9d98dc6c2037 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-24 19:16:12 6864.2kH/s 3703502 482a7a63d00e 1/1 1 donor_mega +49fV8TjN...GSgrDzrU 2026-06-24 18:13:33 6826.0kH/s 3703477 82054c9f958c 1/1 32 donor_vip +481ELpyU...mCQhPM2f 2026-06-24 17:10:13 6652.4kH/s 3703443 46eaef0b697f 1/1 33 donor_vip +42NpvKMH...zAXwCRSb 2026-06-24 16:08:11 4417.1kH/s 3703417 804451b6b226 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-24 15:05:13 6861.2kH/s 3703389 f13e31d010cd 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-06-24 14:02:13 6910.9kH/s 3703361 d86e7e678412 1/1 8 donor_whale diff --git a/docs/research/xvb-delivery-study/data/winners-20260810.txt b/docs/research/xvb-delivery-study/data/winners-20260810.txt new file mode 100644 index 00000000..e69de29b diff --git a/docs/research/xvb-delivery-study/data/winners-20260811.txt b/docs/research/xvb-delivery-study/data/winners-20260811.txt new file mode 100644 index 00000000..b9d821e4 --- /dev/null +++ b/docs/research/xvb-delivery-study/data/winners-20260811.txt @@ -0,0 +1,1000 @@ +464pdsyX...8QQVt1x3 2026-08-11 07:55:03 4925.4kH/s 3737685 274ebc849d7c 1/1 59 donor +48xVox2n...oQM27PR1 2026-08-11 06:53:04 4954.6kH/s 3737660 d67cccf7bec9 1/1 28 donor_vip +481ELpyU...mCQhPM2f 2026-08-11 05:51:02 4952.1kH/s 3737628 a20b0ea791b5 1/1 29 donor_vip +4B2Avc2j...5JCEaaNs 2026-08-11 04:49:03 5187.1kH/s 3737595 c020f965035e 1/1 30 donor_vip +46Rb9Hjc...57AFUnq5 2026-08-11 03:46:13 2942.9kH/s 3737557 5bd42195f47d 1/1 6 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-11 02:24:59 2770.1kH/s 3737527 4e631de7f3b6 1/1 1 donor_mega +4B2Avc2j...5JCEaaNs 2026-08-11 01:01:10 5044.6kH/s 3737486 960123b477e4 1/1 28 donor_vip +4AyiUbKF...uJpsC4ym 2026-08-10 23:59:00 2806.0kH/s 3737454 c5e2ae11d8b1 1/1 28 donor_vip +47NF5Nbe...nMs9DDJU 2026-08-10 20:44:00 2758.7kH/s 3737372 3cdf5e39f166 1/1 7 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-10 19:41:28 2939.4kH/s 3737342 9df5a41633cd 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-10 18:42:12 3514.3kH/s 3737307 773dcac50697 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-08-10 17:32:11 3618.3kH/s 3737274 65d9fd722eb4 1/1 6 donor_whale +42H6D3BE...68vGB73F 2026-08-10 16:18:00 3922.9kH/s 3737236 07a6c45fa539 1/1 28 donor_vip +42NpvKMH...zAXwCRSb 2026-08-10 15:15:10 3257.1kH/s 3737203 bdb17370c18b 1/1 28 donor_vip +48M2j8Gj...d8KgGBwa 2026-08-10 14:13:02 3649.3kH/s 3737177 1bcf2f4ca0fb 1/1 1 donor_mega +425vwgiR...JRene2gb 2026-08-10 12:52:07 3650.8kH/s 3737133 aac54c6c20a9 1/1 28 donor_vip +48M2j8Gj...d8KgGBwa 2026-08-10 11:30:04 3276.2kH/s 3737097 b58f7be7fb3e 1/1 5 donor_whale +46Rb9Hjc...57AFUnq5 2026-08-10 10:28:03 3630.9kH/s 3737061 935b734b0086 1/1 5 donor_whale +425vwgiR...JRene2gb 2026-08-10 09:26:01 3747.4kH/s 3737017 be3c00481b05 1/1 28 donor_vip +48M2j8Gj...d8KgGBwa 2026-08-10 08:23:15 3882.6kH/s 3736979 ea566f892d1f 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-08-10 07:20:15 3773.4kH/s 3736938 87f906212f5d 1/1 26 donor_vip +487SyiQC...aSGcaBDE 2026-08-10 06:18:02 3290.3kH/s 3736911 6a53c1e18a9d 1/1 26 donor_vip +48M2j8Gj...d8KgGBwa 2026-08-10 05:16:02 3402.6kH/s 3736877 a93d8666bdc5 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-08-10 04:14:03 3536.6kH/s 3736840 ef90275f5ba0 1/1 65 donor +48M2j8Gj...d8KgGBwa 2026-08-10 03:11:29 3768.7kH/s 3736813 b0fac2e8d99b 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-10 01:55:30 3758.0kH/s 3736771 44bbaaf98227 1/1 5 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-10 00:57:01 2899.3kH/s 3736735 109639a859dd 1/1 1 donor_mega +48LNi6pk...5DomVmR2 2026-08-09 23:55:01 2766.8kH/s 3736697 643811f33f5c 1/1 5 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-09 22:52:27 3017.8kH/s 3736669 12efde5c560f 1/1 5 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-09 21:53:27 2690.1kH/s 3736635 8d449519b62e 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-09 20:54:39 3579.0kH/s 3736609 eee51d1a9770 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-09 19:56:02 2840.2kH/s 3736586 bfdb70b0098e 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-08-09 18:54:04 2769.1kH/s 3736557 8e6face5c5f4 1/1 5 donor_whale +42NpvKMH...zAXwCRSb 2026-08-09 17:52:05 3112.3kH/s 3736527 f29e85197e40 1/1 5 donor_whale +48LNi6pk...5DomVmR2 2026-08-09 16:49:13 2926.2kH/s 3736493 1793092885c8 1/1 6 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-09 15:46:39 2882.3kH/s 3736473 6af82273713a 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-09 14:48:02 2460.6kH/s 3736446 902d3b0fd2c1 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-08-09 12:01:02 2903.8kH/s 3736358 f9b2502d266e 1/1 8 donor_whale +45wQcnHH...kR5qUREN 2026-08-09 10:59:03 3142.6kH/s 3736312 d1aa8ecb6dd8 1/1 27 donor_vip +44aZ9ce8...i1Hxzm1M 2026-08-09 09:57:04 2745.4kH/s 3736282 5a58a6690afd 1/1 26 donor_vip +42NpvKMH...zAXwCRSb 2026-08-09 08:44:18 3225.4kH/s 3736243 0a4ff11c1cb4 1/1 8 donor_whale +42mefDQX...pJw9nygF 2026-08-09 07:42:03 3639.7kH/s 3736213 28975eee27e2 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-09 06:39:28 3733.2kH/s 3736182 2becb1eeaef2 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-09 05:41:03 3618.6kH/s 3736153 96fcd061c029 1/1 1 donor_mega +42m2kLta...aDULT2Qj 2026-08-09 04:38:13 3868.1kH/s 3736122 fdf53c3f2d72 1/1 27 donor_vip +4B2Avc2j...5JCEaaNs 2026-08-09 03:35:59 3969.4kH/s 3736096 9eb804caf0fa 1/1 28 donor_vip +48M2j8Gj...d8KgGBwa 2026-08-09 02:34:01 3803.2kH/s 3736060 a329815ede77 1/1 6 donor_whale +42NpvKMH...zAXwCRSb 2026-08-09 01:14:01 3558.2kH/s 3736007 cb065c4f1bd3 1/1 6 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-09 00:11:30 3944.9kH/s 3735982 dae40c2706d1 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-08 23:13:02 3875.1kH/s 3735948 ec04cf73bf72 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-08-08 22:11:01 4016.8kH/s 3735923 0a8b1a8352c6 1/1 6 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-08 20:54:02 4154.6kH/s 3735890 cc85273d2543 1/1 1 donor_mega +4B2Avc2j...5JCEaaNs 2026-08-08 19:52:02 4223.9kH/s 3735863 4659d56c73de 1/1 28 donor_vip +47NF5Nbe...nMs9DDJU 2026-08-08 18:50:00 3589.2kH/s 3735829 7fbe93dad890 1/1 27 donor_vip +46PsTAqp...o2VDhm5j 2026-08-08 17:48:00 3293.4kH/s 3735798 02b3255a9efa 1/1 27 donor_vip +421n6hRs...61UsZuDG 2026-08-08 16:46:02 3380.6kH/s 3735774 725c3162d51a 1/1 6 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-08 15:43:28 3112.3kH/s 3735745 dea7ce19a1ff 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-08 14:45:01 3393.8kH/s 3735705 c0ce807216fb 1/1 5 donor_whale +42NpvKMH...zAXwCRSb 2026-08-08 13:43:05 3264.4kH/s 3735674 c64ae9c8d553 1/1 28 donor_vip +48LNi6pk...5DomVmR2 2026-08-08 12:41:03 3597.1kH/s 3735649 8be3294ec515 1/1 5 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-08 11:38:32 3153.2kH/s 3735626 18b9d8025454 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-08 10:39:30 3381.1kH/s 3735604 9fd57ea3a519 1/1 5 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-08 09:40:35 3311.9kH/s 3735577 058a3d9de4ed 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-08 08:41:27 3177.6kH/s 3735545 d1575fd39995 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-08 07:42:28 2640.1kH/s 3735520 bb798f6b3a7d 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-08 06:43:28 3112.3kH/s 3735498 b09726ba5c74 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-08 05:45:01 2909.1kH/s 3735470 32ab7931b090 1/1 1 donor_mega +4AGJScWS...f6SvY5p5 2026-08-08 04:42:56 3080.1kH/s 3735433 b641d41320c0 1/1 4 mvp +48M2j8Gj...d8KgGBwa 2026-08-08 03:40:58 3192.4kH/s 3735394 050811453aff 1/1 1 donor_mega +43tg9ebV...GLspBx9P 2026-08-08 02:38:10 2962.0kH/s 3735354 7ff09f512c91 1/1 28 donor_vip +46Rb9Hjc...57AFUnq5 2026-08-08 01:35:10 2896.1kH/s 3735309 78534a33e872 1/1 5 donor_whale +47sctNyW...JBFt8g8K 2026-08-08 00:33:01 3003.4kH/s 3735269 a4c107f48827 1/1 26 donor_vip +48M2j8Gj...d8KgGBwa 2026-08-07 23:25:00 3054.3kH/s 3735230 ec169764085c 1/1 1 donor_mega +43tg9ebV...GLspBx9P 2026-08-07 21:37:01 2963.3kH/s 3735178 103288760694 1/1 27 donor_vip +4AYJotaL...USi2XQ7u 2026-08-07 20:34:12 2827.3kH/s 3735148 99bf931da79f 1/1 27 donor_vip +43nvW9WJ...e7SmCf3o 2026-08-07 19:32:11 3242.2kH/s 3735113 4b4dc58c8320 1/1 28 donor_vip +42NpvKMH...zAXwCRSb 2026-08-07 17:50:03 2878.7kH/s 3735062 9ed9b7e7d486 1/1 5 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-07 16:26:40 2907.4kH/s 3735022 920642ca9bae 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-07 15:21:01 3215.8kH/s 3734990 fee9703732fe 1/1 1 donor_mega +48xVox2n...oQM27PR1 2026-08-07 14:19:01 2825.6kH/s 3734958 79003b80712e 1/1 27 donor_vip +47NF5Nbe...nMs9DDJU 2026-08-07 13:17:01 2874.5kH/s 3734916 4478da30e5cc 1/1 5 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-07 09:40:02 3121.8kH/s 3734812 27cf3eeaede4 1/1 1 donor_mega +42m2kLta...aDULT2Qj 2026-08-07 08:29:04 2941.5kH/s 3734784 38419dd1e383 1/1 28 donor_vip +48M2j8Gj...d8KgGBwa 2026-08-07 04:26:26 2835.6kH/s 3734685 ea98ef282068 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-07 03:28:00 3278.9kH/s 3734645 dec01c253e62 1/1 1 donor_mega +4AeEwC2U...YQyoQtr7 2026-08-07 02:25:56 3645.2kH/s 3734612 accf3e499d8c 1/1 4 mvp +48iicDmb...6Fbzo28A 2026-08-07 01:24:01 3339.2kH/s 3734582 c26c7a3303a0 1/1 65 donor +48wF5CTP...zF7tEmWC 2026-08-07 00:22:00 3310.9kH/s 3734546 10b3d6423234 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-06 23:20:00 3515.3kH/s 3734524 ad3007d647fa 1/1 1 donor_mega +45wQcnHH...kR5qUREN 2026-08-06 19:31:59 3471.9kH/s 3734428 be48002cb1ce 1/1 68 donor +48M2j8Gj...d8KgGBwa 2026-08-06 18:29:26 3319.3kH/s 3734401 df4d76fabab2 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-06 16:22:27 3400.4kH/s 3734335 88edc7add175 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-06 15:24:01 3508.9kH/s 3734313 45e7e45d6ac6 1/1 1 donor_mega +48LNi6pk...5DomVmR2 2026-08-06 14:01:02 3536.5kH/s 3734265 c24f5cf60669 1/1 7 donor_whale +42NpvKMH...zAXwCRSb 2026-08-06 12:58:12 3129.3kH/s 3734226 18fdb9b9da29 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-08-06 11:55:27 3144.0kH/s 3734200 290c512f0c99 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-06 10:57:02 3461.6kH/s 3734161 b1b8b121c254 1/1 1 donor_mega +48LNi6pk...5DomVmR2 2026-08-06 08:25:01 3701.5kH/s 3734081 1b5e1e76c371 1/1 7 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-06 07:23:00 3662.5kH/s 3734039 edb1110efa97 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-08-06 06:21:00 5344.7kH/s 3734001 b0baf50364a2 1/1 11 donor_whale +46Rb9Hjc...57AFUnq5 2026-08-06 05:19:00 4377.4kH/s 3733977 6c01a68069b4 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-06 04:17:10 5978.5kH/s 3733952 b3a341299377 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-08-06 03:15:02 4697.3kH/s 3733916 ed990864d0e4 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-06 02:12:59 6019.9kH/s 3733887 ced10f07774a 1/1 1 donor_mega +44MnN1f3...a621jwyg 2026-08-06 01:10:56 4973.5kH/s 3733845 0afa868e1437 1/1 4 mvp +48M2j8Gj...d8KgGBwa 2026-08-06 00:08:59 6031.1kH/s 3733826 3554a636d890 1/1 1 donor_mega +421n6hRs...61UsZuDG 2026-08-05 23:07:01 4684.4kH/s 3733804 65337ffbae4a 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-05 22:05:00 5937.3kH/s 3733774 2d61f0f40875 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-08-05 21:03:01 4805.0kH/s 3733744 398f9349da9e 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-05 20:01:02 4104.7kH/s 3733713 48a001f2982e 1/1 1 donor_mega +49fV8TjN...GSgrDzrU 2026-08-05 18:19:01 4371.7kH/s 3733659 37acb999827f 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-05 17:09:00 3839.7kH/s 3733630 b0cd2db7478c 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-08-05 15:06:59 3713.7kH/s 3733560 166137eb8340 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-05 12:28:36 3267.5kH/s 3733485 097b16e40e59 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-05 09:58:37 3663.2kH/s 3733400 8bb5b2beef60 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-05 08:36:26 4517.8kH/s 3733355 ba5082ff1f8f 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-05 07:38:01 6404.4kH/s 3733318 848d6776d2d1 1/1 1 donor_mega +4AeEwC2U...YQyoQtr7 2026-08-05 06:35:57 6324.1kH/s 3733289 fd86ab25852a 1/1 4 mvp +48iicDmb...6Fbzo28A 2026-08-05 05:34:01 4111.4kH/s 3733258 b3d97ed9aa06 1/1 68 donor +42Mk3F3y...Q6fgUTJr 2026-08-05 04:19:09 5703.8kH/s 3733214 2278e4798002 1/1 27 donor_vip +43CcbPH8...uQWupVW5 2026-08-05 03:17:00 4910.4kH/s 3733181 b7a1cb5bcf59 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-05 02:14:28 4564.5kH/s 3733154 0f04ccf91023 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-05 01:15:13 5520.9kH/s 3733121 7afa4bc7af8d 1/1 1 donor_mega +48LNi6pk...5DomVmR2 2026-08-05 00:12:59 5246.3kH/s 3733091 de66ce9edc68 1/1 11 donor_whale +49fV8TjN...GSgrDzrU 2026-08-04 23:11:00 5788.1kH/s 3733062 02f9f2ac6c0c 1/1 11 donor_whale +4AuNNHgo...n8VXcgEe 2026-08-04 22:09:00 5773.0kH/s 3733038 59078085c95d 1/1 28 donor_vip +42m2kLta...aDULT2Qj 2026-08-04 21:07:00 5984.1kH/s 3733008 2e8ae6a19b72 1/1 27 donor_vip +42NpvKMH...zAXwCRSb 2026-08-04 20:05:00 4625.3kH/s 3732989 8cfe0e7bc1cf 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-04 19:02:28 4894.6kH/s 3732955 646f1a1bac15 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-04 18:04:03 5982.5kH/s 3732920 9ba24844fe5f 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-08-04 17:01:59 3900.3kH/s 3732897 7a8852589207 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-04 15:25:00 6080.9kH/s 3732858 1e571ea071e0 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-08-04 14:22:59 5951.9kH/s 3732830 1da0a63abb52 1/1 28 donor_vip +46Rb9Hjc...57AFUnq5 2026-08-04 13:21:08 5059.6kH/s 3732798 740a74321946 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-04 12:19:01 6285.8kH/s 3732765 6346093b4b2d 1/1 9 donor_whale +421n6hRs...61UsZuDG 2026-08-04 11:17:00 4672.1kH/s 3732724 d7d1a1bcc773 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-04 10:14:30 5198.1kH/s 3732695 2dbff20623e3 1/1 26 donor_vip +48M2j8Gj...d8KgGBwa 2026-08-04 09:15:44 4769.8kH/s 3732675 999e5e36f514 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-04 08:16:31 4922.8kH/s 3732645 3116e2a3acb4 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-04 07:17:35 4214.4kH/s 3732620 9651651924ed 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-04 06:19:07 5710.6kH/s 3732578 5cd824f2b6de 1/1 1 donor_mega +421n6hRs...61UsZuDG 2026-08-04 05:16:21 4300.8kH/s 3732539 8c4bb5abb016 1/1 26 donor_vip +48M2j8Gj...d8KgGBwa 2026-08-04 04:14:18 5681.0kH/s 3732505 87872ab2db13 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-08-04 03:12:01 4692.2kH/s 3732487 a5ddc9b8cb79 1/1 68 donor +48M2j8Gj...d8KgGBwa 2026-08-04 02:09:40 4606.7kH/s 3732455 a4a3b380ec79 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-04 01:11:01 6040.9kH/s 3732427 ecae1a4d62d0 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-08-04 00:09:02 4709.8kH/s 3732397 42c1c39542c4 1/1 67 donor +48M2j8Gj...d8KgGBwa 2026-08-03 23:06:13 5861.4kH/s 3732359 d28fc5e9f203 1/1 1 donor_mega +4B2Avc2j...5JCEaaNs 2026-08-03 22:03:18 5653.6kH/s 3732326 29ea43b12fd9 1/1 27 donor_vip +49YoCEDi...x97dHeGQ 2026-08-03 21:01:03 5258.7kH/s 3732286 b348a6d619cb 1/1 28 donor_vip +43tg9ebV...GLspBx9P 2026-08-03 19:59:06 5760.0kH/s 3732264 91d12269741c 1/1 28 donor_vip +42mefDQX...pJw9nygF 2026-08-03 18:57:02 4729.7kH/s 3732235 84c584ff72f9 1/1 12 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-03 17:55:04 6392.3kH/s 3732213 4ce709478ad3 1/1 1 donor_mega +4B2Avc2j...5JCEaaNs 2026-08-03 16:53:07 6185.2kH/s 3732175 b651f1edbc30 1/1 12 donor_whale +48wF5CTP...zF7tEmWC 2026-08-03 15:51:02 3699.7kH/s 3732145 d56dc08ea269 1/1 12 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-03 14:14:03 6073.0kH/s 3732109 a5719b25d36c 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-08-03 13:12:07 4805.5kH/s 3732076 4863e9f2f798 1/1 12 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-03 12:09:29 4893.5kH/s 3732049 e8fa24d95fd6 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-03 11:10:43 4199.4kH/s 3732017 b75ad1bc1c4d 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-03 08:32:13 6233.3kH/s 3731922 d9950bafbfcc 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-08-03 07:30:03 5865.0kH/s 3731888 3f9c4db049f8 1/1 12 donor_whale +47NF5Nbe...nMs9DDJU 2026-08-03 06:28:02 4713.6kH/s 3731854 9d964d6a648b 1/1 12 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-03 05:25:29 5043.2kH/s 3731830 11a3d7d4c4fb 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-03 04:26:28 4719.6kH/s 3731798 5e9ef6b540d2 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-03 03:28:03 5199.8kH/s 3731766 2c33a5998093 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-08-03 02:26:02 4742.2kH/s 3731732 5bc6706aa1b2 1/1 13 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-03 01:24:03 6000.7kH/s 3731707 d5f4d770974a 1/1 1 donor_mega +4B2Avc2j...5JCEaaNs 2026-08-03 00:22:01 5125.7kH/s 3731673 c02b377dc667 1/1 13 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-02 23:19:09 4643.3kH/s 3731648 476af7d92b47 1/1 1 donor_mega +48LNi6pk...5DomVmR2 2026-08-02 22:00:02 4996.1kH/s 3731602 6f36e744e0e5 1/1 13 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-02 20:58:03 6325.0kH/s 3731575 70af188a8e3d 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-08-02 19:56:02 5036.9kH/s 3731542 c7a057a52ac8 1/1 12 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-02 18:54:04 5746.7kH/s 3731516 fcc0bbf16add 1/1 1 donor_mega +45qivXhp...BSS1mtoq 2026-08-02 17:52:02 4381.6kH/s 3731483 31880406b4f3 1/1 29 donor_vip +48M2j8Gj...d8KgGBwa 2026-08-02 16:49:32 4993.1kH/s 3731461 0c0bd33c6913 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-02 15:51:03 5913.8kH/s 3731433 509703043f79 1/1 1 donor_mega +45xA3Kgd...7Ma7ttaf 2026-08-02 14:48:14 4680.4kH/s 3731392 d2db8559ac56 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-08-02 13:46:03 6087.7kH/s 3731362 4f654ce35d9f 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-08-02 12:44:04 6109.2kH/s 3731335 0b6c8fce8bf1 1/1 11 donor_whale +464Bdn7D...wTbYVfF1 2026-08-02 11:42:04 4871.3kH/s 3731302 d4e4e15d7790 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-08-02 10:39:14 6038.9kH/s 3731272 9ab60d422b37 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-08-02 09:36:28 6151.4kH/s 3731255 fa1591d46a4d 1/1 32 donor_vip +42NpvKMH...zAXwCRSb 2026-08-02 08:37:14 4839.1kH/s 3731234 09eac8f7a913 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-02 07:35:02 5673.8kH/s 3731199 ab14640f4711 1/1 1 donor_mega +49fV8TjN...GSgrDzrU 2026-08-02 06:33:00 5817.7kH/s 3731171 aa2848c4ad65 1/1 12 donor_whale +43nvW9WJ...e7SmCf3o 2026-08-02 05:31:01 4810.8kH/s 3731140 7d8da011425b 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-08-02 04:28:27 4649.0kH/s 3731115 1891259c67ad 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-02 03:29:59 5801.7kH/s 3731096 115611c3cc7b 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-08-02 02:28:06 4056.2kH/s 3731076 cc4047e26765 1/1 12 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-02 01:25:35 4588.3kH/s 3731047 f5e60d55f38f 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-02 00:26:34 4828.3kH/s 3731025 49b84d8ea745 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-01 23:27:59 5592.5kH/s 3730997 436a2e394e57 1/1 1 donor_mega +48LNi6pk...5DomVmR2 2026-08-01 22:26:02 5634.4kH/s 3730966 a06ad1657a54 1/1 12 donor_whale +48wF5CTP...zF7tEmWC 2026-08-01 21:24:01 5046.5kH/s 3730908 d9720bb7bdbe 1/1 12 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-01 20:21:16 6262.1kH/s 3730866 709c4007dfaa 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-08-01 19:19:01 6015.7kH/s 3730838 b83575d7b896 1/1 31 donor_vip +48wF5CTP...zF7tEmWC 2026-08-01 18:16:13 5560.2kH/s 3730804 b258eb4cbafb 1/1 12 donor_whale +49fSMFrM...c8i6VN6W 2026-08-01 17:13:10 4851.3kH/s 3730777 783c8625945a 1/1 73 donor +48M2j8Gj...d8KgGBwa 2026-08-01 16:10:28 4573.3kH/s 3730736 68b289eaa524 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-01 15:11:26 4289.6kH/s 3730702 624d82c2fc4f 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-01 14:12:27 4442.9kH/s 3730670 9d263791585b 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-01 13:14:03 5913.4kH/s 3730628 190980976116 1/1 1 donor_mega +4B2Avc2j...5JCEaaNs 2026-08-01 12:12:01 5636.2kH/s 3730593 596f02e8be9d 1/1 12 donor_whale +4AYJotaL...USi2XQ7u 2026-08-01 11:10:00 6189.8kH/s 3730561 86df4788f920 1/1 73 donor +42NpvKMH...zAXwCRSb 2026-08-01 10:08:03 5228.3kH/s 3730526 acbcd1c9d622 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-01 09:05:28 5121.2kH/s 3730491 5c8834bfe8ad 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-01 08:06:13 6130.5kH/s 3730458 2ad86adc9800 1/1 1 donor_mega +48xVox2n...oQM27PR1 2026-08-01 07:04:01 5991.4kH/s 3730423 5219af491e93 1/1 27 donor_vip +43CcbPH8...uQWupVW5 2026-08-01 06:02:00 6341.9kH/s 3730391 994b6cb19462 1/1 11 donor_whale +46Rb9Hjc...57AFUnq5 2026-08-01 05:00:00 5293.7kH/s 3730373 ca46424ef040 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-01 03:57:25 5412.4kH/s 3730346 0bb6d8c29a4a 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-01 02:59:00 6054.6kH/s 3730319 cc40499d15ee 1/1 1 donor_mega +49fV8TjN...GSgrDzrU 2026-08-01 01:56:58 6072.3kH/s 3730280 bdacc98099f8 1/1 11 donor_whale +42Mk3F3y...Q6fgUTJr 2026-08-01 00:55:01 5771.5kH/s 3730246 a65cef6fc99e 1/1 11 donor_whale +4B2Avc2j...5JCEaaNs 2026-07-31 23:52:10 4308.9kH/s 3730223 d7d0fafa2da8 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-31 22:50:01 5843.2kH/s 3730196 3071b0f5c86c 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-07-31 21:47:31 5922.4kH/s 3730156 2cf10a96652b 1/1 11 donor_whale +47NF5Nbe...nMs9DDJU 2026-07-31 20:49:03 4750.5kH/s 3730121 dffb51a21341 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-31 19:47:03 5647.0kH/s 3730101 05c020d9b914 1/1 1 donor_mega +4B9oJwgd...sPp6joE1 2026-07-31 18:44:56 5993.1kH/s 3730080 3ce3cbaf769e 1/1 176 vip +48LNi6pk...5DomVmR2 2026-07-31 17:43:04 4637.2kH/s 3730051 8c9d97f967dd 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-31 16:40:19 5644.5kH/s 3730026 79e07d52373e 1/1 1 donor_mega +43CcbPH8...uQWupVW5 2026-07-31 15:38:01 5851.9kH/s 3729999 7c4952c75882 1/1 11 donor_whale +48wF5CTP...zF7tEmWC 2026-07-31 14:35:12 5678.2kH/s 3729973 f66ee7b8d61c 1/1 11 donor_whale +49fV8TjN...GSgrDzrU 2026-07-31 13:33:00 5682.9kH/s 3729940 ce2beb19813a 1/1 11 donor_whale +48wF5CTP...zF7tEmWC 2026-07-31 12:30:12 4565.6kH/s 3729906 edc7e4829da3 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-31 11:28:01 5850.9kH/s 3729863 3a9374bf338b 1/1 1 donor_mega +48LNi6pk...5DomVmR2 2026-07-31 10:26:00 4509.4kH/s 3729831 cbc5b7258d11 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-31 09:24:02 5863.5kH/s 3729788 a7d28269f920 1/1 1 donor_mega +43CcbPH8...uQWupVW5 2026-07-31 08:21:14 4662.9kH/s 3729763 b9abc710d0f6 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-31 07:18:39 3356.3kH/s 3729737 18d4bb8cbc31 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-31 05:57:00 5666.3kH/s 3729684 ff8e7b23403d 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-07-31 04:54:59 3965.2kH/s 3729654 d4fbf85a6d0d 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-31 03:29:10 6337.9kH/s 3729612 91312e7b2025 1/1 11 donor_whale +48LNi6pk...5DomVmR2 2026-07-31 02:27:01 4989.0kH/s 3729573 9973ced663d1 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-31 01:24:27 4722.8kH/s 3729548 2f312dc7ea1d 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-31 00:25:26 4594.2kH/s 3729521 80107dcdd513 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-30 23:27:00 6129.5kH/s 3729489 76028171b8d3 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-07-30 22:24:14 6128.2kH/s 3729458 c6a531e1691b 1/1 11 donor_whale +42Mk3F3y...Q6fgUTJr 2026-07-30 21:22:02 4986.1kH/s 3729431 d355dbc04d3f 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-30 20:20:03 5649.5kH/s 3729403 2394df6a1c70 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-30 19:11:05 6378.5kH/s 3729367 22b11454a220 1/1 11 donor_whale +43CcbPH8...uQWupVW5 2026-07-30 18:09:09 6468.6kH/s 3729339 60a6ec305e37 1/1 11 donor_whale +42Mk3F3y...Q6fgUTJr 2026-07-30 17:07:02 4920.2kH/s 3729309 e4e811f9d612 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-30 16:05:03 5303.5kH/s 3729283 187f6abe695e 1/1 1 donor_mega +43CcbPH8...uQWupVW5 2026-07-30 15:02:12 4676.8kH/s 3729258 6d87e71b80d1 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-30 13:59:39 4585.2kH/s 3729231 e73b8ceb19e0 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-30 13:01:01 5876.6kH/s 3729202 99f3f1583580 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-07-30 11:59:03 5395.7kH/s 3729169 09a44799c73c 1/1 11 donor_whale +42NpvKMH...zAXwCRSb 2026-07-30 10:57:09 6009.4kH/s 3729139 93991a64be6d 1/1 11 donor_whale +42Mk3F3y...Q6fgUTJr 2026-07-30 09:54:59 5649.8kH/s 3729103 a1eac1baf7d1 1/1 11 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-30 08:53:01 4956.4kH/s 3729070 058309b3e9a5 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-30 07:50:29 4932.1kH/s 3729033 5c8741ec447c 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-30 06:51:59 6230.6kH/s 3728993 c6f851086803 1/1 1 donor_mega +45qivXhp...BSS1mtoq 2026-07-30 05:50:02 4459.1kH/s 3728958 0ebc874018a9 1/1 33 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-30 04:47:28 4323.8kH/s 3728936 fc026033e4c8 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-30 03:49:00 5952.9kH/s 3728912 c47af4d47503 1/1 1 donor_mega +421n6hRs...61UsZuDG 2026-07-30 02:47:00 6027.7kH/s 3728894 225092b75c51 1/1 11 donor_whale +42mefDQX...pJw9nygF 2026-07-30 01:45:01 5674.3kH/s 3728868 4c689c6e7bc7 1/1 11 donor_whale +43CcbPH8...uQWupVW5 2026-07-30 00:43:00 5849.3kH/s 3728826 e2e69f3facb3 1/1 11 donor_whale +481ELpyU...mCQhPM2f 2026-07-29 23:41:00 5538.6kH/s 3728785 79ac12977dff 1/1 32 donor_vip +45qivXhp...BSS1mtoq 2026-07-29 22:38:10 4637.7kH/s 3728751 144b310692be 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-29 21:36:02 5799.6kH/s 3728714 8a3e527a2409 1/1 1 donor_mega +421n6hRs...61UsZuDG 2026-07-29 20:33:17 5822.5kH/s 3728684 4176d740d2cf 1/1 34 donor_vip +48wF5CTP...zF7tEmWC 2026-07-29 19:31:02 4210.7kH/s 3728652 edbb72168688 1/1 32 donor_vip +42Mk3F3y...Q6fgUTJr 2026-07-29 18:13:02 5186.9kH/s 3728606 77058dabafda 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-29 17:10:40 5066.9kH/s 3728570 3064bdc4a7ed 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-29 16:12:02 5953.1kH/s 3728540 b348d893a43e 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-29 15:10:01 4708.5kH/s 3728505 1161b8e7a2a6 1/1 33 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-29 14:07:28 3816.0kH/s 3728472 51e9432f7d7a 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-29 12:21:28 4542.7kH/s 3728416 45a1181adc16 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-29 11:22:28 4355.2kH/s 3728378 cada8e88b219 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-29 10:24:01 5573.3kH/s 3728335 f18ce5ce5cec 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-07-29 09:22:07 3820.6kH/s 3728309 62a2ea0dd779 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-29 07:54:06 5943.4kH/s 3728251 7bf1f87d2003 1/1 1 donor_mega +49fV8TjN...GSgrDzrU 2026-07-29 06:52:02 4505.1kH/s 3728219 b9f37c4f8989 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-29 05:49:28 4310.1kH/s 3728193 a085ca1ea1fc 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-29 04:51:00 6140.0kH/s 3728160 38da68ca5840 1/1 1 donor_mega +464pdsyX...8QQVt1x3 2026-07-29 03:49:00 5731.5kH/s 3728132 20622ea9deea 1/1 70 donor +47NF5Nbe...nMs9DDJU 2026-07-29 02:47:01 5525.8kH/s 3728100 07c3a7dad621 1/1 9 donor_whale +45P4vJUA...TE4PUAu9 2026-07-29 01:44:55 5016.9kH/s 3728071 6998955ef2d1 1/1 167 vip +48M2j8Gj...d8KgGBwa 2026-07-29 00:42:38 4868.7kH/s 3728053 cb065a9c3967 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-28 23:44:02 5389.2kH/s 3728025 ab05415c2b1b 1/1 1 donor_mega +45qivXhp...BSS1mtoq 2026-07-28 22:41:10 5692.6kH/s 3728001 68a011e39053 1/1 31 donor_vip +48xVox2n...oQM27PR1 2026-07-28 21:39:00 5309.7kH/s 3727981 992aa5435e68 1/1 69 donor +4B2Avc2j...5JCEaaNs 2026-07-28 20:36:17 5279.3kH/s 3727951 1d72b8edc030 1/1 31 donor_vip +46Rb9Hjc...57AFUnq5 2026-07-28 19:34:03 3345.4kH/s 3727933 9514ed3ccaf2 1/1 31 donor_vip +4AYJotaL...USi2XQ7u 2026-07-28 17:43:02 4574.4kH/s 3727884 6d91e59e8633 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-28 16:41:05 5671.3kH/s 3727856 0bc82def1d08 1/1 1 donor_mega +481ELpyU...mCQhPM2f 2026-07-28 15:39:07 3677.8kH/s 3727834 868acf8de1e0 1/1 31 donor_vip +421n6hRs...61UsZuDG 2026-07-28 13:12:26 5658.3kH/s 3727773 70a65ea5e032 1/1 7 donor_whale +421n6hRs...61UsZuDG 2026-07-28 12:14:03 4776.6kH/s 3727744 de81dcc04c5f 1/1 7 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-28 11:12:00 6090.1kH/s 3727713 f3e2a0154c6d 1/1 1 donor_mega +45wQcnHH...kR5qUREN 2026-07-28 10:09:10 6301.2kH/s 3727682 f0f0f913705b 1/1 30 donor_vip +42NpvKMH...zAXwCRSb 2026-07-28 09:07:03 4890.1kH/s 3727645 0793fe1b9729 1/1 5 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-28 08:05:01 5952.8kH/s 3727611 6f345ca56d09 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-07-28 07:03:01 4896.2kH/s 3727583 e697113905a8 1/1 5 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-28 06:00:29 4755.6kH/s 3727557 8abbbe7c75b6 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-28 05:02:00 6010.8kH/s 3727526 6ca6a8aaca32 1/1 1 donor_mega +48LNi6pk...5DomVmR2 2026-07-28 04:00:00 4495.1kH/s 3727488 d8984507428a 1/1 5 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-28 02:57:27 4577.6kH/s 3727460 81deef289b97 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-28 01:58:26 4641.0kH/s 3727428 af4cf8a3f2ac 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-28 00:59:27 4354.0kH/s 3727395 fe64f01f1aac 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-28 00:00:29 4439.4kH/s 3727360 0e3b4521acd1 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-27 23:01:27 4485.3kH/s 3727328 7db427c7714d 1/1 5 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-27 22:02:12 5202.4kH/s 3727304 5faa9f8577ba 1/1 1 donor_mega +43tg9ebV...GLspBx9P 2026-07-27 21:00:02 3956.0kH/s 3727278 6ed840e22290 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-27 19:57:27 4382.1kH/s 3727252 504b5cf93efe 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-27 18:59:03 5351.0kH/s 3727239 3d383e77ec44 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-07-27 17:57:01 4937.1kH/s 3727203 1fd88daa1f49 1/1 5 donor_whale +42NpvKMH...zAXwCRSb 2026-07-27 16:55:03 3787.3kH/s 3727183 89527357cc11 1/1 5 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-27 15:52:28 2754.3kH/s 3727146 2b40ad29af20 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-27 14:12:11 4180.3kH/s 3727106 b9095b3700c6 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-07-27 13:10:03 4939.1kH/s 3727084 ae674dbff61f 1/1 5 donor_whale +48wF5CTP...zF7tEmWC 2026-07-27 12:08:01 4913.9kH/s 3727055 4ece5804c111 1/1 31 donor_vip +4AyiUbKF...uJpsC4ym 2026-07-27 11:06:01 3307.2kH/s 3727029 695ab34411fd 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-27 10:04:02 5092.8kH/s 3726994 b676ce3d9c1a 1/1 1 donor_mega +43nvW9WJ...e7SmCf3o 2026-07-27 09:02:01 4866.3kH/s 3726966 28baf765b943 1/1 30 donor_vip +42NpvKMH...zAXwCRSb 2026-07-27 07:59:25 2480.8kH/s 3726936 4293491a1a33 1/1 5 donor_whale +42NpvKMH...zAXwCRSb 2026-07-27 06:34:02 3725.9kH/s 3726891 7e24c0740589 1/1 5 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-27 05:31:27 3081.6kH/s 3726862 f0ff08618b77 1/1 5 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-27 04:22:26 3916.8kH/s 3726837 0cf2fd8034e3 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-27 03:24:00 4777.2kH/s 3726816 dc7ae22a0d5c 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-07-27 02:21:59 5133.8kH/s 3726787 1d92b0c93134 1/1 9 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-27 01:19:09 3996.6kH/s 3726758 ccebed353c33 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-27 00:16:59 5510.5kH/s 3726729 7ab0268f51e4 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-26 23:14:12 5529.2kH/s 3726693 355a4643780b 1/1 9 donor_whale +48LNi6pk...5DomVmR2 2026-07-26 22:11:58 4359.3kH/s 3726657 ff55d1517f46 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-26 21:09:15 5480.6kH/s 3726615 4d2b474a6d9b 1/1 1 donor_mega +4AYJotaL...USi2XQ7u 2026-07-26 20:07:00 5080.1kH/s 3726562 5a845fa9ce2f 1/1 34 donor_vip +43nvW9WJ...e7SmCf3o 2026-07-26 19:05:01 5829.5kH/s 3726510 a34fe1f11ec5 1/1 34 donor_vip +42NpvKMH...zAXwCRSb 2026-07-26 18:03:00 5300.4kH/s 3726463 edcb02862434 1/1 32 donor_vip +47NF5Nbe...nMs9DDJU 2026-07-26 17:01:00 5515.8kH/s 3726426 f35a9b41e28f 1/1 9 donor_whale +49fV8TjN...GSgrDzrU 2026-07-26 15:59:03 5543.8kH/s 3726392 d749d1f8c344 1/1 9 donor_whale +464Bdn7D...wTbYVfF1 2026-07-26 14:56:14 5395.6kH/s 3726360 3e1bd0ed947b 1/1 34 donor_vip +421n6hRs...61UsZuDG 2026-07-26 13:54:01 5400.9kH/s 3726325 fbfe68991165 1/1 34 donor_vip +4AGJScWS...f6SvY5p5 2026-07-26 12:51:56 4521.1kH/s 3726297 56f2a33b1d70 1/1 4 mvp +48M2j8Gj...d8KgGBwa 2026-07-26 11:50:01 3357.4kH/s 3726272 623e471b4a10 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-07-26 10:03:00 4707.8kH/s 3726222 9951637264ef 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-26 09:00:27 3246.5kH/s 3726189 7bba268a7a6d 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-26 07:36:37 4424.4kH/s 3726132 19e0a6f6568a 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-26 06:37:27 5033.7kH/s 3726098 b6229cfc474a 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-26 05:38:27 4990.5kH/s 3726070 aa5f69ccba60 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-26 04:40:08 6423.1kH/s 3726042 e54c52bc1b58 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-26 03:37:59 6059.7kH/s 3726015 5e10dcbcc796 1/1 10 donor_whale +49fV8TjN...GSgrDzrU 2026-07-26 02:35:59 4377.9kH/s 3725986 ac4db8b0bf82 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-26 01:33:38 4199.0kH/s 3725959 74bdd6959388 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-26 00:34:42 4354.9kH/s 3725924 4a89c3dd1e63 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-25 23:35:38 4419.4kH/s 3725887 4eeed55ae3cb 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-25 22:36:37 4357.9kH/s 3725866 770c761d7fb7 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-25 21:38:01 5791.5kH/s 3725832 138b19cfa901 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-07-25 20:36:02 4507.4kH/s 3725808 22a2d9b368d7 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-25 19:33:13 5915.1kH/s 3725778 cf0ffa506ef2 1/1 11 donor_whale +42Mk3F3y...Q6fgUTJr 2026-07-25 18:31:01 4719.6kH/s 3725744 a2e2bbc5aaf9 1/1 10 donor_whale +46PsTAqp...o2VDhm5j 2026-07-25 17:20:02 5036.0kH/s 3725704 d4814747586e 1/1 32 donor_vip +49fV8TjN...GSgrDzrU 2026-07-25 16:18:01 4621.3kH/s 3725676 2ebde127e5ec 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-25 15:15:28 4472.8kH/s 3725648 68c4ac42e58c 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-25 14:16:31 3690.2kH/s 3725624 f0e511b1d98d 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-25 13:07:18 5522.7kH/s 3725588 c589a19427fc 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-07-25 12:05:12 4431.5kH/s 3725552 294bf3881e36 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-25 11:02:26 4436.1kH/s 3725515 fecf5261f64c 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-25 10:03:29 3397.5kH/s 3725484 7eef4da92e64 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-25 09:04:31 4188.6kH/s 3725445 de47b156e2bd 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-25 08:06:00 5235.5kH/s 3725415 19cc42db0a92 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-07-25 07:04:03 5358.3kH/s 3725393 14146a035220 1/1 31 donor_vip +4AGJScWS...f6SvY5p5 2026-07-25 06:02:08 3880.4kH/s 3725371 f2e0ed5d059a 1/1 4 mvp +48M2j8Gj...d8KgGBwa 2026-07-25 05:00:01 4217.9kH/s 3725330 1b9fd6ee4546 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-07-25 03:57:26 5598.5kH/s 3725301 ba631411cba1 1/1 10 donor_whale +42NpvKMH...zAXwCRSb 2026-07-25 02:59:00 5823.4kH/s 3725281 54e0e644afe1 1/1 11 donor_whale +47sctNyW...JBFt8g8K 2026-07-25 01:56:11 4554.3kH/s 3725256 ea21201fd817 1/1 30 donor_vip +42Mk3F3y...Q6fgUTJr 2026-07-25 00:54:01 4041.6kH/s 3725227 5bb44d177f5c 1/1 11 donor_whale +4AEAX3qs...vTU56zMr 2026-07-24 23:36:00 5359.1kH/s 3725191 d0c0e64852d7 1/1 31 donor_vip +47NF5Nbe...nMs9DDJU 2026-07-24 22:34:01 5880.9kH/s 3725164 9752d30d2912 1/1 11 donor_whale +48wF5CTP...zF7tEmWC 2026-07-24 21:32:00 4185.9kH/s 3725130 876068c2c4a2 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-24 20:30:01 5531.2kH/s 3725099 3cf993ff565e 1/1 1 donor_mega +48LNi6pk...5DomVmR2 2026-07-24 19:28:00 5882.0kH/s 3725074 dcdf8003fdec 1/1 10 donor_whale +49fV8TjN...GSgrDzrU 2026-07-24 18:26:01 5194.2kH/s 3725036 3b55816a55d0 1/1 10 donor_whale +45qivXhp...BSS1mtoq 2026-07-24 17:16:01 3549.9kH/s 3725002 e937e887cb3a 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-24 14:36:01 5243.1kH/s 3724940 08ecd845cef7 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-24 13:33:12 5661.7kH/s 3724908 6521871487ab 1/1 10 donor_whale +42NpvKMH...zAXwCRSb 2026-07-24 12:31:02 5710.8kH/s 3724880 d282d4d0dc83 1/1 10 donor_whale +4895aAGt...g5P9n4Nq 2026-07-24 11:28:11 4555.8kH/s 3724849 eadf098703ab 1/1 70 donor +48M2j8Gj...d8KgGBwa 2026-07-24 10:25:26 4532.2kH/s 3724820 577431699d1d 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-24 09:26:28 4665.4kH/s 3724790 169bc39c4db0 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-24 08:27:26 4654.2kH/s 3724758 17b8a5bf0256 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-24 07:28:36 3609.8kH/s 3724729 f7321599ce9f 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-24 06:10:02 3524.5kH/s 3724681 a1f7f781197c 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-07-24 02:48:59 4151.2kH/s 3724611 45d6d3fa40c0 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-24 01:46:10 3632.3kH/s 3724577 261c4a0a9ed7 1/1 1 donor_mega +44aZ9ce8...i1Hxzm1M 2026-07-24 00:09:10 4292.3kH/s 3724535 6b3146bd4d08 1/1 29 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-23 23:06:59 5916.7kH/s 3724504 843f19ab4500 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-23 22:05:01 5695.6kH/s 3724471 4b61135b0d52 1/1 11 donor_whale +47NF5Nbe...nMs9DDJU 2026-07-23 21:02:59 4328.9kH/s 3724443 ec97df025ede 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-23 20:00:33 4843.7kH/s 3724416 1ed468fb2686 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-23 19:01:26 4136.4kH/s 3724389 a526977d87c3 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-23 18:02:09 5566.6kH/s 3724371 9849197d4330 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-23 17:00:01 3791.0kH/s 3724343 7a8055893792 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-23 15:51:11 5532.0kH/s 3724318 51b9d71d6c4a 1/1 1 donor_mega +49fV8TjN...GSgrDzrU 2026-07-23 14:48:27 5755.5kH/s 3724282 55b8a07547ed 1/1 11 donor_whale +49fV8TjN...GSgrDzrU 2026-07-23 13:49:00 5778.5kH/s 3724252 6f0de4ff561a 1/1 28 donor_vip +44MnN1f3...a621jwyg 2026-07-23 12:46:58 4423.9kH/s 3724222 9700a0ca36b5 1/1 4 mvp +48M2j8Gj...d8KgGBwa 2026-07-23 11:44:58 5016.3kH/s 3724191 ae5c01fa87c2 1/1 1 donor_mega +42m2kLta...aDULT2Qj 2026-07-23 10:41:58 4494.0kH/s 3724163 e21ecfd1dc66 1/1 27 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-23 09:39:36 4282.4kH/s 3724138 8cf5ec06b21a 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-23 08:40:28 3373.0kH/s 3724107 00668cfd5f25 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-23 07:24:58 3348.8kH/s 3724059 ff31a1bd3d63 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-23 05:43:01 5462.8kH/s 3724013 5614e61bc447 1/1 11 donor_whale +45wQcnHH...kR5qUREN 2026-07-23 04:40:10 4561.8kH/s 3723976 1579c895099d 1/1 27 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-23 03:37:25 4604.0kH/s 3723948 6e98b07a38d8 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-23 02:38:37 4649.6kH/s 3723916 a33598fd9ff2 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-23 01:40:00 5459.5kH/s 3723882 7a9e8203197b 1/1 1 donor_mega +48xVox2n...oQM27PR1 2026-07-23 00:38:04 4267.7kH/s 3723858 541813a7a52b 1/1 28 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-22 23:35:34 4330.4kH/s 3723832 0924ca8e429a 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-22 22:37:00 5857.5kH/s 3723796 9a5389a8b0e0 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-07-22 21:35:02 4500.2kH/s 3723763 3a54effc0012 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-22 20:33:04 5748.4kH/s 3723736 95540e9c71fc 1/1 1 donor_mega +48LNi6pk...5DomVmR2 2026-07-22 19:31:00 4717.8kH/s 3723719 c04cfd252d0a 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-22 18:28:36 4642.3kH/s 3723686 159c870ff571 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-22 17:29:36 4368.9kH/s 3723666 287168031449 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-22 16:30:38 4816.9kH/s 3723638 1428e685cb63 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-22 15:31:26 4626.1kH/s 3723619 459e2fb48c03 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-22 14:32:11 5794.8kH/s 3723593 26f0f93981bd 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-22 13:29:27 5333.2kH/s 3723570 a79162983914 1/1 11 donor_whale +42mefDQX...pJw9nygF 2026-07-22 12:30:59 3995.7kH/s 3723534 283eb8a2d6b6 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-22 11:28:26 3991.2kH/s 3723504 3160cd55ca64 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-22 10:29:28 4300.3kH/s 3723478 879d8c061dc0 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-22 09:30:29 3656.8kH/s 3723447 e28be640b303 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-22 07:59:08 5673.7kH/s 3723382 8367bdbece7e 1/1 1 donor_mega +46PsTAqp...o2VDhm5j 2026-07-22 06:57:00 4669.0kH/s 3723341 ac1eb47f1aa8 1/1 65 donor +48M2j8Gj...d8KgGBwa 2026-07-22 05:55:01 5770.7kH/s 3723304 739e92e0710a 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-07-22 04:52:26 5450.8kH/s 3723274 6d131f16f3ac 1/1 11 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-22 03:53:59 4418.7kH/s 3723247 52ef38cc2c08 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-22 02:51:31 4816.1kH/s 3723209 4690c27c00fa 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-22 01:52:35 4662.3kH/s 3723174 996944893ee6 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-22 00:53:25 4176.4kH/s 3723127 dc249379c958 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-21 23:54:26 4716.7kH/s 3723100 18d8133e2338 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-21 22:56:02 5531.2kH/s 3723057 47be0a672396 1/1 11 donor_whale +4AyiUbKF...uJpsC4ym 2026-07-21 21:54:01 4726.9kH/s 3723032 ea80fc511e15 1/1 33 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-21 20:52:08 5695.0kH/s 3722999 b357882e2814 1/1 1 donor_mega +421n6hRs...61UsZuDG 2026-07-21 19:50:00 4730.0kH/s 3722960 e3d353a96513 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-21 18:47:59 4550.9kH/s 3722925 857475dcb19c 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-21 17:45:58 4613.7kH/s 3722893 934b6efbf2df 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-21 16:43:26 4739.9kH/s 3722859 4e8e6ecf6acf 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-21 15:44:27 4882.8kH/s 3722833 3008f2578c07 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-21 14:46:01 5828.7kH/s 3722808 a7d665843aee 1/1 10 donor_whale +43CcbPH8...uQWupVW5 2026-07-21 13:44:03 5598.9kH/s 3722783 0c9e20627b7b 1/1 29 donor_vip +421n6hRs...61UsZuDG 2026-07-21 12:39:02 5831.0kH/s 3722745 e0a1a0a91c13 1/1 10 donor_whale +42mefDQX...pJw9nygF 2026-07-21 11:37:01 4829.6kH/s 3722709 bb20aa7e6ed3 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-21 10:35:01 4016.2kH/s 3722673 a67a70fad4c8 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-07-21 08:37:11 4289.6kH/s 3722604 5d212abdfdc4 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-21 07:34:27 4506.0kH/s 3722572 23928200d56c 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-21 06:35:59 5405.1kH/s 3722543 dacec3a0a77f 1/1 1 donor_mega +48LNi6pk...5DomVmR2 2026-07-21 05:33:09 5546.8kH/s 3722511 5a9739cca3eb 1/1 11 donor_whale +43CcbPH8...uQWupVW5 2026-07-21 04:30:27 5709.0kH/s 3722475 3fa849821629 1/1 12 donor_whale +47NF5Nbe...nMs9DDJU 2026-07-21 03:27:57 4404.9kH/s 3722439 347688f996e8 1/1 12 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-21 02:25:59 5705.7kH/s 3722411 ddf2425fe87a 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-07-21 01:24:00 5813.8kH/s 3722390 cf42a26e4b69 1/1 12 donor_whale +43tg9ebV...GLspBx9P 2026-07-21 00:21:59 4859.6kH/s 3722369 3491e6866485 1/1 33 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-20 23:19:35 4208.0kH/s 3722336 54e0ac1fa796 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-20 22:20:26 4220.8kH/s 3722316 256c0ba5d91e 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-20 21:21:27 4991.1kH/s 3722298 f5f79085ddab 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-20 20:22:27 4611.8kH/s 3722268 256cfee84c14 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-20 19:24:00 5603.9kH/s 3722230 f69c7a6dac0c 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-07-20 18:22:02 4470.2kH/s 3722199 914d85fec077 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-20 17:19:59 5894.2kH/s 3722172 a1b8c6fe134b 1/1 1 donor_mega +4AuNNHgo...n8VXcgEe 2026-07-20 16:17:58 5080.5kH/s 3722139 1b0896204d12 1/1 31 donor_vip +49m4aWKb...VT3dB1iR 2026-07-20 15:10:59 5847.9kH/s 3722104 b748588cd377 1/1 71 donor +486aGn4q...F8wjAE5R 2026-07-20 14:08:55 5969.8kH/s 3722078 e51bea234dac 1/1 4 mvp +42Mk3F3y...Q6fgUTJr 2026-07-20 13:06:59 5553.2kH/s 3722036 695d7c08d36e 1/1 11 donor_whale +42mefDQX...pJw9nygF 2026-07-20 12:04:59 4930.7kH/s 3721995 c8fa657040b0 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-20 11:02:26 4979.4kH/s 3721965 e9dcdc9d1152 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-20 10:04:00 6080.9kH/s 3721935 72cd9e0a8f69 1/1 1 donor_mega +45wQcnHH...kR5qUREN 2026-07-20 09:01:59 3930.2kH/s 3721902 72a481b9481d 1/1 32 donor_vip +47NF5Nbe...nMs9DDJU 2026-07-20 07:03:59 4855.8kH/s 3721840 3c9921175717 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-20 06:01:58 5331.1kH/s 3721818 823eb9c1b7de 1/1 1 donor_mega +4B2Avc2j...5JCEaaNs 2026-07-20 04:59:57 6210.2kH/s 3721796 e3d3436342b5 1/1 29 donor_vip +46Rb9Hjc...57AFUnq5 2026-07-20 03:58:06 6228.6kH/s 3721769 ab9e06c6274c 1/1 10 donor_whale +48LNi6pk...5DomVmR2 2026-07-20 02:55:57 4963.7kH/s 3721731 fb5df7f6d152 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-20 01:53:58 4126.6kH/s 3721699 40feefe40662 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-07-20 00:15:58 6406.7kH/s 3721647 451ceca4bf63 1/1 10 donor_whale +4AeEwC2U...YQyoQtr7 2026-07-19 23:14:02 5227.4kH/s 3721621 a52d7f3c706d 1/1 4 mvp +48M2j8Gj...d8KgGBwa 2026-07-19 22:11:58 5627.5kH/s 3721590 c9f38b3300b8 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-07-19 21:09:57 5643.3kH/s 3721552 6931aef5a22c 1/1 29 donor_vip +47NF5Nbe...nMs9DDJU 2026-07-19 20:07:58 5733.6kH/s 3721528 fb28ce076d4b 1/1 10 donor_whale +48LNi6pk...5DomVmR2 2026-07-19 19:05:59 5615.7kH/s 3721488 fde5ae16dd03 1/1 10 donor_whale +4298Vwxn...cJHXZb9k 2026-07-19 18:03:55 5612.0kH/s 3721460 d2ba432d75b0 1/1 178 vip +43nvW9WJ...e7SmCf3o 2026-07-19 17:01:58 5448.9kH/s 3721430 8451814bee84 1/1 30 donor_vip +48wF5CTP...zF7tEmWC 2026-07-19 15:59:09 5355.1kH/s 3721405 ff53a9546c7c 1/1 10 donor_whale +42NJbX1p...JBe7i8b2 2026-07-19 14:56:59 5190.4kH/s 3721380 b3de69d509c7 1/1 30 donor_vip +46YxbLMT...UUmVmbGn 2026-07-19 13:51:58 5864.9kH/s 3721342 3184c7cdf959 2/1 70 donor +4AEAX3qs...vTU56zMr 2026-07-19 12:49:58 3276.9kH/s 3721314 38a0c8b641ff 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-19 11:01:58 5709.5kH/s 3721272 bf28c0c09dc0 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-07-19 09:59:59 5670.2kH/s 3721245 8b19199b58c5 1/1 70 donor +42mefDQX...pJw9nygF 2026-07-19 08:58:03 4421.2kH/s 3721215 f469ec4700bc 1/1 28 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-19 07:55:59 5777.2kH/s 3721183 d13813570935 1/1 1 donor_mega +487SyiQC...aSGcaBDE 2026-07-19 06:53:10 4675.3kH/s 3721151 07b41bbdb3ce 1/1 27 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-19 05:50:25 4154.5kH/s 3721120 b00964a4674a 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-19 04:51:58 5555.9kH/s 3721083 4a8cd4b0cab0 1/1 1 donor_mega +49fV8TjN...GSgrDzrU 2026-07-19 03:49:55 4747.9kH/s 3721053 2ebbbffe54eb 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-19 02:47:24 4276.2kH/s 3721025 05bbf74c837e 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-19 01:49:07 5188.6kH/s 3720997 0248bbce4c7c 1/1 10 donor_whale +4AyiUbKF...uJpsC4ym 2026-07-19 00:47:08 4377.5kH/s 3720950 bc6c9dffb8d9 1/1 27 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-18 23:44:24 4337.9kH/s 3720917 7932e63b1a1b 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-18 22:45:57 5493.3kH/s 3720882 4965f4c63001 1/1 1 donor_mega +48C1CiKC...i9qJPCF9 2026-07-18 21:43:58 4306.9kH/s 3720855 3c97a2a4f3dd 1/1 75 donor +48M2j8Gj...d8KgGBwa 2026-07-18 20:41:38 4203.5kH/s 3720833 0525a913e879 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-18 19:42:24 4641.4kH/s 3720812 d414bfa3e054 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-18 18:44:01 5619.8kH/s 3720782 c351b2595f7c 1/1 1 donor_mega +47sctNyW...JBFt8g8K 2026-07-18 17:42:00 4027.1kH/s 3720742 630b59612166 1/1 27 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-18 16:39:25 4624.8kH/s 3720719 e05bea93bdce 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-18 15:40:26 4272.2kH/s 3720688 1776517ac4dd 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-18 14:41:35 4119.8kH/s 3720653 08b7f3178a72 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-18 13:43:01 5058.4kH/s 3720618 6a29b4bc97b1 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-18 12:40:58 5941.8kH/s 3720595 65c832683693 1/1 10 donor_whale +421n6hRs...61UsZuDG 2026-07-18 11:38:58 4223.7kH/s 3720566 a38a36362666 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-18 10:36:08 5555.3kH/s 3720538 211cc6bf2635 1/1 1 donor_mega +48LNi6pk...5DomVmR2 2026-07-18 09:33:59 6093.4kH/s 3720517 fad7967486e5 1/1 10 donor_whale +42Mk3F3y...Q6fgUTJr 2026-07-18 08:31:58 4683.7kH/s 3720478 37af4dd7244b 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-18 07:29:26 4160.9kH/s 3720453 0ba8adf8c7b4 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-18 06:30:26 4584.1kH/s 3720432 5dd77b0aca60 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-18 05:31:58 5704.3kH/s 3720404 8008e4f8b695 1/1 1 donor_mega +48b1zteM...a6BJoFL8 2026-07-18 04:29:57 5752.3kH/s 3720375 eb6db7cbcbe9 1/1 68 donor +46PsTAqp...o2VDhm5j 2026-07-18 03:27:58 5574.7kH/s 3720331 ce3461dc9491 1/1 27 donor_vip +42m2kLta...aDULT2Qj 2026-07-18 02:25:57 5921.5kH/s 3720292 dcd5dc3ec0a7 1/1 27 donor_vip +46Rb9Hjc...57AFUnq5 2026-07-18 01:23:56 4490.7kH/s 3720242 aa972db9ec4c 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-18 00:21:56 5638.4kH/s 3720215 390c14bf712f 1/1 1 donor_mega +42XnhJTN...EPxRtsmc 2026-07-17 23:20:03 5403.6kH/s 3720179 aea9d44ab542 1/1 177 vip +46Rb9Hjc...57AFUnq5 2026-07-17 22:17:58 5940.3kH/s 3720143 855a1c756e1a 1/1 9 donor_whale +48wF5CTP...zF7tEmWC 2026-07-17 21:16:08 4400.5kH/s 3720112 1738b92ff0ae 1/1 26 donor_vip +47NF5Nbe...nMs9DDJU 2026-07-17 19:55:08 5696.3kH/s 3720076 3b78e6783b76 1/1 9 donor_whale +421n6hRs...61UsZuDG 2026-07-17 18:51:25 5451.2kH/s 3720053 3e5a491fcbd0 1/1 9 donor_whale +421n6hRs...61UsZuDG 2026-07-17 17:52:58 4447.1kH/s 3720014 c2887677affb 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-17 16:50:09 5897.5kH/s 3719986 d8feb4003f12 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-17 15:47:59 5728.1kH/s 3719953 b4edeefe5c5e 1/1 8 donor_whale +421n6hRs...61UsZuDG 2026-07-17 14:45:59 5482.4kH/s 3719916 7e01d4a02ccb 1/1 28 donor_vip +42NpvKMH...zAXwCRSb 2026-07-17 13:43:27 5541.6kH/s 3719886 8aaf469913d3 1/1 8 donor_whale +42NpvKMH...zAXwCRSb 2026-07-17 12:45:00 4552.0kH/s 3719841 2a8e823af040 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-17 11:42:26 4248.3kH/s 3719811 6449b85cc2e7 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-17 10:44:01 3166.4kH/s 3719776 2e1b0b2fa9da 1/1 1 donor_mega +48LNi6pk...5DomVmR2 2026-07-17 08:27:59 5541.5kH/s 3719724 21ff13c97c12 1/1 26 donor_vip +486aGn4q...F8wjAE5R 2026-07-17 07:25:54 5273.0kH/s 3719699 e46e7eadad90 1/1 4 mvp +42NpvKMH...zAXwCRSb 2026-07-17 06:24:06 3480.9kH/s 3719666 c1dcb9f7f144 1/1 7 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-17 04:35:23 4321.6kH/s 3719605 6cdc11ea4b39 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-17 03:36:55 5260.8kH/s 3719574 5fedbe6be5f3 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-17 02:34:56 5181.3kH/s 3719535 963cdc49672e 1/1 8 donor_whale +47sctNyW...JBFt8g8K 2026-07-17 01:32:56 5048.8kH/s 3719505 81eef1f83699 1/1 27 donor_vip +47NF5Nbe...nMs9DDJU 2026-07-17 00:22:58 4210.0kH/s 3719468 cb52f4393c35 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-16 23:20:57 5234.0kH/s 3719446 dd522d1e7bfe 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-16 22:18:58 5320.6kH/s 3719413 d2ab4d1e8c0e 1/1 8 donor_whale +48wF5CTP...zF7tEmWC 2026-07-16 21:16:58 4398.2kH/s 3719379 d3d0a05acb83 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-16 20:15:00 3826.2kH/s 3719339 59450ca42519 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-16 18:58:59 2288.5kH/s 3719305 0aacecb1a97e 1/1 9 donor_whale +47NF5Nbe...nMs9DDJU 2026-07-16 16:51:59 5469.6kH/s 3719237 84f25b497474 1/1 9 donor_whale +49fV8TjN...GSgrDzrU 2026-07-16 15:49:08 4171.7kH/s 3719210 6566abce4808 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-16 14:46:25 4082.8kH/s 3719186 e7ea63461c92 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-16 13:47:59 5429.7kH/s 3719155 4e302cf3d823 1/1 1 donor_mega +421n6hRs...61UsZuDG 2026-07-16 12:46:00 4672.1kH/s 3719122 5a127a99b97e 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-16 11:44:00 5288.6kH/s 3719090 d72436140339 1/1 1 donor_mega +49YoCEDi...x97dHeGQ 2026-07-16 10:41:58 5754.7kH/s 3719063 c5202812f883 1/1 28 donor_vip +46Rb9Hjc...57AFUnq5 2026-07-16 09:39:58 3225.6kH/s 3719040 9a602c965031 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-16 07:41:35 4396.3kH/s 3718989 0a80aa9e5533 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-16 06:42:26 4429.8kH/s 3718969 7f8083d5836e 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-16 05:43:26 4359.7kH/s 3718946 f1faa2493074 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-16 04:44:58 5275.6kH/s 3718918 5f7df96778fa 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-07-16 03:42:59 5514.3kH/s 3718892 7225ec7ca701 1/1 10 donor_whale +48LNi6pk...5DomVmR2 2026-07-16 02:40:56 4429.8kH/s 3718861 835e6da5cb01 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-16 01:38:24 4435.1kH/s 3718832 49bf8474260c 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-16 00:40:04 5485.9kH/s 3718807 aa08e4b400d6 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-15 23:37:57 4668.1kH/s 3718778 7159a6285363 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-15 22:34:58 5360.5kH/s 3718750 1d40ae06616c 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-15 21:28:58 4875.1kH/s 3718717 e458ff23831a 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-15 20:26:39 4497.4kH/s 3718687 801bd67f9aed 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-15 19:28:00 3797.1kH/s 3718651 c7a7c0f46e04 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-15 17:47:07 5752.7kH/s 3718618 b43ed4b18d5e 1/1 8 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-15 16:44:36 5723.6kH/s 3718595 24266b10dfa3 1/1 8 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-15 15:45:08 4456.3kH/s 3718570 6ccbdb14a0c5 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-15 14:42:35 4302.8kH/s 3718541 d260b1f72905 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-15 13:44:00 5599.7kH/s 3718515 29d37ad42f36 1/1 1 donor_mega +49fV8TjN...GSgrDzrU 2026-07-15 12:41:59 4684.0kH/s 3718484 4901dc6ef903 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-15 11:39:26 4172.7kH/s 3718457 87a2af440c3b 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-15 10:40:58 5281.6kH/s 3718427 2cec1cbffbf9 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-07-15 09:39:01 4576.3kH/s 3718399 72c5fcfbbd26 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-15 08:37:07 5355.5kH/s 3718356 8f7f664db71f 1/1 31 donor_vip +421n6hRs...61UsZuDG 2026-07-15 07:34:57 5296.0kH/s 3718316 1d1f4632c41c 1/1 8 donor_whale +487SyiQC...aSGcaBDE 2026-07-15 06:32:58 5466.0kH/s 3718284 74afc8a1f24c 1/1 29 donor_vip +42NpvKMH...zAXwCRSb 2026-07-15 05:30:59 5238.8kH/s 3718253 88c2b61b7142 1/1 9 donor_whale +42mefDQX...pJw9nygF 2026-07-15 04:28:57 4469.9kH/s 3718223 5b8498f76da2 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-15 03:26:55 5758.3kH/s 3718191 05a4413d3435 1/1 1 donor_mega +42m2kLta...aDULT2Qj 2026-07-15 02:24:56 4165.1kH/s 3718160 9cbf7f455c21 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-15 01:22:23 4676.2kH/s 3718128 342682d5aab4 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-15 00:23:26 4207.4kH/s 3718089 f9c0aa6c8302 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-14 23:24:24 4502.3kH/s 3718059 a64f2354223e 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-14 22:25:24 4668.2kH/s 3718033 d9698104cccc 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-14 21:26:58 5394.8kH/s 3718012 60d82b874c13 1/1 1 donor_mega +48xVox2n...oQM27PR1 2026-07-14 20:24:10 5249.7kH/s 3717980 5e2a7146429b 1/1 32 donor_vip +47NF5Nbe...nMs9DDJU 2026-07-14 19:21:58 4246.0kH/s 3717952 ed7a97581379 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-14 18:19:59 5464.0kH/s 3717930 2388fe9bd52b 1/1 1 donor_mega +46PsTAqp...o2VDhm5j 2026-07-14 17:18:00 5106.2kH/s 3717911 408d5d2af6f7 1/1 31 donor_vip +47NF5Nbe...nMs9DDJU 2026-07-14 16:16:07 5102.7kH/s 3717893 2cfbbf9d8c4f 1/1 8 donor_whale +48wF5CTP...zF7tEmWC 2026-07-14 15:13:59 3985.4kH/s 3717859 62c34c56a47f 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-14 14:11:27 3720.3kH/s 3717835 97037644aaaa 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-14 13:12:25 4400.6kH/s 3717800 0c605570ec3b 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-14 12:14:00 5664.5kH/s 3717746 d06bf3e5ba29 1/1 1 donor_mega +43nvW9WJ...e7SmCf3o 2026-07-14 11:11:59 5323.0kH/s 3717714 e52de31296f9 1/1 30 donor_vip +42NpvKMH...zAXwCRSb 2026-07-14 10:09:07 4755.9kH/s 3717668 9944162bc084 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-14 09:06:57 5659.4kH/s 3717635 cb00ec5f50bd 1/1 9 donor_whale +45wQcnHH...kR5qUREN 2026-07-14 08:04:59 4421.6kH/s 3717591 5a3f6dc7efdc 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-14 07:02:24 4514.4kH/s 3717546 5f0bfd36a27a 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-14 06:03:24 4501.7kH/s 3717516 7abca6ac6427 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-14 05:04:59 5817.8kH/s 3717480 349e828e816e 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-07-14 04:02:56 4665.8kH/s 3717445 c6d02403cf3c 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-14 03:00:57 5732.0kH/s 3717417 0f240273b937 1/1 1 donor_mega +42cg1PYJ...o43XGcrP 2026-07-14 01:59:05 3593.8kH/s 3717390 895ecdab5723 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-14 00:43:03 5717.4kH/s 3717358 7aec1f5afe2a 1/1 8 donor_whale +47NF5Nbe...nMs9DDJU 2026-07-13 23:40:56 5677.7kH/s 3717323 e576817cdd64 1/1 8 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-13 22:38:24 5438.7kH/s 3717293 e255bca2a69d 1/1 8 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-13 21:40:06 4491.7kH/s 3717259 6a126003d938 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-13 20:37:24 4404.6kH/s 3717223 80b7e9dd9663 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-13 19:38:32 4368.0kH/s 3717196 b60e94709a21 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-13 18:39:26 4374.5kH/s 3717174 93ebea91c1a9 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-13 17:40:37 4409.3kH/s 3717139 6ed9224877d9 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-13 16:41:08 5182.8kH/s 3717118 3b048d88f04d 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-13 15:38:58 5529.4kH/s 3717092 c9c4f1cf10e3 1/1 8 donor_whale +487SyiQC...aSGcaBDE 2026-07-13 14:36:57 3207.0kH/s 3717068 d449544e2073 1/1 33 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-13 12:59:59 3252.8kH/s 3717015 fad6db3963af 1/1 1 donor_mega +43nvW9WJ...e7SmCf3o 2026-07-13 11:20:58 5598.3kH/s 3716966 9b0b1f8a6c08 1/1 33 donor_vip +46XNiJuL...DF62UR3s 2026-07-13 10:18:56 4087.6kH/s 3716945 c3b03cedf539 1/1 33 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-13 09:17:00 5226.6kH/s 3716921 65a61b0e496b 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-07-13 08:14:57 4284.8kH/s 3716902 beef94119938 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-13 07:13:00 5153.9kH/s 3716877 50b75743adf4 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-07-13 06:10:58 5775.0kH/s 3716853 8ac5d7f8ae40 1/1 32 donor_vip +46Rb9Hjc...57AFUnq5 2026-07-13 05:08:57 5930.2kH/s 3716823 61947cfcdbb8 1/1 12 donor_whale +464Bdn7D...wTbYVfF1 2026-07-13 04:06:56 3673.2kH/s 3716795 3cb36e5d57c9 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-13 02:17:32 4670.4kH/s 3716745 f6a25cf945bd 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-13 01:18:56 6021.1kH/s 3716716 a8661b9865b3 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-07-13 00:16:56 3819.6kH/s 3716682 1d0508fb8b98 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-12 22:57:55 5826.5kH/s 3716641 0e22a5b51732 1/1 1 donor_mega +43nvW9WJ...e7SmCf3o 2026-07-12 21:56:04 6068.0kH/s 3716602 c5217ade21d2 1/1 29 donor_vip +45S3XHby...A3Jwctmh 2026-07-12 20:53:56 5770.9kH/s 3716562 5116f090b3ab 2/1 175 vip +48wF5CTP...zF7tEmWC 2026-07-12 19:51:56 4833.0kH/s 3716537 440517e58f18 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-12 18:49:25 5015.8kH/s 3716508 79a4bb22c6b9 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-12 17:50:58 5441.4kH/s 3716480 02d9e5138709 1/1 1 donor_mega +4AEAX3qs...vTU56zMr 2026-07-12 16:49:07 6197.5kH/s 3716459 33e39e43f1ab 1/1 30 donor_vip +44aZ9ce8...i1Hxzm1M 2026-07-12 15:46:57 6162.3kH/s 3716437 67233045a8d8 1/1 31 donor_vip +42mefDQX...pJw9nygF 2026-07-12 14:44:57 4762.6kH/s 3716407 453c83e2ddf2 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-12 13:42:56 6057.8kH/s 3716378 94420ab47995 1/1 1 donor_mega +47d4QRof...jL5UqAKj 2026-07-12 12:40:56 5703.0kH/s 3716333 c4c8550ea750 1/1 66 donor +47NF5Nbe...nMs9DDJU 2026-07-12 11:39:03 3704.6kH/s 3716294 b1386004c338 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-12 10:24:55 5881.2kH/s 3716250 b9ed883c74c5 1/1 1 donor_mega +42m2kLta...aDULT2Qj 2026-07-12 09:22:56 4443.6kH/s 3716219 4bcff60d2b02 1/1 33 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-12 08:20:24 4441.9kH/s 3716184 b7f1604677ab 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-12 07:21:29 4721.1kH/s 3716147 77c0136c8d9f 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-12 06:22:22 3386.8kH/s 3716116 991f93853c61 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-12 04:44:55 5548.7kH/s 3716066 51e3b7069248 1/1 1 donor_mega +421n6hRs...61UsZuDG 2026-07-12 03:43:02 5685.4kH/s 3716030 2544f10ccb71 1/1 32 donor_vip +46Rb9Hjc...57AFUnq5 2026-07-12 02:40:57 5747.5kH/s 3715997 ca1d79e37455 1/1 12 donor_whale +487SyiQC...aSGcaBDE 2026-07-12 01:38:56 5148.3kH/s 3715952 680f7109722e 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-12 00:36:57 6141.6kH/s 3715912 7fef78808bd1 1/1 1 donor_mega +49fV8TjN...GSgrDzrU 2026-07-11 23:34:57 5007.5kH/s 3715867 44e300dda4f0 1/1 12 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-11 22:32:57 6086.5kH/s 3715824 f603ac3de16d 1/1 1 donor_mega +43nvW9WJ...e7SmCf3o 2026-07-11 21:31:03 6120.4kH/s 3715784 68ee8145ed6f 1/1 32 donor_vip +48b1zteM...a6BJoFL8 2026-07-11 20:29:00 5946.5kH/s 3715759 e30305855691 1/1 66 donor +464pdsyX...8QQVt1x3 2026-07-11 19:26:56 4842.8kH/s 3715728 2b555fce3e7a 1/1 67 donor +48M2j8Gj...d8KgGBwa 2026-07-11 18:24:23 3734.5kH/s 3715699 10c4a23132d3 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-11 17:11:24 4890.0kH/s 3715658 3af850c20343 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-11 16:12:57 5981.8kH/s 3715617 f57e2c92f41a 1/1 1 donor_mega +464Bdn7D...wTbYVfF1 2026-07-11 15:10:55 6308.0kH/s 3715590 0bd6a12835cc 1/1 179 vip +49fV8TjN...GSgrDzrU 2026-07-11 14:08:57 4797.3kH/s 3715566 9fed6f9221a0 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-11 13:07:06 5463.7kH/s 3715537 91c673fcb81a 1/1 1 donor_mega +421n6hRs...61UsZuDG 2026-07-11 12:04:12 5406.3kH/s 3715497 647bc6900dc8 1/1 10 donor_whale +4AyiUbKF...uJpsC4ym 2026-07-11 11:01:55 5702.1kH/s 3715469 f0dea3843aa1 1/1 33 donor_vip +4B2Avc2j...5JCEaaNs 2026-07-11 09:59:57 4508.6kH/s 3715437 e1885d6a38c4 1/1 34 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-11 08:57:57 5709.0kH/s 3715405 c972763fd72f 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-11 07:55:58 4036.6kH/s 3715376 84e18f9543c2 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-11 06:45:08 6001.7kH/s 3715336 1baef1fe6489 1/1 1 donor_mega +49ijD1Et...e7mEQxJ9 2026-07-11 05:42:56 5661.0kH/s 3715317 967186f0ef00 1/1 33 donor_vip +42Mk3F3y...Q6fgUTJr 2026-07-11 04:40:56 5572.2kH/s 3715291 e31666471196 1/1 10 donor_whale +47NF5Nbe...nMs9DDJU 2026-07-11 03:38:57 5786.8kH/s 3715261 ca6610948e19 1/1 10 donor_whale +45xA3Kgd...7Ma7ttaf 2026-07-11 02:36:54 4571.9kH/s 3715240 2d3ad1c46080 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-11 01:34:23 4357.8kH/s 3715207 0453e7754a26 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-11 00:35:59 6153.9kH/s 3715181 ee4e5b698172 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-07-10 23:33:57 5007.5kH/s 3715157 63c55c901dd1 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-10 22:31:24 5010.0kH/s 3715132 fb05df3aa86d 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-10 21:30:24 4835.8kH/s 3715114 53ced3e0f4b6 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-10 20:31:23 4870.2kH/s 3715087 3554adb0fe8b 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-10 19:32:23 4873.2kH/s 3715061 c63c2b64fb23 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-10 18:33:33 4999.6kH/s 3715043 597fb9d621e8 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-10 17:34:56 5963.1kH/s 3715015 7979530fda1f 1/1 1 donor_mega +49fV8TjN...GSgrDzrU 2026-07-10 16:32:57 4789.0kH/s 3714985 a78605a50f97 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-10 15:30:24 4543.3kH/s 3714954 cc4fade04245 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-10 14:31:22 4803.5kH/s 3714926 5b989794058e 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-10 13:32:22 4271.5kH/s 3714892 712e717a7dd6 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-10 12:30:58 5124.4kH/s 3714851 2ec33354c428 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-07-10 11:28:56 4315.2kH/s 3714815 dfad51ae8321 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-10 10:26:57 5509.1kH/s 3714780 846ffc6d0d63 1/1 1 donor_mega +43tg9ebV...GLspBx9P 2026-07-10 09:24:07 3263.4kH/s 3714744 27e0a82fb37a 1/1 30 donor_vip +49fV8TjN...GSgrDzrU 2026-07-10 08:01:05 5420.2kH/s 3714694 f8b002f8d6c0 1/1 10 donor_whale +48xVox2n...oQM27PR1 2026-07-10 06:58:56 5766.7kH/s 3714654 0597c6f2940f 1/1 30 donor_vip +42Mk3F3y...Q6fgUTJr 2026-07-10 05:56:56 4534.7kH/s 3714616 bb7333057c26 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-10 04:54:56 3664.8kH/s 3714584 666ef7fbcc54 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-10 03:22:55 5946.3kH/s 3714541 64c943375dad 1/1 9 donor_whale +4B2Avc2j...5JCEaaNs 2026-07-10 02:20:55 4058.5kH/s 3714509 de81bf0651a2 1/1 29 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-10 01:18:22 4124.7kH/s 3714473 f81504df31b4 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-10 00:19:22 4516.4kH/s 3714440 326ad0d5a8a2 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-09 23:20:31 4349.2kH/s 3714417 22038cfa33ae 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-09 22:21:58 5032.8kH/s 3714389 2cefee282dcf 1/1 1 donor_mega +46PsTAqp...o2VDhm5j 2026-07-09 21:17:03 5747.0kH/s 3714357 918df7eda1dc 1/1 30 donor_vip +48xVox2n...oQM27PR1 2026-07-09 20:14:56 5830.3kH/s 3714329 8337d85964a4 1/1 30 donor_vip +43CcbPH8...uQWupVW5 2026-07-09 19:13:05 4183.4kH/s 3714303 c10bf24b24e3 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-09 18:10:58 5412.8kH/s 3714273 6fd682b31ff1 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-09 17:08:57 5393.1kH/s 3714248 88aac9c50e2c 1/1 10 donor_whale +421n6hRs...61UsZuDG 2026-07-09 16:06:40 3208.7kH/s 3714225 0b0f049cc762 1/1 10 donor_whale +421n6hRs...61UsZuDG 2026-07-09 14:42:34 4475.1kH/s 3714189 b4612b1b1277 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-09 13:40:17 5498.7kH/s 3714152 b52eac8bb065 1/1 1 donor_mega +4B2Avc2j...5JCEaaNs 2026-07-09 12:38:17 5520.7kH/s 3714116 3c8d2b11828c 1/1 34 donor_vip +43CcbPH8...uQWupVW5 2026-07-09 11:36:13 5525.1kH/s 3714089 aa323ecc5bb5 1/1 10 donor_whale +42Mk3F3y...Q6fgUTJr 2026-07-09 10:33:37 3257.7kH/s 3714055 4a0e751d8d78 1/1 10 donor_whale +42Mk3F3y...Q6fgUTJr 2026-07-09 07:25:30 5551.0kH/s 3713970 370cd4322fab 1/1 10 donor_whale +48wF5CTP...zF7tEmWC 2026-07-09 06:22:35 5744.8kH/s 3713939 de7d61e521c0 1/1 34 donor_vip +45iHYVMq...UAz6KRyd 2026-07-09 05:20:21 5536.0kH/s 3713906 4f5edeffd07d 1/1 34 donor_vip +42mefDQX...pJw9nygF 2026-07-09 04:18:08 5365.6kH/s 3713879 6477cb0aa11b 1/1 10 donor_whale +42NpvKMH...zAXwCRSb 2026-07-09 03:15:27 6088.9kH/s 3713853 c1a2dd0fc38f 1/1 10 donor_whale +45iHYVMq...UAz6KRyd 2026-07-09 02:12:33 6015.4kH/s 3713821 ad09a06c3472 1/1 34 donor_vip +421n6hRs...61UsZuDG 2026-07-09 01:09:30 5834.0kH/s 3713786 2353972ce405 1/1 10 donor_whale +42NpvKMH...zAXwCRSb 2026-07-09 00:07:08 3992.5kH/s 3713750 c297b39ee032 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-08 23:04:13 5807.9kH/s 3713722 9a89df936a06 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-08 22:01:18 5645.7kH/s 3713694 af36894958b0 1/1 10 donor_whale +49fV8TjN...GSgrDzrU 2026-07-08 20:58:15 4562.7kH/s 3713658 597da6fa65e8 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-08 19:55:43 4664.5kH/s 3713619 ad0e8fd290ab 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-08 18:56:43 4789.4kH/s 3713589 80b07c8d1b78 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-08 17:58:03 4679.3kH/s 3713551 9a6ead785fba 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-08 16:58:41 4167.1kH/s 3713516 3f05d4527ea8 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-08 15:59:34 5107.6kH/s 3713481 bb7fcce4636c 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-07-08 14:57:02 5857.5kH/s 3713450 b787a78dccde 1/1 9 donor_whale +47NF5Nbe...nMs9DDJU 2026-07-08 13:57:17 5696.3kH/s 3713424 7bb4b2164de8 1/1 10 donor_whale +4B2Avc2j...5JCEaaNs 2026-07-08 12:54:39 3347.2kH/s 3713390 ab9e3900b36f 1/1 33 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-08 11:23:36 5661.6kH/s 3713347 85316014603b 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-08 10:20:19 5436.9kH/s 3713312 01e2817dee29 1/1 10 donor_whale +42NpvKMH...zAXwCRSb 2026-07-08 09:17:17 5981.2kH/s 3713283 a76c0365c321 1/1 10 donor_whale +42m2kLta...aDULT2Qj 2026-07-08 08:14:40 5801.1kH/s 3713255 8867d95fde39 1/1 31 donor_vip +42NpvKMH...zAXwCRSb 2026-07-08 07:12:34 5571.4kH/s 3713225 9e0001cfdc77 1/1 10 donor_whale +43GtdWdk...39LmdZuj 2026-07-08 06:09:32 5320.5kH/s 3713191 f4a144e9fc85 1/1 64 donor +46Rb9Hjc...57AFUnq5 2026-07-08 05:07:12 5807.3kH/s 3713160 aa0debe54eec 1/1 31 donor_vip +42m2kLta...aDULT2Qj 2026-07-08 04:04:31 5823.7kH/s 3713128 80446774b179 1/1 31 donor_vip +42mefDQX...pJw9nygF 2026-07-08 03:02:07 5392.3kH/s 3713095 367c64f49b62 1/1 10 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-08 02:00:08 5660.0kH/s 3713069 f702aa4b558a 1/1 10 donor_whale +42mefDQX...pJw9nygF 2026-07-08 00:57:29 4434.2kH/s 3713036 daa359423f09 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-07 23:54:11 5228.7kH/s 3713012 b1ee3e7efe0a 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-07-07 22:52:09 4293.2kH/s 3712976 a73e6962be62 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-07 21:50:00 4728.7kH/s 3712956 31f42a4065c5 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-07 20:51:15 4398.0kH/s 3712922 910cd4dc7f89 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-07 19:51:42 4523.8kH/s 3712897 3820bdaf1b42 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-07 18:53:05 4097.5kH/s 3712860 6c219ffe0584 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-07 17:53:15 5808.1kH/s 3712833 eac633a32317 1/1 30 donor_vip +46PsTAqp...o2VDhm5j 2026-07-07 16:50:40 4544.5kH/s 3712804 7014416c9e27 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-07 15:47:17 5432.4kH/s 3712769 be4590dfbd5c 1/1 1 donor_mega +43CcbPH8...uQWupVW5 2026-07-07 14:44:39 4349.1kH/s 3712740 512543f981a1 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-07 13:41:45 3497.4kH/s 3712710 f9b124d9f125 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-07 12:04:22 4330.5kH/s 3712663 fb2ddc46d833 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-07 11:02:05 4483.3kH/s 3712636 008090c0dd1e 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-07 10:02:15 3761.9kH/s 3712610 9171560f433b 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-07 08:41:14 4270.0kH/s 3712563 e3bb11b82c02 1/1 64 donor +48M2j8Gj...d8KgGBwa 2026-07-07 07:38:40 4584.9kH/s 3712522 d68fcea4fac9 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-07 06:39:14 5897.0kH/s 3712489 97a1374a8a22 1/1 1 donor_mega +43tg9ebV...GLspBx9P 2026-07-07 05:37:11 5674.1kH/s 3712466 f08c4495c408 1/1 30 donor_vip +42mefDQX...pJw9nygF 2026-07-07 04:34:14 4804.7kH/s 3712437 a6965fe03678 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-07 03:31:12 5232.1kH/s 3712407 0e372f375262 1/1 1 donor_mega +4B2Avc2j...5JCEaaNs 2026-07-07 02:23:31 5513.1kH/s 3712362 0ec324ad3895 1/1 29 donor_vip +47NF5Nbe...nMs9DDJU 2026-07-07 01:21:11 4473.6kH/s 3712331 acdeab48260f 1/1 7 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-07 00:18:38 4521.3kH/s 3712296 ebc9a3cc7045 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-06 23:19:30 5499.7kH/s 3712271 7ff61332c251 1/1 1 donor_mega +46PsTAqp...o2VDhm5j 2026-07-06 22:16:14 4490.4kH/s 3712248 e065ae6c3327 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-06 21:13:44 4424.5kH/s 3712214 6568f9c86b19 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-06 20:14:41 4444.0kH/s 3712193 acf8f198d110 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-06 19:15:15 4131.3kH/s 3712157 edd828f6abda 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-07-06 18:10:19 5527.3kH/s 3712124 45fd777cc633 1/1 7 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-06 17:08:06 4881.2kH/s 3712106 dc6a6f294f86 1/1 7 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-06 16:08:39 4375.4kH/s 3712069 d5271484534c 1/1 7 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-06 15:05:20 5518.8kH/s 3712040 f7128495c571 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-07-06 14:02:16 4279.8kH/s 3712002 f80e3aaf2ee8 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-06 12:59:42 4258.5kH/s 3711969 450df1a05cea 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-06 12:00:45 3997.0kH/s 3711940 22032f32333d 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-06 10:57:41 4182.5kH/s 3711909 d51686468006 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-06 09:58:14 5477.6kH/s 3711873 6160c02997cf 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-06 08:55:15 4335.5kH/s 3711842 41409b1bdc1b 1/1 33 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-06 07:52:43 3773.0kH/s 3711809 7bc97040a238 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-06 06:53:15 5058.0kH/s 3711781 4ebd05f6c12c 1/1 7 donor_whale +421n6hRs...61UsZuDG 2026-07-06 05:50:15 4036.9kH/s 3711749 0e45dd66e0db 1/1 7 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-06 04:47:41 4028.8kH/s 3711717 14c2a4644f10 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-06 03:48:14 4969.4kH/s 3711686 5ab59204881f 1/1 7 donor_whale +42NpvKMH...zAXwCRSb 2026-07-06 02:45:11 4068.7kH/s 3711646 59dcf8fdfa40 1/1 7 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-06 01:42:38 4134.7kH/s 3711608 ab793a23db28 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-06 00:44:02 4070.4kH/s 3711585 401ef2a0a658 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-05 23:44:14 4441.2kH/s 3711555 a2989235bed9 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-05 22:34:15 1939.2kH/s 3711524 d27aedb98c7e 1/1 7 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-05 20:34:06 1459.8kH/s 3711471 d5c93406e752 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-05 19:34:40 1370.8kH/s 3711445 5e71100a167b 1/1 1 donor_mega +464Bdn7D...wTbYVfF1 2026-07-05 18:32:17 1596.4kH/s 3711417 a25853717561 1/1 32 donor_vip +46PsTAqp...o2VDhm5j 2026-07-05 17:08:32 1875.2kH/s 3711385 86031b5617b5 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-05 16:05:43 4343.6kH/s 3711359 37a41d675628 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-05 15:07:13 5646.2kH/s 3711315 b1fafa81987e 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-07-05 14:04:41 3157.4kH/s 3711287 5702c9f9d71c 1/1 9 donor_whale +42Mk3F3y...Q6fgUTJr 2026-07-05 12:26:34 5586.2kH/s 3711232 a4e31cf1e679 1/1 9 donor_whale +42mefDQX...pJw9nygF 2026-07-05 11:24:16 5486.0kH/s 3711190 df843aa0649c 1/1 9 donor_whale +42Mk3F3y...Q6fgUTJr 2026-07-05 10:21:13 3521.9kH/s 3711161 73393b034c5d 1/1 9 donor_whale +42m2kLta...aDULT2Qj 2026-07-05 08:28:13 5563.2kH/s 3711101 27263b799ab2 1/1 31 donor_vip +4AEAX3qs...vTU56zMr 2026-07-05 07:25:13 4186.3kH/s 3711058 8edaf4bfd596 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-05 06:22:31 5813.3kH/s 3711030 11748c447b64 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-07-05 05:19:41 5329.5kH/s 3711003 03d5b07ec833 1/1 10 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-05 04:21:12 5781.6kH/s 3710975 f40d8d994ac2 1/1 10 donor_whale +49fV8TjN...GSgrDzrU 2026-07-05 03:19:12 3495.7kH/s 3710946 09eb5117649a 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-05 01:54:13 5566.4kH/s 3710886 5108e3acf453 1/1 1 donor_mega +4AGJScWS...f6SvY5p5 2026-07-05 00:52:03 4592.6kH/s 3710860 75a3d72d85a7 1/1 4 mvp +48M2j8Gj...d8KgGBwa 2026-07-04 23:50:11 3380.1kH/s 3710836 e51767bb3c19 1/1 1 donor_mega +46AdMVVk...KRL9YFCm 2026-07-04 22:15:13 5449.8kH/s 3710795 df6aaba9798f 1/1 33 donor_vip +47NF5Nbe...nMs9DDJU 2026-07-04 21:12:33 4244.8kH/s 3710764 c441cc7069f4 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-04 20:09:16 5722.7kH/s 3710738 481d7055ed4d 1/1 1 donor_mega +49fV8TjN...GSgrDzrU 2026-07-04 19:07:14 4354.7kH/s 3710715 5d9a5cd524d0 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-04 18:05:10 5792.9kH/s 3710691 be664d2f6d89 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-07-04 17:02:34 5496.0kH/s 3710661 6f23e466e59a 1/1 7 donor_whale +42mefDQX...pJw9nygF 2026-07-04 15:59:14 4192.8kH/s 3710631 73152d1c0bea 1/1 69 donor +48M2j8Gj...d8KgGBwa 2026-07-04 14:56:42 3647.8kH/s 3710595 ca6cfc4dbeab 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-04 13:57:31 6518.6kH/s 3710556 6b4e81eedc64 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-04 12:54:35 6638.3kH/s 3710529 c228700a4513 1/1 7 donor_whale +42mefDQX...pJw9nygF 2026-07-04 11:51:15 5182.2kH/s 3710485 8a392ceaacd1 1/1 7 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-04 10:48:14 3718.6kH/s 3710444 6bac328ac5c8 1/1 7 donor_whale +47NF5Nbe...nMs9DDJU 2026-07-04 08:47:15 3592.9kH/s 3710370 fbd3c7b2495c 1/1 7 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-04 07:44:15 3798.2kH/s 3710328 a541a22bd614 1/1 7 donor_whale +48wF5CTP...zF7tEmWC 2026-07-04 06:41:32 3749.1kH/s 3710297 dfaf482a7146 1/1 7 donor_whale +43tg9ebV...GLspBx9P 2026-07-04 05:38:13 3856.4kH/s 3710269 e6265bc08ce6 1/1 69 donor +48M2j8Gj...d8KgGBwa 2026-07-04 04:35:39 3674.6kH/s 3710241 cbee7c775ea3 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-04 03:36:29 3768.7kH/s 3710215 3683e68ea87c 1/1 6 donor_whale +42mefDQX...pJw9nygF 2026-07-04 02:33:31 3770.1kH/s 3710187 8b53e72a06d0 1/1 7 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-04 01:31:11 3909.3kH/s 3710153 9adbaa90197f 1/1 7 donor_whale +45xA3Kgd...7Ma7ttaf 2026-07-04 00:28:31 3831.2kH/s 3710120 52b7168e2df4 1/1 32 donor_vip +47NF5Nbe...nMs9DDJU 2026-07-03 23:26:11 3460.3kH/s 3710093 8860818ce1b5 1/1 7 donor_whale +4AyiUbKF...uJpsC4ym 2026-07-03 22:24:10 3404.2kH/s 3710061 04355cda07b2 2/1 30 donor_vip +46Rb9Hjc...57AFUnq5 2026-07-03 21:22:10 3099.6kH/s 3710033 4592806beafb 1/1 7 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-03 20:20:11 2919.7kH/s 3709992 f56d36542402 1/1 7 donor_whale +42NpvKMH...zAXwCRSb 2026-07-03 19:18:11 3128.7kH/s 3709966 77ca738d2173 1/1 7 donor_whale +421n6hRs...61UsZuDG 2026-07-03 18:15:13 3405.6kH/s 3709938 905f3bbe4c52 1/1 7 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-03 17:13:08 2981.4kH/s 3709903 61d479c9847e 1/1 7 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-03 16:10:37 2904.1kH/s 3709875 4dd4c261e4f6 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-03 15:11:38 3437.4kH/s 3709846 e8febb283003 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-03 14:12:13 2894.7kH/s 3709825 97b4eb64b10d 1/1 7 donor_whale +42mefDQX...pJw9nygF 2026-07-03 13:10:11 3401.5kH/s 3709788 c82d550762c5 1/1 7 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-03 12:07:28 3811.3kH/s 3709756 6766a3d93123 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-03 11:04:12 4149.4kH/s 3709729 32f461cc3f58 1/1 7 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-03 10:01:37 3792.3kH/s 3709700 5aaf70216e70 1/1 7 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-03 09:03:10 4084.2kH/s 3709669 173109d3ad3c 1/1 7 donor_whale +421n6hRs...61UsZuDG 2026-07-03 07:14:11 3705.4kH/s 3709608 e21e75784326 2/1 6 donor_whale +47NF5Nbe...nMs9DDJU 2026-07-03 06:11:27 3856.5kH/s 3709564 31e9a3ea930d 1/1 7 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-03 05:08:35 4249.9kH/s 3709527 2cc61c11cc4d 2/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-03 04:10:08 3726.1kH/s 3709496 970bca01f175 1/1 1 donor_mega +4AyiUbKF...uJpsC4ym 2026-07-03 03:08:08 4048.8kH/s 3709465 437b23021cbb 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-03 02:06:06 3982.2kH/s 3709432 90e47ed15798 1/1 7 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-03 01:03:28 4210.5kH/s 3709400 49b63e40280a 2/1 6 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-02 21:34:13 3744.1kH/s 3709303 86f65a922b79 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-07-02 20:31:11 4243.1kH/s 3709265 4be8eb047b23 2/1 7 donor_whale +42NpvKMH...zAXwCRSb 2026-07-02 18:45:10 3995.9kH/s 3709204 e44d0baed71a 1/1 12 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-02 17:35:10 4976.9kH/s 3709174 f1af4634d12f 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-07-02 16:33:11 4907.7kH/s 3709150 b2bbb1e4b758 1/1 12 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-02 15:30:13 5143.5kH/s 3709124 1473c0648f01 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-02 14:28:10 4125.4kH/s 3709092 4c85ea133e11 1/1 11 donor_whale +42NpvKMH...zAXwCRSb 2026-07-02 13:26:10 2627.6kH/s 3709067 88f37509cf60 1/1 32 donor_vip +48wF5CTP...zF7tEmWC 2026-07-02 09:21:47 4962.7kH/s 3708961 ef46db169bbd 1/1 33 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-02 08:18:42 4435.8kH/s 3708929 22cc13c0f9e5 2/1 1 donor_mega +45wQcnHH...kR5qUREN 2026-07-02 07:16:09 4398.7kH/s 3708893 103215eefec4 1/1 33 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-02 06:14:06 4630.4kH/s 3708860 0efac6463ac2 2/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-02 05:11:07 4696.5kH/s 3708824 bc0fee2bd4e3 1/1 12 donor_whale +47NF5Nbe...nMs9DDJU 2026-07-02 04:08:50 4420.1kH/s 3708795 64e2c1ab92ad 1/1 11 donor_whale +47NF5Nbe...nMs9DDJU 2026-07-02 03:10:07 4677.9kH/s 3708752 d72879a410c8 1/1 71 donor +42NpvKMH...zAXwCRSb 2026-07-02 02:07:20 4397.6kH/s 3708720 c62743253fdc 1/1 11 donor_whale +4Arsu3rc...wUtCc5e9 2026-07-02 01:05:09 4868.1kH/s 3708693 b123772973d0 1/1 73 donor +47NF5Nbe...nMs9DDJU 2026-07-02 00:03:07 5072.1kH/s 3708659 66b2055ca39b 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-01 23:00:24 4746.2kH/s 3708625 f462821d41a5 1/1 11 donor_whale +43CcbPH8...uQWupVW5 2026-07-01 21:58:09 4641.5kH/s 3708595 725a93cfcd6f 1/1 11 donor_whale +42mefDQX...pJw9nygF 2026-07-01 20:55:14 4872.2kH/s 3708568 95a97190b888 1/1 11 donor_whale +48MKrUo9...fEagtDE8 2026-07-01 19:52:32 5000.3kH/s 3708537 fd10ddc61bbd 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-01 18:49:13 4578.9kH/s 3708510 072c604f42ed 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-07-01 17:47:12 4415.5kH/s 3708479 d1546723a393 1/1 11 donor_whale +42NpvKMH...zAXwCRSb 2026-07-01 16:44:28 5219.3kH/s 3708449 9d2942aac9a2 1/1 11 donor_whale +43CcbPH8...uQWupVW5 2026-07-01 15:42:07 4925.2kH/s 3708419 0afc7962ea92 1/1 11 donor_whale +42NpvKMH...zAXwCRSb 2026-07-01 14:39:14 4400.7kH/s 3708390 dbd9232d943a 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-01 13:36:13 5004.8kH/s 3708360 7b35cfbcd930 1/1 1 donor_mega +487SyiQC...aSGcaBDE 2026-07-01 12:01:35 4628.1kH/s 3708312 713fd9f6b7bc 1/1 31 donor_vip +43CcbPH8...uQWupVW5 2026-07-01 10:58:12 4708.5kH/s 3708272 4b3909878c23 2/1 10 donor_whale +421n6hRs...61UsZuDG 2026-07-01 09:55:14 4388.6kH/s 3708240 e8dc30e0f265 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-01 07:50:39 4297.4kH/s 3708177 0714df5ccb5a 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-01 06:51:13 4716.9kH/s 3708143 ae3726bbc92e 1/1 11 donor_whale +42NpvKMH...zAXwCRSb 2026-07-01 05:49:11 4736.9kH/s 3708115 76208f735086 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-01 04:46:38 4343.3kH/s 3708083 447e72b4ffc4 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-01 03:26:10 4593.0kH/s 3708049 8c0546a9c51c 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-07-01 01:01:11 4777.2kH/s 3707988 43b546fec12a 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-30 23:58:39 4650.9kH/s 3707955 cc4063a12d4e 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-30 22:59:32 4659.9kH/s 3707932 52152d206efd 1/1 1 donor_mega +46PsTAqp...o2VDhm5j 2026-06-30 21:56:33 4025.4kH/s 3707902 99ba0edc0466 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-30 20:54:18 4382.3kH/s 3707870 2310869ae5e0 1/1 31 donor_vip +43N8v4Ma...277zUwJq 2026-06-30 19:51:16 4804.3kH/s 3707839 87beb66fa2c9 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-30 18:48:40 4974.3kH/s 3707813 1da0ca2b1554 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-30 17:50:01 4866.5kH/s 3707787 98a29f040926 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-30 16:50:53 4523.2kH/s 3707757 871a87c0c9bc 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-30 15:52:01 4747.0kH/s 3707729 74236fb5c794 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-30 14:52:31 6496.8kH/s 3707696 e1bdbb25d903 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-06-30 13:50:14 4845.1kH/s 3707670 a82f35ffcab2 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-30 12:47:42 6580.7kH/s 3707639 b64219b6841e 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-06-30 11:44:14 6210.8kH/s 3707603 07f48b5e9332 1/1 9 donor_whale +47NF5Nbe...nMs9DDJU 2026-06-30 10:41:13 6431.2kH/s 3707569 a5e726901fc5 1/1 30 donor_vip +46Rb9Hjc...57AFUnq5 2026-06-30 09:39:11 7419.4kH/s 3707526 6624b8829d45 1/1 10 donor_whale +49YoCEDi...x97dHeGQ 2026-06-30 08:36:12 6851.5kH/s 3707489 51467dafbc3e 1/1 31 donor_vip +46Rb9Hjc...57AFUnq5 2026-06-30 07:33:12 7202.7kH/s 3707449 dab23270dce6 1/1 10 donor_whale +42NpvKMH...zAXwCRSb 2026-06-30 06:30:30 4925.2kH/s 3707408 eeb330f7d725 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-30 05:27:12 6971.9kH/s 3707376 016e4109227d 1/1 1 donor_mega +4AyiUbKF...uJpsC4ym 2026-06-30 04:22:29 5183.3kH/s 3707348 438b5b2b9427 1/1 30 donor_vip +46Rb9Hjc...57AFUnq5 2026-06-30 03:05:08 3620.4kH/s 3707307 27c88d873814 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-30 01:12:09 7427.4kH/s 3707246 553086d13155 1/1 1 donor_mega +46PsTAqp...o2VDhm5j 2026-06-30 00:09:30 6808.9kH/s 3707223 a7c6270b325e 1/1 30 donor_vip +43nvW9WJ...e7SmCf3o 2026-06-29 23:07:10 5062.6kH/s 3707189 2f18af79c0fa 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-29 22:04:39 4715.0kH/s 3707172 43b2dc9afc6e 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-29 21:05:40 5623.8kH/s 3707144 dff8817f7325 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-29 20:07:02 5217.6kH/s 3707116 f795cf38e930 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-29 19:08:14 6630.4kH/s 3707084 e798a0ecf335 1/1 1 donor_mega +487SyiQC...aSGcaBDE 2026-06-29 18:05:37 5720.3kH/s 3707059 107b07483fb5 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-29 17:02:42 5321.6kH/s 3707036 eb1da4d70503 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-29 16:03:39 4734.2kH/s 3707009 0e798c8ac7f8 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-29 15:04:41 6302.9kH/s 3706982 893ef94e7563 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-06-29 14:01:13 5746.6kH/s 3706949 4df6237bc45e 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-29 12:58:32 7342.3kH/s 3706916 49e291e75b25 1/1 1 donor_mega +42NJbX1p...JBe7i8b2 2026-06-29 11:55:13 7095.2kH/s 3706873 320da7349460 1/1 30 donor_vip +46Rb9Hjc...57AFUnq5 2026-06-29 10:52:32 5051.7kH/s 3706843 72ca4b5bf741 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-29 09:49:45 4757.0kH/s 3706826 d1938b506e55 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-29 08:50:41 3758.8kH/s 3706797 1c044255ae5c 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-29 07:18:39 5049.2kH/s 3706745 03a085233423 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-29 06:19:38 4947.5kH/s 3706713 3fff24491636 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-29 05:21:11 6786.6kH/s 3706679 a10539fa7c43 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-06-29 04:19:10 6886.4kH/s 3706656 4c5ced4c2d7f 1/1 10 donor_whale +42Mk3F3y...Q6fgUTJr 2026-06-29 03:16:11 4859.5kH/s 3706627 4ae54aa39d82 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-29 02:13:11 6471.5kH/s 3706597 f36bd905d0e9 1/1 1 donor_mega +49fV8TjN...GSgrDzrU 2026-06-29 01:10:11 4708.6kH/s 3706572 309a101871aa 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-29 00:07:37 4975.8kH/s 3706543 caf7a3396b96 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-28 23:09:10 6604.7kH/s 3706515 08ab27d864c4 1/1 1 donor_mega +4AyiUbKF...uJpsC4ym 2026-06-28 22:06:12 4652.8kH/s 3706485 045cc0211d53 1/1 27 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-28 21:03:13 4209.1kH/s 3706452 f96c1788a3de 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-06-28 19:42:59 6600.5kH/s 3706418 a538e80a81d4 1/1 10 donor_whale +47NF5Nbe...nMs9DDJU 2026-06-28 18:43:33 7123.9kH/s 3706391 1509a42bd896 1/1 9 donor_whale +42mefDQX...pJw9nygF 2026-06-28 17:41:11 6628.2kH/s 3706358 d4763945c93a 1/1 8 donor_whale +49fV8TjN...GSgrDzrU 2026-06-28 16:38:33 4480.7kH/s 3706324 cf0bab3a0925 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-28 15:35:37 5082.8kH/s 3706290 544aede7980c 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-28 14:36:12 5666.3kH/s 3706260 c5f458dced52 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-06-28 13:30:31 6564.5kH/s 3706221 50fbe3497686 1/1 10 donor_whale +42NpvKMH...zAXwCRSb 2026-06-28 12:28:11 4691.5kH/s 3706186 f585882cbbde 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-28 11:25:39 3742.8kH/s 3706154 03bcc62458e9 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-28 09:36:14 3620.4kH/s 3706103 6f74e37550a2 1/1 1 donor_mega +43CcbPH8...uQWupVW5 2026-06-28 08:18:11 4577.1kH/s 3706056 ab440fd05b0a 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-28 07:15:11 6425.0kH/s 3706028 e9de85274bf4 1/1 1 donor_mega +49fV8TjN...GSgrDzrU 2026-06-28 06:12:12 4782.6kH/s 3706000 d2172377d98e 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-28 05:09:39 4513.6kH/s 3705969 77be0d3b9b39 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-28 04:10:56 4570.5kH/s 3705943 4d3df14d63ff 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-28 03:11:35 5092.0kH/s 3705919 f171345c7e53 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-28 02:13:09 6429.0kH/s 3705901 b36e6c055456 1/1 1 donor_mega +43CcbPH8...uQWupVW5 2026-06-28 01:11:10 6553.4kH/s 3705873 f3b0e9ca51a9 1/1 10 donor_whale +421n6hRs...61UsZuDG 2026-06-28 00:09:09 4794.0kH/s 3705841 3c282565aaef 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-27 23:07:09 6477.6kH/s 3705804 2c06e4374eba 1/1 1 donor_mega +4B2Avc2j...5JCEaaNs 2026-06-27 22:04:12 3406.0kH/s 3705774 563caffa3bb8 1/1 30 donor_vip +43nvW9WJ...e7SmCf3o 2026-06-27 20:22:12 4874.4kH/s 3705732 676f9749e727 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-27 19:19:13 6425.9kH/s 3705707 edbb7afdf690 1/1 1 donor_mega +43nvW9WJ...e7SmCf3o 2026-06-27 18:16:34 6957.1kH/s 3705676 45e89b8cca16 1/1 29 donor_vip +49YoCEDi...x97dHeGQ 2026-06-27 17:14:29 4715.3kH/s 3705639 04632428ff7a 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-27 16:11:39 4907.5kH/s 3705608 cfe767f82ae5 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-27 15:12:29 5060.9kH/s 3705577 71443f7ca0be 1/1 1 donor_mega +4AyiUbKF...uJpsC4ym 2026-06-27 14:02:10 4512.3kH/s 3705539 01004604c2ee 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-27 12:59:39 4565.1kH/s 3705516 7827ab009aed 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-27 12:00:30 7670.3kH/s 3705472 6fad4cc4df05 1/1 1 donor_mega +45wQcnHH...kR5qUREN 2026-06-27 10:58:27 7495.9kH/s 3705432 acef0fefd1a6 1/1 72 donor +421n6hRs...61UsZuDG 2026-06-27 09:55:33 5596.9kH/s 3705398 e19b29d8311c 1/1 29 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-27 08:52:13 3389.9kH/s 3705351 3b735e4caeb2 1/1 29 donor_vip +4AEAX3qs...vTU56zMr 2026-06-27 07:19:12 6247.4kH/s 3705292 98109da7f4a4 1/1 31 donor_vip +49YoCEDi...x97dHeGQ 2026-06-27 06:17:10 6601.4kH/s 3705260 9ea78cbd987b 1/1 31 donor_vip +47NF5Nbe...nMs9DDJU 2026-06-27 05:14:32 6670.9kH/s 3705225 dfe8e05fa56b 1/1 10 donor_whale +49fV8TjN...GSgrDzrU 2026-06-27 04:12:09 5562.0kH/s 3705191 7a9702fba949 1/1 71 donor +48M2j8Gj...d8KgGBwa 2026-06-27 03:09:36 5489.5kH/s 3705157 bd9690414e3f 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-27 02:10:35 5345.9kH/s 3705140 392abadd0eef 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-27 01:11:36 5307.9kH/s 3705115 0bdb6ab5506b 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-27 00:13:09 7195.3kH/s 3705088 222b8141b316 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-06-26 23:10:28 7093.3kH/s 3705049 e66abb166599 1/1 11 donor_whale +48wF5CTP...zF7tEmWC 2026-06-26 22:08:10 5395.4kH/s 3705015 6f448ff46d08 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-26 21:05:40 4856.9kH/s 3704988 b420bdbc3e3b 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-26 20:06:33 7296.1kH/s 3704948 dc02a50b334f 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-06-26 19:04:14 6811.7kH/s 3704921 04ed10f8628d 1/1 10 donor_whale +42Mk3F3y...Q6fgUTJr 2026-06-26 18:01:12 7055.3kH/s 3704897 d74f82bf6f70 1/1 10 donor_whale +42mefDQX...pJw9nygF 2026-06-26 16:58:16 6967.0kH/s 3704857 222d35d8ee37 1/1 10 donor_whale +45yonJgZ...41NDuzhs 2026-06-26 15:55:14 7050.3kH/s 3704834 d1faa08bcdcf 1/1 73 donor +47sctNyW...JBFt8g8K 2026-06-26 14:52:33 5307.9kH/s 3704803 17ea01377db2 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-26 13:49:59 4590.5kH/s 3704783 9cea29d7d0dc 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-26 12:50:37 6099.3kH/s 3704740 fbbb29c40520 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-06-26 11:47:12 6314.0kH/s 3704711 89d71ef56c0d 1/1 32 donor_vip +47d4QRof...jL5UqAKj 2026-06-26 10:44:32 5649.5kH/s 3704675 2933958a0f57 1/1 70 donor +48M2j8Gj...d8KgGBwa 2026-06-26 09:42:12 6820.6kH/s 3704649 6e0f106ff218 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-06-26 08:39:33 4903.8kH/s 3704617 91a3bc7543b1 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-26 07:36:39 5023.6kH/s 3704593 e06047d81ded 1/1 1 donor_mega diff --git a/docs/research/xvb-delivery-study/data/winners-20260812.txt b/docs/research/xvb-delivery-study/data/winners-20260812.txt new file mode 100644 index 00000000..e69de29b diff --git a/docs/research/xvb-delivery-study/data/winners-archive-20260804.txt b/docs/research/xvb-delivery-study/data/winners-archive-20260804.txt new file mode 100644 index 00000000..3e304b60 --- /dev/null +++ b/docs/research/xvb-delivery-study/data/winners-archive-20260804.txt @@ -0,0 +1,1000 @@ +48M2j8Gj...d8KgGBwa 2026-08-04 01:11:01 6040.9kH/s 3732427 ecae1a4d62d0 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-08-04 00:09:02 4709.8kH/s 3732397 42c1c39542c4 1/1 67 donor +48M2j8Gj...d8KgGBwa 2026-08-03 23:06:13 5861.4kH/s 3732359 d28fc5e9f203 1/1 1 donor_mega +4B2Avc2j...5JCEaaNs 2026-08-03 22:03:18 5653.6kH/s 3732326 29ea43b12fd9 1/1 27 donor_vip +49YoCEDi...x97dHeGQ 2026-08-03 21:01:03 5258.7kH/s 3732286 b348a6d619cb 1/1 28 donor_vip +43tg9ebV...GLspBx9P 2026-08-03 19:59:06 5760.0kH/s 3732264 91d12269741c 1/1 28 donor_vip +42mefDQX...pJw9nygF 2026-08-03 18:57:02 4729.7kH/s 3732235 84c584ff72f9 1/1 12 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-03 17:55:04 6392.3kH/s 3732213 4ce709478ad3 1/1 1 donor_mega +4B2Avc2j...5JCEaaNs 2026-08-03 16:53:07 6185.2kH/s 3732175 b651f1edbc30 1/1 12 donor_whale +48wF5CTP...zF7tEmWC 2026-08-03 15:51:02 3699.7kH/s 3732145 d56dc08ea269 1/1 12 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-03 14:14:03 6073.0kH/s 3732109 a5719b25d36c 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-08-03 13:12:07 4805.5kH/s 3732076 4863e9f2f798 1/1 12 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-03 12:09:29 4893.5kH/s 3732049 e8fa24d95fd6 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-03 11:10:43 4199.4kH/s 3732017 b75ad1bc1c4d 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-03 08:32:13 6233.3kH/s 3731922 d9950bafbfcc 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-08-03 07:30:03 5865.0kH/s 3731888 3f9c4db049f8 1/1 12 donor_whale +47NF5Nbe...nMs9DDJU 2026-08-03 06:28:02 4713.6kH/s 3731854 9d964d6a648b 1/1 12 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-03 05:25:29 5043.2kH/s 3731830 11a3d7d4c4fb 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-03 04:26:28 4719.6kH/s 3731798 5e9ef6b540d2 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-03 03:28:03 5199.8kH/s 3731766 2c33a5998093 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-08-03 02:26:02 4742.2kH/s 3731732 5bc6706aa1b2 1/1 13 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-03 01:24:03 6000.7kH/s 3731707 d5f4d770974a 1/1 1 donor_mega +4B2Avc2j...5JCEaaNs 2026-08-03 00:22:01 5125.7kH/s 3731673 c02b377dc667 1/1 13 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-02 23:19:09 4643.3kH/s 3731648 476af7d92b47 1/1 1 donor_mega +48LNi6pk...5DomVmR2 2026-08-02 22:00:02 4996.1kH/s 3731602 6f36e744e0e5 1/1 13 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-02 20:58:03 6325.0kH/s 3731575 70af188a8e3d 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-08-02 19:56:02 5036.9kH/s 3731542 c7a057a52ac8 1/1 12 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-02 18:54:04 5746.7kH/s 3731516 fcc0bbf16add 1/1 1 donor_mega +45qivXhp...BSS1mtoq 2026-08-02 17:52:02 4381.6kH/s 3731483 31880406b4f3 1/1 29 donor_vip +48M2j8Gj...d8KgGBwa 2026-08-02 16:49:32 4993.1kH/s 3731461 0c0bd33c6913 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-02 15:51:03 5913.8kH/s 3731433 509703043f79 1/1 1 donor_mega +45xA3Kgd...7Ma7ttaf 2026-08-02 14:48:14 4680.4kH/s 3731392 d2db8559ac56 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-08-02 13:46:03 6087.7kH/s 3731362 4f654ce35d9f 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-08-02 12:44:04 6109.2kH/s 3731335 0b6c8fce8bf1 1/1 11 donor_whale +464Bdn7D...wTbYVfF1 2026-08-02 11:42:04 4871.3kH/s 3731302 d4e4e15d7790 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-08-02 10:39:14 6038.9kH/s 3731272 9ab60d422b37 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-08-02 09:36:28 6151.4kH/s 3731255 fa1591d46a4d 1/1 32 donor_vip +42NpvKMH...zAXwCRSb 2026-08-02 08:37:14 4839.1kH/s 3731234 09eac8f7a913 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-02 07:35:02 5673.8kH/s 3731199 ab14640f4711 1/1 1 donor_mega +49fV8TjN...GSgrDzrU 2026-08-02 06:33:00 5817.7kH/s 3731171 aa2848c4ad65 1/1 12 donor_whale +43nvW9WJ...e7SmCf3o 2026-08-02 05:31:01 4810.8kH/s 3731140 7d8da011425b 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-08-02 04:28:27 4649.0kH/s 3731115 1891259c67ad 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-02 03:29:59 5801.7kH/s 3731096 115611c3cc7b 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-08-02 02:28:06 4056.2kH/s 3731076 cc4047e26765 1/1 12 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-02 01:25:35 4588.3kH/s 3731047 f5e60d55f38f 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-02 00:26:34 4828.3kH/s 3731025 49b84d8ea745 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-01 23:27:59 5592.5kH/s 3730997 436a2e394e57 1/1 1 donor_mega +48LNi6pk...5DomVmR2 2026-08-01 22:26:02 5634.4kH/s 3730966 a06ad1657a54 1/1 12 donor_whale +48wF5CTP...zF7tEmWC 2026-08-01 21:24:01 5046.5kH/s 3730908 d9720bb7bdbe 1/1 12 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-01 20:21:16 6262.1kH/s 3730866 709c4007dfaa 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-08-01 19:19:01 6015.7kH/s 3730838 b83575d7b896 1/1 31 donor_vip +48wF5CTP...zF7tEmWC 2026-08-01 18:16:13 5560.2kH/s 3730804 b258eb4cbafb 1/1 12 donor_whale +49fSMFrM...c8i6VN6W 2026-08-01 17:13:10 4851.3kH/s 3730777 783c8625945a 1/1 73 donor +48M2j8Gj...d8KgGBwa 2026-08-01 16:10:28 4573.3kH/s 3730736 68b289eaa524 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-01 15:11:26 4289.6kH/s 3730702 624d82c2fc4f 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-01 14:12:27 4442.9kH/s 3730670 9d263791585b 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-01 13:14:03 5913.4kH/s 3730628 190980976116 1/1 1 donor_mega +4B2Avc2j...5JCEaaNs 2026-08-01 12:12:01 5636.2kH/s 3730593 596f02e8be9d 1/1 12 donor_whale +4AYJotaL...USi2XQ7u 2026-08-01 11:10:00 6189.8kH/s 3730561 86df4788f920 1/1 73 donor +42NpvKMH...zAXwCRSb 2026-08-01 10:08:03 5228.3kH/s 3730526 acbcd1c9d622 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-01 09:05:28 5121.2kH/s 3730491 5c8834bfe8ad 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-01 08:06:13 6130.5kH/s 3730458 2ad86adc9800 1/1 1 donor_mega +48xVox2n...oQM27PR1 2026-08-01 07:04:01 5991.4kH/s 3730423 5219af491e93 1/1 27 donor_vip +43CcbPH8...uQWupVW5 2026-08-01 06:02:00 6341.9kH/s 3730391 994b6cb19462 1/1 11 donor_whale +46Rb9Hjc...57AFUnq5 2026-08-01 05:00:00 5293.7kH/s 3730373 ca46424ef040 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-08-01 03:57:25 5412.4kH/s 3730346 0bb6d8c29a4a 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-08-01 02:59:00 6054.6kH/s 3730319 cc40499d15ee 1/1 1 donor_mega +49fV8TjN...GSgrDzrU 2026-08-01 01:56:58 6072.3kH/s 3730280 bdacc98099f8 1/1 11 donor_whale +42Mk3F3y...Q6fgUTJr 2026-08-01 00:55:01 5771.5kH/s 3730246 a65cef6fc99e 1/1 11 donor_whale +4B2Avc2j...5JCEaaNs 2026-07-31 23:52:10 4308.9kH/s 3730223 d7d0fafa2da8 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-31 22:50:01 5843.2kH/s 3730196 3071b0f5c86c 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-07-31 21:47:31 5922.4kH/s 3730156 2cf10a96652b 1/1 11 donor_whale +47NF5Nbe...nMs9DDJU 2026-07-31 20:49:03 4750.5kH/s 3730121 dffb51a21341 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-31 19:47:03 5647.0kH/s 3730101 05c020d9b914 1/1 1 donor_mega +4B9oJwgd...sPp6joE1 2026-07-31 18:44:56 5993.1kH/s 3730080 3ce3cbaf769e 1/1 176 vip +48LNi6pk...5DomVmR2 2026-07-31 17:43:04 4637.2kH/s 3730051 8c9d97f967dd 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-31 16:40:19 5644.5kH/s 3730026 79e07d52373e 1/1 1 donor_mega +43CcbPH8...uQWupVW5 2026-07-31 15:38:01 5851.9kH/s 3729999 7c4952c75882 1/1 11 donor_whale +48wF5CTP...zF7tEmWC 2026-07-31 14:35:12 5678.2kH/s 3729973 f66ee7b8d61c 1/1 11 donor_whale +49fV8TjN...GSgrDzrU 2026-07-31 13:33:00 5682.9kH/s 3729940 ce2beb19813a 1/1 11 donor_whale +48wF5CTP...zF7tEmWC 2026-07-31 12:30:12 4565.6kH/s 3729906 edc7e4829da3 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-31 11:28:01 5850.9kH/s 3729863 3a9374bf338b 1/1 1 donor_mega +48LNi6pk...5DomVmR2 2026-07-31 10:26:00 4509.4kH/s 3729831 cbc5b7258d11 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-31 09:24:02 5863.5kH/s 3729788 a7d28269f920 1/1 1 donor_mega +43CcbPH8...uQWupVW5 2026-07-31 08:21:14 4662.9kH/s 3729763 b9abc710d0f6 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-31 07:18:39 3356.3kH/s 3729737 18d4bb8cbc31 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-31 05:57:00 5666.3kH/s 3729684 ff8e7b23403d 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-07-31 04:54:59 3965.2kH/s 3729654 d4fbf85a6d0d 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-31 03:29:10 6337.9kH/s 3729612 91312e7b2025 1/1 11 donor_whale +48LNi6pk...5DomVmR2 2026-07-31 02:27:01 4989.0kH/s 3729573 9973ced663d1 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-31 01:24:27 4722.8kH/s 3729548 2f312dc7ea1d 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-31 00:25:26 4594.2kH/s 3729521 80107dcdd513 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-30 23:27:00 6129.5kH/s 3729489 76028171b8d3 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-07-30 22:24:14 6128.2kH/s 3729458 c6a531e1691b 1/1 11 donor_whale +42Mk3F3y...Q6fgUTJr 2026-07-30 21:22:02 4986.1kH/s 3729431 d355dbc04d3f 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-30 20:20:03 5649.5kH/s 3729403 2394df6a1c70 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-30 19:11:05 6378.5kH/s 3729367 22b11454a220 1/1 11 donor_whale +43CcbPH8...uQWupVW5 2026-07-30 18:09:09 6468.6kH/s 3729339 60a6ec305e37 1/1 11 donor_whale +42Mk3F3y...Q6fgUTJr 2026-07-30 17:07:02 4920.2kH/s 3729309 e4e811f9d612 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-30 16:05:03 5303.5kH/s 3729283 187f6abe695e 1/1 1 donor_mega +43CcbPH8...uQWupVW5 2026-07-30 15:02:12 4676.8kH/s 3729258 6d87e71b80d1 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-30 13:59:39 4585.2kH/s 3729231 e73b8ceb19e0 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-30 13:01:01 5876.6kH/s 3729202 99f3f1583580 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-07-30 11:59:03 5395.7kH/s 3729169 09a44799c73c 1/1 11 donor_whale +42NpvKMH...zAXwCRSb 2026-07-30 10:57:09 6009.4kH/s 3729139 93991a64be6d 1/1 11 donor_whale +42Mk3F3y...Q6fgUTJr 2026-07-30 09:54:59 5649.8kH/s 3729103 a1eac1baf7d1 1/1 11 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-30 08:53:01 4956.4kH/s 3729070 058309b3e9a5 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-30 07:50:29 4932.1kH/s 3729033 5c8741ec447c 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-30 06:51:59 6230.6kH/s 3728993 c6f851086803 1/1 1 donor_mega +45qivXhp...BSS1mtoq 2026-07-30 05:50:02 4459.1kH/s 3728958 0ebc874018a9 1/1 33 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-30 04:47:28 4323.8kH/s 3728936 fc026033e4c8 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-30 03:49:00 5952.9kH/s 3728912 c47af4d47503 1/1 1 donor_mega +421n6hRs...61UsZuDG 2026-07-30 02:47:00 6027.7kH/s 3728894 225092b75c51 1/1 11 donor_whale +42mefDQX...pJw9nygF 2026-07-30 01:45:01 5674.3kH/s 3728868 4c689c6e7bc7 1/1 11 donor_whale +43CcbPH8...uQWupVW5 2026-07-30 00:43:00 5849.3kH/s 3728826 e2e69f3facb3 1/1 11 donor_whale +481ELpyU...mCQhPM2f 2026-07-29 23:41:00 5538.6kH/s 3728785 79ac12977dff 1/1 32 donor_vip +45qivXhp...BSS1mtoq 2026-07-29 22:38:10 4637.7kH/s 3728751 144b310692be 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-29 21:36:02 5799.6kH/s 3728714 8a3e527a2409 1/1 1 donor_mega +421n6hRs...61UsZuDG 2026-07-29 20:33:17 5822.5kH/s 3728684 4176d740d2cf 1/1 34 donor_vip +48wF5CTP...zF7tEmWC 2026-07-29 19:31:02 4210.7kH/s 3728652 edbb72168688 1/1 32 donor_vip +42Mk3F3y...Q6fgUTJr 2026-07-29 18:13:02 5186.9kH/s 3728606 77058dabafda 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-29 17:10:40 5066.9kH/s 3728570 3064bdc4a7ed 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-29 16:12:02 5953.1kH/s 3728540 b348d893a43e 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-29 15:10:01 4708.5kH/s 3728505 1161b8e7a2a6 1/1 33 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-29 14:07:28 3816.0kH/s 3728472 51e9432f7d7a 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-29 12:21:28 4542.7kH/s 3728416 45a1181adc16 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-29 11:22:28 4355.2kH/s 3728378 cada8e88b219 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-29 10:24:01 5573.3kH/s 3728335 f18ce5ce5cec 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-07-29 09:22:07 3820.6kH/s 3728309 62a2ea0dd779 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-29 07:54:06 5943.4kH/s 3728251 7bf1f87d2003 1/1 1 donor_mega +49fV8TjN...GSgrDzrU 2026-07-29 06:52:02 4505.1kH/s 3728219 b9f37c4f8989 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-29 05:49:28 4310.1kH/s 3728193 a085ca1ea1fc 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-29 04:51:00 6140.0kH/s 3728160 38da68ca5840 1/1 1 donor_mega +464pdsyX...8QQVt1x3 2026-07-29 03:49:00 5731.5kH/s 3728132 20622ea9deea 1/1 70 donor +47NF5Nbe...nMs9DDJU 2026-07-29 02:47:01 5525.8kH/s 3728100 07c3a7dad621 1/1 9 donor_whale +45P4vJUA...TE4PUAu9 2026-07-29 01:44:55 5016.9kH/s 3728071 6998955ef2d1 1/1 167 vip +48M2j8Gj...d8KgGBwa 2026-07-29 00:42:38 4868.7kH/s 3728053 cb065a9c3967 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-28 23:44:02 5389.2kH/s 3728025 ab05415c2b1b 1/1 1 donor_mega +45qivXhp...BSS1mtoq 2026-07-28 22:41:10 5692.6kH/s 3728001 68a011e39053 1/1 31 donor_vip +48xVox2n...oQM27PR1 2026-07-28 21:39:00 5309.7kH/s 3727981 992aa5435e68 1/1 69 donor +4B2Avc2j...5JCEaaNs 2026-07-28 20:36:17 5279.3kH/s 3727951 1d72b8edc030 1/1 31 donor_vip +46Rb9Hjc...57AFUnq5 2026-07-28 19:34:03 3345.4kH/s 3727933 9514ed3ccaf2 1/1 31 donor_vip +4AYJotaL...USi2XQ7u 2026-07-28 17:43:02 4574.4kH/s 3727884 6d91e59e8633 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-28 16:41:05 5671.3kH/s 3727856 0bc82def1d08 1/1 1 donor_mega +481ELpyU...mCQhPM2f 2026-07-28 15:39:07 3677.8kH/s 3727834 868acf8de1e0 1/1 31 donor_vip +421n6hRs...61UsZuDG 2026-07-28 13:12:26 5658.3kH/s 3727773 70a65ea5e032 1/1 7 donor_whale +421n6hRs...61UsZuDG 2026-07-28 12:14:03 4776.6kH/s 3727744 de81dcc04c5f 1/1 7 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-28 11:12:00 6090.1kH/s 3727713 f3e2a0154c6d 1/1 1 donor_mega +45wQcnHH...kR5qUREN 2026-07-28 10:09:10 6301.2kH/s 3727682 f0f0f913705b 1/1 30 donor_vip +42NpvKMH...zAXwCRSb 2026-07-28 09:07:03 4890.1kH/s 3727645 0793fe1b9729 1/1 5 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-28 08:05:01 5952.8kH/s 3727611 6f345ca56d09 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-07-28 07:03:01 4896.2kH/s 3727583 e697113905a8 1/1 5 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-28 06:00:29 4755.6kH/s 3727557 8abbbe7c75b6 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-28 05:02:00 6010.8kH/s 3727526 6ca6a8aaca32 1/1 1 donor_mega +48LNi6pk...5DomVmR2 2026-07-28 04:00:00 4495.1kH/s 3727488 d8984507428a 1/1 5 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-28 02:57:27 4577.6kH/s 3727460 81deef289b97 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-28 01:58:26 4641.0kH/s 3727428 af4cf8a3f2ac 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-28 00:59:27 4354.0kH/s 3727395 fe64f01f1aac 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-28 00:00:29 4439.4kH/s 3727360 0e3b4521acd1 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-27 23:01:27 4485.3kH/s 3727328 7db427c7714d 1/1 5 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-27 22:02:12 5202.4kH/s 3727304 5faa9f8577ba 1/1 1 donor_mega +43tg9ebV...GLspBx9P 2026-07-27 21:00:02 3956.0kH/s 3727278 6ed840e22290 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-27 19:57:27 4382.1kH/s 3727252 504b5cf93efe 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-27 18:59:03 5351.0kH/s 3727239 3d383e77ec44 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-07-27 17:57:01 4937.1kH/s 3727203 1fd88daa1f49 1/1 5 donor_whale +42NpvKMH...zAXwCRSb 2026-07-27 16:55:03 3787.3kH/s 3727183 89527357cc11 1/1 5 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-27 15:52:28 2754.3kH/s 3727146 2b40ad29af20 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-27 14:12:11 4180.3kH/s 3727106 b9095b3700c6 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-07-27 13:10:03 4939.1kH/s 3727084 ae674dbff61f 1/1 5 donor_whale +48wF5CTP...zF7tEmWC 2026-07-27 12:08:01 4913.9kH/s 3727055 4ece5804c111 1/1 31 donor_vip +4AyiUbKF...uJpsC4ym 2026-07-27 11:06:01 3307.2kH/s 3727029 695ab34411fd 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-27 10:04:02 5092.8kH/s 3726994 b676ce3d9c1a 1/1 1 donor_mega +43nvW9WJ...e7SmCf3o 2026-07-27 09:02:01 4866.3kH/s 3726966 28baf765b943 1/1 30 donor_vip +42NpvKMH...zAXwCRSb 2026-07-27 07:59:25 2480.8kH/s 3726936 4293491a1a33 1/1 5 donor_whale +42NpvKMH...zAXwCRSb 2026-07-27 06:34:02 3725.9kH/s 3726891 7e24c0740589 1/1 5 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-27 05:31:27 3081.6kH/s 3726862 f0ff08618b77 1/1 5 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-27 04:22:26 3916.8kH/s 3726837 0cf2fd8034e3 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-27 03:24:00 4777.2kH/s 3726816 dc7ae22a0d5c 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-07-27 02:21:59 5133.8kH/s 3726787 1d92b0c93134 1/1 9 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-27 01:19:09 3996.6kH/s 3726758 ccebed353c33 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-27 00:16:59 5510.5kH/s 3726729 7ab0268f51e4 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-26 23:14:12 5529.2kH/s 3726693 355a4643780b 1/1 9 donor_whale +48LNi6pk...5DomVmR2 2026-07-26 22:11:58 4359.3kH/s 3726657 ff55d1517f46 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-26 21:09:15 5480.6kH/s 3726615 4d2b474a6d9b 1/1 1 donor_mega +4AYJotaL...USi2XQ7u 2026-07-26 20:07:00 5080.1kH/s 3726562 5a845fa9ce2f 1/1 34 donor_vip +43nvW9WJ...e7SmCf3o 2026-07-26 19:05:01 5829.5kH/s 3726510 a34fe1f11ec5 1/1 34 donor_vip +42NpvKMH...zAXwCRSb 2026-07-26 18:03:00 5300.4kH/s 3726463 edcb02862434 1/1 32 donor_vip +47NF5Nbe...nMs9DDJU 2026-07-26 17:01:00 5515.8kH/s 3726426 f35a9b41e28f 1/1 9 donor_whale +49fV8TjN...GSgrDzrU 2026-07-26 15:59:03 5543.8kH/s 3726392 d749d1f8c344 1/1 9 donor_whale +464Bdn7D...wTbYVfF1 2026-07-26 14:56:14 5395.6kH/s 3726360 3e1bd0ed947b 1/1 34 donor_vip +421n6hRs...61UsZuDG 2026-07-26 13:54:01 5400.9kH/s 3726325 fbfe68991165 1/1 34 donor_vip +4AGJScWS...f6SvY5p5 2026-07-26 12:51:56 4521.1kH/s 3726297 56f2a33b1d70 1/1 4 mvp +48M2j8Gj...d8KgGBwa 2026-07-26 11:50:01 3357.4kH/s 3726272 623e471b4a10 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-07-26 10:03:00 4707.8kH/s 3726222 9951637264ef 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-26 09:00:27 3246.5kH/s 3726189 7bba268a7a6d 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-26 07:36:37 4424.4kH/s 3726132 19e0a6f6568a 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-26 06:37:27 5033.7kH/s 3726098 b6229cfc474a 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-26 05:38:27 4990.5kH/s 3726070 aa5f69ccba60 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-26 04:40:08 6423.1kH/s 3726042 e54c52bc1b58 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-26 03:37:59 6059.7kH/s 3726015 5e10dcbcc796 1/1 10 donor_whale +49fV8TjN...GSgrDzrU 2026-07-26 02:35:59 4377.9kH/s 3725986 ac4db8b0bf82 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-26 01:33:38 4199.0kH/s 3725959 74bdd6959388 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-26 00:34:42 4354.9kH/s 3725924 4a89c3dd1e63 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-25 23:35:38 4419.4kH/s 3725887 4eeed55ae3cb 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-25 22:36:37 4357.9kH/s 3725866 770c761d7fb7 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-25 21:38:01 5791.5kH/s 3725832 138b19cfa901 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-07-25 20:36:02 4507.4kH/s 3725808 22a2d9b368d7 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-25 19:33:13 5915.1kH/s 3725778 cf0ffa506ef2 1/1 11 donor_whale +42Mk3F3y...Q6fgUTJr 2026-07-25 18:31:01 4719.6kH/s 3725744 a2e2bbc5aaf9 1/1 10 donor_whale +46PsTAqp...o2VDhm5j 2026-07-25 17:20:02 5036.0kH/s 3725704 d4814747586e 1/1 32 donor_vip +49fV8TjN...GSgrDzrU 2026-07-25 16:18:01 4621.3kH/s 3725676 2ebde127e5ec 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-25 15:15:28 4472.8kH/s 3725648 68c4ac42e58c 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-25 14:16:31 3690.2kH/s 3725624 f0e511b1d98d 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-25 13:07:18 5522.7kH/s 3725588 c589a19427fc 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-07-25 12:05:12 4431.5kH/s 3725552 294bf3881e36 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-25 11:02:26 4436.1kH/s 3725515 fecf5261f64c 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-25 10:03:29 3397.5kH/s 3725484 7eef4da92e64 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-25 09:04:31 4188.6kH/s 3725445 de47b156e2bd 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-25 08:06:00 5235.5kH/s 3725415 19cc42db0a92 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-07-25 07:04:03 5358.3kH/s 3725393 14146a035220 1/1 31 donor_vip +4AGJScWS...f6SvY5p5 2026-07-25 06:02:08 3880.4kH/s 3725371 f2e0ed5d059a 1/1 4 mvp +48M2j8Gj...d8KgGBwa 2026-07-25 05:00:01 4217.9kH/s 3725330 1b9fd6ee4546 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-07-25 03:57:26 5598.5kH/s 3725301 ba631411cba1 1/1 10 donor_whale +42NpvKMH...zAXwCRSb 2026-07-25 02:59:00 5823.4kH/s 3725281 54e0e644afe1 1/1 11 donor_whale +47sctNyW...JBFt8g8K 2026-07-25 01:56:11 4554.3kH/s 3725256 ea21201fd817 1/1 30 donor_vip +42Mk3F3y...Q6fgUTJr 2026-07-25 00:54:01 4041.6kH/s 3725227 5bb44d177f5c 1/1 11 donor_whale +4AEAX3qs...vTU56zMr 2026-07-24 23:36:00 5359.1kH/s 3725191 d0c0e64852d7 1/1 31 donor_vip +47NF5Nbe...nMs9DDJU 2026-07-24 22:34:01 5880.9kH/s 3725164 9752d30d2912 1/1 11 donor_whale +48wF5CTP...zF7tEmWC 2026-07-24 21:32:00 4185.9kH/s 3725130 876068c2c4a2 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-24 20:30:01 5531.2kH/s 3725099 3cf993ff565e 1/1 1 donor_mega +48LNi6pk...5DomVmR2 2026-07-24 19:28:00 5882.0kH/s 3725074 dcdf8003fdec 1/1 10 donor_whale +49fV8TjN...GSgrDzrU 2026-07-24 18:26:01 5194.2kH/s 3725036 3b55816a55d0 1/1 10 donor_whale +45qivXhp...BSS1mtoq 2026-07-24 17:16:01 3549.9kH/s 3725002 e937e887cb3a 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-24 14:36:01 5243.1kH/s 3724940 08ecd845cef7 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-24 13:33:12 5661.7kH/s 3724908 6521871487ab 1/1 10 donor_whale +42NpvKMH...zAXwCRSb 2026-07-24 12:31:02 5710.8kH/s 3724880 d282d4d0dc83 1/1 10 donor_whale +4895aAGt...g5P9n4Nq 2026-07-24 11:28:11 4555.8kH/s 3724849 eadf098703ab 1/1 70 donor +48M2j8Gj...d8KgGBwa 2026-07-24 10:25:26 4532.2kH/s 3724820 577431699d1d 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-24 09:26:28 4665.4kH/s 3724790 169bc39c4db0 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-24 08:27:26 4654.2kH/s 3724758 17b8a5bf0256 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-24 07:28:36 3609.8kH/s 3724729 f7321599ce9f 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-24 06:10:02 3524.5kH/s 3724681 a1f7f781197c 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-07-24 02:48:59 4151.2kH/s 3724611 45d6d3fa40c0 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-24 01:46:10 3632.3kH/s 3724577 261c4a0a9ed7 1/1 1 donor_mega +44aZ9ce8...i1Hxzm1M 2026-07-24 00:09:10 4292.3kH/s 3724535 6b3146bd4d08 1/1 29 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-23 23:06:59 5916.7kH/s 3724504 843f19ab4500 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-23 22:05:01 5695.6kH/s 3724471 4b61135b0d52 1/1 11 donor_whale +47NF5Nbe...nMs9DDJU 2026-07-23 21:02:59 4328.9kH/s 3724443 ec97df025ede 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-23 20:00:33 4843.7kH/s 3724416 1ed468fb2686 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-23 19:01:26 4136.4kH/s 3724389 a526977d87c3 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-23 18:02:09 5566.6kH/s 3724371 9849197d4330 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-23 17:00:01 3791.0kH/s 3724343 7a8055893792 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-23 15:51:11 5532.0kH/s 3724318 51b9d71d6c4a 1/1 1 donor_mega +49fV8TjN...GSgrDzrU 2026-07-23 14:48:27 5755.5kH/s 3724282 55b8a07547ed 1/1 11 donor_whale +49fV8TjN...GSgrDzrU 2026-07-23 13:49:00 5778.5kH/s 3724252 6f0de4ff561a 1/1 28 donor_vip +44MnN1f3...a621jwyg 2026-07-23 12:46:58 4423.9kH/s 3724222 9700a0ca36b5 1/1 4 mvp +48M2j8Gj...d8KgGBwa 2026-07-23 11:44:58 5016.3kH/s 3724191 ae5c01fa87c2 1/1 1 donor_mega +42m2kLta...aDULT2Qj 2026-07-23 10:41:58 4494.0kH/s 3724163 e21ecfd1dc66 1/1 27 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-23 09:39:36 4282.4kH/s 3724138 8cf5ec06b21a 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-23 08:40:28 3373.0kH/s 3724107 00668cfd5f25 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-23 07:24:58 3348.8kH/s 3724059 ff31a1bd3d63 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-23 05:43:01 5462.8kH/s 3724013 5614e61bc447 1/1 11 donor_whale +45wQcnHH...kR5qUREN 2026-07-23 04:40:10 4561.8kH/s 3723976 1579c895099d 1/1 27 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-23 03:37:25 4604.0kH/s 3723948 6e98b07a38d8 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-23 02:38:37 4649.6kH/s 3723916 a33598fd9ff2 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-23 01:40:00 5459.5kH/s 3723882 7a9e8203197b 1/1 1 donor_mega +48xVox2n...oQM27PR1 2026-07-23 00:38:04 4267.7kH/s 3723858 541813a7a52b 1/1 28 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-22 23:35:34 4330.4kH/s 3723832 0924ca8e429a 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-22 22:37:00 5857.5kH/s 3723796 9a5389a8b0e0 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-07-22 21:35:02 4500.2kH/s 3723763 3a54effc0012 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-22 20:33:04 5748.4kH/s 3723736 95540e9c71fc 1/1 1 donor_mega +48LNi6pk...5DomVmR2 2026-07-22 19:31:00 4717.8kH/s 3723719 c04cfd252d0a 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-22 18:28:36 4642.3kH/s 3723686 159c870ff571 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-22 17:29:36 4368.9kH/s 3723666 287168031449 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-22 16:30:38 4816.9kH/s 3723638 1428e685cb63 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-22 15:31:26 4626.1kH/s 3723619 459e2fb48c03 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-22 14:32:11 5794.8kH/s 3723593 26f0f93981bd 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-22 13:29:27 5333.2kH/s 3723570 a79162983914 1/1 11 donor_whale +42mefDQX...pJw9nygF 2026-07-22 12:30:59 3995.7kH/s 3723534 283eb8a2d6b6 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-22 11:28:26 3991.2kH/s 3723504 3160cd55ca64 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-22 10:29:28 4300.3kH/s 3723478 879d8c061dc0 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-22 09:30:29 3656.8kH/s 3723447 e28be640b303 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-22 07:59:08 5673.7kH/s 3723382 8367bdbece7e 1/1 1 donor_mega +46PsTAqp...o2VDhm5j 2026-07-22 06:57:00 4669.0kH/s 3723341 ac1eb47f1aa8 1/1 65 donor +48M2j8Gj...d8KgGBwa 2026-07-22 05:55:01 5770.7kH/s 3723304 739e92e0710a 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-07-22 04:52:26 5450.8kH/s 3723274 6d131f16f3ac 1/1 11 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-22 03:53:59 4418.7kH/s 3723247 52ef38cc2c08 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-22 02:51:31 4816.1kH/s 3723209 4690c27c00fa 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-22 01:52:35 4662.3kH/s 3723174 996944893ee6 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-22 00:53:25 4176.4kH/s 3723127 dc249379c958 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-21 23:54:26 4716.7kH/s 3723100 18d8133e2338 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-21 22:56:02 5531.2kH/s 3723057 47be0a672396 1/1 11 donor_whale +4AyiUbKF...uJpsC4ym 2026-07-21 21:54:01 4726.9kH/s 3723032 ea80fc511e15 1/1 33 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-21 20:52:08 5695.0kH/s 3722999 b357882e2814 1/1 1 donor_mega +421n6hRs...61UsZuDG 2026-07-21 19:50:00 4730.0kH/s 3722960 e3d353a96513 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-21 18:47:59 4550.9kH/s 3722925 857475dcb19c 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-21 17:45:58 4613.7kH/s 3722893 934b6efbf2df 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-21 16:43:26 4739.9kH/s 3722859 4e8e6ecf6acf 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-21 15:44:27 4882.8kH/s 3722833 3008f2578c07 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-21 14:46:01 5828.7kH/s 3722808 a7d665843aee 1/1 10 donor_whale +43CcbPH8...uQWupVW5 2026-07-21 13:44:03 5598.9kH/s 3722783 0c9e20627b7b 1/1 29 donor_vip +421n6hRs...61UsZuDG 2026-07-21 12:39:02 5831.0kH/s 3722745 e0a1a0a91c13 1/1 10 donor_whale +42mefDQX...pJw9nygF 2026-07-21 11:37:01 4829.6kH/s 3722709 bb20aa7e6ed3 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-21 10:35:01 4016.2kH/s 3722673 a67a70fad4c8 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-07-21 08:37:11 4289.6kH/s 3722604 5d212abdfdc4 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-21 07:34:27 4506.0kH/s 3722572 23928200d56c 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-21 06:35:59 5405.1kH/s 3722543 dacec3a0a77f 1/1 1 donor_mega +48LNi6pk...5DomVmR2 2026-07-21 05:33:09 5546.8kH/s 3722511 5a9739cca3eb 1/1 11 donor_whale +43CcbPH8...uQWupVW5 2026-07-21 04:30:27 5709.0kH/s 3722475 3fa849821629 1/1 12 donor_whale +47NF5Nbe...nMs9DDJU 2026-07-21 03:27:57 4404.9kH/s 3722439 347688f996e8 1/1 12 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-21 02:25:59 5705.7kH/s 3722411 ddf2425fe87a 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-07-21 01:24:00 5813.8kH/s 3722390 cf42a26e4b69 1/1 12 donor_whale +43tg9ebV...GLspBx9P 2026-07-21 00:21:59 4859.6kH/s 3722369 3491e6866485 1/1 33 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-20 23:19:35 4208.0kH/s 3722336 54e0ac1fa796 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-20 22:20:26 4220.8kH/s 3722316 256c0ba5d91e 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-20 21:21:27 4991.1kH/s 3722298 f5f79085ddab 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-20 20:22:27 4611.8kH/s 3722268 256cfee84c14 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-20 19:24:00 5603.9kH/s 3722230 f69c7a6dac0c 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-07-20 18:22:02 4470.2kH/s 3722199 914d85fec077 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-20 17:19:59 5894.2kH/s 3722172 a1b8c6fe134b 1/1 1 donor_mega +4AuNNHgo...n8VXcgEe 2026-07-20 16:17:58 5080.5kH/s 3722139 1b0896204d12 1/1 31 donor_vip +49m4aWKb...VT3dB1iR 2026-07-20 15:10:59 5847.9kH/s 3722104 b748588cd377 1/1 71 donor +486aGn4q...F8wjAE5R 2026-07-20 14:08:55 5969.8kH/s 3722078 e51bea234dac 1/1 4 mvp +42Mk3F3y...Q6fgUTJr 2026-07-20 13:06:59 5553.2kH/s 3722036 695d7c08d36e 1/1 11 donor_whale +42mefDQX...pJw9nygF 2026-07-20 12:04:59 4930.7kH/s 3721995 c8fa657040b0 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-20 11:02:26 4979.4kH/s 3721965 e9dcdc9d1152 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-20 10:04:00 6080.9kH/s 3721935 72cd9e0a8f69 1/1 1 donor_mega +45wQcnHH...kR5qUREN 2026-07-20 09:01:59 3930.2kH/s 3721902 72a481b9481d 1/1 32 donor_vip +47NF5Nbe...nMs9DDJU 2026-07-20 07:03:59 4855.8kH/s 3721840 3c9921175717 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-20 06:01:58 5331.1kH/s 3721818 823eb9c1b7de 1/1 1 donor_mega +4B2Avc2j...5JCEaaNs 2026-07-20 04:59:57 6210.2kH/s 3721796 e3d3436342b5 1/1 29 donor_vip +46Rb9Hjc...57AFUnq5 2026-07-20 03:58:06 6228.6kH/s 3721769 ab9e06c6274c 1/1 10 donor_whale +48LNi6pk...5DomVmR2 2026-07-20 02:55:57 4963.7kH/s 3721731 fb5df7f6d152 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-20 01:53:58 4126.6kH/s 3721699 40feefe40662 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-07-20 00:15:58 6406.7kH/s 3721647 451ceca4bf63 1/1 10 donor_whale +4AeEwC2U...YQyoQtr7 2026-07-19 23:14:02 5227.4kH/s 3721621 a52d7f3c706d 1/1 4 mvp +48M2j8Gj...d8KgGBwa 2026-07-19 22:11:58 5627.5kH/s 3721590 c9f38b3300b8 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-07-19 21:09:57 5643.3kH/s 3721552 6931aef5a22c 1/1 29 donor_vip +47NF5Nbe...nMs9DDJU 2026-07-19 20:07:58 5733.6kH/s 3721528 fb28ce076d4b 1/1 10 donor_whale +48LNi6pk...5DomVmR2 2026-07-19 19:05:59 5615.7kH/s 3721488 fde5ae16dd03 1/1 10 donor_whale +4298Vwxn...cJHXZb9k 2026-07-19 18:03:55 5612.0kH/s 3721460 d2ba432d75b0 1/1 178 vip +43nvW9WJ...e7SmCf3o 2026-07-19 17:01:58 5448.9kH/s 3721430 8451814bee84 1/1 30 donor_vip +48wF5CTP...zF7tEmWC 2026-07-19 15:59:09 5355.1kH/s 3721405 ff53a9546c7c 1/1 10 donor_whale +42NJbX1p...JBe7i8b2 2026-07-19 14:56:59 5190.4kH/s 3721380 b3de69d509c7 1/1 30 donor_vip +46YxbLMT...UUmVmbGn 2026-07-19 13:51:58 5864.9kH/s 3721342 3184c7cdf959 2/1 70 donor +4AEAX3qs...vTU56zMr 2026-07-19 12:49:58 3276.9kH/s 3721314 38a0c8b641ff 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-19 11:01:58 5709.5kH/s 3721272 bf28c0c09dc0 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-07-19 09:59:59 5670.2kH/s 3721245 8b19199b58c5 1/1 70 donor +42mefDQX...pJw9nygF 2026-07-19 08:58:03 4421.2kH/s 3721215 f469ec4700bc 1/1 28 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-19 07:55:59 5777.2kH/s 3721183 d13813570935 1/1 1 donor_mega +487SyiQC...aSGcaBDE 2026-07-19 06:53:10 4675.3kH/s 3721151 07b41bbdb3ce 1/1 27 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-19 05:50:25 4154.5kH/s 3721120 b00964a4674a 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-19 04:51:58 5555.9kH/s 3721083 4a8cd4b0cab0 1/1 1 donor_mega +49fV8TjN...GSgrDzrU 2026-07-19 03:49:55 4747.9kH/s 3721053 2ebbbffe54eb 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-19 02:47:24 4276.2kH/s 3721025 05bbf74c837e 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-19 01:49:07 5188.6kH/s 3720997 0248bbce4c7c 1/1 10 donor_whale +4AyiUbKF...uJpsC4ym 2026-07-19 00:47:08 4377.5kH/s 3720950 bc6c9dffb8d9 1/1 27 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-18 23:44:24 4337.9kH/s 3720917 7932e63b1a1b 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-18 22:45:57 5493.3kH/s 3720882 4965f4c63001 1/1 1 donor_mega +48C1CiKC...i9qJPCF9 2026-07-18 21:43:58 4306.9kH/s 3720855 3c97a2a4f3dd 1/1 75 donor +48M2j8Gj...d8KgGBwa 2026-07-18 20:41:38 4203.5kH/s 3720833 0525a913e879 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-18 19:42:24 4641.4kH/s 3720812 d414bfa3e054 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-18 18:44:01 5619.8kH/s 3720782 c351b2595f7c 1/1 1 donor_mega +47sctNyW...JBFt8g8K 2026-07-18 17:42:00 4027.1kH/s 3720742 630b59612166 1/1 27 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-18 16:39:25 4624.8kH/s 3720719 e05bea93bdce 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-18 15:40:26 4272.2kH/s 3720688 1776517ac4dd 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-18 14:41:35 4119.8kH/s 3720653 08b7f3178a72 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-18 13:43:01 5058.4kH/s 3720618 6a29b4bc97b1 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-18 12:40:58 5941.8kH/s 3720595 65c832683693 1/1 10 donor_whale +421n6hRs...61UsZuDG 2026-07-18 11:38:58 4223.7kH/s 3720566 a38a36362666 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-18 10:36:08 5555.3kH/s 3720538 211cc6bf2635 1/1 1 donor_mega +48LNi6pk...5DomVmR2 2026-07-18 09:33:59 6093.4kH/s 3720517 fad7967486e5 1/1 10 donor_whale +42Mk3F3y...Q6fgUTJr 2026-07-18 08:31:58 4683.7kH/s 3720478 37af4dd7244b 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-18 07:29:26 4160.9kH/s 3720453 0ba8adf8c7b4 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-18 06:30:26 4584.1kH/s 3720432 5dd77b0aca60 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-18 05:31:58 5704.3kH/s 3720404 8008e4f8b695 1/1 1 donor_mega +48b1zteM...a6BJoFL8 2026-07-18 04:29:57 5752.3kH/s 3720375 eb6db7cbcbe9 1/1 68 donor +46PsTAqp...o2VDhm5j 2026-07-18 03:27:58 5574.7kH/s 3720331 ce3461dc9491 1/1 27 donor_vip +42m2kLta...aDULT2Qj 2026-07-18 02:25:57 5921.5kH/s 3720292 dcd5dc3ec0a7 1/1 27 donor_vip +46Rb9Hjc...57AFUnq5 2026-07-18 01:23:56 4490.7kH/s 3720242 aa972db9ec4c 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-18 00:21:56 5638.4kH/s 3720215 390c14bf712f 1/1 1 donor_mega +42XnhJTN...EPxRtsmc 2026-07-17 23:20:03 5403.6kH/s 3720179 aea9d44ab542 1/1 177 vip +46Rb9Hjc...57AFUnq5 2026-07-17 22:17:58 5940.3kH/s 3720143 855a1c756e1a 1/1 9 donor_whale +48wF5CTP...zF7tEmWC 2026-07-17 21:16:08 4400.5kH/s 3720112 1738b92ff0ae 1/1 26 donor_vip +47NF5Nbe...nMs9DDJU 2026-07-17 19:55:08 5696.3kH/s 3720076 3b78e6783b76 1/1 9 donor_whale +421n6hRs...61UsZuDG 2026-07-17 18:51:25 5451.2kH/s 3720053 3e5a491fcbd0 1/1 9 donor_whale +421n6hRs...61UsZuDG 2026-07-17 17:52:58 4447.1kH/s 3720014 c2887677affb 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-17 16:50:09 5897.5kH/s 3719986 d8feb4003f12 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-17 15:47:59 5728.1kH/s 3719953 b4edeefe5c5e 1/1 8 donor_whale +421n6hRs...61UsZuDG 2026-07-17 14:45:59 5482.4kH/s 3719916 7e01d4a02ccb 1/1 28 donor_vip +42NpvKMH...zAXwCRSb 2026-07-17 13:43:27 5541.6kH/s 3719886 8aaf469913d3 1/1 8 donor_whale +42NpvKMH...zAXwCRSb 2026-07-17 12:45:00 4552.0kH/s 3719841 2a8e823af040 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-17 11:42:26 4248.3kH/s 3719811 6449b85cc2e7 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-17 10:44:01 3166.4kH/s 3719776 2e1b0b2fa9da 1/1 1 donor_mega +48LNi6pk...5DomVmR2 2026-07-17 08:27:59 5541.5kH/s 3719724 21ff13c97c12 1/1 26 donor_vip +486aGn4q...F8wjAE5R 2026-07-17 07:25:54 5273.0kH/s 3719699 e46e7eadad90 1/1 4 mvp +42NpvKMH...zAXwCRSb 2026-07-17 06:24:06 3480.9kH/s 3719666 c1dcb9f7f144 1/1 7 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-17 04:35:23 4321.6kH/s 3719605 6cdc11ea4b39 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-17 03:36:55 5260.8kH/s 3719574 5fedbe6be5f3 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-17 02:34:56 5181.3kH/s 3719535 963cdc49672e 1/1 8 donor_whale +47sctNyW...JBFt8g8K 2026-07-17 01:32:56 5048.8kH/s 3719505 81eef1f83699 1/1 27 donor_vip +47NF5Nbe...nMs9DDJU 2026-07-17 00:22:58 4210.0kH/s 3719468 cb52f4393c35 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-16 23:20:57 5234.0kH/s 3719446 dd522d1e7bfe 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-16 22:18:58 5320.6kH/s 3719413 d2ab4d1e8c0e 1/1 8 donor_whale +48wF5CTP...zF7tEmWC 2026-07-16 21:16:58 4398.2kH/s 3719379 d3d0a05acb83 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-16 20:15:00 3826.2kH/s 3719339 59450ca42519 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-16 18:58:59 2288.5kH/s 3719305 0aacecb1a97e 1/1 9 donor_whale +47NF5Nbe...nMs9DDJU 2026-07-16 16:51:59 5469.6kH/s 3719237 84f25b497474 1/1 9 donor_whale +49fV8TjN...GSgrDzrU 2026-07-16 15:49:08 4171.7kH/s 3719210 6566abce4808 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-16 14:46:25 4082.8kH/s 3719186 e7ea63461c92 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-16 13:47:59 5429.7kH/s 3719155 4e302cf3d823 1/1 1 donor_mega +421n6hRs...61UsZuDG 2026-07-16 12:46:00 4672.1kH/s 3719122 5a127a99b97e 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-16 11:44:00 5288.6kH/s 3719090 d72436140339 1/1 1 donor_mega +49YoCEDi...x97dHeGQ 2026-07-16 10:41:58 5754.7kH/s 3719063 c5202812f883 1/1 28 donor_vip +46Rb9Hjc...57AFUnq5 2026-07-16 09:39:58 3225.6kH/s 3719040 9a602c965031 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-16 07:41:35 4396.3kH/s 3718989 0a80aa9e5533 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-16 06:42:26 4429.8kH/s 3718969 7f8083d5836e 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-16 05:43:26 4359.7kH/s 3718946 f1faa2493074 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-16 04:44:58 5275.6kH/s 3718918 5f7df96778fa 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-07-16 03:42:59 5514.3kH/s 3718892 7225ec7ca701 1/1 10 donor_whale +48LNi6pk...5DomVmR2 2026-07-16 02:40:56 4429.8kH/s 3718861 835e6da5cb01 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-16 01:38:24 4435.1kH/s 3718832 49bf8474260c 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-16 00:40:04 5485.9kH/s 3718807 aa08e4b400d6 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-15 23:37:57 4668.1kH/s 3718778 7159a6285363 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-15 22:34:58 5360.5kH/s 3718750 1d40ae06616c 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-15 21:28:58 4875.1kH/s 3718717 e458ff23831a 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-15 20:26:39 4497.4kH/s 3718687 801bd67f9aed 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-15 19:28:00 3797.1kH/s 3718651 c7a7c0f46e04 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-15 17:47:07 5752.7kH/s 3718618 b43ed4b18d5e 1/1 8 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-15 16:44:36 5723.6kH/s 3718595 24266b10dfa3 1/1 8 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-15 15:45:08 4456.3kH/s 3718570 6ccbdb14a0c5 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-15 14:42:35 4302.8kH/s 3718541 d260b1f72905 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-15 13:44:00 5599.7kH/s 3718515 29d37ad42f36 1/1 1 donor_mega +49fV8TjN...GSgrDzrU 2026-07-15 12:41:59 4684.0kH/s 3718484 4901dc6ef903 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-15 11:39:26 4172.7kH/s 3718457 87a2af440c3b 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-15 10:40:58 5281.6kH/s 3718427 2cec1cbffbf9 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-07-15 09:39:01 4576.3kH/s 3718399 72c5fcfbbd26 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-15 08:37:07 5355.5kH/s 3718356 8f7f664db71f 1/1 31 donor_vip +421n6hRs...61UsZuDG 2026-07-15 07:34:57 5296.0kH/s 3718316 1d1f4632c41c 1/1 8 donor_whale +487SyiQC...aSGcaBDE 2026-07-15 06:32:58 5466.0kH/s 3718284 74afc8a1f24c 1/1 29 donor_vip +42NpvKMH...zAXwCRSb 2026-07-15 05:30:59 5238.8kH/s 3718253 88c2b61b7142 1/1 9 donor_whale +42mefDQX...pJw9nygF 2026-07-15 04:28:57 4469.9kH/s 3718223 5b8498f76da2 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-15 03:26:55 5758.3kH/s 3718191 05a4413d3435 1/1 1 donor_mega +42m2kLta...aDULT2Qj 2026-07-15 02:24:56 4165.1kH/s 3718160 9cbf7f455c21 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-15 01:22:23 4676.2kH/s 3718128 342682d5aab4 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-15 00:23:26 4207.4kH/s 3718089 f9c0aa6c8302 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-14 23:24:24 4502.3kH/s 3718059 a64f2354223e 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-14 22:25:24 4668.2kH/s 3718033 d9698104cccc 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-14 21:26:58 5394.8kH/s 3718012 60d82b874c13 1/1 1 donor_mega +48xVox2n...oQM27PR1 2026-07-14 20:24:10 5249.7kH/s 3717980 5e2a7146429b 1/1 32 donor_vip +47NF5Nbe...nMs9DDJU 2026-07-14 19:21:58 4246.0kH/s 3717952 ed7a97581379 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-14 18:19:59 5464.0kH/s 3717930 2388fe9bd52b 1/1 1 donor_mega +46PsTAqp...o2VDhm5j 2026-07-14 17:18:00 5106.2kH/s 3717911 408d5d2af6f7 1/1 31 donor_vip +47NF5Nbe...nMs9DDJU 2026-07-14 16:16:07 5102.7kH/s 3717893 2cfbbf9d8c4f 1/1 8 donor_whale +48wF5CTP...zF7tEmWC 2026-07-14 15:13:59 3985.4kH/s 3717859 62c34c56a47f 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-14 14:11:27 3720.3kH/s 3717835 97037644aaaa 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-14 13:12:25 4400.6kH/s 3717800 0c605570ec3b 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-14 12:14:00 5664.5kH/s 3717746 d06bf3e5ba29 1/1 1 donor_mega +43nvW9WJ...e7SmCf3o 2026-07-14 11:11:59 5323.0kH/s 3717714 e52de31296f9 1/1 30 donor_vip +42NpvKMH...zAXwCRSb 2026-07-14 10:09:07 4755.9kH/s 3717668 9944162bc084 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-14 09:06:57 5659.4kH/s 3717635 cb00ec5f50bd 1/1 9 donor_whale +45wQcnHH...kR5qUREN 2026-07-14 08:04:59 4421.6kH/s 3717591 5a3f6dc7efdc 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-14 07:02:24 4514.4kH/s 3717546 5f0bfd36a27a 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-14 06:03:24 4501.7kH/s 3717516 7abca6ac6427 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-14 05:04:59 5817.8kH/s 3717480 349e828e816e 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-07-14 04:02:56 4665.8kH/s 3717445 c6d02403cf3c 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-14 03:00:57 5732.0kH/s 3717417 0f240273b937 1/1 1 donor_mega +42cg1PYJ...o43XGcrP 2026-07-14 01:59:05 3593.8kH/s 3717390 895ecdab5723 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-14 00:43:03 5717.4kH/s 3717358 7aec1f5afe2a 1/1 8 donor_whale +47NF5Nbe...nMs9DDJU 2026-07-13 23:40:56 5677.7kH/s 3717323 e576817cdd64 1/1 8 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-13 22:38:24 5438.7kH/s 3717293 e255bca2a69d 1/1 8 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-13 21:40:06 4491.7kH/s 3717259 6a126003d938 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-13 20:37:24 4404.6kH/s 3717223 80b7e9dd9663 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-13 19:38:32 4368.0kH/s 3717196 b60e94709a21 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-13 18:39:26 4374.5kH/s 3717174 93ebea91c1a9 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-13 17:40:37 4409.3kH/s 3717139 6ed9224877d9 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-13 16:41:08 5182.8kH/s 3717118 3b048d88f04d 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-13 15:38:58 5529.4kH/s 3717092 c9c4f1cf10e3 1/1 8 donor_whale +487SyiQC...aSGcaBDE 2026-07-13 14:36:57 3207.0kH/s 3717068 d449544e2073 1/1 33 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-13 12:59:59 3252.8kH/s 3717015 fad6db3963af 1/1 1 donor_mega +43nvW9WJ...e7SmCf3o 2026-07-13 11:20:58 5598.3kH/s 3716966 9b0b1f8a6c08 1/1 33 donor_vip +46XNiJuL...DF62UR3s 2026-07-13 10:18:56 4087.6kH/s 3716945 c3b03cedf539 1/1 33 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-13 09:17:00 5226.6kH/s 3716921 65a61b0e496b 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-07-13 08:14:57 4284.8kH/s 3716902 beef94119938 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-13 07:13:00 5153.9kH/s 3716877 50b75743adf4 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-07-13 06:10:58 5775.0kH/s 3716853 8ac5d7f8ae40 1/1 32 donor_vip +46Rb9Hjc...57AFUnq5 2026-07-13 05:08:57 5930.2kH/s 3716823 61947cfcdbb8 1/1 12 donor_whale +464Bdn7D...wTbYVfF1 2026-07-13 04:06:56 3673.2kH/s 3716795 3cb36e5d57c9 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-13 02:17:32 4670.4kH/s 3716745 f6a25cf945bd 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-13 01:18:56 6021.1kH/s 3716716 a8661b9865b3 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-07-13 00:16:56 3819.6kH/s 3716682 1d0508fb8b98 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-12 22:57:55 5826.5kH/s 3716641 0e22a5b51732 1/1 1 donor_mega +43nvW9WJ...e7SmCf3o 2026-07-12 21:56:04 6068.0kH/s 3716602 c5217ade21d2 1/1 29 donor_vip +45S3XHby...A3Jwctmh 2026-07-12 20:53:56 5770.9kH/s 3716562 5116f090b3ab 2/1 175 vip +48wF5CTP...zF7tEmWC 2026-07-12 19:51:56 4833.0kH/s 3716537 440517e58f18 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-12 18:49:25 5015.8kH/s 3716508 79a4bb22c6b9 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-12 17:50:58 5441.4kH/s 3716480 02d9e5138709 1/1 1 donor_mega +4AEAX3qs...vTU56zMr 2026-07-12 16:49:07 6197.5kH/s 3716459 33e39e43f1ab 1/1 30 donor_vip +44aZ9ce8...i1Hxzm1M 2026-07-12 15:46:57 6162.3kH/s 3716437 67233045a8d8 1/1 31 donor_vip +42mefDQX...pJw9nygF 2026-07-12 14:44:57 4762.6kH/s 3716407 453c83e2ddf2 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-12 13:42:56 6057.8kH/s 3716378 94420ab47995 1/1 1 donor_mega +47d4QRof...jL5UqAKj 2026-07-12 12:40:56 5703.0kH/s 3716333 c4c8550ea750 1/1 66 donor +47NF5Nbe...nMs9DDJU 2026-07-12 11:39:03 3704.6kH/s 3716294 b1386004c338 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-12 10:24:55 5881.2kH/s 3716250 b9ed883c74c5 1/1 1 donor_mega +42m2kLta...aDULT2Qj 2026-07-12 09:22:56 4443.6kH/s 3716219 4bcff60d2b02 1/1 33 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-12 08:20:24 4441.9kH/s 3716184 b7f1604677ab 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-12 07:21:29 4721.1kH/s 3716147 77c0136c8d9f 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-12 06:22:22 3386.8kH/s 3716116 991f93853c61 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-12 04:44:55 5548.7kH/s 3716066 51e3b7069248 1/1 1 donor_mega +421n6hRs...61UsZuDG 2026-07-12 03:43:02 5685.4kH/s 3716030 2544f10ccb71 1/1 32 donor_vip +46Rb9Hjc...57AFUnq5 2026-07-12 02:40:57 5747.5kH/s 3715997 ca1d79e37455 1/1 12 donor_whale +487SyiQC...aSGcaBDE 2026-07-12 01:38:56 5148.3kH/s 3715952 680f7109722e 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-12 00:36:57 6141.6kH/s 3715912 7fef78808bd1 1/1 1 donor_mega +49fV8TjN...GSgrDzrU 2026-07-11 23:34:57 5007.5kH/s 3715867 44e300dda4f0 1/1 12 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-11 22:32:57 6086.5kH/s 3715824 f603ac3de16d 1/1 1 donor_mega +43nvW9WJ...e7SmCf3o 2026-07-11 21:31:03 6120.4kH/s 3715784 68ee8145ed6f 1/1 32 donor_vip +48b1zteM...a6BJoFL8 2026-07-11 20:29:00 5946.5kH/s 3715759 e30305855691 1/1 66 donor +464pdsyX...8QQVt1x3 2026-07-11 19:26:56 4842.8kH/s 3715728 2b555fce3e7a 1/1 67 donor +48M2j8Gj...d8KgGBwa 2026-07-11 18:24:23 3734.5kH/s 3715699 10c4a23132d3 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-11 17:11:24 4890.0kH/s 3715658 3af850c20343 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-11 16:12:57 5981.8kH/s 3715617 f57e2c92f41a 1/1 1 donor_mega +464Bdn7D...wTbYVfF1 2026-07-11 15:10:55 6308.0kH/s 3715590 0bd6a12835cc 1/1 179 vip +49fV8TjN...GSgrDzrU 2026-07-11 14:08:57 4797.3kH/s 3715566 9fed6f9221a0 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-11 13:07:06 5463.7kH/s 3715537 91c673fcb81a 1/1 1 donor_mega +421n6hRs...61UsZuDG 2026-07-11 12:04:12 5406.3kH/s 3715497 647bc6900dc8 1/1 10 donor_whale +4AyiUbKF...uJpsC4ym 2026-07-11 11:01:55 5702.1kH/s 3715469 f0dea3843aa1 1/1 33 donor_vip +4B2Avc2j...5JCEaaNs 2026-07-11 09:59:57 4508.6kH/s 3715437 e1885d6a38c4 1/1 34 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-11 08:57:57 5709.0kH/s 3715405 c972763fd72f 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-11 07:55:58 4036.6kH/s 3715376 84e18f9543c2 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-11 06:45:08 6001.7kH/s 3715336 1baef1fe6489 1/1 1 donor_mega +49ijD1Et...e7mEQxJ9 2026-07-11 05:42:56 5661.0kH/s 3715317 967186f0ef00 1/1 33 donor_vip +42Mk3F3y...Q6fgUTJr 2026-07-11 04:40:56 5572.2kH/s 3715291 e31666471196 1/1 10 donor_whale +47NF5Nbe...nMs9DDJU 2026-07-11 03:38:57 5786.8kH/s 3715261 ca6610948e19 1/1 10 donor_whale +45xA3Kgd...7Ma7ttaf 2026-07-11 02:36:54 4571.9kH/s 3715240 2d3ad1c46080 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-11 01:34:23 4357.8kH/s 3715207 0453e7754a26 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-11 00:35:59 6153.9kH/s 3715181 ee4e5b698172 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-07-10 23:33:57 5007.5kH/s 3715157 63c55c901dd1 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-10 22:31:24 5010.0kH/s 3715132 fb05df3aa86d 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-10 21:30:24 4835.8kH/s 3715114 53ced3e0f4b6 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-10 20:31:23 4870.2kH/s 3715087 3554adb0fe8b 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-10 19:32:23 4873.2kH/s 3715061 c63c2b64fb23 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-10 18:33:33 4999.6kH/s 3715043 597fb9d621e8 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-10 17:34:56 5963.1kH/s 3715015 7979530fda1f 1/1 1 donor_mega +49fV8TjN...GSgrDzrU 2026-07-10 16:32:57 4789.0kH/s 3714985 a78605a50f97 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-10 15:30:24 4543.3kH/s 3714954 cc4fade04245 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-10 14:31:22 4803.5kH/s 3714926 5b989794058e 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-10 13:32:22 4271.5kH/s 3714892 712e717a7dd6 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-10 12:30:58 5124.4kH/s 3714851 2ec33354c428 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-07-10 11:28:56 4315.2kH/s 3714815 dfad51ae8321 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-10 10:26:57 5509.1kH/s 3714780 846ffc6d0d63 1/1 1 donor_mega +43tg9ebV...GLspBx9P 2026-07-10 09:24:07 3263.4kH/s 3714744 27e0a82fb37a 1/1 30 donor_vip +49fV8TjN...GSgrDzrU 2026-07-10 08:01:05 5420.2kH/s 3714694 f8b002f8d6c0 1/1 10 donor_whale +48xVox2n...oQM27PR1 2026-07-10 06:58:56 5766.7kH/s 3714654 0597c6f2940f 1/1 30 donor_vip +42Mk3F3y...Q6fgUTJr 2026-07-10 05:56:56 4534.7kH/s 3714616 bb7333057c26 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-10 04:54:56 3664.8kH/s 3714584 666ef7fbcc54 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-10 03:22:55 5946.3kH/s 3714541 64c943375dad 1/1 9 donor_whale +4B2Avc2j...5JCEaaNs 2026-07-10 02:20:55 4058.5kH/s 3714509 de81bf0651a2 1/1 29 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-10 01:18:22 4124.7kH/s 3714473 f81504df31b4 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-10 00:19:22 4516.4kH/s 3714440 326ad0d5a8a2 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-09 23:20:31 4349.2kH/s 3714417 22038cfa33ae 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-09 22:21:58 5032.8kH/s 3714389 2cefee282dcf 1/1 1 donor_mega +46PsTAqp...o2VDhm5j 2026-07-09 21:17:03 5747.0kH/s 3714357 918df7eda1dc 1/1 30 donor_vip +48xVox2n...oQM27PR1 2026-07-09 20:14:56 5830.3kH/s 3714329 8337d85964a4 1/1 30 donor_vip +43CcbPH8...uQWupVW5 2026-07-09 19:13:05 4183.4kH/s 3714303 c10bf24b24e3 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-09 18:10:58 5412.8kH/s 3714273 6fd682b31ff1 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-09 17:08:57 5393.1kH/s 3714248 88aac9c50e2c 1/1 10 donor_whale +421n6hRs...61UsZuDG 2026-07-09 16:06:40 3208.7kH/s 3714225 0b0f049cc762 1/1 10 donor_whale +421n6hRs...61UsZuDG 2026-07-09 14:42:34 4475.1kH/s 3714189 b4612b1b1277 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-09 13:40:17 5498.7kH/s 3714152 b52eac8bb065 1/1 1 donor_mega +4B2Avc2j...5JCEaaNs 2026-07-09 12:38:17 5520.7kH/s 3714116 3c8d2b11828c 1/1 34 donor_vip +43CcbPH8...uQWupVW5 2026-07-09 11:36:13 5525.1kH/s 3714089 aa323ecc5bb5 1/1 10 donor_whale +42Mk3F3y...Q6fgUTJr 2026-07-09 10:33:37 3257.7kH/s 3714055 4a0e751d8d78 1/1 10 donor_whale +42Mk3F3y...Q6fgUTJr 2026-07-09 07:25:30 5551.0kH/s 3713970 370cd4322fab 1/1 10 donor_whale +48wF5CTP...zF7tEmWC 2026-07-09 06:22:35 5744.8kH/s 3713939 de7d61e521c0 1/1 34 donor_vip +45iHYVMq...UAz6KRyd 2026-07-09 05:20:21 5536.0kH/s 3713906 4f5edeffd07d 1/1 34 donor_vip +42mefDQX...pJw9nygF 2026-07-09 04:18:08 5365.6kH/s 3713879 6477cb0aa11b 1/1 10 donor_whale +42NpvKMH...zAXwCRSb 2026-07-09 03:15:27 6088.9kH/s 3713853 c1a2dd0fc38f 1/1 10 donor_whale +45iHYVMq...UAz6KRyd 2026-07-09 02:12:33 6015.4kH/s 3713821 ad09a06c3472 1/1 34 donor_vip +421n6hRs...61UsZuDG 2026-07-09 01:09:30 5834.0kH/s 3713786 2353972ce405 1/1 10 donor_whale +42NpvKMH...zAXwCRSb 2026-07-09 00:07:08 3992.5kH/s 3713750 c297b39ee032 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-08 23:04:13 5807.9kH/s 3713722 9a89df936a06 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-08 22:01:18 5645.7kH/s 3713694 af36894958b0 1/1 10 donor_whale +49fV8TjN...GSgrDzrU 2026-07-08 20:58:15 4562.7kH/s 3713658 597da6fa65e8 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-08 19:55:43 4664.5kH/s 3713619 ad0e8fd290ab 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-08 18:56:43 4789.4kH/s 3713589 80b07c8d1b78 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-08 17:58:03 4679.3kH/s 3713551 9a6ead785fba 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-08 16:58:41 4167.1kH/s 3713516 3f05d4527ea8 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-08 15:59:34 5107.6kH/s 3713481 bb7fcce4636c 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-07-08 14:57:02 5857.5kH/s 3713450 b787a78dccde 1/1 9 donor_whale +47NF5Nbe...nMs9DDJU 2026-07-08 13:57:17 5696.3kH/s 3713424 7bb4b2164de8 1/1 10 donor_whale +4B2Avc2j...5JCEaaNs 2026-07-08 12:54:39 3347.2kH/s 3713390 ab9e3900b36f 1/1 33 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-08 11:23:36 5661.6kH/s 3713347 85316014603b 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-08 10:20:19 5436.9kH/s 3713312 01e2817dee29 1/1 10 donor_whale +42NpvKMH...zAXwCRSb 2026-07-08 09:17:17 5981.2kH/s 3713283 a76c0365c321 1/1 10 donor_whale +42m2kLta...aDULT2Qj 2026-07-08 08:14:40 5801.1kH/s 3713255 8867d95fde39 1/1 31 donor_vip +42NpvKMH...zAXwCRSb 2026-07-08 07:12:34 5571.4kH/s 3713225 9e0001cfdc77 1/1 10 donor_whale +43GtdWdk...39LmdZuj 2026-07-08 06:09:32 5320.5kH/s 3713191 f4a144e9fc85 1/1 64 donor +46Rb9Hjc...57AFUnq5 2026-07-08 05:07:12 5807.3kH/s 3713160 aa0debe54eec 1/1 31 donor_vip +42m2kLta...aDULT2Qj 2026-07-08 04:04:31 5823.7kH/s 3713128 80446774b179 1/1 31 donor_vip +42mefDQX...pJw9nygF 2026-07-08 03:02:07 5392.3kH/s 3713095 367c64f49b62 1/1 10 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-08 02:00:08 5660.0kH/s 3713069 f702aa4b558a 1/1 10 donor_whale +42mefDQX...pJw9nygF 2026-07-08 00:57:29 4434.2kH/s 3713036 daa359423f09 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-07 23:54:11 5228.7kH/s 3713012 b1ee3e7efe0a 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-07-07 22:52:09 4293.2kH/s 3712976 a73e6962be62 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-07 21:50:00 4728.7kH/s 3712956 31f42a4065c5 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-07 20:51:15 4398.0kH/s 3712922 910cd4dc7f89 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-07 19:51:42 4523.8kH/s 3712897 3820bdaf1b42 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-07 18:53:05 4097.5kH/s 3712860 6c219ffe0584 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-07 17:53:15 5808.1kH/s 3712833 eac633a32317 1/1 30 donor_vip +46PsTAqp...o2VDhm5j 2026-07-07 16:50:40 4544.5kH/s 3712804 7014416c9e27 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-07 15:47:17 5432.4kH/s 3712769 be4590dfbd5c 1/1 1 donor_mega +43CcbPH8...uQWupVW5 2026-07-07 14:44:39 4349.1kH/s 3712740 512543f981a1 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-07 13:41:45 3497.4kH/s 3712710 f9b124d9f125 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-07 12:04:22 4330.5kH/s 3712663 fb2ddc46d833 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-07 11:02:05 4483.3kH/s 3712636 008090c0dd1e 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-07 10:02:15 3761.9kH/s 3712610 9171560f433b 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-07 08:41:14 4270.0kH/s 3712563 e3bb11b82c02 1/1 64 donor +48M2j8Gj...d8KgGBwa 2026-07-07 07:38:40 4584.9kH/s 3712522 d68fcea4fac9 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-07 06:39:14 5897.0kH/s 3712489 97a1374a8a22 1/1 1 donor_mega +43tg9ebV...GLspBx9P 2026-07-07 05:37:11 5674.1kH/s 3712466 f08c4495c408 1/1 30 donor_vip +42mefDQX...pJw9nygF 2026-07-07 04:34:14 4804.7kH/s 3712437 a6965fe03678 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-07 03:31:12 5232.1kH/s 3712407 0e372f375262 1/1 1 donor_mega +4B2Avc2j...5JCEaaNs 2026-07-07 02:23:31 5513.1kH/s 3712362 0ec324ad3895 1/1 29 donor_vip +47NF5Nbe...nMs9DDJU 2026-07-07 01:21:11 4473.6kH/s 3712331 acdeab48260f 1/1 7 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-07 00:18:38 4521.3kH/s 3712296 ebc9a3cc7045 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-06 23:19:30 5499.7kH/s 3712271 7ff61332c251 1/1 1 donor_mega +46PsTAqp...o2VDhm5j 2026-07-06 22:16:14 4490.4kH/s 3712248 e065ae6c3327 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-06 21:13:44 4424.5kH/s 3712214 6568f9c86b19 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-06 20:14:41 4444.0kH/s 3712193 acf8f198d110 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-06 19:15:15 4131.3kH/s 3712157 edd828f6abda 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-07-06 18:10:19 5527.3kH/s 3712124 45fd777cc633 1/1 7 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-06 17:08:06 4881.2kH/s 3712106 dc6a6f294f86 1/1 7 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-06 16:08:39 4375.4kH/s 3712069 d5271484534c 1/1 7 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-06 15:05:20 5518.8kH/s 3712040 f7128495c571 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-07-06 14:02:16 4279.8kH/s 3712002 f80e3aaf2ee8 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-06 12:59:42 4258.5kH/s 3711969 450df1a05cea 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-06 12:00:45 3997.0kH/s 3711940 22032f32333d 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-06 10:57:41 4182.5kH/s 3711909 d51686468006 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-06 09:58:14 5477.6kH/s 3711873 6160c02997cf 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-06 08:55:15 4335.5kH/s 3711842 41409b1bdc1b 1/1 33 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-06 07:52:43 3773.0kH/s 3711809 7bc97040a238 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-06 06:53:15 5058.0kH/s 3711781 4ebd05f6c12c 1/1 7 donor_whale +421n6hRs...61UsZuDG 2026-07-06 05:50:15 4036.9kH/s 3711749 0e45dd66e0db 1/1 7 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-06 04:47:41 4028.8kH/s 3711717 14c2a4644f10 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-06 03:48:14 4969.4kH/s 3711686 5ab59204881f 1/1 7 donor_whale +42NpvKMH...zAXwCRSb 2026-07-06 02:45:11 4068.7kH/s 3711646 59dcf8fdfa40 1/1 7 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-06 01:42:38 4134.7kH/s 3711608 ab793a23db28 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-06 00:44:02 4070.4kH/s 3711585 401ef2a0a658 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-05 23:44:14 4441.2kH/s 3711555 a2989235bed9 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-05 22:34:15 1939.2kH/s 3711524 d27aedb98c7e 1/1 7 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-05 20:34:06 1459.8kH/s 3711471 d5c93406e752 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-05 19:34:40 1370.8kH/s 3711445 5e71100a167b 1/1 1 donor_mega +464Bdn7D...wTbYVfF1 2026-07-05 18:32:17 1596.4kH/s 3711417 a25853717561 1/1 32 donor_vip +46PsTAqp...o2VDhm5j 2026-07-05 17:08:32 1875.2kH/s 3711385 86031b5617b5 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-05 16:05:43 4343.6kH/s 3711359 37a41d675628 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-05 15:07:13 5646.2kH/s 3711315 b1fafa81987e 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-07-05 14:04:41 3157.4kH/s 3711287 5702c9f9d71c 1/1 9 donor_whale +42Mk3F3y...Q6fgUTJr 2026-07-05 12:26:34 5586.2kH/s 3711232 a4e31cf1e679 1/1 9 donor_whale +42mefDQX...pJw9nygF 2026-07-05 11:24:16 5486.0kH/s 3711190 df843aa0649c 1/1 9 donor_whale +42Mk3F3y...Q6fgUTJr 2026-07-05 10:21:13 3521.9kH/s 3711161 73393b034c5d 1/1 9 donor_whale +42m2kLta...aDULT2Qj 2026-07-05 08:28:13 5563.2kH/s 3711101 27263b799ab2 1/1 31 donor_vip +4AEAX3qs...vTU56zMr 2026-07-05 07:25:13 4186.3kH/s 3711058 8edaf4bfd596 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-05 06:22:31 5813.3kH/s 3711030 11748c447b64 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-07-05 05:19:41 5329.5kH/s 3711003 03d5b07ec833 1/1 10 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-05 04:21:12 5781.6kH/s 3710975 f40d8d994ac2 1/1 10 donor_whale +49fV8TjN...GSgrDzrU 2026-07-05 03:19:12 3495.7kH/s 3710946 09eb5117649a 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-05 01:54:13 5566.4kH/s 3710886 5108e3acf453 1/1 1 donor_mega +4AGJScWS...f6SvY5p5 2026-07-05 00:52:03 4592.6kH/s 3710860 75a3d72d85a7 1/1 4 mvp +48M2j8Gj...d8KgGBwa 2026-07-04 23:50:11 3380.1kH/s 3710836 e51767bb3c19 1/1 1 donor_mega +46AdMVVk...KRL9YFCm 2026-07-04 22:15:13 5449.8kH/s 3710795 df6aaba9798f 1/1 33 donor_vip +47NF5Nbe...nMs9DDJU 2026-07-04 21:12:33 4244.8kH/s 3710764 c441cc7069f4 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-04 20:09:16 5722.7kH/s 3710738 481d7055ed4d 1/1 1 donor_mega +49fV8TjN...GSgrDzrU 2026-07-04 19:07:14 4354.7kH/s 3710715 5d9a5cd524d0 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-04 18:05:10 5792.9kH/s 3710691 be664d2f6d89 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-07-04 17:02:34 5496.0kH/s 3710661 6f23e466e59a 1/1 7 donor_whale +42mefDQX...pJw9nygF 2026-07-04 15:59:14 4192.8kH/s 3710631 73152d1c0bea 1/1 69 donor +48M2j8Gj...d8KgGBwa 2026-07-04 14:56:42 3647.8kH/s 3710595 ca6cfc4dbeab 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-04 13:57:31 6518.6kH/s 3710556 6b4e81eedc64 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-04 12:54:35 6638.3kH/s 3710529 c228700a4513 1/1 7 donor_whale +42mefDQX...pJw9nygF 2026-07-04 11:51:15 5182.2kH/s 3710485 8a392ceaacd1 1/1 7 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-04 10:48:14 3718.6kH/s 3710444 6bac328ac5c8 1/1 7 donor_whale +47NF5Nbe...nMs9DDJU 2026-07-04 08:47:15 3592.9kH/s 3710370 fbd3c7b2495c 1/1 7 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-04 07:44:15 3798.2kH/s 3710328 a541a22bd614 1/1 7 donor_whale +48wF5CTP...zF7tEmWC 2026-07-04 06:41:32 3749.1kH/s 3710297 dfaf482a7146 1/1 7 donor_whale +43tg9ebV...GLspBx9P 2026-07-04 05:38:13 3856.4kH/s 3710269 e6265bc08ce6 1/1 69 donor +48M2j8Gj...d8KgGBwa 2026-07-04 04:35:39 3674.6kH/s 3710241 cbee7c775ea3 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-04 03:36:29 3768.7kH/s 3710215 3683e68ea87c 1/1 6 donor_whale +42mefDQX...pJw9nygF 2026-07-04 02:33:31 3770.1kH/s 3710187 8b53e72a06d0 1/1 7 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-04 01:31:11 3909.3kH/s 3710153 9adbaa90197f 1/1 7 donor_whale +45xA3Kgd...7Ma7ttaf 2026-07-04 00:28:31 3831.2kH/s 3710120 52b7168e2df4 1/1 32 donor_vip +47NF5Nbe...nMs9DDJU 2026-07-03 23:26:11 3460.3kH/s 3710093 8860818ce1b5 1/1 7 donor_whale +4AyiUbKF...uJpsC4ym 2026-07-03 22:24:10 3404.2kH/s 3710061 04355cda07b2 2/1 30 donor_vip +46Rb9Hjc...57AFUnq5 2026-07-03 21:22:10 3099.6kH/s 3710033 4592806beafb 1/1 7 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-03 20:20:11 2919.7kH/s 3709992 f56d36542402 1/1 7 donor_whale +42NpvKMH...zAXwCRSb 2026-07-03 19:18:11 3128.7kH/s 3709966 77ca738d2173 1/1 7 donor_whale +421n6hRs...61UsZuDG 2026-07-03 18:15:13 3405.6kH/s 3709938 905f3bbe4c52 1/1 7 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-03 17:13:08 2981.4kH/s 3709903 61d479c9847e 1/1 7 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-03 16:10:37 2904.1kH/s 3709875 4dd4c261e4f6 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-03 15:11:38 3437.4kH/s 3709846 e8febb283003 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-03 14:12:13 2894.7kH/s 3709825 97b4eb64b10d 1/1 7 donor_whale +42mefDQX...pJw9nygF 2026-07-03 13:10:11 3401.5kH/s 3709788 c82d550762c5 1/1 7 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-03 12:07:28 3811.3kH/s 3709756 6766a3d93123 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-03 11:04:12 4149.4kH/s 3709729 32f461cc3f58 1/1 7 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-03 10:01:37 3792.3kH/s 3709700 5aaf70216e70 1/1 7 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-03 09:03:10 4084.2kH/s 3709669 173109d3ad3c 1/1 7 donor_whale +421n6hRs...61UsZuDG 2026-07-03 07:14:11 3705.4kH/s 3709608 e21e75784326 2/1 6 donor_whale +47NF5Nbe...nMs9DDJU 2026-07-03 06:11:27 3856.5kH/s 3709564 31e9a3ea930d 1/1 7 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-03 05:08:35 4249.9kH/s 3709527 2cc61c11cc4d 2/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-03 04:10:08 3726.1kH/s 3709496 970bca01f175 1/1 1 donor_mega +4AyiUbKF...uJpsC4ym 2026-07-03 03:08:08 4048.8kH/s 3709465 437b23021cbb 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-03 02:06:06 3982.2kH/s 3709432 90e47ed15798 1/1 7 donor_whale +46Rb9Hjc...57AFUnq5 2026-07-03 01:03:28 4210.5kH/s 3709400 49b63e40280a 2/1 6 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-02 21:34:13 3744.1kH/s 3709303 86f65a922b79 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-07-02 20:31:11 4243.1kH/s 3709265 4be8eb047b23 2/1 7 donor_whale +42NpvKMH...zAXwCRSb 2026-07-02 18:45:10 3995.9kH/s 3709204 e44d0baed71a 1/1 12 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-02 17:35:10 4976.9kH/s 3709174 f1af4634d12f 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-07-02 16:33:11 4907.7kH/s 3709150 b2bbb1e4b758 1/1 12 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-02 15:30:13 5143.5kH/s 3709124 1473c0648f01 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-07-02 14:28:10 4125.4kH/s 3709092 4c85ea133e11 1/1 11 donor_whale +42NpvKMH...zAXwCRSb 2026-07-02 13:26:10 2627.6kH/s 3709067 88f37509cf60 1/1 32 donor_vip +48wF5CTP...zF7tEmWC 2026-07-02 09:21:47 4962.7kH/s 3708961 ef46db169bbd 1/1 33 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-02 08:18:42 4435.8kH/s 3708929 22cc13c0f9e5 2/1 1 donor_mega +45wQcnHH...kR5qUREN 2026-07-02 07:16:09 4398.7kH/s 3708893 103215eefec4 1/1 33 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-02 06:14:06 4630.4kH/s 3708860 0efac6463ac2 2/1 1 donor_mega +42mefDQX...pJw9nygF 2026-07-02 05:11:07 4696.5kH/s 3708824 bc0fee2bd4e3 1/1 12 donor_whale +47NF5Nbe...nMs9DDJU 2026-07-02 04:08:50 4420.1kH/s 3708795 64e2c1ab92ad 1/1 11 donor_whale +47NF5Nbe...nMs9DDJU 2026-07-02 03:10:07 4677.9kH/s 3708752 d72879a410c8 1/1 71 donor +42NpvKMH...zAXwCRSb 2026-07-02 02:07:20 4397.6kH/s 3708720 c62743253fdc 1/1 11 donor_whale +4Arsu3rc...wUtCc5e9 2026-07-02 01:05:09 4868.1kH/s 3708693 b123772973d0 1/1 73 donor +47NF5Nbe...nMs9DDJU 2026-07-02 00:03:07 5072.1kH/s 3708659 66b2055ca39b 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-01 23:00:24 4746.2kH/s 3708625 f462821d41a5 1/1 11 donor_whale +43CcbPH8...uQWupVW5 2026-07-01 21:58:09 4641.5kH/s 3708595 725a93cfcd6f 1/1 11 donor_whale +42mefDQX...pJw9nygF 2026-07-01 20:55:14 4872.2kH/s 3708568 95a97190b888 1/1 11 donor_whale +48MKrUo9...fEagtDE8 2026-07-01 19:52:32 5000.3kH/s 3708537 fd10ddc61bbd 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-01 18:49:13 4578.9kH/s 3708510 072c604f42ed 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-07-01 17:47:12 4415.5kH/s 3708479 d1546723a393 1/1 11 donor_whale +42NpvKMH...zAXwCRSb 2026-07-01 16:44:28 5219.3kH/s 3708449 9d2942aac9a2 1/1 11 donor_whale +43CcbPH8...uQWupVW5 2026-07-01 15:42:07 4925.2kH/s 3708419 0afc7962ea92 1/1 11 donor_whale +42NpvKMH...zAXwCRSb 2026-07-01 14:39:14 4400.7kH/s 3708390 dbd9232d943a 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-01 13:36:13 5004.8kH/s 3708360 7b35cfbcd930 1/1 1 donor_mega +487SyiQC...aSGcaBDE 2026-07-01 12:01:35 4628.1kH/s 3708312 713fd9f6b7bc 1/1 31 donor_vip +43CcbPH8...uQWupVW5 2026-07-01 10:58:12 4708.5kH/s 3708272 4b3909878c23 2/1 10 donor_whale +421n6hRs...61UsZuDG 2026-07-01 09:55:14 4388.6kH/s 3708240 e8dc30e0f265 1/1 11 donor_whale +48M2j8Gj...d8KgGBwa 2026-07-01 07:50:39 4297.4kH/s 3708177 0714df5ccb5a 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-01 06:51:13 4716.9kH/s 3708143 ae3726bbc92e 1/1 11 donor_whale +42NpvKMH...zAXwCRSb 2026-07-01 05:49:11 4736.9kH/s 3708115 76208f735086 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-07-01 04:46:38 4343.3kH/s 3708083 447e72b4ffc4 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-07-01 03:26:10 4593.0kH/s 3708049 8c0546a9c51c 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-07-01 01:01:11 4777.2kH/s 3707988 43b546fec12a 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-30 23:58:39 4650.9kH/s 3707955 cc4063a12d4e 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-30 22:59:32 4659.9kH/s 3707932 52152d206efd 1/1 1 donor_mega +46PsTAqp...o2VDhm5j 2026-06-30 21:56:33 4025.4kH/s 3707902 99ba0edc0466 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-30 20:54:18 4382.3kH/s 3707870 2310869ae5e0 1/1 31 donor_vip +43N8v4Ma...277zUwJq 2026-06-30 19:51:16 4804.3kH/s 3707839 87beb66fa2c9 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-30 18:48:40 4974.3kH/s 3707813 1da0ca2b1554 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-30 17:50:01 4866.5kH/s 3707787 98a29f040926 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-30 16:50:53 4523.2kH/s 3707757 871a87c0c9bc 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-30 15:52:01 4747.0kH/s 3707729 74236fb5c794 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-30 14:52:31 6496.8kH/s 3707696 e1bdbb25d903 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-06-30 13:50:14 4845.1kH/s 3707670 a82f35ffcab2 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-30 12:47:42 6580.7kH/s 3707639 b64219b6841e 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-06-30 11:44:14 6210.8kH/s 3707603 07f48b5e9332 1/1 9 donor_whale +47NF5Nbe...nMs9DDJU 2026-06-30 10:41:13 6431.2kH/s 3707569 a5e726901fc5 1/1 30 donor_vip +46Rb9Hjc...57AFUnq5 2026-06-30 09:39:11 7419.4kH/s 3707526 6624b8829d45 1/1 10 donor_whale +49YoCEDi...x97dHeGQ 2026-06-30 08:36:12 6851.5kH/s 3707489 51467dafbc3e 1/1 31 donor_vip +46Rb9Hjc...57AFUnq5 2026-06-30 07:33:12 7202.7kH/s 3707449 dab23270dce6 1/1 10 donor_whale +42NpvKMH...zAXwCRSb 2026-06-30 06:30:30 4925.2kH/s 3707408 eeb330f7d725 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-30 05:27:12 6971.9kH/s 3707376 016e4109227d 1/1 1 donor_mega +4AyiUbKF...uJpsC4ym 2026-06-30 04:22:29 5183.3kH/s 3707348 438b5b2b9427 1/1 30 donor_vip +46Rb9Hjc...57AFUnq5 2026-06-30 03:05:08 3620.4kH/s 3707307 27c88d873814 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-30 01:12:09 7427.4kH/s 3707246 553086d13155 1/1 1 donor_mega +46PsTAqp...o2VDhm5j 2026-06-30 00:09:30 6808.9kH/s 3707223 a7c6270b325e 1/1 30 donor_vip +43nvW9WJ...e7SmCf3o 2026-06-29 23:07:10 5062.6kH/s 3707189 2f18af79c0fa 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-29 22:04:39 4715.0kH/s 3707172 43b2dc9afc6e 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-29 21:05:40 5623.8kH/s 3707144 dff8817f7325 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-29 20:07:02 5217.6kH/s 3707116 f795cf38e930 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-29 19:08:14 6630.4kH/s 3707084 e798a0ecf335 1/1 1 donor_mega +487SyiQC...aSGcaBDE 2026-06-29 18:05:37 5720.3kH/s 3707059 107b07483fb5 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-29 17:02:42 5321.6kH/s 3707036 eb1da4d70503 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-29 16:03:39 4734.2kH/s 3707009 0e798c8ac7f8 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-29 15:04:41 6302.9kH/s 3706982 893ef94e7563 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-06-29 14:01:13 5746.6kH/s 3706949 4df6237bc45e 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-29 12:58:32 7342.3kH/s 3706916 49e291e75b25 1/1 1 donor_mega +42NJbX1p...JBe7i8b2 2026-06-29 11:55:13 7095.2kH/s 3706873 320da7349460 1/1 30 donor_vip +46Rb9Hjc...57AFUnq5 2026-06-29 10:52:32 5051.7kH/s 3706843 72ca4b5bf741 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-29 09:49:45 4757.0kH/s 3706826 d1938b506e55 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-29 08:50:41 3758.8kH/s 3706797 1c044255ae5c 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-29 07:18:39 5049.2kH/s 3706745 03a085233423 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-29 06:19:38 4947.5kH/s 3706713 3fff24491636 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-29 05:21:11 6786.6kH/s 3706679 a10539fa7c43 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-06-29 04:19:10 6886.4kH/s 3706656 4c5ced4c2d7f 1/1 10 donor_whale +42Mk3F3y...Q6fgUTJr 2026-06-29 03:16:11 4859.5kH/s 3706627 4ae54aa39d82 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-29 02:13:11 6471.5kH/s 3706597 f36bd905d0e9 1/1 1 donor_mega +49fV8TjN...GSgrDzrU 2026-06-29 01:10:11 4708.6kH/s 3706572 309a101871aa 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-29 00:07:37 4975.8kH/s 3706543 caf7a3396b96 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-28 23:09:10 6604.7kH/s 3706515 08ab27d864c4 1/1 1 donor_mega +4AyiUbKF...uJpsC4ym 2026-06-28 22:06:12 4652.8kH/s 3706485 045cc0211d53 1/1 27 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-28 21:03:13 4209.1kH/s 3706452 f96c1788a3de 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-06-28 19:42:59 6600.5kH/s 3706418 a538e80a81d4 1/1 10 donor_whale +47NF5Nbe...nMs9DDJU 2026-06-28 18:43:33 7123.9kH/s 3706391 1509a42bd896 1/1 9 donor_whale +42mefDQX...pJw9nygF 2026-06-28 17:41:11 6628.2kH/s 3706358 d4763945c93a 1/1 8 donor_whale +49fV8TjN...GSgrDzrU 2026-06-28 16:38:33 4480.7kH/s 3706324 cf0bab3a0925 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-28 15:35:37 5082.8kH/s 3706290 544aede7980c 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-28 14:36:12 5666.3kH/s 3706260 c5f458dced52 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-06-28 13:30:31 6564.5kH/s 3706221 50fbe3497686 1/1 10 donor_whale +42NpvKMH...zAXwCRSb 2026-06-28 12:28:11 4691.5kH/s 3706186 f585882cbbde 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-28 11:25:39 3742.8kH/s 3706154 03bcc62458e9 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-28 09:36:14 3620.4kH/s 3706103 6f74e37550a2 1/1 1 donor_mega +43CcbPH8...uQWupVW5 2026-06-28 08:18:11 4577.1kH/s 3706056 ab440fd05b0a 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-28 07:15:11 6425.0kH/s 3706028 e9de85274bf4 1/1 1 donor_mega +49fV8TjN...GSgrDzrU 2026-06-28 06:12:12 4782.6kH/s 3706000 d2172377d98e 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-28 05:09:39 4513.6kH/s 3705969 77be0d3b9b39 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-28 04:10:56 4570.5kH/s 3705943 4d3df14d63ff 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-28 03:11:35 5092.0kH/s 3705919 f171345c7e53 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-28 02:13:09 6429.0kH/s 3705901 b36e6c055456 1/1 1 donor_mega +43CcbPH8...uQWupVW5 2026-06-28 01:11:10 6553.4kH/s 3705873 f3b0e9ca51a9 1/1 10 donor_whale +421n6hRs...61UsZuDG 2026-06-28 00:09:09 4794.0kH/s 3705841 3c282565aaef 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-27 23:07:09 6477.6kH/s 3705804 2c06e4374eba 1/1 1 donor_mega +4B2Avc2j...5JCEaaNs 2026-06-27 22:04:12 3406.0kH/s 3705774 563caffa3bb8 1/1 30 donor_vip +43nvW9WJ...e7SmCf3o 2026-06-27 20:22:12 4874.4kH/s 3705732 676f9749e727 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-27 19:19:13 6425.9kH/s 3705707 edbb7afdf690 1/1 1 donor_mega +43nvW9WJ...e7SmCf3o 2026-06-27 18:16:34 6957.1kH/s 3705676 45e89b8cca16 1/1 29 donor_vip +49YoCEDi...x97dHeGQ 2026-06-27 17:14:29 4715.3kH/s 3705639 04632428ff7a 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-27 16:11:39 4907.5kH/s 3705608 cfe767f82ae5 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-27 15:12:29 5060.9kH/s 3705577 71443f7ca0be 1/1 1 donor_mega +4AyiUbKF...uJpsC4ym 2026-06-27 14:02:10 4512.3kH/s 3705539 01004604c2ee 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-27 12:59:39 4565.1kH/s 3705516 7827ab009aed 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-27 12:00:30 7670.3kH/s 3705472 6fad4cc4df05 1/1 1 donor_mega +45wQcnHH...kR5qUREN 2026-06-27 10:58:27 7495.9kH/s 3705432 acef0fefd1a6 1/1 72 donor +421n6hRs...61UsZuDG 2026-06-27 09:55:33 5596.9kH/s 3705398 e19b29d8311c 1/1 29 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-27 08:52:13 3389.9kH/s 3705351 3b735e4caeb2 1/1 29 donor_vip +4AEAX3qs...vTU56zMr 2026-06-27 07:19:12 6247.4kH/s 3705292 98109da7f4a4 1/1 31 donor_vip +49YoCEDi...x97dHeGQ 2026-06-27 06:17:10 6601.4kH/s 3705260 9ea78cbd987b 1/1 31 donor_vip +47NF5Nbe...nMs9DDJU 2026-06-27 05:14:32 6670.9kH/s 3705225 dfe8e05fa56b 1/1 10 donor_whale +49fV8TjN...GSgrDzrU 2026-06-27 04:12:09 5562.0kH/s 3705191 7a9702fba949 1/1 71 donor +48M2j8Gj...d8KgGBwa 2026-06-27 03:09:36 5489.5kH/s 3705157 bd9690414e3f 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-27 02:10:35 5345.9kH/s 3705140 392abadd0eef 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-27 01:11:36 5307.9kH/s 3705115 0bdb6ab5506b 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-27 00:13:09 7195.3kH/s 3705088 222b8141b316 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-06-26 23:10:28 7093.3kH/s 3705049 e66abb166599 1/1 11 donor_whale +48wF5CTP...zF7tEmWC 2026-06-26 22:08:10 5395.4kH/s 3705015 6f448ff46d08 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-26 21:05:40 4856.9kH/s 3704988 b420bdbc3e3b 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-26 20:06:33 7296.1kH/s 3704948 dc02a50b334f 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-06-26 19:04:14 6811.7kH/s 3704921 04ed10f8628d 1/1 10 donor_whale +42Mk3F3y...Q6fgUTJr 2026-06-26 18:01:12 7055.3kH/s 3704897 d74f82bf6f70 1/1 10 donor_whale +42mefDQX...pJw9nygF 2026-06-26 16:58:16 6967.0kH/s 3704857 222d35d8ee37 1/1 10 donor_whale +45yonJgZ...41NDuzhs 2026-06-26 15:55:14 7050.3kH/s 3704834 d1faa08bcdcf 1/1 73 donor +47sctNyW...JBFt8g8K 2026-06-26 14:52:33 5307.9kH/s 3704803 17ea01377db2 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-26 13:49:59 4590.5kH/s 3704783 9cea29d7d0dc 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-26 12:50:37 6099.3kH/s 3704740 fbbb29c40520 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-06-26 11:47:12 6314.0kH/s 3704711 89d71ef56c0d 1/1 32 donor_vip +47d4QRof...jL5UqAKj 2026-06-26 10:44:32 5649.5kH/s 3704675 2933958a0f57 1/1 70 donor +48M2j8Gj...d8KgGBwa 2026-06-26 09:42:12 6820.6kH/s 3704649 6e0f106ff218 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-06-26 08:39:33 4903.8kH/s 3704617 91a3bc7543b1 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-26 07:36:39 5023.6kH/s 3704593 e06047d81ded 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-26 06:37:38 4309.3kH/s 3704563 4d97e760d61d 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-26 05:38:14 5964.7kH/s 3704530 e8dbb9dcadf9 1/1 1 donor_mega +49fV8TjN...GSgrDzrU 2026-06-26 04:36:08 4752.3kH/s 3704492 aca9c5cc5e71 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-26 03:33:52 4735.2kH/s 3704454 9fddb6e160c4 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-26 02:35:08 6361.2kH/s 3704429 2d81533ebf09 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-06-26 01:33:08 7025.5kH/s 3704399 9d7401cc3f4e 1/1 31 donor_vip +49fV8TjN...GSgrDzrU 2026-06-26 00:31:07 5753.7kH/s 3704376 bf121fcdba7b 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-25 23:28:36 5798.9kH/s 3704345 002ddc878e25 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-25 22:29:11 7513.0kH/s 3704324 67ff1c699fa9 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-06-25 21:27:11 5725.8kH/s 3704292 1b37214c7e0d 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-25 20:24:14 3600.8kH/s 3704261 cfef4a241a8c 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-06-25 18:13:12 6467.6kH/s 3704194 e94cc15e5173 1/1 10 donor_whale +42mefDQX...pJw9nygF 2026-06-25 17:10:13 6778.5kH/s 3704158 0e1a760d8e8c 1/1 10 donor_whale +44aZ9ce8...i1Hxzm1M 2026-06-25 16:07:13 5005.3kH/s 3704122 4406d3f80bb2 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-25 15:04:43 6309.1kH/s 3704088 da2c65fcb73b 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-06-25 14:01:13 3606.4kH/s 3704052 585462ee21aa 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-25 12:58:17 7055.6kH/s 3704018 b5b4873a93e9 1/1 1 donor_mega +42mefDQX...pJw9nygF 2026-06-25 11:55:13 6539.6kH/s 3703977 6b21b3172b49 1/1 71 donor +49fV8TjN...GSgrDzrU 2026-06-25 10:52:14 6160.6kH/s 3703951 affd6a57731a 1/1 10 donor_whale +43CcbPH8...uQWupVW5 2026-06-25 09:49:14 6655.5kH/s 3703920 7e35824d16b6 1/1 10 donor_whale +42mefDQX...pJw9nygF 2026-06-25 08:46:13 5021.0kH/s 3703885 18f4c62317ce 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-25 07:43:13 6442.1kH/s 3703844 fa22c5cf8987 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-06-25 06:40:32 6513.7kH/s 3703807 5cc6a7048c66 1/1 10 donor_whale +42NpvKMH...zAXwCRSb 2026-06-25 05:37:12 6274.9kH/s 3703782 a41671901dac 1/1 10 donor_whale +42cg1PYJ...o43XGcrP 2026-06-25 04:34:12 5059.1kH/s 3703754 33d5dedddfb7 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-25 03:31:35 4893.7kH/s 3703724 970f68d18ab0 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-25 02:33:08 6333.7kH/s 3703688 c428b6b1e2db 1/1 1 donor_mega +481ELpyU...mCQhPM2f 2026-06-25 01:31:08 6336.6kH/s 3703652 ba1e5e6501ca 1/1 32 donor_vip +42Mk3F3y...Q6fgUTJr 2026-06-25 00:29:09 6380.5kH/s 3703624 d7793e32a155 1/1 9 donor_whale +421n6hRs...61UsZuDG 2026-06-24 23:27:09 4709.9kH/s 3703601 21b3b7c6ef1b 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-24 22:24:40 4524.4kH/s 3703576 55a9f5484699 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-24 21:22:14 6619.6kH/s 3703551 10b211f0cdd3 1/1 1 donor_mega +47sctNyW...JBFt8g8K 2026-06-24 20:19:35 5065.7kH/s 3703532 9d98dc6c2037 1/1 30 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-24 19:16:12 6864.2kH/s 3703502 482a7a63d00e 1/1 1 donor_mega +49fV8TjN...GSgrDzrU 2026-06-24 18:13:33 6826.0kH/s 3703477 82054c9f958c 1/1 32 donor_vip +481ELpyU...mCQhPM2f 2026-06-24 17:10:13 6652.4kH/s 3703443 46eaef0b697f 1/1 33 donor_vip +42NpvKMH...zAXwCRSb 2026-06-24 16:08:11 4417.1kH/s 3703417 804451b6b226 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-24 15:05:13 6861.2kH/s 3703389 f13e31d010cd 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-06-24 14:02:13 6910.9kH/s 3703361 d86e7e678412 1/1 8 donor_whale +421n6hRs...61UsZuDG 2026-06-24 12:59:16 4998.7kH/s 3703335 dacc7fb84ded 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-24 11:57:11 6922.0kH/s 3703302 c4c5f0a59a03 1/1 1 donor_mega +49fV8TjN...GSgrDzrU 2026-06-24 10:54:36 4639.9kH/s 3703274 3c3983210e4e 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-24 09:51:39 4620.8kH/s 3703251 05415e0c1668 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-24 08:52:35 6608.4kH/s 3703216 129cb9077c4c 1/1 1 donor_mega +4AVuFPr9...TBC6mvDr 2026-06-24 07:49:13 4983.8kH/s 3703186 4b9686875a56 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-24 06:47:10 6823.6kH/s 3703151 75118600cb7c 1/1 1 donor_mega +49fV8TjN...GSgrDzrU 2026-06-24 05:45:10 4799.9kH/s 3703122 7063f06af877 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-24 04:42:27 6614.7kH/s 3703093 0d209ccfac96 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-06-24 03:40:10 4813.1kH/s 3703054 48a290037fe2 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-24 02:37:26 6452.0kH/s 3703028 4de7ce50966f 1/1 1 donor_mega +41r5LLfb...UQqaezSK 2026-06-24 01:35:04 6497.3kH/s 3702991 6005eabdbc2e 1/1 181 vip +449jPnW2...KBPdgEsM 2026-06-24 00:33:02 3651.4kH/s 3702959 25ae281170b4 1/1 327 vip +42NpvKMH...zAXwCRSb 2026-06-23 22:51:12 5037.9kH/s 3702895 efdb57923ee8 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-23 21:48:38 3143.5kH/s 3702872 831710cf67a9 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-23 19:26:38 6126.2kH/s 3702814 7d8c841cb5b6 1/1 1 donor_mega +421n6hRs...61UsZuDG 2026-06-23 18:23:14 6033.0kH/s 3702779 93906f79776a 1/1 9 donor_whale +42Mk3F3y...Q6fgUTJr 2026-06-23 17:20:34 6503.5kH/s 3702747 a7774500045c 1/1 9 donor_whale +47NF5Nbe...nMs9DDJU 2026-06-23 16:18:13 6532.2kH/s 3702725 9e8f3ccf2783 1/1 35 donor_vip +46XNiJuL...DF62UR3s 2026-06-23 15:15:12 6316.6kH/s 3702694 f2fcb95d3f34 1/1 77 donor +48LNi6pk...5DomVmR2 2026-06-23 14:12:15 6367.9kH/s 3702663 19c5e8b03864 1/1 35 donor_vip +48wF5CTP...zF7tEmWC 2026-06-23 13:09:15 5301.0kH/s 3702637 81e0e2e0a19b 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-23 12:06:40 5061.2kH/s 3702605 432729b12464 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-23 11:07:36 5084.8kH/s 3702573 349a242eb12f 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-23 10:08:40 6615.4kH/s 3702528 b1d1e0fb9e38 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-06-23 09:05:26 6713.1kH/s 3702488 877f90759efd 1/1 8 donor_whale +4AEetwiY...N8hCJiNL 2026-06-23 08:02:33 5243.7kH/s 3702449 0b9e0d9c21ad 1/1 337 vip +48M2j8Gj...d8KgGBwa 2026-06-23 06:59:11 4696.6kH/s 3702424 cfb110e5f80f 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-23 06:00:08 5038.0kH/s 3702393 08a4d05cceab 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-23 05:00:17 7017.3kH/s 3702363 0b234ac49453 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-06-23 03:57:15 7001.7kH/s 3702333 67b24863cdfc 1/1 8 donor_whale +42mefDQX...pJw9nygF 2026-06-23 02:54:17 5108.5kH/s 3702300 4af4e63c5431 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-23 01:51:15 7055.8kH/s 3702277 a3307879136f 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-06-23 00:48:39 4219.4kH/s 3702238 9efe1c0b4583 1/1 6 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-22 23:46:00 4015.5kH/s 3702203 9d9c813d80d6 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-22 22:46:43 4369.4kH/s 3702165 f4ba3dce57be 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-22 21:47:45 4689.8kH/s 3702138 69096c240058 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-22 20:48:54 4398.7kH/s 3702113 68eee2fd2361 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-22 19:49:46 6500.7kH/s 3702079 bf0ae85ea5c4 1/1 1 donor_mega +43nvW9WJ...e7SmCf3o 2026-06-22 18:47:19 4655.2kH/s 3702051 38e55da31c69 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-22 17:45:04 4923.0kH/s 3702030 b50ae4080bc2 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-22 16:45:18 6815.1kH/s 3701986 6461afe2206c 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-06-22 15:42:18 6089.6kH/s 3701952 a98f8febd9df 1/1 8 donor_whale +48wF5CTP...zF7tEmWC 2026-06-22 14:39:21 6648.7kH/s 3701926 8797b0a47452 1/1 8 donor_whale +41gtJH9K...kBBoALUs 2026-06-22 13:36:14 6381.6kH/s 3701901 2fb215cc9d8b 4/1 337 vip +47NF5Nbe...nMs9DDJU 2026-06-22 12:33:41 6382.1kH/s 3701859 2c16e1905596 1/1 8 donor_whale +42NpvKMH...zAXwCRSb 2026-06-22 11:30:19 4372.3kH/s 3701822 365cc47564f4 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-22 10:27:44 4755.2kH/s 3701794 ec05127a1954 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-22 09:28:47 4298.1kH/s 3701767 3a4be432fff5 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-22 08:24:40 6268.3kH/s 3701733 0e366df541e5 1/1 1 donor_mega +431Nxj7w...4D7yyU3q 2026-06-22 07:21:20 2858.4kH/s 3701696 6e985ef329f4 1/1 31 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-22 06:03:20 6253.1kH/s 3701655 7f6a78d7db3d 1/1 1 donor_mega +46Rb9Hjc...57AFUnq5 2026-06-22 05:00:16 6583.9kH/s 3701628 38281a71c2ea 1/1 33 donor_vip +42mefDQX...pJw9nygF 2026-06-22 03:57:43 6076.4kH/s 3701602 57f3077754a3 1/1 10 donor_whale +42mefDQX...pJw9nygF 2026-06-22 02:58:14 6421.0kH/s 3701581 a1f63211a01b 1/1 33 donor_vip +49fV8TjN...GSgrDzrU 2026-06-22 01:55:31 4891.7kH/s 3701549 25545ce59717 1/1 33 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-22 00:52:20 6604.2kH/s 3701517 9c4a26d4afb0 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-06-21 23:49:15 4985.9kH/s 3701483 5306ba3da3af 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-21 22:46:43 4477.1kH/s 3701456 54d44a09b057 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-21 21:47:43 4785.6kH/s 3701420 ad4265707030 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-21 20:48:46 7087.9kH/s 3701387 f1ad7fd6a9c8 1/1 1 donor_mega +43CcbPH8...uQWupVW5 2026-06-21 19:46:19 6334.1kH/s 3701352 bf4d518d9f60 1/1 10 donor_whale +42mefDQX...pJw9nygF 2026-06-21 18:43:40 4594.2kH/s 3701324 9f09c72a2c73 1/1 10 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-21 17:40:19 6543.5kH/s 3701297 ae99b32ed8ad 1/1 1 donor_mega +48xVox2n...oQM27PR1 2026-06-21 16:37:38 7074.5kH/s 3701270 725dee32a780 1/1 32 donor_vip +49fV8TjN...GSgrDzrU 2026-06-21 15:34:22 6914.4kH/s 3701234 5953317066cb 1/1 32 donor_vip +48wF5CTP...zF7tEmWC 2026-06-21 14:31:16 5160.1kH/s 3701205 5a40e2c188da 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-21 13:28:45 5373.2kH/s 3701166 d2fe70cdd8d8 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-21 12:28:19 6599.6kH/s 3701140 9b31ae828304 1/1 1 donor_mega +44MnN1f3...a621jwyg 2026-06-21 11:25:13 6400.4kH/s 3701107 073452a77e50 1/1 4 mvp +42NpvKMH...zAXwCRSb 2026-06-21 10:22:18 4719.2kH/s 3701081 1e521b256c59 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-21 09:19:42 6821.3kH/s 3701046 507bb38f5d11 1/1 1 donor_mega +47NF5Nbe...nMs9DDJU 2026-06-21 08:16:15 6621.8kH/s 3701024 b24bec88b972 1/1 9 donor_whale +421n6hRs...61UsZuDG 2026-06-21 07:13:39 6439.0kH/s 3700995 12dc79c4b16f 1/1 32 donor_vip +46nRjvst...H2CR2bBX 2026-06-21 06:11:07 4558.8kH/s 3700956 48a87eb35437 1/1 187 vip +48M2j8Gj...d8KgGBwa 2026-06-21 05:08:17 6621.7kH/s 3700930 6389be18e6b3 1/1 9 donor_whale +481ELpyU...mCQhPM2f 2026-06-21 04:05:16 6719.5kH/s 3700898 58fb1f217b2a 1/1 32 donor_vip +487SyiQC...aSGcaBDE 2026-06-21 03:02:30 7197.2kH/s 3700869 f9c8a17ef16c 1/1 32 donor_vip +47NF5Nbe...nMs9DDJU 2026-06-21 01:59:12 5411.7kH/s 3700835 b8385af1c96a 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-21 00:56:33 7402.2kH/s 3700804 413a4550e6b9 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-06-20 23:54:15 4423.3kH/s 3700778 0de15610a82c 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-20 22:51:14 6381.9kH/s 3700744 9a3af07d1701 1/1 1 donor_mega +42Mk3F3y...Q6fgUTJr 2026-06-20 21:48:15 4502.0kH/s 3700718 9cafcf988902 1/1 9 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-20 20:45:58 4719.0kH/s 3700691 a19eb1730bcd 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-20 19:46:43 5192.6kH/s 3700651 5ec647fdf2b8 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-20 18:47:16 5557.7kH/s 3700623 3147c20a4a7f 1/1 1 donor_mega +42m2kLta...aDULT2Qj 2026-06-20 17:40:18 4676.2kH/s 3700589 ed5896e1c4cc 1/1 33 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-20 16:37:24 6640.5kH/s 3700556 6b1852dda650 1/1 1 donor_mega +42NJbX1p...JBe7i8b2 2026-06-20 15:34:21 4991.4kH/s 3700530 d4d7bb8645f5 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-20 14:31:49 6655.3kH/s 3700490 2e35cf0df4dc 1/1 1 donor_mega +42NpvKMH...zAXwCRSb 2026-06-20 13:29:34 4562.8kH/s 3700462 2ba09564303c 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-20 12:26:16 6425.7kH/s 3700432 5eaa1d8e2a8c 1/1 1 donor_mega +48wF5CTP...zF7tEmWC 2026-06-20 11:23:17 4978.4kH/s 3700397 6795361029eb 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-20 10:20:19 6036.1kH/s 3700364 2bab9b94493c 1/1 1 donor_mega +44uEmaK2...hMZB7faF 2026-06-20 09:17:21 4781.5kH/s 3700329 9267f7e300cb 1/1 77 donor +48M2j8Gj...d8KgGBwa 2026-06-20 08:15:02 4777.9kH/s 3700300 e3ddeb030a3e 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-20 07:16:01 4865.1kH/s 3700269 158130084135 1/1 1 donor_mega +48M2j8Gj...d8KgGBwa 2026-06-20 06:16:16 6634.4kH/s 3700240 ffe866c7e097 1/1 1 donor_mega +421n6hRs...61UsZuDG 2026-06-20 05:13:33 6974.2kH/s 3700215 a017913b0be6 1/1 8 donor_whale +4AeEwC2U...YQyoQtr7 2026-06-20 04:10:25 6991.9kH/s 3700184 c5d5cfc28b3e 1/1 4 mvp +43rwcyy6...JHhw1PHJ 2026-06-20 03:08:04 6660.1kH/s 3700155 cf38960c908b 1/1 185 vip +42mefDQX...pJw9nygF 2026-06-20 02:05:42 6588.8kH/s 3700126 f60b6f437cf2 1/1 8 donor_whale +42mefDQX...pJw9nygF 2026-06-20 01:06:18 5095.5kH/s 3700089 3d7c30194205 1/1 8 donor_whale +48M2j8Gj...d8KgGBwa 2026-06-20 00:03:16 6931.7kH/s 3700056 bdf1e61f5949 1/1 1 donor_mega +42NJbX1p...JBe7i8b2 2026-06-19 23:00:35 4428.5kH/s 3700029 c83a39987018 1/1 32 donor_vip +48M2j8Gj...d8KgGBwa 2026-06-19 21:57:44 4796.7kH/s 3700002 54884bbab39d 1/1 1 donor_mega diff --git a/docs/research/xvb-delivery-study/figures/fig1_delivery_per_round.png b/docs/research/xvb-delivery-study/figures/fig1_delivery_per_round.png new file mode 100644 index 00000000..fcc44b5d Binary files /dev/null and b/docs/research/xvb-delivery-study/figures/fig1_delivery_per_round.png differ diff --git a/docs/research/xvb-delivery-study/figures/fig2_share_arrivals.png b/docs/research/xvb-delivery-study/figures/fig2_share_arrivals.png new file mode 100644 index 00000000..839fba7a Binary files /dev/null and b/docs/research/xvb-delivery-study/figures/fig2_share_arrivals.png differ diff --git a/docs/research/xvb-delivery-study/figures/fig3_chain_composition.png b/docs/research/xvb-delivery-study/figures/fig3_chain_composition.png new file mode 100644 index 00000000..8ca23bd4 Binary files /dev/null and b/docs/research/xvb-delivery-study/figures/fig3_chain_composition.png differ diff --git a/docs/research/xvb-delivery-study/figures/final_stats.json b/docs/research/xvb-delivery-study/figures/final_stats.json new file mode 100644 index 00000000..9f9cdfa6 --- /dev/null +++ b/docs/research/xvb-delivery-study/figures/final_stats.json @@ -0,0 +1,17 @@ +{ + "clean_R": 0.37599487695544775, + "clean_CI": [ + 0.27626888473943306, + 0.5258637517079835 + ], + "hist_R": 0.3225503355704698, + "hist_CI": [ + 0.265864180350682, + 0.38148764482401337 + ], + "all_R": 0.3305490380103238, + "all_CI": [ + 0.2804040126425726, + 0.3863625473189898 + ] +} \ No newline at end of file diff --git a/docs/workers.md b/docs/workers.md index a0747a67..eb98b2bc 100644 --- a/docs/workers.md +++ b/docs/workers.md @@ -414,8 +414,8 @@ GRUB, MSR, the CPU governor, and the miner service. Two things to know before en - **RigForge's tuning is host-global.** It sets a `performance` CPU governor and may reserve HugePages box-wide, which affects every workload on the machine, not just the miner. That is fine - on a dedicated appliance; weigh it on a shared home server (see [deployment - models](getting-started.md)). + on a dedicated appliance; weigh it on a shared home server (see + [Co-hosting on a shared server](configuration.md#co-hosting-on-a-shared-server)). - **The stack always wins.** Cap the miner's thread count in RigForge so mining never starves the node's sync or share submission. The mining path is plain stratum over loopback, so it carries no privacy impact. diff --git a/scripts/lint-docs-voice.sh b/scripts/lint-docs-voice.sh index 97415c19..68579bd8 100755 --- a/scripts/lint-docs-voice.sh +++ b/scripts/lint-docs-voice.sh @@ -10,6 +10,7 @@ BANNED='leverage|robust|seamless|powerful|effortlessly|comprehensive|elevate|str # test-inventory is git-ignored now, so `git ls-files` never surfaces it — no exclusion needed, #414.) files=$(git ls-files '*.md' | grep -vxE 'docs/dev/STYLE\.md|CHANGELOG\.md|THIRD_PARTY_LICENSES\.md|CODE_OF_CONDUCT\.md' | + grep -vE '^docs/research/' | # verbatim research records: quoted sources and audit trails, not house prose grep -vE '(^|/)(vendor|node_modules)/' || true) if [ -z "$files" ]; then diff --git a/scripts/release-smoke.sh b/scripts/release-smoke.sh index 421a75e0..2336937b 100755 --- a/scripts/release-smoke.sh +++ b/scripts/release-smoke.sh @@ -266,8 +266,8 @@ smoke_upgrade() { '{id:$id, action:"upgrade", actor:$a, version:$v}' >"$spool/requests/$id.json" ok "Enqueued upgrade intent $id ($TAG) into the control spool." - # Drive the runner exactly as the systemd path unit does (docs/dev/releasing.md documents the manual - # `control-run-pending` drain). + # Drive the runner exactly as the systemd path unit does (docs/operations.md documents the + # pithead-control units and the manual `control-run-pending` drain). (cd "$dir" && ./pithead control-run-pending) || die "control-run-pending failed — see the output above." # Poll the result spool for this id (an upgrade pulls a whole release of images first). diff --git a/tests/integration/e2e.sh b/tests/integration/e2e.sh index d071e0da..5d931c2a 100755 --- a/tests/integration/e2e.sh +++ b/tests/integration/e2e.sh @@ -8,8 +8,9 @@ # What it does, end to end, then puts everything back the way it found it: # 1. Provisions a DEDICATED checkout on the test bench (/srv/code/pithead-e2e) — the canonical # /srv/code/pithead is the baseline and is never git-touched. -# 2. Fetches + checks out there, and seeds it with the canonical config.json/.env so -# it has the same wallet / secrets / onion keys / shared chains (just the branch's code). +# 2. Fetches + checks out there, and seeds it with the LIVE release bundle's config.json/.env +# (falling back to the canonical checkout's if there's no live bundle) so it has the same wallet / +# secrets / onion keys / shared chains (just the branch's code). # 3. Takes a `pithead backup` of the live stack (the rollback anchor). # 4. Borrows a miner (set MINER_HOST): backs up its xmrig config and repoints it at the test bench so # the live matrix has a real worker mining through this stack. @@ -332,10 +333,34 @@ provision() { head="$(on_bench "git -C '$E2E_DIR' rev-parse --short HEAD")" ok "e2e checkout on $BRANCH @ $head" - step "seeding the e2e checkout with the canonical config.json/.env (same wallet/secrets/chains)" - on_bench "cp -a '$CANONICAL_DIR/config.json' '$E2E_DIR/config.json' && cp -a '$CANONICAL_DIR/.env' '$E2E_DIR/.env'" || - die "Failed to seed config.json/.env into $E2E_DIR." - ok "config seeded (data dirs point at the shared chains)" + # Seed from the LIVE release bundle when one exists (#880): the canonical checkout's config can + # drift far behind what's actually deployed (a release bumps config.json/.env in the bundle dir, + # not in CANONICAL_DIR), so seeding from canonical silently exercises + deploys a stale config. + # The bundle lives at the "current" symlink sibling of CANONICAL_DIR (e.g. /srv/code/current). + local live_link live_cfg="" + live_link="$(dirname "$CANONICAL_DIR")/current" + on_bench "test -e '$live_link/config.json' -a -e '$live_link/.env'" && live_cfg="$live_link" + if [ -n "$live_cfg" ]; then + step "seeding the e2e checkout with the live bundle's config.json/.env ($live_cfg)" + on_bench "cp -a '$live_cfg/config.json' '$E2E_DIR/config.json' && cp -a '$live_cfg/.env' '$E2E_DIR/.env'" || + die "Failed to seed config.json/.env from $live_cfg into $E2E_DIR." + ok "config seeded from the live bundle (data dirs point at the shared chains)" + # Cheap drift check, not a full config differ: canonical is read-only and can lag the bundle + # for months, so a top-level-key diff is enough to catch a whole feature silently missing. + local live_keys canon_keys key_diff + live_keys="$(on_bench "jq -r 'keys[]' '$live_cfg/config.json' 2>/dev/null | sort")" + canon_keys="$(on_bench "jq -r 'keys[]' '$CANONICAL_DIR/config.json' 2>/dev/null | sort")" + key_diff="$(diff <(echo "$live_keys") <(echo "$canon_keys") 2>/dev/null)" + if [ -n "$key_diff" ]; then + warn "canonical config.json's top-level keys differ from the live bundle's ($live_cfg) — canonical is drifting:" + echo "$key_diff" | sed 's/^/ /' >&2 + fi + else + warn "no live bundle at $live_link — seeding from the canonical checkout ($CANONICAL_DIR) instead (may be stale)." + on_bench "cp -a '$CANONICAL_DIR/config.json' '$E2E_DIR/config.json' && cp -a '$CANONICAL_DIR/.env' '$E2E_DIR/.env'" || + die "Failed to seed config.json/.env into $E2E_DIR." + ok "config seeded from the canonical checkout (data dirs point at the shared chains)" + fi } # --- Phase 2: safety backup of the live stack ------------------------------- diff --git a/tests/integration/selftest.sh b/tests/integration/selftest.sh index 61e04e13..240a2af2 100755 --- a/tests/integration/selftest.sh +++ b/tests/integration/selftest.sh @@ -454,6 +454,38 @@ done if [ ! -e "$_gt/stray-cruft" ]; then it_pass "clean removes untracked cruft"; else it_fail "clean removes untracked cruft" "stray-cruft survived"; fi rm -rf "$_gt" +echo "== provision: seeds from the live bundle when one exists, else falls back to canonical (#880) ==" +# Mirrors e2e.sh provision()'s config-seeding selection + drift check, with plain dirs standing in +# for the on_bench SSH calls — the selection/diff logic itself is pure and needs no bench. +_sd="$(mktemp -d)" +_canon="$_sd/canonical" +_live="$_sd/current" +_e2e="$_sd/e2e" +mkdir -p "$_canon" "$_live" "$_e2e" +echo '{"monero":{},"dashboard":{}}' >"$_canon/config.json" +echo canon-env >"$_canon/.env" +echo '{"monero":{},"dashboard":{},"telegram":{}}' >"$_live/config.json" # live has a key canonical lacks +echo live-env >"$_live/.env" + +seed_from() { # -> copies into $_e2e, mirroring the cp -a pair in provision() + cp -a "$1/config.json" "$_e2e/config.json" && cp -a "$1/.env" "$_e2e/.env" +} + +# Live bundle present: seeds from it, and a top-level-key diff is non-empty (the drift signal). +seed_from "$_live" +assert_eq "seeds config.json from the live bundle" "$(cat "$_e2e/config.json")" "$(cat "$_live/config.json")" +assert_eq "seeds .env from the live bundle" "$(cat "$_e2e/.env")" "live-env" +_kd="$(diff <(jq -r 'keys[]' "$_live/config.json" | sort) <(jq -r 'keys[]' "$_canon/config.json" | sort))" +if [ -n "$_kd" ]; then it_pass "drift check flags canonical missing a live key"; else it_fail "drift check flags canonical missing a live key" "no diff reported"; fi + +# No live bundle (symlink missing/broken): falls back to canonical, and there's nothing to diff. +rm -rf "$_live" +[ -e "$_live/config.json" ] && [ -e "$_live/.env" ] && it_fail "no-live-bundle detection" "should be absent" || it_pass "no-live-bundle detection treats missing dir as absent" +seed_from "$_canon" +assert_eq "falls back to seeding config.json from canonical" "$(cat "$_e2e/config.json")" "$(cat "$_canon/config.json")" +assert_eq "falls back to seeding .env from canonical" "$(cat "$_e2e/.env")" "canon-env" +rm -rf "$_sd" + # --- Tally ------------------------------------------------------------------ echo "" echo "selftest: $IT_PASS passed, $IT_FAIL failed"