在 PSBT 的工作流里,最常见的入口是让钱包替你出资并顺手造出一笔交易骨架,但比特币核心还有一条”从零开始”的命令:createpsbt。它在 v31.0 源码 src/rpc/rawtransaction.cpp 里的定义开宗明义:以部分已签名交易格式创建一笔交易,并”实现 Creator 角色”。它不选币、不签名、不广播,只按你指定的输入输出一副裸骨架。
参数:输入要自己备齐
命令签名是 createpsbt "inputs" "outputs" ( locktime replaceable ),外加可选的版本参数。inputs 数组要你自己逐条列全:每项给 txid 与 vout,可以再带一个 sequence。这正是它和 walletcreatefundedpsbt 最大的分野——后者让钱包自己找 UTXO、补找零、估费用,createpsbt 则假定所有输入都已经由你拍板。outputs 支持地址到金额的映射写法;locktime 默认零;replaceable 决定所有输入序列号取 RBF 信号值还是终值。版本参数从 v30 起在这一族造交易命令里允许标准版本 1 到 3,本篇按 v31.0 源码与发布说明核对。

返回的是什么样的东西
返回一个 base64 字符串,就是序列化后的 PSBT。实现上它先拼出一笔未签名的原始交易,然后为每个输入、每个输出各建一条空的 PSBT 字段条目,再整体序列化。所以这份文件里只有骨架:没有见证数据,没有公钥信息,没有赎回脚本,也没有金额之外的任何元数据。把它交给 analyzepsbt,会看到下一步提示停留在”还缺签名材料”的状态,而这正是 Creator 角色完工的标志。
什么场景会用到它
三类典型场景。其一是协调人不是出资人:多签发起人或者记账方清楚要用哪几枚币,但机器上没有钱包私钥,用 createpsbt 立好骨架,再让各方按 Updater 和 Signer 角色逐段补充。其二是测试与取证回放:需要精确控制输入集合与顺序、复现某笔历史交易的结构时,自动选币反而是干扰,手动列输入才可控。其三是给外部工具搭桥:别的软件负责选币与费率,核心节点只当”标准序列化器”,保证骨架不偏离 BIP 174 的格式,两边靠同一份 base64 交接。
与相近命令的分界线
createrawtransaction 造的是裸交易十六进制,createpsbt 造的是它的 PSBT 版本,两者共享同一套参数拼装逻辑;converttopsbt 走的是反方向——把已有十六进制装进 PSBT 信封;walletcreatefundedpsbt 则把选币、找零、费用估算全部代劳。四条路的共同点是都不广播,差别只在”骨架由谁搭、钱由谁凑”。选哪条,取决于你手里是完整清单还是只有意图。
边界与提醒
因为它不出资,也就不替你检查:输入与输出的金额是否平衡、手续费是否够,全靠你自己对账;因为它不签名,骨架合法但不可用,直接广播会被网络拒绝。文档还明确写着:输入未签名,交易不会存进钱包、也不会发送到网络——生成之后不要指望任何钱包的交易记录里出现它。作为不出资的命令,它对 UTXO 是否仍然存在也不做承诺:骨架搭好到各方签完字之间,任何一枚输入被别人花掉,最终交易都会失效,这在多方协作的时间窗里是真实风险,发起方最好在协作开始前用 lockunspent 之类的本地手段先把币钉住。
一段可以照着走的流程
想体会 Creator 角色的位置,可以拿 regtest 走一遍:先用造块命令给自己喂出几枚可花输出,用 listunspent 抄下其中一枚的 txid 与 vout,然后 createpsbt 按这枚输入对一个新地址造骨架——decodepsbt 里每个输入都只剩一条空字段;把 base64 交给装有钱包的节点走补全与签名流程,analyzepsbt 的 next 提示会一路从缺材料走到齐备,最后 finalizepsbt 输出可广播的 hex。这一圈下来,Creator、Updater、Signer、Finalizer 四个角色的边界就有了手感,也就明白为什么 createpsbt 在链上毫无痕迹:它只是纸面工作。
风险提示:本文为技术工具机制说明,不构成任何投资建议;涉及真实资金的交易在广播前务必逐项核对金额、地址与输入状态。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。