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

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

Данные торговца PP

Что такое данные торговца PP?
Данные торговца PP представляли собой непрозрачную строку байтов, которую торговец по BIP70 помещал в запрос на оплату и получал обратно без изменений, чтобы входящие биткоины можно было сопоставить с заказом.

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

Сопоставление платежа с заказом представляет собой неприметную задачу, которую должна решать любая страница оплаты, и с биткоином она сложнее, потому что транзакция не несет номера счета. BIP70 решал ее, передавая кошельку клиента маркер и требуя вернуть его обратно. Сегодня торговцы решают ту же задачу с помощью одноразового адреса для каждого заказа, что и проще, и приватнее.

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

Статус: исторический. Данные торговца занимали поле 7 в PaymentDetails и поле 1 в ответном сообщении Payment и исчезли вместе с остальным BIP70, когда Bitcoin Core 0.20.0 вышел 3 июня 2020 года.

Непрозрачность была сутью замысла. Кошельку предписывалось считать эти байты бессмысленными и возвращать их без изменений, что позволяло каждому торговцу придумать собственную схему, которую никому больше не нужно было понимать.

Обычными были две схемы. Короткий ключ поиска, скажем, 16-байтовый идентификатор заказа, сохранял запрос небольшим и перекладывал работу на базу данных торговца. Самодостаточный блок хранил всю корзину и позволял серверу оставаться без состояния, но ценой размера.

Во второй схеме есть дыра, о которой предупреждала спецификация. Эти байты возвращаются от программного обеспечения, которое торговец не контролирует, поэтому всё, что из них прочитано, является вводом, предоставленным злоумышленником. Магазин, который хранил там цену или код скидки и доверял возвращенной копии, построил себе генератор купонов. Средство обычное для состояния, проходящего туда и обратно: прикрепить код аутентификации сообщения и проверять его, прежде чем читать хотя бы одно поле.

Размер значил больше, чем кажется. Весь подписанный запрос должен был дойти до клиента, а его изображение в виде QR-кода ставит жесткий потолок: самый крупный символ, версия 40 при самом низком уровне коррекции ошибок, вмещает 2953 байта двоичных данных. Из-за этого потолка BIP72 определил параметр r=, чтобы короткая ссылка могла указывать на запрос, отдаваемый по HTTPS, вместо того чтобы нести его в себе.

Где это встречается

Работу, которую раньше выполняли данные торговца, теперь выполняет сам адрес.

Программное обеспечение для приема платежей, например BTCPay Server, выводит новый адрес для каждого счета, поэтому поступающий платеж сам указывает свой заказ без обратного обмена и без возвращаемого состояния. Это превосходит BIP70 по двум пунктам: плательщику нечего подделать, и это позволяет избежать повторного использования адресов, которое иначе раскрыло бы всю выручку торговца любому, кто читает цепочку. Кастодиальные платформы работают так же, и именно так пополнение попадает на ваш счет, а не на чужой.

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

Данные торговца PP vs заметка PP

Данные торговца писались для машины; заметка писалась для человека. Первые никогда не показывались клиенту, вторая существовала только для того, чтобы ее показали. Их режимы отказов различаются соответственно: непроверенная заметка вводит в заблуждение человека, читающего экран подтверждения, а непроверенные данные торговца вводят в заблуждение собственное бухгалтерское программное обеспечение торговца. Ни то, ни другое не подписывалось на обратном пути, и поэтому оба нужно было считать недоверенными.

Не путать с

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

Нужны ли когда-либо пополнению в биткоинах memo или тег назначения?

Нет. Транзакции биткоина не содержат поля тега, а добросовестная платформа определяет ваше пополнение, выдавая вам адрес, который больше никто не использует. Страница, требующая memo для пополнения в биткоинах, настроена неверно или мошенническая.

Как торговец узнает, к какому заказу относится платеж в биткоинах?

Путем создания отдельного адреса получения для каждого счета. Адрес является ключом заказа, поэтому при поступлении платеж сам идентифицирует себя, а кошелек клиента ничего не отправляет обратно.

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

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

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