BBQr 是 Coinkite 公开描述的传输格式。每个 QR 以 B$ 和一个短标头开头,标头写明编码、文件类型、总片数与索引;其后是以 HEX、Base32 或固定 Zlib 再加 Base32 表示的数据段。
当 PSBT、已签名交易或其他文件无法装进一个足够易读的 QR 时,BBQr 会把数据拆成多帧,由接收端重新组装,使文件无需线缆、存储卡或网络连接即可跨越 air gap。该格式本身不签名、不广播,也不属于 Bitcoin 共识。 [1]
每帧都以八字符标头开头。B$ 标识 BBQr,随后一个字符选择编码、一个字符表示内容类型,两位 base36 给出总帧数,最后两位给出索引。B$HP0301 表示 HEX、PSBT、总共 3 帧以及索引为 1 的分片。整组帧的编码、类型和数量必须一致。 [1]
QR 使用字符集受限的大写字母数字模式。H 写入 HEX,2 使用不带 = 的 Base32,Z 则先用 Zlib、wbits=10 且不含文件头压缩整个文件,再使用 Base32。压缩可能缩小 PSBT,但对哈希、UTXO 和高熵数据帮助有限;此时编码器应选择更小的未压缩形式。 [1]
由于标头含有索引,帧可以按任意顺序读取。但它不是 fountain code:接收端必须拿到全部 N 个分片,无法由其余帧推算缺失帧。QR 本身已有错误检测与纠正,因此规范没有再加入整组 checksum;设计讨论权衡了简单性、开销与恢复漏扫帧的能力。 [4]
项目文档称 BBQr 已被广泛部署,并确认截至 2026 年七月 27 日,多种 signer、移动钱包和协调器已有公开发布的代码,包括 COLDCARD Q、Sparrow Wallet、Nunchuk Desktop、BTCPay Server、Krux 与 BlueWallet。支持不一定是双向的:SeedSigner 版本 0.8.7 当时仅列为 decoder。 [2]
两位 base36 最多表示 1295 个分片,也就是 ZZ。对于 QR 版本 40,规范给出 4296 个字母数字字符,理论未压缩上限是 HEX 的 2 776 480 字节或 Base32 的 3 470 600 字节。设备可以设置更低限制:COLDCARD Q 接受至多 2 MiB,随后按分片数量显示进度。 [6]
类型 P 表示 PSBT,T 表示已完成的 Bitcoin 交易;J、C、U、B 与 X 分别涵盖 JSON、CBOR、UTF-8 文本、通用二进制和可执行数据。类型可帮助选择 parser,却不能证明内容正确或安全。钱包必须拒绝意外类型,signer 必须在签名前独立显示输出、金额和手续费。 [5]
实现应依据公开仓库和测试数据进行 round-trip 测试:编码同一文件、打乱帧顺序、重新读取,并逐字节比较结果。还要分别测试缺帧和损坏帧、H、2 与 Z、单帧情况及内存边界。真实 PSBT 或其他敏感数据绝不能放入公共网页生成器。 [3]
要获得更完整的理解,请将本词条与以下词条结合阅读: PSBT, 交易, Hardware Wallet, Air-gapped Wallet, Multisig, Output Descriptor.