Блог им. Ilia_Zavialov
Перед тем как вы погрузитесь в изучение статьи, обратите внимание на тот факт что всё упомянутое в ней не является финансовой рекомендацией для принятие более взвешенного решения просьба провести свое собственное исследование.
Адрес приема используется для получения биткоинов. Он генерируется на основе публичного ключа путем его хеширования и применения к нему определенного формата. Он может быть использован для создания нового условия расходования монеты с целью смены ее владельца.
Более того, вы наверняка уже слышали от осведомленного биткоинера, что адреса приема предназначены для одноразового использования, то есть для каждого нового платежа, поступающего в ваш портфель, необходимо генерировать новый. Хорошо, но зачем?
В принципе, повторное использование адресов не несет прямой угрозы вашим средствам. Использование криптографии на эллиптических кривых позволяет доказать сети, что вы владеете приватным ключом, не раскрывая сам ключ. Таким образом, вы можете заблокировать несколько разных UTXO на одном и том же адресе и потратить их в разное время. Если вы не раскроете приватный ключ, связанный с этим адресом, никто не сможет получить доступ к вашим средствам. Проблема повторного использования адресов — это скорее проблема конфиденциальности.
Как уже говорилось во введении, прозрачность и распределенность сети Биткоин означает, что любой пользователь, при условии наличия у него доступа к Биткоин-узлу, может наблюдать за транзакциями платежной системы. В результате он может видеть балансы различных адресов. Сатоши Накамото упомянул о возможности генерировать новые пары ключей, а значит, и новые адреса, для каждого нового платежа, поступающего в кошелек. Цель заключается в том, чтобы иметь дополнительный барьер на случай выявления связи между личностью пользователя и одной из его пар ключей.
Сегодня, с появлением компаний, занимающихся анализом блокчейна, и развитием KYC, использование пустых адресов — это уже не дополнительный барьер, а обязанность каждого, кто хоть немного заботится о своей конфиденциальности.
Стремление к приватности — это не излишняя забота или фантазия максималиста-биткоинера. Это конкретный параметр, напрямую влияющий на вашу личную безопасность и сохранность ваших средств. Чтобы вам было понятнее, приведем вполне конкретный пример:
Таким образом, повторное использование адресов позволяет наблюдателю установить неоспоримую связь между различными UTXO, а значит, иногда и между вашей личностью и всем портфелем.
Именно по этой причине большинство биткоин-кошельков автоматически генерируют новый адрес приема при нажатии на кнопку “Получить”. Поэтому для обычного пользователя необходимость использовать пустые адреса не является большим недостатком. С другой стороны, для онлайн-бизнеса, биржи или кампании по сбору пожертвований это ограничение может быстро стать невыполнимым.
Существует множество решений для таких организаций. Каждое из них имеет свои достоинства и недостатки, но на сегодняшний день, как мы увидим далее, BIP47 действительно отличается от других.
Цель BIP47 — предложить простой способ получения большого количества платежей, не прибегая к повторному использованию адресов. Его работа основана на использовании многоразового платежного кода.
Таким образом, несколько отправителей смогут совершить несколько платежей на один многократно используемый платежный код другого пользователя, при этом получателю не придется передавать новый пустой адрес для каждой новой транзакции.
Пользователь может свободно публиковать свой платежный код (в социальных сетях, на своем сайте…) без риска потери конфиденциальности, что не характерно для классического адреса приема или публичного ключа.
Для осуществления платежа оба пользователя должны иметь биткоин-кошелек с реализацией BIP47, например PayNym в Samourai Wallet или Sparrow Wallet. Объединение платежных кодов двух пользователей позволит установить между ними секретный канал. Чтобы правильно установить этот канал, отправитель должен будет провести транзакцию уведомления (подробнее об этом я расскажу позже).
Объединение платежных кодов двух пользователей порождает общие секреты, позволяющие генерировать большое количество уникальных адресов получения биткоина (ровно 2^32). Таким образом, в реальности платеж с помощью BIP47 отправляется не на платежный код, а на вполне классические адреса, которые сами являются производными от платежных кодов участников.
Таким образом, платежный код выступает в роли виртуального идентификатора, полученного из сида кошелька. В структуре путей деривации HD-кошелька платежный код находится на глубине 3, на уровне account.
Что касается PayNym Bots, этих роботов, которых можно увидеть в Twitter, то они являются просто визуальным отображением вашего платежного кода, созданного Samourai Wallet. Они создаются с помощью хеш-функции, что делает их уникальными.
Эти боты не имеют реального технического применения. Зато они облегчают взаимодействие между пользователями, создавая виртуальный визуальный образ.
Для пользователя процесс осуществления платежа по BIP47 с помощью реализации PayNym предельно прост. Допустим, Алиса хочет отправлять платежи Бобу:
Проведение операции уведомления, т.е. подключение PayNym, является обязательным предварительным шагом для осуществления платежей BIP47. С другой стороны, после его выполнения отправитель сможет совершить множество платежей получателю (ровно 2^32), без необходимости повторного проведения транзакции уведомления.
Как вы уже заметили, существуют две различные операции, позволяющие связать два PayNym: follow и connect. Операция подключения (“connect”) соответствует транзакции уведомления BIP47, которая представляет собой биткоин-транзакцию с определенной информацией, передаваемой в выходе OP_RETURN. Таким образом, с ее помощью устанавливается зашифрованная связь между двумя пользователями для создания общих секретов, необходимых для генерации новых пустых адресов приема.
С другой стороны, операция соединения (“follow” или “link”) позволяет установить связь по протоколу Soroban — это шифрованный протокол связи на базе Tor, специально разработанный командой Samourai Wallet.
Подведем итоги:
Чтобы два кошелька могли взаимодействовать с помощью PayNym, каждый из них должен быть соединен с другим.