把整本余额账拷出来:dumptxoutset 导出 UTXO 快照与 loadtxoutset 校验 图 1
把整本余额账拷出来:dumptxoutset 导出 UTXO 快照与 loadtxoutset 校验 · 图 1

一、快照是什么

全节点同步要逐块重放整条历史账,算出此刻哪些币还没花。比特币核心提供了一条抄近路的路:dumptxoutset 在一个确定的块上停下来,把当前全部未花费输出连同链元数据写成一个文件;loadtxoutset 做反向操作,读回这样的文件,让新节点直接落座这本余额账。

余额账和原始区块是两套账本。区块是每一笔支出的流水原件;余额账只是流水重算之后的余单——只记什么钱还躺着,不记钱是怎么走到这一步的。快照导出的是后者。

把整本余额账拷出来:dumptxoutset 导出 UTXO 快照与 loadtxoutset 校验 图 2
把整本余额账拷出来:dumptxoutset 导出 UTXO 快照与 loadtxoutset 校验 · 图 2

二、导出模式

type 参数给两种写法。latest 导出当前链头的快照;rollback 先把节点的链状态临时倒退回历史上的某个块——可以配合 rollback 命名参数写明高度或哈希——再导出那个时点的余额账。参数都省略时,程序退回最近的、当前版本 loadtxoutset 能加载的有效快照块。

警告同样写在参数说明里:距链头越远,回退耗时越长,调用方要相应放宽 RPC 超时。导出过程占的资源与日常同步同级,机器忙时错峰执行。

三、六个返回字段

导出成功返回一列统计:coins_written 是写出的输出条数;base_hashbase_height 钉住这份快照站在哪个块上;path 是落盘位置;txoutset_hash 是按共识规则对内容算出的哈希,校验与比对都靠它;nchaintx 交代截至基准块链上一共处理过多少笔交易。校验环节以 txoutset_hash 为凭,数字对得上,内容才谈得上可信。

四、读取端怎么信

loadtxoutset 拿到的只是一个文件——谁写的、有没有被改,字节本身不回答。信任的代价因此被摊到加载那一刻:节点按共识规则逐条重建这些输出的合法性,把哈希一路算到底,与 txoutset_hash 比对,对不上整个快照直接拒收。

这套设计把信任从逐块验史搬到一次全量重算。省下的是一遍遍重放历史的时长;没省的是数学审查——每一枚币该不该躺在账上,照样按规则推一遍。

五、三条边界

边界其一:能加载哪个时点由当前版本的兼容能力决定,不是任意高度都能凭空导出一本账;版本间的可加载范围以发行说明为准。其二:这份文件里没有交易历史,拿快照起家的节点知道钱的状态,说不出钱的故事。其三:加载之后节点照常从基准块往上追块继续验证,快照只是起点不是终点。

六、用途图谱

除新机器快速起节点外,快照在研究场景里还有另一条线:复算某个时点的链上状态做对照;给对账脚本喂数据;审计场景拿它钉存证。共同前提是每一步都带上 txoutset_hash 与基准块,让任何人可复算、可质疑。

七、与钱包备份分家

UTXO 快照不是钱包备份。它不装私钥、不装交易历史,导不出你的地址归谁管,也导不回任何一笔转账——它只是全网余额在某一秒的影子,与谁拥有这些钱无关。拿快照当备份、以为文件在币就在,是把全网账本与个人钥匙混成了同一本。

八、收尾清单

自己节点导出的快照默认没有社区公证,对外分享时附上 base_hash 与生成方式,让对方能按共识规则复算。归档的快照会随时间过期:账本一直在长,拿历史快照答今天的查询只会漏账,用途限于当时留档或调试假设。落盘位置由 path 字段给出绝对路径,文件体量随链上未花费输出的数量增长,存放前给磁盘留出余量;传输环节加一次哈希核对,避免网络截断产生的半截文件在加载时才报错。

风险提示:本文仅为技术机制科普,不构成任何投资建议。