BBQr — публично описанный транспортный формат Coinkite. Каждый QR начинается с B$ и короткого заголовка с кодированием, типом файла, общим количеством и индексом; далее идёт фрагмент в HEX, Base32 либо фиксированный Zlib с последующим Base32.
BBQr решает случаи, когда PSBT, подписанная транзакция или другой файл не помещается в один достаточно читаемый QR. Отправитель делит данные на кадры, а получатель собирает их обратно, поэтому файл пересекает 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 и данных с высокой энтропией; тогда encoder должен выбрать меньший несжатый вариант. [1]
Благодаря индексу кадры можно читать в любом порядке. Но это не fountain code: получатель должен получить все N частей и не может вычислить отсутствующий кадр из остальных. QR уже имеет обнаружение и исправление ошибок, поэтому спецификация не добавляет checksum всей серии; обсуждение проекта сравнивает простоту, накладные данные и восстановление пропущенных кадров. [4]
Документация проекта называет BBQr широко внедрённым и по состоянию на 27 июля 2026 года подтверждала выпущенный публичный код в нескольких signer-устройствах, мобильных кошельках и координаторах, включая COLDCARD Q, Sparrow Wallet, Nunchuk Desktop, BTCPay Server, Krux и BlueWallet. Поддержка не обязательно двусторонняя: SeedSigner версии 0.8.7 был указан только как decoder. [2]
Две позиции base36 позволяют не более 1295 частей, то есть ZZ. Для версии QR 40 спецификация указывает 4296 буквенно-цифровых символов и теоретический несжатый предел 2 776 480 байт для HEX либо 3 470 600 байт для Base32. Устройство может ограничивать сильнее: 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.
01BBQr — то же самое, что SeedQR?+
Нет. SeedQR представляет секрет восстановления BIP39 и требует защиты как приватный ключ. BBQr — общая транспортная оболочка для разделённых данных, часто PSBT или подписанной транзакции. Она может нести чувствительное содержимое, но название не означает seed, и формат не шифрует данные.
02Делает ли передача BBQr через air gap транзакцию безопасной?+
Нет. Оптический канал убирает сетевой или кабельный путь, но вредоносный координатор всё ещё может подготовить PSBT с чужим выходом, неверной комиссией или неожиданными входами. Адреса, суммы, комиссию и правила кошелька нужно проверить на доверенном signer, а затем транслировать именно проверенную транзакцию.