# BTC 复算方法（criteria c2） ／ BTC recomputation method (criteria c2)
> 数据截至 2026-09-19T23:58:50Z｜发布 2026-09-21T14:16:30Z
> card_id: `PSL-BTC-method`｜card_type: `method`｜criteria_ver: `c2`｜legend_ver: `lg1`
## 可抄句
- BTC 复算方法（criteria c2）：本页给出逐指标复算步骤、边界算法、口径对照、判据逐字登记、已知局限与版本历史。
- BTC recomputation method (criteria c2): per-metric steps, boundary rules, criteria comparison, verbatim criteria, known limits and version history.
## 主矩阵
| metric |  |
|---|---|

可读标签（§6.9（一））：
## 方法六节（§3.6）
本节逐字取自 `criteria_human_c2.md`（§3.6 六节，节名逐字）。

### ① 复算步骤
出处：§2.2／§2.3／§5.3。

### 五个指标（M1–M5，机器名／口径）

| 机器名 | 含义 | 算式 |
|---|---|---|
| `btc_block_count` | 日内块数 | `n` ＝ 归属该 UTC 日的块数 |
| `btc_tx_count_incl_coinbase` | 日内交易数（**含** coinbase） | `Σ_{h∈D} tx_count(h)` |
| `btc_tx_count_excl_coinbase` | 日内交易数（**不含** coinbase） | `Σ_{h∈D} (tx_count(h) − 1)` |
| `btc_fee_total_claimed` | 矿工**申领**手续费（sat） | `Σ_{h∈D} coinbase 输出 value − Σ_{h∈D} subsidy(h)`，**补贴逐块取**（E5） |
| `btc_day_end_height` | 日末块高度 | 日内最后一个块的高度（零块日沿用前日，E2） |

⛔ M4 是**矿工申领口径**，**不是**交易者实付口径；两者之差 ＝ **未申领费用**（§4 第 8 件，决议 A1）。

### 日界的机械定位算法（§5.3 规则 2，v4.1 重写／v4.2 触发 bump）

1. **UTC 日界**：块 `nTime ∈ [D 00:00:00, D+1 00:00:00)`，**左闭右开，边界块归新的一天**。
2. **二分只给候选**：先按 `nTime` 二分，得到日首／日末块的**候选**高度 `h`。
3. **窗内枚举定案**：在 `[h−6, h+6]`（＝ `LOOKBACK = 6`，**定值，不是「≥6」**）内**逐块枚举**，
   以「`nTime` 是否落入本日」定案。**二分的结果不再直接当作答案。**
4. **失败分支**：
   · ① 二分候选与枚举结果不一致 ⇒ 记 `LookbackExtended`，**继续**（不停发）；
   · ② 窗内出现 `nTime` 回退 ⇒ **只登记，不停发**（有界回退是**链上常态**：共识只要求
     `nTime > 前 11 块的中位数`，**不要求递增**；实测 152／4607 个相邻高度、中位 111 秒）；
   · ③ 回退**跨越日界**（高度区间内混入了不属于本日的块）⇒ **`AmbiguousBoundary`，该日停发调查**，
     不得取近似解。
5. **同高度出现两块**（疑似孤块）⇒ 打旗 ＋ 停发调查（E7）。

★ **v4.2 的变更**：第 3 步（「二分定案」⇒「二分只给候选 ＋ 窗内枚举定案」）是**定位算法**变更；
`LOOKBACK` 仍是 6。⇒ 按 v4.2 §4 第 6 件写宽后的白名单，**`criteria_ver` 必须 bump**（§19.29.2）。

---

### ② 边界算法
出处：§2.7（E1–E11 **逐条原文**，本件不复述、不改写）。

| # | 边界 | 处置（可直接执行） |
|---|---|---|
| E1 | `n = 1`（日内仅 1 块） | 块间隔**不出值**，`extra.interval_undefined=true`；其余指标照出 |
| E2 | `n = 0`（零块日） | `value=0`、M5 **沿用前日高度**、`extra.zero_block_day=true`；生成器不得崩 |
| E3 | 对照列在线 = 1（单源） | **停发该格**（G2 要求 ≥2） |
| E4 | **首日运行／无 D−1 观测** | G1 相邻性**不可判** ⇒ 判 `not_applicable` 并登记。**`not_applicable` ≠ 通过**，不得计入"全绿"；**连续 2 日 `not_applicable` 即告警** |
| E5 | **跨减半点日**（块跨越 210,000 的整数倍） | `subsidy(h)` **逐块取，不得按日单值代入**；该日 `Σsubsidy` ＝ 逐块 `subsidy(h)` 求和 |
| E6 | `min(values) ≤ 0` | `ratio` **无定义** ⇒ **该日不成「分歧型页」**（§1.2）；但**锚点型页照发**，ratio 一格按 §6.3 空缺格输出（`failed_gate` 记 `ratio_undefined`）。**两型分别处置，不互相取消** |
| E7 | 同高度出现两块（疑似孤块） | **打旗 ＋ 停发调查**（§5.3 复算算法第 4 条） |
| E8 | `weight > 4,000,000` 的块 | **不视为错误**；按原始 `weight` 输出 ＋ `overlimit:true`（PR-1 未填值前该指标不出卡） |
| E9 | 块间隔为负（时间戳非单调） | **保留原值不修正**，中位数照常计算，卡上声明此口径（§2.4） |
| E10 | 某源 `Date` 响应头与 `fetched_at` 相差 >60s | **打旗**（不阻塞），`fetched_at` 可信度受影响须可追溯 |
| E11 | 补采日（`miss` 后重取） | 按**首次入库时的 `as_of`** 记录，不得改写为补采日 |

★ **E4 与「验收」的关系（v4.2 §19.29.3 新增裁定）**：`not_applicable` **不是** `fail`。
验收判据是「G1–G7 无一项为**失败**」⇒ 首日 E4 ⇒ 验收**通过**；但**全绿**另需「无 `not_applicable`」
⇒ 首日 E4 在位时**只能写「验收通过（非全绿）」**，禁止写「全绿」。

---

### ③ 口径对照
出处：§4 九件（**每张卡必须显式声明**；本节逐字转录，供方法页引用）。

1. **UTC 日边界**：块 `nTime ∈ [D 00:00:00, D+1 00:00:00)` UTC，**左闭右开，边界块归新的一天**。显式声明：矿工时间戳允许约 ±2 小时偏差且**非单调**，存在固有边界模糊——如实标注，不隐藏。**归属的机械定位算法见 §5.3，本表不复述。**
2. **交易计数双口径**：含／不含 coinbase 两者都给（M2／M3），杜绝最大的口径歧义源。
3. **价值口径阶梯**：输出总额 ≠ 转移额 ≠ 经济转移额，逐级标注；输出总额必须带"含找零"标注。**展示层位数与舍入方向 `⟨待标定:S-5⟩`。**
4. **终局性（概率声明）**：**BTC 终局性是概率性的。** 本卡数值在 D+3 采样，此后 reorg 概率极低但非零；一旦发生影响已发布数值的事件，走修订卡流程。全文**禁用"永久终局／永不重算"**。
5. **采集时间 vs 源声明计量时间**：`fetched_at`（我方抓取时刻）与 `source_as_of`（对方声明口径）分列。
6. **复算方法版本**：`criteria_ver` 字段。**必须 bump 的变更白名单**：coinbase 判定规则｜M4 口径｜日界解释｜日首块定位的**回溯深度或定位算法**｜块间隔分母。**未列明的微调不 bump**；历史值沿用当时代方法版本并可在修订卡中说明。★ **写宽的边界**：只有「**怎么定位**」这一类进白名单；重命名、排版、注释、内部函数拆分**仍不 bump** —— 否则 bump 会退化成「每次提交都 bump」，而版本号一旦失去区分力，它就不再是版本号。
7. **来源独立性声明（扩项）**：逐源标注运营独立性。mempool.space 若为复算输入，其对照列标注"与我方基准同源，仅供交叉核对，不构成独立验证"。**本件扩项：基准列自身也须声明独立性**——两节点均为**托管 API 而非自建节点**，其"独立"须逐字登记后端实现／运营主体／缓存层（`⟨待标定:OB-1⟩`）；**OB-1 未填值前，基准列一律标注"独立性未判定"**。所有对照源本质都在测量同一条链，"独立"指发布与统计口径的运营独立，不是"独立宇宙"。
8. **手续费口径声明（决议 A1）**：M4 为**矿工申领口径**（`Σ(coinbase 输出 value) − Σ_{h∈D} subsidy(h)（**逐块求和**）(D)`，**补贴表见 §2.2**），**不是交易者实付口径**；两者之差 ＝ **未申领费用**。此项必须逐字写明、不得省略——**卡上那句"可复算"能否成立，取决于读者知道自己在复算的是哪一笔账**。逐指标复算深度（L0–L3）同样须在卡上声明。
9. **块间隔分母**：**分母 ＝ n−1**，只算日内相邻块、不跨日。**数值规定在 §2.4，本表不复述——同一决定只在一处规定。**

---

### ④ 判据逐字登记
出处：§5.10 `criterion_verbatim` 的转录；与 `_daystate/_registry/criteria.json` 的 `sources[]` **同轮同步**。

| 源名 | 判据原文 | 许可状态（**未闭合 ⇒ 该列不出卡**） |
|---|---|---|
| `mempool_space` | 未逐字登记（端点 `GET /api/v1/blocks/:startHeight`，字段含 height／id／timestamp／tx_count／weight；`tx_count` 为块体交易条数，含 coinbase） | 未逐字登记。robots.txt 实测不存在（返回该站 SPA 首页 HTML，非 robots 文件）；ToS 未核查 |
| `blockstream` | 未逐字登记（端点 `GET /blocks/:startHeight`，每次 10 块；与 mempool 同为 Esplora 系） | 未逐字登记。robots.txt 与 ToS 均未核查 |
| `blockchain_com` | 逐字：name "Confirmed Transactions Per Day"／unit "Transactions"／period "day"；Methodology 逐字 "Transactions from confirmed blocks are simply summed up to obtain daily numbers"；Notes 逐字 "Transactions are accounted for only once they are included in a block."；API 文档逐字 "The timezone is UTC." | **未闭合**。《API Agreement》正文未获取 ⇒ 转述与再发布许可无法判定 |
| `bitinfocharts` | robots.txt 逐字：`User-agent: *` ／ `Disallow: /` | **★ 不通过**（全站禁抓 ⇒ 抓取与转述均不获许可；技术可达 ≠ 许可） |
| `coinmetrics` | README 逐字 "Data is made available under the CC BY-NC 4.0 license." | **★ CC BY-NC 4.0** —— 署名 ＋ **禁止商业使用** ⇒ 与 PSL 卡片的商业用途存在 NC 冲突，**须由创始人决策或改用付费授权** |

★ **§6.3 ④ 的处置**：`PR-4`／`PR-5`／`PR-7` 未填 ⇒ 该**源的整列不得进卡**（不是留空、不是填 0），
图例区须写「本版不含 <源名> 列（该源转述许可未登记）」。

---

### ⑤ 已知局限
出处：§7.1／§5.3。

1. **能力边界句（§7.1）**：**本基线只能捕获回归，不能捕获「首次就算错」。**
   即：两次结果不同会被告知；**第一次就算错**且此后一直错，**不会被本基线发现**。
2. **M4 无跨源校验（§5.3，承审核 A-04）**：**因此 M4 无跨源校验** ——
   其唯一自校验是 §2.2 的下界式 `Σcoinbase 输出 ≥ subsidy(h)×块数`。
3. **日界的固有模糊**：矿工时间戳允许约 ±2 小时偏差且非单调（§4 第 1 件）⇒
   **边界归属在极少数日子可能不唯一**；此时按 §5.3 失败分支③ **停发调查**，不得取近似解。
4. **两节点均为托管 API 而非自建节点**（§4 第 7 件，`⟨待标定:OB-1⟩`）⇒
   `OB-1` 未填值前，基准列一律标注「**独立性未判定**」。
5. **`find_day_end` 在跨大时间跨度的数据上会发散**（**已登记，未修**）：
   当块序列从 2020 年直接跳到 2026 年时，二分的单调前提不成立，而 `LOOKBACK=6` 的窗内枚举
   **补不回**上千块的跳跃 ⇒ 会返回错误的高度。
   **对 B1 窗口无影响**：正常管线每天只取当日数据（30／30 天实测正确）；该缺陷只在
   「一次性喂入跨年数据」的探针形态下出现。

★ 以下 6–9 四项是 §3.6「方法页必须承载的六项内容」里的另外四块
（① 复算步骤见本件第 ① 节；③ 能力边界句见上面第 1 条）。**六项各有可见区块，
缺一项 ⇒ `MethodPageIncomplete` 并停发** ⇒ 它们**不能只写进别的文档**：

6. **诚实版需求理由（§1.2；含「**精确搜索量未测量**」）**：本方法要的不是「更准」，
   是「**可被第三方复算**」。而**精确搜索量未测量** —— 为了达到当前口径，我方实际付出的
   搜索／请求量与代价**没有量化** ⇒ 本页不宣称任何效率或成本上的优越性。
7. **代理／镜像的使用及其对 `fetched_at` 可信度的影响**（§5.4／§10.5）：两节点均为
   **托管 API**（`mempool.space` ／ `blockstream.info`），经**代理／镜像／CDN** 取数
   ⇒ `fetched_at` 是**我方收到的时刻**，不是对方产生数据的时刻；
   中间任何一层缓存都会让这个时点**偏晚**，而**我方无法从响应里区分**是哪一层。
8. **「告警能力受限」标注**（§5.10（三）；`DC-2` **未填值**）⇒ 本系统的**告警能力受限**：
   闸门报得出「不合规」，**报不出「该报而没报」** ⇒ **沉默不等于正常**。
   （`DC-2` 填上后本条标注即可撤下。）
9. **「单点风险未除」标注**（§8；`DC-1` **未填值**）⇒ **单点风险未除**：两节点同为托管 API，
   同一运营方的故障／限流／改版会**同时**影响两边，而 G3 的「两节点一致」在那种情况下
   **依然会判一致** —— 一致性判据**覆盖不到共同原因**。
   （`DC-1` 填上后本条标注即可撤下。）

---

### ⑥ 版本历史
出处：§4 第 6 件（每个 `criteria_ver` 一行：版本／生效日／白名单变更项）。

| 版本 | 生效日 | 白名单变更项 | 备注 |
|---|---|---|---|
| 第 1 版（串记作 `crit1`） | 2026-09-18 | ——（首轮登记） | ⛔ **形态不合规**：§2.3 规定 `criteria_ver` 的形式是 `c<正整数>`，而 `crit1` 不是。**该串此后不再使用**，也**不补发** `c1`（那会变成「曾经存在过两个第一版」） |
| `c2` | 2026-09-21 | **日首块定位的定位算法**（二分定案 ⇒ 二分取候选 ＋ 窗内枚举定案）；`LOOKBACK` 仍为 6 | **本版**。同时把 §4 第 6 件的白名单由「回溯深度」写宽为「**回溯深度或定位算法**」；并把 `schema_ver`（本文件的结构版本 `cj1`）与 `criteria_ver` **分列**（此前两者共用一个字段）。依据：规格 v4.2 §19.29 |

★ **读法**：`criteria_ver` 由 `adapters/psl_recompute.py` 的 `criteria_version()` 从
`_registry/criteria.json` 的 **`criteria_ver`** 字段读入（**不再读 `schema_ver`**）；
读不到 ⇒ **抛**，不许猜一个值（铁律 2），也**不退回** `schema_ver`。

## 脚注
- 本页无空缺格。
## 图例
图例（**全量说明，不是本次命中的清单**；`legend_ver=lg1`）：

- 1. 「此值会变」——{指标} {日期} 的值为暂定值（D+3 前可能被重组改写），此值会变。（**本页无暂定值**）
- 2. 「含 coinbase 口径不同」
- 3. 「日界切法不同」
- 4. 「申领口径 ≠ 实付口径」
- 5. 「交易计数定义不同」
- 6. 「其他已登记口径差异」
- 7. 「≈ 近似」（前缀在数值前，**不得只在悬停里**）
- 8. 「含超限块」
- 9. 「采集时钟存疑」
- 10. 本版不含 bitinfocharts 列（该源转述许可未登记）
- 11. 本版不含 blockchain_com 列（该源转述许可未登记）
- 12. 本版不含 blockstream 列（该源转述许可未登记）
- 13. 本版不含 coinmetrics 列（该源转述许可未登记）
- 14. 本版不含 mempool_space 列（该源转述许可未登记）

> 页型：**锚点型**（不设比值阈值；门槛 ＝ 锚点齐备〔首末块哈希＋高度区间＋时点＋口径指纹〕＋必要性判据）｜源数 0｜本页 ratio ＝ —（来源数 0 < 2 ⇒ 比值不适用 ⇒ 不构成分歧 ⇒ 走锚点型（`EP-23`））｜定义：比值 ratio ≡ max(values) ÷ min(values)，仅在**同指标、同日、同口径**的 ≥2 个来源之间计算；min(values) ≤ 0 时 ratio 无定义，该日不成页并登记原因。／ratio = max(values) / min(values), computed only across >=2 sources of the same metric, same day and same caliber; undefined when min(values) <= 0, in which case no page is produced for that day and the reason is logged.
## 引用
PSL. (2026). BTC 复算方法（criteria c2） [BTC recomputation method (criteria c2)]. PSL 链上计量系统. https://psl.antinel.com/btc/method.html

```
@misc{psl_btc_method, title={BTC 复算方法（criteria c2）}, author={PSL}, year={2026},
 howpublished={\url{https://psl.antinel.com/btc/method.html}},
 note={criteria_ver=c2; data as of 2026-09-19T23:58:50Z}}
```

完整性：`sha256:0a3898271dfd7d7c`（完整值见本件 JSON 的 `integrity.value`）。
## 复算方法
复算方法（criteria c2）→ /btc/method.md

card_id: PSL-BTC-method

> sha256:0a3898271dfd7d7c
