BIP-21 описывает URI-схему для запроса платежа Bitcoin. Она позволяет закодировать адрес получателя и необязательные параметры, например сумму или пояснение, а затем представить строку как QR-код. Сканирование экономит время и снижает риск опечатки, но само по себе не гарантирует безопасность: перед оплатой кошелёк должен показать понятные детали, а пользователь – сверить адрес, сумму и сеть.
В этом руководстве речь идёт о стандартном запросе Bitcoin Mainnet. Lightning-счёт, адрес тестовой сети и QR для другого блокчейна используют иные схемы или дополнительные данные. Не вставляйте случайную строку в генератор QR и не отправляйте средства, если приложение отображает другой адрес или неожиданную сумму.
Из чего состоит BIP-21 URI
Базовая форма выглядит как bitcoin:<адрес>. После адреса могут идти параметры, начинающиеся знаком вопроса и разделяемые амперсандом. Например, сумма задаётся параметром amount, а понятная человеку метка – параметром label. В URI также может быть текстовое сообщение или указание, куда перейти за платежной информацией. Кошелёк может поддерживать лишь часть дополнительных полей, поэтому ключевой идентификатор получателя остаётся самим Bitcoin-адресом.
Значение amount записывается в BTC десятичным числом. Перед формированием запроса определите сумму, проверьте допустимую точность и не используйте разделитель тысяч. Если сумма не задана, плательщик вводит её сам. Если платёж должен быть точным, задавайте сумму в запросе и затем проверяйте, что кошелёк действительно прочитал это поле, а не проигнорировал его.
Метку label удобно использовать, чтобы человек понял, кому принадлежит счёт. Она не является подтверждением личности и не доказывает, что получатель контролирует адрес. Нельзя полагаться только на название вроде «магазин» или «пожертвование»: подменённая страница может показать чужой QR с правдоподобной подписью.
Как подготовить код для получения платежа
Сначала получите адрес из собственного Bitcoin-кошелька или из проверенной системы выставления счёта. Убедитесь, что выбрана основная сеть, и проверьте, что кошелёк ещё контролирует адрес. В новых кошельках адреса часто меняются после каждого получения, поэтому для повторного платежа создайте новый запрос и следуйте своему приложению. Не публикуйте секретную фразу и не вводите её в генератор QR.
Затем соберите URI: укажите протокол bitcoin:, адрес и нужные параметры. Метки и сообщения должны быть URL-кодированы, если содержат пробелы или символы, которые имеют специальное значение в URI. Не добавляйте параметры вручную из непроверенного примера, если не знаете их назначение. Чем меньше необязательных данных, тем проще проверить запрос в разных кошельках.
Сгенерируйте QR локально или в известном инструменте, затем отсканируйте его тестовым кошельком на другом устройстве. Сверьте адрес целиком либо по устойчивой части, сумму и метку. Проверьте, что код не обрезан, не перекрыт логотипом и сохраняет достаточный контраст. Если получатель отправляет QR в печать, протестируйте распознавание с реального расстояния и при фактическом размере.
Как проверить QR перед оплатой
Плательщику важно сначала сканировать код штатной функцией своего кошелька, затем прочитать разобранные поля. Убедитесь, что приложение предлагает именно Bitcoin, а не другую сеть или сторонний сервис. Сравните адрес с тем, который получатель предоставил по независимому каналу, если сумма значительная. QR-код – просто способ передачи данных; он не удостоверяет источник и может вести на подменённый адрес.
Сумму проверяйте в двух местах: в сообщении получателя и в итоговом экране кошелька. Учитывайте, что приложение может показывать комиссию сети отдельно от суммы платежа. Комиссия обычно зависит от размера транзакции в виртуальных байтах и выбранной ставки; пояснение есть в материале о sat/vB и общей комиссии Bitcoin. Не путайте комиссию с суммой, которую запросил получатель.
Если QR содержит ссылку на внешний ресурс или кошелёк показывает предупреждение о неподдерживаемом параметре, остановитесь и уточните запрос. Не подтверждайте оплату только потому, что интерфейс показал зелёную галочку. После отправки откройте детали транзакции и сохраните TXID, если нужно подтверждение платежа. Для поиска нужного выхода полезно понимать роль выхода сдачи в Bitcoin-транзакции.
Проверка совместимости и типичные ошибки
Разные кошельки могут по-разному обрабатывать запросы: один считает сумму обязательной, другой позволяет изменить её, третий не отображает метку. Это не обязательно означает, что QR некорректен, но получателю следует заранее проверить путь оплаты с целевой аудиторией. Нельзя считать один результат совместимости универсальным для всех приложений.
Частая ошибка – создать изображение из строки, содержащей не тот адрес, тестовую сеть или лишний символ. Другая – показать старый адрес, который кошелёк уже заменил. Бывают также некорректно закодированные пробелы, округлённая сумма или QR, который декорировали так, что сканер теряет модули. После любого изменения суммы, адреса или дизайна создавайте новый тест.
В BIP-21 необязательное поле req- предназначено для параметров, которые кошелёк обязан поддержать, иначе он должен отказать в обработке запроса. Не следует добавлять такие расширения без необходимости: кошелёк может не знать параметр и безопасно отклонить URI. Для простого запроса обычно достаточно адреса, суммы и необязательной метки.
Надёжный процесс состоит из четырёх шагов: сформировать URI из проверенного адреса, отсканировать итоговый QR другим кошельком, сверить разобранные поля и провести небольшой тестовый платёж, если это оправдано. В криптовалюте исправить перевод после подтверждения часто невозможно, поэтому тщательная проверка до подписи важнее красивого макета. Не переходите по посторонней ссылке и не раскрывайте секреты ради того, чтобы получить или «активировать» Bitcoin-адрес.
