Pruned Node 是自行检查 Bitcoin 规则的 Full Node,但不会永久保存所有旧区块。它以较有限的历史查询能力换取磁盘空间。裁剪不会扣除你的比特币,也不能代替钱包备份。
安娜希望使用 Bitcoin 时由自己验证付款是否有效,而不是让别人的服务器替她判断。但家用电脑没有空间存下全部区块档案。区块就是一批已确认交易的集合,Pruned Node 可以满足她的需要。在通常的 Initial Block Download(节点的首次同步)中,节点依次下载并验证历史,再删除已经处理过的较旧文件。硬盘不必同时容纳全部历史,但这次同步仍然要走完这些历史。 [2] [5]
Pruning 是有控制地移除旧数据。Bitcoin Core 会删除符合条件的区块文件及其 undo 数据,后者用于撤销某个区块带来的状态变化。可以把它想成:工作资料的结果已经记入持续更新的记录后,再移走旧资料。本地资料副本消失了,有效付款的结果却仍然保留。其他节点也可以继续保存相同的区块。 [3] [7]
关键是 UTXO set,即尚未花费的交易输出集合。每个输出记录一笔金额及花费它所需满足的条件。节点不断更新这个集合,因此能发现再次花费已花费输出的企图。节点还保留区块索引,其中包括区块头,也就是连接各区块的简短记录。UTXO set 既不是账户名单,也不是全部历史付款的明细。 [2] [6]
网络可能短暂沿着两条有效分支运行,之后改为延续另一条累计工作量更大的分支。这个变化叫作重组。累计工作量反映找到有效区块的难度,由区块的 Proof of Work(计算工作量证明)体现。节点需要撤销某些区块的影响,因此会保留一段近期区块和 undo 数据作为余量。如果回退范围超出已保留的数据,可能就需要重新获取数据或重建状态。磁盘限额不会让更早的付款变得绝对不可逆。 [5] [7]
Bitcoin Core 自动裁剪的目标大小针对区块文件和 undo 文件,并不是节点的整个数据目录。数据库、钱包及其他文件还会占用额外空间。删除以完整文件为单位进行,同时必须保留必要的余量,因此目标值不是绝对上限。规划硬盘时也要为这些开销留出位置:区块档案的限额不等于整个节点的大小。 [1] [4] [7]
Full Node 中的 Full 指自行检查规则,而不是必须永久保存每一个区块。采用相同验证设置时,归档节点和裁剪节点会拒绝相同的无效区块。裁剪本身不会关闭任何验证。数字签名利用私钥这个秘密数值证明付款获得授权,同时不泄露私钥。例如 assumevalid 可以在特定条件下省略部分历史签名验证,但那是独立设置,既能用于归档节点,也能用于裁剪节点,并不是硬盘较小带来的结果。 [5] [6]
安娜的节点仍然接收、检查,并可以转发新交易和现有的区块。但如果一个旧区块的文件已经删除,就无法再把它发给别人。因此,保存完整档案的节点对新启动的节点依然重要。Pruned Node 没有脱离网络,也不只是依赖他人验证的轻钱包;它受到限制的是历史数据的提供能力。 [10]
后来,安娜恢复一个多年前使用的钱包。钱包是接收和发送比特币的应用程序或设备。软件需要扫描相应区块,重新找到属于她的交易,这叫作 rescan。如果本地已经没有这些区块,导入密钥或 descriptor 也不会让它们重新出现。Descriptor 描述地址和花费条件的构成方式。恢复时可能需要重新取得历史数据。因此,界面暂时找不到某笔旧付款,本身并不意味着比特币已经丢失。 [8] [9]
还要看哪些应用连接到节点。查询全部历史的区块浏览器,与只跟踪新付款的钱包,需求并不相同。例如 Bitcoin Core v29.0 不允许同时启用裁剪和 txindex。后者是辅助索引,用于在已保存的区块中查找交易。这并不代表所有索引都不能使用。选择模式前应核对应用要求;以后单纯提高限额,不会重新生成已删除的文件。 [1]
如果你想自己验证 Bitcoin,又不需要随时查询全部档案,Pruned Node 就很有用。它不会省去通常的首次历史下载;AssumeUTXO 通过另一种机制,让节点更早达到可用状态。更重要的是,区块和 UTXO set 都不是私钥的备份,而授权花费需要私钥。无论档案多大,钱包备份和经过验证的恢复流程都不可少。 [2] [9]
要获得更完整的理解,请将本词条与以下词条结合阅读: Initial Block Download, AssumeUTXO, Block Propagation, vByte, Bitcoin, Bitcoin Core. 反向关联还来自: Initial Block Download, AssumeUTXO, Utreexo, Compact Block Filters.