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

可抄句/Citable sentences

可读标签表/Readable labels

metric中文短标签英文短标签单位复算深度

主矩阵/Main matrix

metric

复算方法六节/Method sections

本节逐字取自 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`。

脚注/Footnotes

图例/Legend

图例(**全量说明,不是本次命中的清单**;`legend_ver=lg1`):

页型:**锚点型**(不设比值阈值;门槛 = 锚点齐备〔首末块哈希+高度区间+时点+口径指纹〕+必要性判据)|源数 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.

引用/Citation

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;算法 sha256,规范化 json-sorted-compact-utf8,范围 card-self