Stats dataset
Proof of Architect publishes machine-readable statistics generated from live on-chain reads. The data is served as static, server-rendered resources that work without JavaScript or a wallet, so an agent can fetch and cite concrete numbers instead of scraping. Reference contract (Arc):0x2F7cE1e4A175b1A16e4f151fA5B862ea6b9F3C8b.
1. Endpoints
The HTML page at /stats is the human view (it also carries a schema.org/Dataset JSON-LD block); the two JSON resources are the machine contract described below.
2. /stats/current.json
A single JSON object: the most recent snapshot, a direct read of the contract. Example (values illustrative):
{
"domain": "proofofarchitect.stats/1",
"updatedAt": "2026-09-16T21:08:56.181Z",
"chainId": 5042002,
"contract": "0x2F7cE1e4A175b1A16e4f151fA5B862ea6b9F3C8b",
"site": "https://proofofarchitect.builders",
"wave": 1,
"priceUsdc": "1",
"totalMinted": 1,
"maxSupply": 15042,
"freeClaims": 42,
"claimsLeft": 42,
"mintPaused": false,
"baseBits": 30,
"currentRequiredBits": 30
}| Field | Type | Units / meaning |
|---|---|---|
| domain | string | snapshot schema id: proofofarchitect.stats/1 |
| updatedAt | string | ISO-8601 UTC, time of the on-chain reads |
| chainId | integer | 5042002 (Arc) |
| contract | string | 0x address used for the reads |
| site | string | canonical site URL |
| wave | integer | 1-based current wave |
| priceUsdc | string | current mint price as decimal USDC; "0" means free |
| totalMinted | integer | cards minted (free + paid) |
| maxSupply | integer | 15,042 |
| freeClaims | integer | total free claim codes (42) |
| claimsLeft | integer | unclaimed free claim codes |
| mintPaused | boolean | mint pause flag |
| baseBits | integer | bits (wave-1 base difficulty) |
| currentRequiredBits | integer | bits (difficulty for a fresh wallet: no streak, no stake) |
| stakingDiscountBits | integer (optional) | bits; v3.1 cores only, omitted on a v3 core |
Units in one line: USDC is the native Arc gas token with 18 decimals, so the underlying on-chain price is a uint256 in wei (1 USDC = 1e18); the snapshot exposes it already scaled as a decimal string in priceUsdc ("0" means free). All *Bits fields are leading-zero-bit difficulties. stakingDiscountBits is read from the staking module and is present on the current deployment.
3. /stats/history.jsonl
A JSON Lines file: one compact JSON object per line, no surrounding array, no commas between lines. Each line is a lightweight snapshot (a subset of current.json, with ts instead of updatedAt), appended oldest first:
{"ts":"2026-09-16T17:00:00.000Z","wave":1,"totalMinted":1,"priceUsdc":"1","requiredBits":30,"baseBits":30}
{"ts":"2026-09-16T19:00:00.000Z","wave":1,"totalMinted":1,"priceUsdc":"1","requiredBits":30,"baseBits":30}
{"ts":"2026-09-16T21:08:56.181Z","wave":1,"totalMinted":1,"priceUsdc":"1","requiredBits":30,"baseBits":30}| Field | Type | Units / meaning |
|---|---|---|
| ts | string | ISO-8601 UTC timestamp of the snapshot |
| wave | integer | 1-based wave |
| totalMinted | integer | cards minted |
| priceUsdc | string | decimal USDC price |
| requiredBits | integer | bits (fresh-wallet difficulty) |
| baseBits | integer | bits (wave-1 base) |
- Append-only and chronological (oldest first); the last line is the most recent recorded state.
- Parse line by line (streaming); ignore blank lines. Do not assume a key exists in every line — the shape is a stable subset and may grow additively.
- The line count equals the number of recorded changes, not the number of mints (see the cadence note below).
4. Methodology
- Source. Every value is read directly from the deployed contract on Arc over RPC via viem (eth_call). There is no indexer and no database behind the numbers.
- Reads. Collection views (totalMinted, maxSupply, freeClaims, claimsLeft, currentWave, currentPrice, baseBits, mintPaused) plus requiredBits(0x0) for currentRequiredBits. stakingDiscountBits(0x0) is added when a staking module is wired and omitted otherwise.
- Cache and freshness. current.json is generated with a short cache (about 60 seconds; s-maxage=60, stale-while-revalidate=300) and always carries updatedAt, the timestamp of the reads. Treat updatedAt as authoritative and do not cache the file in a consumer for longer than that.
- History. history.jsonl is served from a repo-seeded file and appended by a small ops cron that polls current.json and writes a new line only when the values change (with a one-hour dedup window while the chain is quiet).
- Determinism. Rarity and difficulty are recomputed from on-chain state; the exact math is documented on /docs/verification.
5. How to cite
Quote the URL, the dataset id and the updatedAt timestamp so the number is reproducible:
Proof of Architect stats — chainId 5042002, contract 0x2F7cE1e4A175b1A16e4f151fA5B862ea6b9F3C8b, dataset proofofarchitect.stats/1, https://proofofarchitect.builders/stats/current.json, updatedAt <ISO-8601 UTC>.
- For difficulty, quote baseBits and currentRequiredBits in bits.
- For price, quote priceUsdc and say it is native USDC (18 decimals).
- For supply, quote totalMinted / maxSupply and claimsLeft / freeClaims.
6. Cadence and versioning
- current.json: refreshed continuously with a cache of about 60 seconds.
- history.jsonl: one new line per change (a mint, a wave or price change, pause/unpause), appended by the ops cron with a one-hour dedup window.
- Versioning. The schema is versioned by domain (proofofarchitect.stats/1); new keys are added in a backward-compatible way and a breaking change bumps the suffix. Optional expansions (for example a flat CSV mirror and richer rarity coverage) are planned and would be added additively.
Related: Agent access · Verification · Live stats · Docs index · GitBook