Preface
冻结第三版的写作目标、读者范围、代码约定、地址样本、版本变化与贡献边界。
为什么从可验证状态开始
前言定义第三版怎样从可运行示例解释比特币,并明确读者、排版、代码授权、版本变化和公开协作方式。学习时要把印刷标签、示例网络和地址语义作为后续实验的共同版本合同。
比特币最容易被界面和术语掩盖:钱包余额是UTXO视图,地址是脚本编码,交易哈希只是候选对象标识,矿工出块也不代表全节点必须接受。要判断实现是否正确,必须追踪前状态、被引用输出、规范序列化、脚本与签名、节点策略、区块承诺、累计工作量和后状态。只保存最终余额或区块高度,会漏掉错误网络、冲突交易、脚本失败、重组与索引视图滞后。
本页先手算最小实例,再运行工具。正常样本证明主路径;边界样本取零值、最大金额、恰好费用、最短证明或时间锁边界;单故障样本只改变网络前缀、字节、签名、outpoint、脚本、target或确认中的一项。三组样本共享源码标签、节点、创世状态和观察点,使首个差异可以归因,而不是靠重复广播或刷新页面碰运气。
每次实验生成机器可读证据:官方印刷标签、软件提交、网络与创世哈希、输入原文、解析对象、验证结果、错误、前后UTXO或链状态和确认区块。独立复核者从空目录重放,若字段缺失、节点未同步或结果绑定到不同哈希,门禁明确失败。涉及密钥的示例只使用公开测试向量、regtest或signet,不把教学代码连接真实资产。
官方标题层级还要转成可检查任务:章标题定义端到端目标,节标题定义机制与对象,小节标题定义算法、字段、异常或部署选择。每个标题至少对应一个输入、一个不变量、一个可观察结果和一个失败样本;多个标题可以共享实验环境,但不能因主题相近而合并掉独立语义。这样既保留原书结构,也让读者能从目录逐项证明掌握程度。
版次、对象与验收合同
、、、、共同构成本页复核坐标。冻结第三版的写作目标、读者范围、代码约定、地址样本、版本变化与贡献边界。
本书锁定Andreas M. Antonopoulos、David A. Harding《Mastering Bitcoin: Programming the Open Blockchain》第3版,O'Reilly Media,2023年,402页,ISBN 9781098150082。官方GitHub标签 third_edition_print1 对应第三版首印,公开前言、14章和附录A至C的完整源码,按二至五级标题解析得到333个正式节点;O'Reilly页面交叉核对作者、2023年、402页与ISBN。学习地图和总复习不计入原书分母。本文按CC BY-SA 4.0来源做独立中文教学重构,不复制原书正文。
核心约束与推导
前两式对应本页的密码、交易、费用、网络、区块或二层核心不变量。状态转移式要求候选对象先通过当前状态验证,再原子地产生后状态;失败保留原状态。证据门禁使用乘法语义,来源、版本、重放、边界或失败证据任一缺失,整条结论都不能发布。
三段可运行骨架
type Evidence = {
version: string;
before: string;
input: string;
after?: string;
error?: string;
};
function evidenceGate(run: Evidence) {
const complete = Boolean(
run.version && run.before && run.input && (run.after || run.error),
);
return { complete, page: "mbt3-preface", run };
}def apply_candidate(state, candidate, verify):
if not verify(state, candidate):
return {"accepted": False, "state": state, "reason": "invalid"}
next_state = state.copy()
next_state.update(candidate["changes"])
return {"accepted": True, "state": next_state, "reason": None}def verify_value_conservation(inputs, outputs, fee):
if len(inputs) != len({item["outpoint"] for item in inputs}):
return False
return sum(item["value"] for item in inputs) == sum(outputs) + fee第一段把成功与失败放进同一证据结构;第二段证明拒绝路径不污染原状态;第三段验证本页最小协议对象。生产系统必须使用成熟密码、序列化和节点库,并补充资源限制、并发、持久化、超时、隐私与密钥隔离。
正式标题逐项讲解
Preface
“Preface”位于本页正式标题坐标 1/15。前言定义第三版怎样从可运行示例解释比特币,并明确读者、排版、代码授权、版本变化和公开协作方式。学习时要把印刷标签、示例网络和地址语义作为后续实验的共同版本合同。
复核时固定网络、软件、前状态与原始输入,保存解析、验证、传播或执行的中间对象;失败必须给出首个拒绝规则并保持原状态。通过标准是“能说明第三版相对旧版的范围变化,识别示例代码和地址的使用边界,并从官方印刷标签定位全部正式单元。”,结果必须绑定固定对象哈希、网络和官方第三版来源。
Writing the Bitcoin Book
“Writing the Bitcoin Book”位于本页正式标题坐标 2/15。读者与排版约定构成解释合同:命令、协议字段、变量和警告必须区分。学习路径可以调整,但任何跳读都不能省略该实验依赖的密钥、序列化和验证规则。
复核时固定网络、软件、前状态与原始输入,保存解析、验证、传播或执行的中间对象;失败必须给出首个拒绝规则并保持原状态。通过标准是“能说明第三版相对旧版的范围变化,识别示例代码和地址的使用边界,并从官方印刷标签定位全部正式单元。”,结果必须绑定固定对象哈希、网络和官方第三版来源。
Intended Audience
“Intended Audience”位于本页正式标题坐标 3/15。读者与排版约定构成解释合同:命令、协议字段、变量和警告必须区分。学习路径可以调整,但任何跳读都不能省略该实验依赖的密钥、序列化和验证规则。
复核时固定网络、软件、前状态与原始输入,保存解析、验证、传播或执行的中间对象;失败必须给出首个拒绝规则并保持原状态。通过标准是“能说明第三版相对旧版的范围变化,识别示例代码和地址的使用边界,并从官方印刷标签定位全部正式单元。”,结果必须绑定固定对象哈希、网络和官方第三版来源。
Why Are There Bugs on the Cover?
“Why Are There Bugs on the Cover?”位于本页正式标题坐标 4/15。前言定义第三版怎样从可运行示例解释比特币,并明确读者、排版、代码授权、版本变化和公开协作方式。学习时要把印刷标签、示例网络和地址语义作为后续实验的共同版本合同。
复核时固定网络、软件、前状态与原始输入,保存解析、验证、传播或执行的中间对象;失败必须给出首个拒绝规则并保持原状态。通过标准是“能说明第三版相对旧版的范围变化,识别示例代码和地址的使用边界,并从官方印刷标签定位全部正式单元。”,结果必须绑定固定对象哈希、网络和官方第三版来源。
Conventions Used in This Book
“Conventions Used in This Book”位于本页正式标题坐标 5/15。读者与排版约定构成解释合同:命令、协议字段、变量和警告必须区分。学习路径可以调整,但任何跳读都不能省略该实验依赖的密钥、序列化和验证规则。
复核时固定网络、软件、前状态与原始输入,保存解析、验证、传播或执行的中间对象;失败必须给出首个拒绝规则并保持原状态。通过标准是“能说明第三版相对旧版的范围变化,识别示例代码和地址的使用边界,并从官方印刷标签定位全部正式单元。”,结果必须绑定固定对象哈希、网络和官方第三版来源。
Code Examples
“Code Examples”位于本页正式标题坐标 6/15。代码示例用于解释协议对象而非保管真实资产。重放时锁定依赖、网络和输入,先读懂每个字节与返回值,再在隔离测试链运行并遵守原书代码授权。
复核时固定网络、软件、前状态与原始输入,保存解析、验证、传播或执行的中间对象;失败必须给出首个拒绝规则并保持原状态。通过标准是“能说明第三版相对旧版的范围变化,识别示例代码和地址的使用边界,并从官方印刷标签定位全部正式单元。”,结果必须绑定固定对象哈希、网络和官方第三版来源。
Using Code Examples
“Using Code Examples”位于本页正式标题坐标 7/15。代码示例用于解释协议对象而非保管真实资产。重放时锁定依赖、网络和输入,先读懂每个字节与返回值,再在隔离测试链运行并遵守原书代码授权。
复核时固定网络、软件、前状态与原始输入,保存解析、验证、传播或执行的中间对象;失败必须给出首个拒绝规则并保持原状态。通过标准是“能说明第三版相对旧版的范围变化,识别示例代码和地址的使用边界,并从官方印刷标签定位全部正式单元。”,结果必须绑定固定对象哈希、网络和官方第三版来源。
Changes Since the Previous Edition
“Changes Since the Previous Edition”位于本页正式标题坐标 8/15。钱包选取一个或多个UTXO覆盖支付与费用,剩余价值进入找零输出。选币影响费用、隐私和未来可花费性;漏掉找零会把差额全部作为矿工费。
复核时固定网络、软件、前状态与原始输入,保存解析、验证、传播或执行的中间对象;失败必须给出首个拒绝规则并保持原状态。通过标准是“能说明第三版相对旧版的范围变化,识别示例代码和地址的使用边界,并从官方印刷标签定位全部正式单元。”,结果必须绑定固定对象哈希、网络和官方第三版来源。
Bitcoin Addresses and Transactions in This Book
“Bitcoin Addresses and Transactions in This Book”位于本页正式标题坐标 9/15。地址是输出脚本模板的网络编码提示,不是链上账户。解析先验证字符集、校验和和网络,再转换为脚本;复制错误、网络错误或错误脚本类型都可能造成不可逆支付。
复核时固定网络、软件、前状态与原始输入,保存解析、验证、传播或执行的中间对象;失败必须给出首个拒绝规则并保持原状态。通过标准是“能说明第三版相对旧版的范围变化,识别示例代码和地址的使用边界,并从官方印刷标签定位全部正式单元。”,结果必须绑定固定对象哈希、网络和官方第三版来源。
O'Reilly Online Learning
“O'Reilly Online Learning”位于本页正式标题坐标 10/15。这项前置信息定义反馈、贡献和版本沟通路径。技术结论要能指向具体印刷标签、问题记录或勘误,作者身份和致谢不能替代可重放证据。
复核时固定网络、软件、前状态与原始输入,保存解析、验证、传播或执行的中间对象;失败必须给出首个拒绝规则并保持原状态。通过标准是“能说明第三版相对旧版的范围变化,识别示例代码和地址的使用边界,并从官方印刷标签定位全部正式单元。”,结果必须绑定固定对象哈希、网络和官方第三版来源。
How to Contact Us
“How to Contact Us”位于本页正式标题坐标 11/15。这项前置信息定义反馈、贡献和版本沟通路径。技术结论要能指向具体印刷标签、问题记录或勘误,作者身份和致谢不能替代可重放证据。
复核时固定网络、软件、前状态与原始输入,保存解析、验证、传播或执行的中间对象;失败必须给出首个拒绝规则并保持原状态。通过标准是“能说明第三版相对旧版的范围变化,识别示例代码和地址的使用边界,并从官方印刷标签定位全部正式单元。”,结果必须绑定固定对象哈希、网络和官方第三版来源。
Contacting the Authors
“Contacting the Authors”位于本页正式标题坐标 12/15。这项前置信息定义反馈、贡献和版本沟通路径。技术结论要能指向具体印刷标签、问题记录或勘误,作者身份和致谢不能替代可重放证据。
复核时固定网络、软件、前状态与原始输入,保存解析、验证、传播或执行的中间对象;失败必须给出首个拒绝规则并保持原状态。通过标准是“能说明第三版相对旧版的范围变化,识别示例代码和地址的使用边界,并从官方印刷标签定位全部正式单元。”,结果必须绑定固定对象哈希、网络和官方第三版来源。
Acknowledgments for the First and Second Editions
“Acknowledgments for the First and Second Editions”位于本页正式标题坐标 13/15。这项前置信息定义反馈、贡献和版本沟通路径。技术结论要能指向具体印刷标签、问题记录或勘误,作者身份和致谢不能替代可重放证据。
复核时固定网络、软件、前状态与原始输入,保存解析、验证、传播或执行的中间对象;失败必须给出首个拒绝规则并保持原状态。通过标准是“能说明第三版相对旧版的范围变化,识别示例代码和地址的使用边界,并从官方印刷标签定位全部正式单元。”,结果必须绑定固定对象哈希、网络和官方第三版来源。
Acknowledgments for the Third Edition
“Acknowledgments for the Third Edition”位于本页正式标题坐标 14/15。这项前置信息定义反馈、贡献和版本沟通路径。技术结论要能指向具体印刷标签、问题记录或勘误,作者身份和致谢不能替代可重放证据。
复核时固定网络、软件、前状态与原始输入,保存解析、验证、传播或执行的中间对象;失败必须给出首个拒绝规则并保持原状态。通过标准是“能说明第三版相对旧版的范围变化,识别示例代码和地址的使用边界,并从官方印刷标签定位全部正式单元。”,结果必须绑定固定对象哈希、网络和官方第三版来源。
Early Release Draft (GitHub Contributions)
“Early Release Draft (GitHub Contributions)”位于本页正式标题坐标 15/15。前言定义第三版怎样从可运行示例解释比特币,并明确读者、排版、代码授权、版本变化和公开协作方式。学习时要把印刷标签、示例网络和地址语义作为后续实验的共同版本合同。
复核时固定网络、软件、前状态与原始输入,保存解析、验证、传播或执行的中间对象;失败必须给出首个拒绝规则并保持原状态。通过标准是“能说明第三版相对旧版的范围变化,识别示例代码和地址的使用边界,并从官方印刷标签定位全部正式单元。”,结果必须绑定固定对象哈希、网络和官方第三版来源。
正常、边界与故障矩阵
| 样本 | 只改变的变量 | 预期结果 | 必存证据 |
|---|---|---|---|
| 正常 | 有效UTXO、脚本、费用与网络 | 状态转移并达到确认条件 | 原始对象、前后状态、区块哈希 |
| 边界 | 零值、最大值、恰好阈值或时间锁 | 按明确规则接受或拒绝 | 边界值、判断分支、资源成本 |
| 单故障 | 网络、字节、签名、引用或PoW一项 | 首个无效规则处拒绝 | 错误、首差、原状态与回退点 |
先写出预期字节、栈、金额或哈希,再运行节点和解析器。若钱包、区块浏览器与本地节点给出不同答案,以固定网络上的原始交易、被花费输出、区块头和本地共识验证为坐标;第三方展示不能覆盖本地可验证事实。
常见失败与回退
本章回顾
冻结第三版的写作目标、读者范围、代码约定、地址样本、版本变化与贡献边界。 前言定义第三版怎样从可运行示例解释比特币,并明确读者、排版、代码授权、版本变化和公开协作方式。学习时要把印刷标签、示例网络和地址语义作为后续实验的共同版本合同。 掌握标准是能说明第三版相对旧版的范围变化,识别示例代码和地址的使用边界,并从官方印刷标签定位全部正式单元。。独立复核必须从官方第三版标签、固定测试网络和原始协议对象重放正常、边界与单故障样本。