verify / @flop-lab/proofs
Proof explorer
Suite entry: flop proofs. The README below lists the package options.
Reading progress
Proof explorer
What proofs are miners submitting and what do they cover? flop-proofs reads public PoUI rows, leaderboard reports and settlement pages. It quotes the pinned yellowpaper and explains why the public fields cannot establish paid-channel proof coverage.
Quick start
Run from the repository root with Node 22 and pnpm:
pnpm install --frozen-lockfile
pnpm --filter @flop-lab/proofs --filter @flop-lab/cli build
node packages/cli/dist/cli.js proofs listThe default is a bundled recording. It needs no network call after installation.
Commands
node packages/cli/dist/cli.js proofs types
node packages/cli/dist/cli.js proofs coverage --json
node packages/cli/dist/cli.js proofs history
node packages/cli/dist/cli.js proofs history --index ./archive/index.json --json
node packages/cli/dist/cli.js proofs list --live --limit 1000 --save ./proof-observation.json
node packages/cli/dist/cli.js proofs coverage --input ./proof-observation.json --json--channel 0x... selects a settlement from the captured sample. A missing match reports no data. Saved files are created exclusively so an existing recording is not overwritten. Invalid CLI arguments exit with an error. Unavailable sources are explicit in the report.
The importable API is @flop-lab/proofs:
import { createCollector, analyzeRecording, recordedProofs } from "@flop-lab/proofs";
const recorded = recordedProofs();
const collect = createCollector();
const current = analyzeRecording(await collect(100));
console.log(recorded.coverage, current.proofs);What the recording says
The capture ended at 2026-11-06T01:30:07.142Z through https://mcp.flop.network/mcp. It returned zero proof rows, zero leaderboard rows and proofs24h = 0. It captured 349 settlement rows with complete reported pagination. Every settlement is UNVERIFIABLE for proof coverage. Raw responses, queries and reception times are in fixtures/capture-*.json.
The collector recorded 8 HTTP requests in 4646 ms for that run. Those values describe the recorded run on the build host. They are not service performance guarantees.
Evidence rules
- Section 3.6 separates the direct proof rail for synthetic, ghost, calibration and simulator work from paid compute channels.
- The introspected
PouiProofexposesid,blockHash,blockNumber,submitter,gnWeight,successCount,taskHashandtimestamp. - There is no public channel-to-task binding, proof payload, TOPLOC commitment, measured model/output binding or validator signature bundle in that projection.
- Equal miner addresses, blocks, task hashes and channel IDs do not establish coverage. A positive
successCountdoes not verify a proof. - Empty rows mean no observed proof rows. They do not establish that TOPLOC evidence was absent from a settlement.
- Malformed or failed pages make that source unavailable. Duplicate rows, non-advancing pages and changing settlement totals fail closed. A truncated sample stays partial.
- Numeric proof weights come from GraphQL Float fields. They remain reported values and are never used as exact arithmetic or proof coverage.
types quotes section 3 and the call references. submit_stark_batch and submit_validator_attestations are in Appendix G.2. The pinned paper references submit_toploc_evidence in Appendix F; it has no standalone signature row in Appendix G.1. The tool does not invent one.
The paper pin is 2a2cc8218048a2933071bb2f45d75335560e39d8. The sampled-audit parameters are quoted specification defaults, not measurements of deployed runtime storage:
| Parameter | Pinned default |
|---|---|
sampled_audit_alpha_ppm | 50_000 ppm |
audit_quantum_gn | 100_000_000 G_n |
high_value_gn_threshold | 10_000_000 G_n |
Recorder history
history reads the recorder's stats.proofs24h and poui.pouiLeaderboard.count fields with their own source times. The former is a rolling reported window. The latter is the recorder's bounded leaderboard sample size. Neither is a cumulative proof count. Missing fields remain null. Do not sum overlapping windows or infer daily trends from the close-spaced bundled recorder runs. Use --index to inspect a newer local archive index.
Request bounds and checks
Live reads use @flop-lab/mcp with a 500 ms minimum gap, a 15 second attempt timeout and one retry with backoff on 429, 5xx or transport failure. The row limit is 1 to 1000 per paged source. At the maximum limit there are at most 23 logical tool calls with at most two attempts each. Leaderboards are limited to 20 rows. A full proof page at the cap remains partial because the API has no total. Successful or unavailable captures are cached for 60 seconds per collector and limit. Cache hits retain their capture times. Separate CLI processes do not share the cache.
pnpm --filter @flop-lab/proofs check
FLOP_LIVE=1 pnpm --filter @flop-lab/proofs exec vitest runTests replay raw public responses and include explicitly synthetic nonempty proof rows matching the observed schema. They exercise hostile inputs, missing fields, pagination, recorder gaps and misleading cross-rail matches. The opt-in network test skips by default. The mutation check labels an unbound proof as covered and confirms the suite rejects it.
What this does not verify
This tool does not verify cryptographic proofs, signatures, hardware attestation, model execution, answer quality, TOPLOC openings, validator quorum, chain finality or runtime parameter enforcement. It does not establish the absence of channel evidence from an empty direct-rail table. The two leaderboards share indexer infrastructure. Sequential observations are not an atomic chain snapshot. Devnet can reset. No wallet or write transaction is used.