Глоссарий / Справочник разработчика
Параметр r
- Что такое параметр r?
- Параметр r представляет собой добавление BIP72 к URI биткоина, которое заменяет адрес платежа на URL, с которого ваш кошелек должен получить подписанный запрос.
Определено в BIP-72.
Сканирование QR-кода с параметром r указывает вашему кошельку получить веб-страницу, прежде чем что-либо вам показать. BIP72 появился 29 июля 2013 года и использовал простое r, а не написание req-r, зарезервированное для обязательных ключей, чтобы старые кошельки могли его игнорировать и вместо этого заплатить на адрес. Ни одна страница оплаты, которую вы встретите сегодня, его вам не предложит.
Как это работает
Параметр r является параметром запроса, содержащим HTTPS URL с процентным кодированием, и BIP72 определил для него две формы. Совместимая форма сохраняет обычный адрес в URI и добавляет ключ после него, так что кошелек, который никогда не слышал о платежном протоколе, платит на адрес, а кошелек, понимающий r, игнорирует адрес и получает запрос. Урезанная форма полностью убирает адрес, давая что-то вроде bitcoin:?r=https://store.example/i/8f3a, что старое программное обеспечение оплатить вообще не может.
Необязательность ключа была осознанным прочтением BIP21, грамматика которого делит нераспознанные параметры на два класса: любой параметр с префиксом req- должен заставить кошелек отклонить URI, любой другой может быть пропущен. Название поля r вместо req-r означало выбор плавной деградации. BIP72 описал и противоположное поведение, так что продавец, который действительно не мог принять прямой платеж на адрес, мог написать req-r и заставить несовместимые кошельки остановиться вместо отправки средств, которые страница оплаты не смогла бы сверить.
В ответ с URL приходил protocol buffer, отдаваемый под MIME-типом, который зарегистрировал для него BIP71. Затем BIP73 добавил согласование содержимого, позволяя одной и той же ссылке возвращать запрос на оплату кошельку и обычную человеческую веб-страницу браузеру, различаемым по заголовку Accept, отправленному клиентом.
Где это встречается
Параметр r нигде не встречается в текущем использовании. Bitcoin Core перестал переходить по таким URL, когда версия 0.20.0 удалила поддержку платежного протокола, а инструменты для продавцов, которые когда-то их генерировали, были заменены программным обеспечением, выпускающим простые URI BIP21 и счета Lightning. Страница оплаты, которая все еще создает параметр r, запускает интеграцию, которую никто не трогал годами, и разумный ответ состоит в том, чтобы заплатить другим путем.
Привычка, которую это поле должно вам оставить, переживет само поле. QR-код нечитаем для человека, поэтому его сканирование является актом доверия к тому, что его создало: экрану, напечатанному счету, наклейке на устройстве. Параметр r делал это буквальным, передавая вашему кошельку URL для обращения, что также раскрывало ваш IP-адрес серверу продавца, прежде чем вы на что-либо согласились. Тот же риск раскрытия существует в более скучной форме с QR-кодом обычного адреса, который кто-то незаметно подменил. Подтвердите пункт назначения на дисплее, который не контролируется сканером, что в случае аппаратного кошелька означает собственный экран устройства, и сравните достаточно символов, чтобы быть уверенным, а не бросайте взгляд на первые четыре.
Параметр r vs URI биткоина
URI биткоина представляет собой всю строку; параметр r был одним необязательным ключом внутри нее. Их разделяет направление полномочий. Ключи вроде amount, label и message дополняют пункт назначения, который уже находится в URI, и кошелек может игнорировать каждый из них и все равно отправить деньги в нужное место. Параметр r переворачивал это отношение: где бы он ни понимался, он полностью заменял адрес, перенося решение о том, куда пойдут средства, со строки перед вами на сервер где-то еще.