统计数据集
Proof of Architect 发布由实时链上读取生成的机器可读统计数据。这些数据以静态、服务端渲染的资源形式提供,无需 JavaScript 或钱包即可使用,因此代理可以获取并引用具体数字,而无需抓取。参考合约(Arc):0x3E20bb7be2C46f94Cab78d340D3F79Afc2a9Fed4。
1. 端点
/stats供人和代理阅读的 HTML 视图(服务端渲染,无 JavaScript)。
/stats/current.json单个对象——最新的实时快照。
/stats/history.jsonlJSON Lines——每行一个快照,只追加,按时间顺序。
位于 /stats 的 HTML 页面是人类视图(它还带有一个 schema.org/Dataset JSON-LD 块);两个 JSON 资源则是下文描述的机器合约。
2. /stats/current.json
单个 JSON 对象:最新的快照,是对合约的一次直接读取。示例(数值仅作说明):
{
"domain": "proofofarchitect.stats/1",
"updatedAt": "2026-09-16T21:08:56.181Z",
"chainId": 5042,
"contract": "0x3E20bb7be2C46f94Cab78d340D3F79Afc2a9Fed4",
"site": "https://proofofarchitect.builders",
"wave": 1,
"priceUsdc": "1",
"totalMinted": 1,
"maxSupply": 15042,
"freeClaims": 42,
"claimsLeft": 42,
"mintPaused": false,
"baseBits": 30,
"currentRequiredBits": 30
}| 字段 | 类型 | 单位 / 含义 |
|---|---|---|
| domain | string | 快照模式 id:proofofarchitect.stats/1 |
| updatedAt | string | ISO-8601 UTC,链上读取的时间 |
| chainId | integer | 5042 (Arc) |
| contract | string | 用于读取的 0x 地址 |
| site | string | 规范化站点 URL |
| wave | integer | 从 1 开始的当前波次 |
| priceUsdc | string | 当前铸造价格,以十进制 USDC 表示;"0" 表示免费 |
| totalMinted | integer | 已铸造的卡(免费 + 付费) |
| maxSupply | integer | 15,042 |
| freeClaims | integer | 免费领取码总数(42) |
| claimsLeft | integer | 尚未领取的免费领取码 |
| mintPaused | boolean | 铸造暂停标志 |
| baseBits | integer | 比特(波次 1 基础难度) |
| currentRequiredBits | integer | 比特(全新钱包的难度:无连续挖矿、无质押)——显示值 |
| currentRequiredMilli | integer | 毫比特(v3.4 分数难度;比特的千分之一) |
| stakingDiscountMilli | integer (optional) | 毫比特(v3.4 质押 PoW 加成);不可用时省略 |
一行说明单位:USDC 是 Arc 的原生 gas 代币,具有 18 位小数,因此底层链上价格是以 wei 表示的 uint256(1 USDC = 1e18);快照已经将其缩放为十进制字符串,放在 priceUsdc("0" 表示免费)。所有 *Bits 字段都是前导零位难度。stakingDiscountMilli 从质押模块读取,且在当前部署中存在。
3. /stats/history.jsonl
一个 JSON Lines 文件:每行一个紧凑的 JSON 对象,没有外层数组,行与行之间没有逗号。每一行都是一个轻量快照(current.json 的子集,用 ts 代替 updatedAt),从最旧的开始追加:
{"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}| 字段 | 类型 | 单位 / 含义 |
|---|---|---|
| ts | string | 快照的 ISO-8601 UTC 时间戳 |
| wave | integer | 从 1 开始的波次 |
| totalMinted | integer | 已铸造的卡 |
| priceUsdc | string | 十进制 USDC 价格 |
| requiredBits | integer | 比特(全新钱包难度) |
| baseBits | integer | 比特(波次 1 基础) |
- 只追加且按时间顺序(最旧的在前);最后一行是最近记录的状态。
- 逐行解析(流式);忽略空行。不要假设每一行都存在某个键——其结构是一个稳定的子集,可能会以追加的方式扩展。
- 行数等于记录的变更次数,而非铸造次数(见下文的频率说明)。
4. 方法论
- 数据来源。 每个值都通过 RPC、经由 viem(eth_call)直接从 Arc 上部署的合约读取。这些数字背后没有索引器,也没有数据库。
- 读取。 系列视图(totalMinted, maxSupply, freeClaims, claimsLeft, currentWave, currentPrice, baseBits, mintPaused),再加上 requiredBits(0x0) / requiredMilli(0x0) 用于 currentRequiredBits / currentRequiredMilli。当接入质押模块时会加上 stakingDiscountMilli(0x0),否则省略。
- 缓存与新鲜度。current.json 以较短的缓存生成(约 60 秒;s-maxage=60, stale-while-revalidate=300),并且始终带有 updatedAt,即读取的时间戳。请将 updatedAt 视为权威,且不要让使用方缓存该文件的时间超过这一时限。
- 历史记录。history.jsonl 由一个由仓库预置的文件提供,并由一个小型运维 cron 追加,该 cron 会轮询 current.json,仅当值发生变化时才写入新行(当链上安静时有一小时的去重窗口)。
- 确定性。 稀有度和难度都从链上状态重新计算;精确的数学记录在 /docs/verification.
5. 如何引用
请引用 URL、数据集 id 以及 updatedAt 时间戳,以便该数字可复现:
Proof of Architect stats — chainId 5042, contract 0x3E20bb7be2C46f94Cab78d340D3F79Afc2a9Fed4, dataset proofofarchitect.stats/1, https://proofofarchitect.builders/stats/current.json, updatedAt <ISO-8601 UTC>.
- 对于难度,引用 baseBits 和 currentRequiredBits,单位为 比特。
- 对于价格,引用 priceUsdc,并说明它是原生 USDC(18 位小数)。
- 对于供应量,引用 totalMinted / maxSupply 以及 claimsLeft / freeClaims。
6. 频率与版本控制
- current.json:以约 60 秒的缓存持续刷新。
- history.jsonl:每次变更(一次铸造、一次波次或价格变化、暂停/恢复)一行,由运维 cron 追加,并带有一小时的去重窗口。
- 版本控制。 该模式通过 domain 进行版本控制(proofofarchitect.stats/1);新键以向后兼容的方式添加,破坏性变更会提升后缀。可选的扩展(例如一个扁平的 CSV 镜像和更丰富的稀有度覆盖)已列入计划,并将以追加的方式添加。