Перейти к содержимому
buybitcoinsmart

Глоссарий / Справочник разработчика

URI биткоина

Другие названия: BIP21.

Что такое URI биткоина?
URI биткоина собирает данные платежа в одну строку, по которой можно щелкнуть; она начинается с bitcoin: и может содержать адрес, сумму и метку.

Определено в BIP-21.

Bitcoin URI представляет собой ссылку: при нажатии на нее кошелек открывается с уже заполненным платежом. BIP21 зафиксировал формат 29 января 2012 года: схема bitcoin:, адрес, затем необязательные параметры после знака вопроса. Когда вы получаете URI вместо голого адреса, сумма исчезает из списка того, что нужно скопировать без ошибки.

Как это работает

Грамматика BIP21 намеренно мала, и это главная причина, по которой формат больше десятилетия существует без изменений.

Полный URI выглядит так: bitcoin:bc1q...w5mdq?amount=0.00042&label=Coffee%20Shop&message=Order%20118. Все между двоеточием и знаком вопроса является адресом назначения. Все после него представляет собой набор пар name=value, соединенных амперсандами, и BIP21 определяет только три:

  • amount задает десятичное число биткоинов, никогда не сатоши, записанное с точкой, без запятых и без символа валюты. amount=0.01 означает одну сотую биткоина, то есть 1 000 000 сатоши.
  • label называет получателя платежа, например магазин или человека.
  • message указывает, за что производится платеж.

Оба текстовых поля записываются в UTF-8 с процентным кодированием, поэтому пробел превращается в %20, а амперсанд внутри метки превращается в %26.

Два правила сохраняют расширяемость формата. Неизвестные параметры игнорируются, что позволяет старому кошельку прочитать новый URI без сбоя. Параметры с префиксом req- являются исключением: кошелек, который не понимает такой параметр, должен отклонить весь URI, а не догадываться, что тот должен был делать. Это единственное правило составляет весь механизм обновления, и с тех пор оно впитало все расширения, не ломая старое программное обеспечение.

Именно в этих расширениях формат сегодня и живет:

  • r=, добавленный BIP72, указывал на запрос платежа BIP70. Этот путь мертв.
  • pj= из BIP78 называет конечную точку PayJoin, чтобы плательщик и получатель могли вместе построить совместную транзакцию.
  • lightning= несет счет BOLT11 вместе с ончейн-адресом. Кошельки, которые его понимают, платят через Lightning, кошельки, которые не понимают, откатываются к адресу, а страницы оплаты у продавцов печатают результат в виде единого унифицированного QR-кода.
  • BIP353 публикует целый URI внутри подписанной через DNSSEC записи TXT под меткой _bitcoin-payment, так что читаемое человеком имя разрешается в платежные инструкции.

Сам адрес необязателен. Грамматика BIP21 допускает ноль символов адреса, так работал bitcoin:?r=... и так сегодня работает URI, содержащий только предложение.

Почему это важно при покупке биткоина

Важнее всего Bitcoin URI при выводе средств, когда биткоины покидают биржу, которую вы не контролируете, и попадают туда, где распоряжаетесь вы.

Почти каждая биржа, которую рассматривает этот сайт, от Kraken и River до Relai и Bitpanda, дает простое текстовое поле для адреса назначения. Этому полю нужен адрес, а не URI. Вставьте в него bitcoin:bc1q..., и вы обычно получите ошибку проверки, иногда молча обрезанное поле и неудавшийся вывод. Возьмите то, что стоит между двоеточием и знаком вопроса, и вставьте только это.

Движение идет и в обратную сторону. Экран получения в вашем аппаратном кошельке, страница оплаты у продавца и одноранговая сделка выдают вам URI, а не голые адреса. URI безопаснее ровно в одном отношении: сумма передается вместе с ним, поэтому вы не можете ошибиться в итоговой сумме. Он не безопаснее в том отношении, которое важнее всего. Ничто в URI не подписано. Поле label представляет собой свободный текст, выбранный тем, кто построил строку, поэтому фишинговая страница может написать label=Kraken%20Withdrawal, и ваш кошелек покажет эти слова без комментариев.

Поэтому решающим контролем является экран аппаратного кошелька. Что бы ни утверждал URI, устройство подписи показывает адрес, на который оно собирается платить, на дисплее, который вредоносная программа для буфера обмена не может переписать. Сравните первые и последние символы там, на устройстве, а не во вкладке браузера, создавшей ссылку.

Разобранный пример: оплата счета в кофейне

Допустим, касса печатает QR-код, и ваш смартфон считывает bitcoin:bc1q...w5mdq?amount=0.00042&label=Kaffeehaus&message=Table%207.

Ваш кошелек извлекает из этого три факта: заплатить 0,00042 биткоина, отправить эту сумму на этот адрес и показать слова Kaffeehaus и Table 7 на экране подтверждения. Затем он делает несколько вещей, о которых URI вовсе не просил. Он выбирает, какие из ваших неизрасходованных выходов потратить, оценивает ставку комиссии по собственному представлению о пуле памяти, добавляет выход со сдачей и ждет вашего одобрения.

Чего он не делает, так это не проверяет ничего насчет получателя. Он не проверил, что магазин распоряжается адресом, что 0,00042 биткоина является согласованной ценой или что метка честна. Эти проверки за вами. При покупке кофе риск состоит в потерянном кофе. При переводе на пятизначную сумму стоит прочитать адрес на устройстве подписи группами по четыре символа, прежде чем одобрять.

Bitcoin URI vs адрес

Адрес является пунктом назначения сам по себе, без приложенных инструкций. Современный адрес bech32 занимает 42 символа для выхода segwit с одним ключом и 62 для выхода taproot, и он ничего не говорит о том, сколько отправлять и кому. URI представляет собой контейнер: адрес плюс необязательные сумма, метка и сообщение. Адрес из URI всегда можно восстановить, прочитав текст между схемой и первым знаком вопроса. В обратную сторону пойти нельзя, потому что адрес изначально никогда не нес сумму.

Bitcoin URI vs счет BOLT11

Счет BOLT11 является эквивалентом в Lightning, и он ведет себя иначе в трех важных отношениях. Он одноразовый, он привязан к хешу платежа, а не к адресу, и он истекает, по умолчанию через 3600 секунд, если продавец не задал значение. Bitcoin URI никогда не истекает, и по нему можно заплатить дважды, что является преимуществом на странице пожертвований и опасностью для счета. Унифицированный QR-код избавляет от выбора, помещая строку BOLT11 внутрь параметра lightning= обычного URI, так что каждый кошелек выбирает поддерживаемый им путь.

Не путать с

Часто задаваемые вопросы

Можно ли вставить URI bitcoin: в поле вывода на бирже?

Обычно нет. Большинство форм вывода ожидают адрес без приставки и отклонят или обрежут все, что содержит префикс bitcoin:. Скопируйте только текст между двоеточием и первым знаком вопроса, а затем сверьте его с экраном получения в вашем кошельке.

Сумма в URI bitcoin: указана в биткоинах или в сатоши?

В биткоинах. BIP21 задает десятичное число биткоинов, поэтому amount=0.01 означает одну сотую биткоина, или 1 000 000 сатоши. Поля платежного протокола и счета Lightning используют вместо этого сатоши и миллисатоши, что часто становится источником ошибок в единицах.

Доказывает ли URI bitcoin: кому я плачу?

Нет. Ничто в URI BIP21 не подписано и не проверено, а метка представляет собой свободный текст, который указал создатель ссылки. Подтвердите адрес назначения на собственном экране аппаратного кошелька, прежде чем что-либо одобрять.

Читайте далее

Связанные термины

Еще в разделе «Справочник разработчика»

Читать эту страницу на английском