统计数据集
Spirit Cards 发布由实时链上读取生成的机器可读统计数据。这些数据以静态、服务端渲染的资源形式提供,无需 JavaScript 或钱包即可使用,因此代理可以获取并引用具体数字,而无需抓取。参考合约:0x0997DB0BEa2c1278063ebBEc0d1cdbecE7B6F021。
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": "spiritcards.fun/stats/1",
"updatedAt": "2026-09-16T21:08:56.181Z",
"chainId": 4663,
"contract": "0x0997DB0BEa2c1278063ebBEc0d1cdbecE7B6F021",
"site": "https://spiritcards.fun",
"totalMinted": 1,
"maxSupply": 8888,
"currentPriceEth": "0.00037",
"baseBits": 20,
"mineCooldownSeconds": 45,
"mergeFeeEth": "0.00002",
"burned": 0,
"forged": 0,
"paused": false
}| 字段 | 类型 | 单位 / 含义 |
|---|---|---|
| domain | string | 快照模式 id:spiritcards.fun/stats/1 |
| updatedAt | string | ISO-8601 UTC,链上读取的时间 |
| chainId | integer | 4663 |
| contract | string | 用于读取的 0x 地址 |
| site | string | 规范化站点 URL |
| totalMinted | integer | 已铸造的卡 |
| maxSupply | integer | 最终供应上限(8,888) |
| currentPriceEth | string | 当前铸造价格,以 ETH 表示;"0" 表示免费 |
| baseBits | integer | 比特(基础难度) |
| mineCooldownSeconds | integer | 每个钱包两次铸造之间的秒数 |
| mergeFeeEth | string | 以 ETH 表示的熔炼手续费 |
| burned | integer | 通过熔炼烧毁的卡 |
| forged | integer | 通过熔炼锻造出的卡 |
| paused | boolean | 铸造暂停标志 |
一行说明单位:ETH 是原生 gas 代币,具有 18 位小数,因此底层链上价格是以 wei 表示的 uint256 值(1 ETH = 1e18);快照已经将它们缩放为十进制字符串,放在 currentPriceEth 和 mergeFeeEth("0" 表示免费)。baseBits 是前导零位难度。
3. /stats/history.jsonl
一个 JSON Lines 文件:每行一个紧凑的 JSON 对象,没有外层数组,行与行之间没有逗号。每一行都是一个轻量快照(current.json 的子集,用 ts 代替 updatedAt),从最旧的开始追加:
{"ts":"2026-09-16T17:00:00.000Z","totalMinted":1,"currentPriceEth":"0.00037","baseBits":20}
{"ts":"2026-09-16T19:00:00.000Z","totalMinted":1,"currentPriceEth":"0.00037","baseBits":20}
{"ts":"2026-09-16T21:08:56.181Z","totalMinted":1,"currentPriceEth":"0.00037","baseBits":20}| 字段 | 类型 | 单位 / 含义 |
|---|---|---|
| ts | string | 快照的 ISO-8601 UTC 时间戳 |
| totalMinted | integer | 已铸造的卡 |
| currentPriceEth | string | 十进制 ETH 价格 |
| baseBits | integer | 比特(基础难度) |
- 只追加且按时间顺序(最旧的在前);最后一行是最近记录的状态。
- 逐行解析(流式);忽略空行。不要假设每一行都存在某个键——其结构是一个稳定的子集,可能会以追加的方式扩展。
- 行数等于记录的变更次数,而非铸造次数(见下文的频率说明)。
4. 方法论
- 数据来源。 每个值都通过 RPC、经由 viem(eth_call)直接从 Robinhood Chain 上部署的合约读取。这些数字背后没有索引器,也没有数据库。
- 读取。 核心视图(totalMinted, maxSupply, currentPrice, baseBits, mineCooldown, mergeFee, paused),再加上 burned() 和 forged() 用于烧毁与熔炼计数器;chain id 来自构建环境。
- 缓存与新鲜度。current.json 以较短的缓存生成(约 60 秒;s-maxage=60, stale-while-revalidate=300),并且始终带有 updatedAt,即读取的时间戳。请将 updatedAt 视为权威,且不要让使用方缓存该文件的时间超过这一时限。
- 历史记录。history.jsonl 由一个由仓库预置的文件提供,并由一个小型运维 cron 追加,该 cron 会轮询 current.json,仅当值发生变化时才写入新行(当链上安静时有一小时的去重窗口)。
- 确定性。 稀有度和难度都从链上状态重新计算;精确的数学记录在 /docs/verification.
5. 如何引用
请引用 URL、数据集 id 以及 updatedAt 时间戳,以便该数字可复现:
Spirit Cards stats — chainId 4663, contract 0x0997DB0BEa2c1278063ebBEc0d1cdbecE7B6F021, dataset spiritcards.fun/stats/1, https://spiritcards.fun/stats/current.json, updatedAt <ISO-8601 UTC>.
- 对于难度,引用 baseBits 和 currentRequiredBits,单位为 比特。
- 对于价格,引用 currentPriceEth,并说明它是 ETH(18 位小数的原生 gas 代币)。
- 对于供应量,引用 totalMinted / maxSupply 以及 burned / forged。
6. 频率与版本控制
- current.json:以约 60 秒的缓存持续刷新。
- history.jsonl:每次变更(一次铸造、一次价格变化、暂停/恢复)一行,由运维 cron 追加,并带有一小时的去重窗口。
- 版本控制。 该模式通过 domain 进行版本控制(spiritcards.fun/stats/1);新键以向后兼容的方式添加,破坏性变更会提升后缀。可选的扩展(例如一个扁平的 CSV 镜像和更丰富的稀有度覆盖)已列入计划,并将以追加的方式添加。