PSBT 的价值是把交易构造、输入资料、签名和最终广播拆开,让多个设备在不共享私钥的情况下协作。安全重点不是命令跑通,而是找零、手续费、输入所有权和最终交易始终与最初意图一致。
创建阶段就决定找零与费用
walletcreatefundedpsbt 可以选币、补充手续费并生成找零输出。调用方要记录 fee_rate 或 conf_target、changePosition、lockUnspents 与 includeWatching 等选项;自己手写输入时更要避免把输入减输出的巨大差额误成矿工费。
签名前先 Decode
decodepsbt 或 analyzepsbt 用来查看每个 input 是否有 UTXO、脚本、派生信息和所需签名。所有签名者应独立核对收款输出、找零地址、绝对费用、fee rate 和 locktime。未知输出不能因被标成 change 就跳过。
一份PSBT承载哪些角色数据
- 创建阶段就决定找零与费用:walletcreatefundedpsbt可选择输入、添加输出、估算手续费并生成带找零的PSBT,但不会自动完成全部签名。
- 签名前先 Decode:每个签名方可用walletprocesspsbt处理自己的输入,之后用finalizepsbt检查complete并生成最终交易。
- Finalized 后仍要预检:广播前应解码核对输入、收款、找零、手续费和锁定条件,再用testmempoolaccept预检当前节点策略。
签名后输出发生变化时
多签协作中,攻击者可能交回一份看似签过但输出被替换的 PSBT。不能只比较 base64 长度或签名数量;每轮都要重新解析 unsigned transaction,并确认其哈希和输出集合未变。
创建、签名、合并与广播
- 在在线观察钱包创建并资助 PSBT,锁定被选 UTXO。
- 导出给离线签名器前生成输出、找零和费用清单。
- 各签名方只导入同一 PSBT,签名后比较全局交易内容没有变化。
- 合并、finalize、预检后再广播;保存 txid 与最终 hex 哈希。
Finalized 后仍要预检
walletprocesspsbt 可逐方添加签名,finalizepsbt 的 complete 表示脚本资料足以形成 raw transaction。广播前再次 decoderawtransaction,并用 testmempoolaccept 检查当前节点策略;策略接受仍不是已广播或保证确认。
交易细节无法解码就停签
找零无法归属、绝对费用超出上限或任一输入 UTXO 来源不明时停止签名。
给每次提案建立不可变编号
PSBT 协作应给每次提案建立不可变编号,保存输入 outpoint、输出脚本、金额、手续费率、找零归属和策略审批记录。签名设备返回后比较全局交易与每个输入,任何输出或序列号变化都重新审批。最终广播前可在离线环境做一次解码,确认没有遗留未知字段;广播后把 txid 与原提案绑定,拒绝把另一个相似交易当成成功结果。
Bitcoin Core PSBT命令依据
- Bitcoin Developer Reference:用于核对Bitcoin Core PSBT流程的候选主题的一手字段、产品说明或事件发现。
- Bitcoin Core PSBT RPCs:用于核对Bitcoin Core PSBT流程的实现路径、交叉验证或风险边界。
相关站内主题:PSBT字段、观察钱包导入。资料访问时间为2026-07-22;协议、接口、监管清单与产品界面均可能更新。
风险提示:PSBT仍然代表一笔可造成资金转移的交易,格式化数据不能替代设备屏幕上的输入、输出、找零和费用核对。任何字段在签名间发生变化都要重新审批;本文不承担签名策略或托管责任。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。