QR-коды биткойнов: необработанный адрес или схема URI биткойнов

Я автор библиотеки bitcoinaddress.js , и мне интересно, какой контент лучше всего подходит для биткойнских QR-кодов.

Что должны содержать QR-коды биткойнов (для приложений мобильных кошельков и других сканеров штрих-кода):

  • Только биткойн-адрес (это единственный адрес, который я сам видел диким)

  • Ссылка на схему биткойн-URI (BIP 21) с суммой платежа, примечанием к транзакции и т. д.

В настоящее время я реализовал только адрес, так как не знаю, насколько широко распространена поддержка BIP 21 среди мобильных телефонов и мобильных кошельков. Если кто-нибудь может дать мне несколько ответов и указаний на предыдущие исследования по этому вопросу, я был бы признателен.

Ответы (4)

Я работаю над проектом Биткойн, и я видел следующее:

  • Просто биткойн-адрес
  • Схема, похожая на параметр URL, в формате «биткойн: {плюс биткойн-адрес}» (без скобок).
  • Более сложный параметр URL-адреса, который включает сумму, например «биткойн: {адрес биткойна}? количество = {сумма}

Coinbase использует последнюю схему, и она полностью распознается приложением BlockChain для iPhone, что позволяет вам запрашивать определенное количество биткойнов, направляемых на определенный адрес.

Coinbase использует (устаревший) API диаграммы Google, и полная строка запроса, которую они используют для создания QR-кода, выглядит следующим образом:

<img width="300" height="300" alt="Chart?cht=qr&amp;chl=bitcoin%3a1k1yfezde2c37pwdevjnin1yc2qbtly6bk%3famount%3d0" src="https://chart.googleapis.com/chart?cht=qr&amp;chl=bitcoin%3A1K1yfEZde2C37pWDevjnin1yc2qBtLy6bk%3Famount%3D0.01&amp;choe=UTF-8&amp;chs=300x300">

Если вы запустите этот URL-адрес src через декодер URL -адресов, вы обнаружите, что он запрашивает 0,01 BTC на адрес 1K1yfEZde2C37pWDevjnin1yc2qBtLy6bk.

Когда вы создаете QR-код, вам не нужно кодировать данные в URL-адресе. Coinbase делает это только потому, что им нужно запросить QR-код у Google через схему адресации URL.

Я создаю свои QR-коды на своем собственном сервере и отображаю их в виде изображений на веб-странице, и я просто использую незакодированные данные.

В моем проекте используется qrcode.js, который может создавать QR-коды на стороне клиента и претендует на совместимость вплоть до IE6. Посмотрите, очень рекомендую.
Также подробный параметр URL называется «Схема URI биткойнов» и может быть найден в предложении BIP 0021.
@Mikko, спасибо за указание на BIP21. Я просмотрел это после того, как опубликовал этот ответ, и это помогло мне понять, что я видел.
В BIP0021 указано, что «Символы должны быть правильно закодированы в URI».
«Правильно» означает согласно RFC 3986, раздел 2; в частности tools.ietf.org/html/rfc3986#section-2.4 . Не просто процент-кодировать символы волей-неволей. Символы-разделители в процентном кодировании, предназначенные для использования в качестве разделителей, неверны.

Я основатель CryptoCoinJS и использую библиотеку для своего программного обеспечения. Это, вероятно, очевидно, при сканировании QR-кодов проверяйте оба. При создании QR-кодов для резервного копирования я просто использовал адрес, а для запросов на оплату использовал схему URI.

Я встретил разработчика Coinpunk в прошлом месяце на встрече, и он обсуждал, как сложно ему было создать генератор QR-кода биткойнов, полностью основанный на HTML5, который будет работать также на устройствах iOS. Судя по всему, ему это удалось.

Поэтому я бы посоветовал изучить его проект с открытым исходным кодом: https://github.com/kyledrake/coinpunk .

qrcode.js, используемый внутри моего проекта, имеет открытый исходный код и работает (см. Статус непрерывной интеграции на странице Github). Коинпанк тоже посмотрю.

Я добавляю больше информации по этому вопросу.

Это формат, предложенный в Главе 2 Биткойнбука (Как работает Биткойн).

bitcoin:1GdK9UzpHBzqzX2A9JFP3Di4weBwqgmoQA?
amount=0.015&
label=Bob%27s%20Cafe&
message=Purchase%20at%20Bob%27s%20Cafe

Components of the URL

A bitcoin address: "1GdK9UzpHBzqzX2A9JFP3Di4weBwqgmoQA"
The payment amount: "0.015"
A label for the recipient address: "Bob's Cafe"
A description for the payment: "Purchase at Bob's Cafe"

И я считаю, что это почти то же самое, что и BIP21 . Спасибо за ссылку.