关于 psbt
用于 Bitcoin L1 部分签名比特币交易(PSBT)的命令行工具,面向多方签名交易流程。可估算手续费、使用已解锁钱包签名,并将完整签名的交易广播至 Bitcoin 网络。
主要功能
- 01估算不同速度档位的手续费
- 02使用 P2WPKH 或 Taproot 密钥签名
- 03选择要签名的输入
- 04可选地立即完成签名输入
- 05通过 mempool.space 广播交易
适用场景
- 01估算 PSBT 的网络手续费
- 02为多方交易签署指定输入
- 03广播已完整签名的 Bitcoin 交易
MCP 相关
输入说明提到 PSBT 可由 MCP 工具 `psbt_create_ordinal_buy` 创建;此技能自身通过命令行执行。
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ aibtcdev/ skills --skill psbt安装后在 Claude Code 中输入/psbt确认已加载。
附带文件AGENT.mdpsbt.ts
详细介绍
PSBT 技能
在 Bitcoin L1 上提供 PSBT(部分签名的比特币交易)构建和签名操作。PSBT 支持多方签名工作流,例如序数市场购买:广播前,买家和卖家都必须签名。
- estimate-fee — 根据 PSBT 结构进行只读费用估算。
- sign — 使用当前已解锁钱包中的密钥(P2WPKH 或 Taproot)为一个或多个 PSBT 输入签名。
- broadcast — 完成完全签名的 PSBT,并通过 mempool.space 将其广播到比特币网络。
用法
bun run psbt/psbt.ts <subcommand> [options]
子命令
estimate-fee
估算给定 PSBT 的网络费用(单位:聪)。解析交易结构,并根据 vsize 计算快速、中等和缓慢三个费用等级的估算值。
bun run psbt/psbt.ts estimate-fee --psbt <base64>
选项:
--psbt <base64>(必需)— Base64 格式的 PSBT
输出:
{
"network": "mainnet",
"vsize": 253,
"inputsLength": 2,
"outputsLength": 3,
"feeEstimates": {
"fast": { "satPerVb": 12, "totalSats": 3036 },
"medium": { "satPerVb": 6, "totalSats": 1518 },
"slow": { "satPerVb": 2, "totalSats": 506 }
},
"currentFeeSats": "1200"
}
sign
使用当前钱包中的 BTC 私钥(P2WPKH 和/或 Taproot)为 PSBT 输入签名。调用此子命令前,必须先解锁钱包。
bun run psbt/psbt.ts sign --psbt <base64>
选项:
--psbt <base64>(必需)— 要签名的 Base64 格式 PSBT--inputs <indexes>(可选)— 以逗号分隔的输入索引;若省略,则为所有可签名的输入签名--finalize(可选)— 立即完成已签名的输入(默认值:false)
输出:
{
"success": true,
"network": "mainnet",
"signedInputs": [1, 2],
"finalizedInputs": [],
"skippedInputs": [{ "index": 0, "reason": "no matching key for this input" }],
"psbtBase64": "<updated-base64>"
}
broadcast
完成完全签名的 PSBT,并通过 mempool.space 将其广播到比特币网络。
bun run psbt/psbt.ts broadcast --psbt <base64>
选项:
--psbt <base64>(必需)— Base64 格式的完全签名 PSBT
输出:
{
"success": true,
"network": "mainnet",
"txid": "abc123...",
"explorerUrl": "https://mempool.space/tx/abc123...",
"txHex": "0200..."
}
注意事项
- 调用
sign前,必须先运行bun run wallet/wallet.ts unlock解锁钱包。 - 对于序数购买 PSBT(由 MCP 工具
psbt_create_ordinal_buy构建):输入索引 0 是卖家的铭文 UTXO;买家输入从索引 1 开始。除非你是卖家,否则只为买家输入(索引 1 及以上)签名。 broadcast会调用tx.finalize()——所有输入都必须已完全签名,否则会抛出错误。estimate-fee中的费用估算基于 PSBT 当前的 vsize;反映的是已签名交易的大小,而非未签名交易的大小。
评论
支持 Markdown