Перевод Реализация поддержки Monero для OpenBazaar: анализ

Тема в разделе "Статьи", создана пользователем Mr. Pickles, 3 мар 2019.

  1. Mr. Pickles

    Команда форума Модератор Редактор

    Регистрация:
    11 сен 2017
    Сообщения:
    398
    Симпатии:
    150
    Вступление

    На OpenBazaar наблюдается серьёзная заинтересованность в добавлении Monero в качестве дополнительной криптовалюты для торгов. Чтобы убедиться в этом, достаточно почитать посты и треды здесь, здесь и здесь.

    В конце января 2019 я (Рене Бруннер (René Brunner), разработчик Monero, rbrunner7) вызвался провести тщательный анализ, который бы дал ответ, что из этого может получиться, а затем предоставить результаты сообществам Monero и OpenBazaar. Я не считал себя единственным возможным кандидатом на такую работу с точки зрения моих знаний и опыта, но на тот момент поблизости не было никого более квалифицированного, чтобы взяться за это дело, так что работой занялся именно я.

    Далее я буду вести речь о вещах, которые на данный момент реализовать довольно трудно или даже невозможно. Было бы заблуждением считать, что я уже сдался или пытаюсь разубедить кого-то заниматься этим. Этой статьёй я пытаюсь сделать обратное: моей целью является хорошее понимание поставленной задачи, которая действительно представляется сложной, чтобы каждый, кто возьмётся за её решение, не строил ложных ожиданий и имел верный настрой. Я убеждён в том, что в мире IT-проектов отсутствие иллюзий (вроде «это будет просто») — это уже большое достижение.

    Поддержка валюты текущей версией OpenBazaar

    Текущая версия OpenBazaar (действительная на февраль 2019) поддерживает 4 криптовалюты: Bitcoin (BTC), Bitcoin Cash (BCH, полагаю, вариант «ABC», а не «SV»), Litecoin (LTC) и Zcash (ZEC). Кроме того, работа над реализацией поддержки токенов Ethereum и ERC20 близится к завершению, и всё будет готово к выходу одной из ближайших версий.

    Клиент OpenBazaar включает в себя простой, но полнофункциональный кошелёк с поддержкой множества валют, то есть он позволяет пользователю управлять своими средствами в любой поддерживаемой валюте (см. скриншоты в Главе 4 здесь, например). Используя этот кошелёк, покупатель может легко оплачивать свои покупки (при этом он совсем не обязан это делать).

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

    У покупателя не возникает сложностей с использованием этих валют, так как им не приходится создавать полные узлы и даже искать что-то вроде «открытых узлов» и «удалённых узлов», к которым подсоединялись бы их кошельки: на сервере OpenBazaar есть так называемые SPV-кошельки для всех поддерживаемых валют и доступ к сети, по крайней мере, с точки зрения пользователя «просто работает». (Некоторую информацию по SPV-кошелькам можно найти здесь).

    То, что всё необходимое пользователям OpenBazaar, работает просто, как говорится, «из коробки», довольно важно, когда речь заходит о планах по интеграции Monero.

    Оффлайн торговля

    Один из вопросов, который может показаться не самым серьёзным, но по сути является довольно важным, а также непосредственно касается интеграции Monero (об этом будет сказано далее), звучит следующим образом: должен или нет продавец поддерживать сетевое соединение с сервером OpenBazaar 24 часа в сутки 7 дней в неделю?

    Мною было найдено довольно честное заявление Криса Пация (Chris Pacia), одного из ведущих разработчиков OpenBazaar, которое служит ответом на поставленный вопрос:

    «Одним из главных отзывов после выхода версии OpenBazaar 1.0 было то, что продавцам не нравилось поддерживать подключение к серверу на своём домашнем компьютере 24 часа в сутки 7 дней в неделю, чтобы осуществлять торговлю... При реализации версии 2.0 нами была потрачена уйма времени на перестройку архитектуры OpenBazaar (и переход на IPFS), чтобы продавцы могли принимать заказы в режиме оффлайн».

    На интуитивном уровне мне кажется это разумным: представьте, что вы выставляете что-то на продажу на eBay, а потом не можете выключить свой компьютер до тех пор, пока у вас это не купят. Мне кажется, что такое требование значительно затруднит продажу товаров пользователями eBay.

    Типы платежей на OpenBazaar

    В блоге OpenBazaar в статье Спецификация смарт-контракта об условном депозите в OpenBazaar подробно описаны два типа платежей, которые используются в процессе покупки (при этом второй тип имеет два подтипа), а также соответствующая роль, которую играют мультиподписи (multisig).

    Если покупатель выбирает опцию модерации, то будет создан модерированный платёж, который технически основан на схеме 2/3 multisig: есть три полномочных подписанта (покупатель, продавец и модератор), и два любых подписанта должны разблокировать средства, которые были переданы на адрес 2/3 multisig.

    Если покупатель доверяет продавцу и выбирает вариант проведения платежа без модерации, производится так называемый прямой платёж. Существует два типа такого платежа, в зависимости от того, находится продавец в режиме онлайн, когда покупатель хочет заплатить (прямой онлайн платёж), или нет (оффлайн платёж). Если стороны находятся оффлайн, используется схема 1/2 multisig, при которой продавец может получить средства, когда вернётся в режим онлайн, или же покупатель сможет вернуть средства, что лучше бы не происходило.

    Согласование заказов и платежей

    Я надеюсь, что понял всё правильно в ходе моей беседы с одним из разработчиков OpenBazaar.

    Каждому заказу присваивается уникальный идентификатор (ID). Серверы OpenBazaar покупателя и продавца могут обмениваться сообщениями по IPFS, чтобы информировать друг друга о любых новых заказах и своих ID. Каждый заказ также получает свой уникальный криптовалютный адрес, о котором серверы также узнают из сообщений. В случае проведения модерированного платежа и оффлайн платежа новый (multisig) адрес конфигурируется покупателем. Он же сообщает его продавцу. При прямом онлайн платеже новый (традиционный) адрес создаётся продавцом, и этот адрес используется покупателем для проведения оплаты.

    Во всех трёх случаях продавец ожидает входящую транзакцию по адресу, привязанному к заказу. Так как адрес уникален, транзакция проводится покупателем.

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

    Реализация поддержки новых криптовалют

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

    Так что я бы сказал, что предварительные условия интеграции Monero в OpenBazaar выглядят довольно неплохо.

    wallet.go: «драйверы валют» OpenBazaar

    OpenBazaar определяет интерфейс между кодом определённой валюты и сервером OpenBazaar. Определение интерфейса содержится в репозитории интерфейс кошелька.

    Поскольку сам термин кошелёк употребляется в слишком широком смысле и неоднозначен, далее в разъяснении я использую немного иную терминологию: я сравниваю его с драйверами устройств, устанавливаемыми в операционные системы (ОС).

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

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

    Центральный файлом в данном случае является wallet.go в репозитории, о котором говорилось выше. Он определяет интерфейс драйвера валюты и запросы, которые должен поддерживать этот драйвер.

    На данный момент существует четыре завершённых и вышедших драйвера валют, реализующих такой интерфейс, для четырёх уже упомянутых валют: BTC, BCH, LTC и ZEC. Пятый драйвер для монет Ethereum и ERC20 близок к завершению; найти его можно здесь в его собственном репозитории.

    Я считаю, что существующий интерфейс драйвера, определяемый wallet.go, в некоторой степени был разработан под влиянием Bitcoin. Например, взгляните на метод GenerateMultisigScript. Прямо или косвенно он предполагает наличие ряда вещей, связанных с возможностями multisig: например, метод использует нечто вроде скрипта возмещения, а также подразумевает, что вы можете создать multisig-адрес за один шаг, имея при этом только некоторое количество ключей и пороговое значение, определённого количества подписантов.

    Лично я, глядя на эту ситуацию, удивляюсь, почему до сих пор сообщество разработчиков DASH не написало и не предоставило драйвер своей валюты для OpenBazaar. Учитывая, что DASH, в принципе, является форком BTC, реализация такого драйвера не вызвала бы затруднений.

    Интересно, как OpenBazaar реализовали свой драйвер для Ethereum. По этому поводу был написан довольно информативный отчёт. Был реализован смарт-контракт в Solidity (исходный вариант можно найти здесь), и то, что было запрограммировано, во многом напоминает ряд аспектов работы multisig в Bitcoin и соответствующую абстракцию, определяемую wallet.go.

    Возьмите, к примеру, метод calculateRedeemScriptHash, реализующий некий механизм идентификации multisig «адреса» и его конфигурации посредством хеша, как это делается в случае с Bitcoin со скриптом возмещения и его хешем.

    Благодаря магии смарт-контрактов наконец удалось втиснуть совершенно «небиткоиновский» Ethereum во что-то, что может реализовать необходимый интерфейс драйвера валюты wallet.go.

    Мультиподписи Bitcoin

    В сравнении с мультиподписями Monero схема мультиподписей Bitcoin на удивление проста. Если вы хотите точно узнать, как это работает, то можете ознакомиться, например, со статьей Нелёгкий путь Bitcoin multisig.

    Для использования с платформой OpenBazaar и для сравнения с Monero multisig важны следующие свойства: если покупатель может получить один публичный ключ от продавца, а другой публичный ключ от выбранного модератора, то они могут добавить третий ключ и самостоятельно построить адрес по схеме 2/3 multisig.

    Как я понимаю, благодаря IPFS покупатель может получить такие публичные ключи даже в том случае, если продавец и модератор будут оффлайн. Также следует отметить, что один отдельно взятый публичный ключ продавца может использоваться любым количеством покупателей для любого количества покупок; новую пару ключей каждый раз вычислять приходится только покупателю.

    Таким образом, эта способность создавать адреса по схеме 2/3 multisig важна с точки зрения возможности торговли в режиме оффлайн, о которой говорилось в главе «Оффлайн торговля» выше.

    Найти транзакции с multisig-адресами просто, и каждая из сторон может сделать это самостоятельно. (Если вы не понимаете, почему я подчёркиваю это, и спрашиваете себя: «Ну, конечно же, а как это может быть иначе?» — подождите, пока не дочитаете следующую главу, посвящённую мультиподписям Monero).

    Процесс подписания и передачи multisig-транзакций в сеть Bitcoin довольно прост ввиду отсутствия дополнительных шагов: транзакция подписывается всеми необходимыми сторонами, одна из сторон передаёт транзакцию в сеть, она фиксируется там, все стороны видят это и корректируют собственный баланс — процесс завершён.

    Мультиподписи Monero

    Подробное описание процесса построения адреса Monero по схеме 2/3 multisig и проведения транзакций с использованием собственного CLI кошелька Monero («с интерфейсом с поддержкой командной строки») можно найти, например, здесь.

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

    Академическая статья исследовательской лаборатории Monero, Monero Research Lab (сокращённо —MRL), в которой подробно изложена теория, называется Thring-подписи и их применение в цифровых валютах, скрывающих отправителя.

    А в отношении OpenBazaar следует отметить следующие факты.

    Адрес Monero по схеме 2/3 multisig может быть построен только при условии взаимодействия всех 3 сторон, обменивающимися друг с другом данными ключей в течение двух отдельных раундов.

    Лично мне не совсем понятна «теория», лежащая в основе мультиподписей Monero, и поэтому я не могу объяснить, почему всё происходит именно так. Тем не менее при подготовке данного отчёта мною было получено подтверждение от людей, разбирающихся в вопросе: на данный момент более простой способ отсутствует, однозначно нельзя сделать всё за один заход или в режиме оффлайн, как в случае с Bitcoin, как это было описано в главе «Мультиподписи Bitcoin» выше, а выхода версии Monero Multisig 2.0, которая позволит проводить операции в один этап, в ближайшем будущем не предвидится.

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

    При близком рассмотрении вы не найдёте каких-либо других ограничений. Если вы совершаете несколько транзакций, то вам придётся делать это в строгом порядке: проведение транзакции, синхронизация, проведение транзакции, синхронизация, проведение транзакции и т. д. Вы не можете, например, подписать две транзакции и отправить обе эти транзакции другому правомочному подписанту для подписи и передачи в сеть. Одновременная передача двух транзакций просто не работает.

    С одной стороны, вы удивитесь, насколько всё может усложниться, когда вы имеете дело не с совершенно прозрачным блокчейном, как у Bitcoin, а с таким закрытым блокчейном, как у Monero, где скрыты отправители, получатели и даже передаваемые суммы. С другой стороны, не менее удивительно, как работают мультиподписи при всех этих условиях.

    Наконец, пара слов о схеме 1/2 multisig, которая используется в OpenBazaar для проведении платежей в режиме оффлайн (см. главу «Типы платежей в OpenBazaar»). В случае с Monero такие вещи, как 1/2 multisig, просто отсутствуют. Если вы захотите создать адрес, который будет полностью контролироваться более чем одним человеком, следует просто отправить ваши приватные ключи всем заинтересованным лицам — эффект будет тем же, но будет абсолютно выпадать из концепции «реальной» мультиподписи Monero.

    Кошельки Monero

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

    В Monero эта работа класса C++ называется wallet2. Исходный код выложен здесь. Код довольно сложен: более 12 000 строк. Я бы сказал, что его объём в несколько раз превышает необходимый для взаимодействия и проведения транзакций в сети Bitcoin и работы с кошельком Bitcoin.

    Насколько мне известно, wallet2 никогда не переписывался в экосистеме Monero. Даже три вышедших для смартфонов кошелька Monerujo, Cake Wallet и X Wallet где-то глубоко содержат части, написанные на C++ и содержащие wallet2. MyMonero, возможно, является наиболее близким альтернативным вариантом реализации, но даже в этом случае разработчики «сжульничали» и скомпилировали части Monero C++ на JavaScript, используя Emscripten.

    И wallet2 даже продолжает разрастаться. В настоящее время ведётся работа над реализацией новой функции под названием многопользовательские транзакции или чем-то в этом роде.

    Что интересно, существует такой проект под названием DERO, который начинался как форк кода Monero, но затем был переписан в Go практически с нуля. Я не знаком с их кодом, но в нём должно быть что-то вроде класса wallet2, написанное на Go, конечно. Можно ли это использовать для поддержки Monero в OpenBazaar? Не думаю, что это возможно на данный момент: с одной стороны DERO использует Исследовательскую лицензию, ограничивающую использование кода, а с другой стороны, DERO и проект Monero в лучшем случае просто игнорируют друг друга по большинству вопросов.

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

    monero-wallet-rpc

    К счастью, уже есть нечто, реализующее тонкую оболочку вокруг wallet2, благодаря чему обеспечивается доступ через RPC (удалённый вызов процедуры). Это стандартная часть распределения программного обеспечения Monero в форме отдельного двоичного файла с названием monero-wallet-rpc. Код можно найти здесь.

    Также в Go были написаны привязки к этому интерфейсу. Перейти на страницу проекта на GitHub можно по этой ссылке. Я провёл тестирование — базовые функции работают, несмотря на тот факт, что код ещё не был обновлён до версии 0.13.0.x Monero (пока используется версия 0.11.0.0). Я связался с автором, и он сказал, что только приветствует использование этих привязок Monero для реализации поддержки в OpenBazaar и даже мог бы обновить код.

    Итак, как это видится мне, реализация поддержки Monero в OpenBazaar будет включать в себя и потребует конфигурирования и запуска monero-wallet-rpc на сервере OpenBazaar.

    Доступ к сети Monero

    В настоящее время существует три способа получения доступа к сети Monero.

    Самым безопасным и рекомендуемым способом является запуск собственного полного узла, то есть запуска двоичного файла демон-программы monerod так, чтобы вы могли контролировать её, то есть использования полной и актуальной копии блокчейна Monero. Сделать это не так сложно, но, конечно же, потребуется приложить определённые усилия и найти место в памяти, так как размер блокчейна на сегодняшний день составляет более 70 Гб. Раньше некоторые считали, что загрузка начальной версии блокчейна — довольно непростое и затратное с точки зрения времени занятие. И несмотря на то, что «процесс» был усовершенствован, он по-прежнему довольно обременителен, и, практически вне всякого сомнения, возможность запуска полного узла непосредственно на смартфонах пока так или иначе не рассматривается.

    Вот почему так популярны так называемые удалённые узлы: вы подсоединяетесь к узлу Monero, который работает где-то в сети интернет на благо людей, которые не могут позволить себе запустить собственный полный узел. Технически интерфейс между кошельком и демон-программой тот же самый. На данный момент наиболее популярным местом получения доступа к удалённому узлу, пожалуй, является moneroworld.com. Там вы сможете подсоединиться к узлу, который будет произвольно выбран неким механизмом в порядке круговой очереди.

    Всё это делается строго на добровольной основе и, возможно, вскоре стоит ожидать проблем с пропускной способностью, когда слишком много людей станет использовать этот ресурс.

    В основе третьего способа использования сервера лежит технология MyMonero. В данном случае вы передаёте свой секретный ключ просмотра на специальный сервер, который затем соединяется с демон-программой Monero, сканирует блокчейн от вашего имени и сообщает результаты вашему кошельку. Этот процесс создаёт меньше сетевого трафика и требует меньше локальной вычислительной мощности, чем стандартное подсоединение кошелька к удалённому узлу. Подробности можно найти, например, на GitHub репозитории OpenMonero.

    Я не особо следил за развитием проекта MyMonero, но насколько мне известно, этот третий способ получения доступа к сети Monero пока не используется из-за недостатка в публичных серверах, к которым было бы можно подключиться. Кроме того, некоторые люди пока просто не готовы передать свой секретный ключ просмотра на какой-то удалённый сервер, который не контролируется ими, даже несмотря на то, что едва ли можно потратить хоть сколько-нибудь монет, используя такой ключ — для этого понадобится второй ключ, секретный ключ траты.

    Что это означает для OpenBazaar и Monero? Как уже было написано мной в главах «Кошельки Monero» и «monero-wallet-rpc», использование monero-wallet-rpc уже более или менее неизбежно, с локальным узлом Monero или при условии подсоединения к удалённому узлу Monero.

    «Драйвер валюты» OpenBazaar для Monero

    После всего этого объёма информации, я наконец могу подробно изложить выводы. К которым я пришёл в отношении реализации драйвера валюты для Monero.

    Я дам подробное описание для трёх типов платежей, о которых говорится в главе «Типы платежей в OpenBazaar», поскольку, как бы это не было удивительно, вопросы и сложности, связанные с Monero, отличаются в зависимости от типа платежа.

    Прямые онлайн платежи

    Это самый простой с точки зрения реализации тип платежа. Monero использует функцию подадресов: если у вас есть ключи адреса, вы можете создать столько подадресов, сколько вам захочется. Мне кажется, что в этом случае данный аспект Monero работает так же, как у Bitcoin. Таким образом, у продавца не возникнет проблем с созданием новых подадресов при проведении каждой сделки и указанием этих адресов покупателю.

    Пока мне не удалось систематизировано изучить wallet.go и проверить каждый не связанный с использованием мультиподписей метод, может ли такой метод быть реализован, то есть переведён таким образом, чтобы обращаться к monero-wallet-rpc, но я вполне уверен в том, что это возможно: в конечном счёте обработка простых прямых передач не отличается у Bitcoin и Monero.

    Возможно, возникнет несколько косметических проблем, связанных с UI кошелька, поскольку адреса Monero ужасно длинны (95 символов). GUI-кошелёк Monero решает такие проблемы, показывая только начало и конец адреса, которые соединены многоточием, заменяющим отсутствующую часть. Вероятно, нечто подобное можно сделать и в случае с UI кошелька OpenBazaar.

    Оффлайн платежи

    К сожалению, в данном случае, когда речь заходит о Monero, мы сталкиваемся с некоторыми сложностями. Как уже упоминалось в главе «Мультиподписи Monero», Monero не поддерживает схему 1/2 multisig, которая используется OpenBazaar для данного типа платежей. И даже если бы эта схема поддерживалась, то всё равно возникли бы сложности, описанные в следующей главе «Модерированные платежи».

    Используя приватный ключ просмотра продавца, покупатель мог бы самостоятельно вывести на основе адреса Monero продавца новый подадрес и мог бы отправить его с межсерверным сообщением продавцу, обеспечив таким образом соответствие требованию наличия «уникального адреса для каждой сделки» (см. главу «Соответствие заказов и платежей»). Однако раскрытие приватного ключа просмотра абсолютно всем покупателям может оказаться неприемлемым для продавцов.

    Вплоть до настоящего момента задача «проверки соответствия заказов платежам», с которой, в частности, приходится сталкиваться биржам в случае со входящими транзакциями Monero, обычно решается при помощи идентификаторов платежей, то есть уникальных идентификаторов, которые присоединяются отправителями к транзакциям Monero, и которые может видеть получатель. Тем не мене такое решение не подходит для OpenBazaar, так как идентификаторы платежей «доживают свои последние дни» и скоро не будут использоваться по нескольким причинам, которые не имеет смысла описывать в данном случае. Если интересно, вы можете почитать обсуждение проблемы сообществом разработчиков, опубликованное здесь.

    И что же остаётся? Monero использует доказательство платежа, когда отправитель транзакции создаёт криптографическое доказательство происхождения транзакции, которое может быть проверено получателем. Подробную информацию, например, можно найти здесь и здесь.

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

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

    Итак, чтобы подытожить, мне кажется, мы могли бы реализовать оффлайн платежи Monero, но это потребовало бы определённых усилий.

    Модерированные платежи

    Поддержка модерированных платежей подразумевает поддержку схемы 2/3 multisig, используемой Monero в OpenBazaar.

    Я пришёл к заключению, что текущая «модель драйвера» OpenBazaar, определяемая wallet.go (см. главу «wallet.go: драйверы валют»), не позволит реализовать мультиподписи Monero. Основной пример: метод GenerateMultisigScript позволяет создавать multisig-адрес в один этап. В случае с Monero это невозможно, так как (о чём уже говорилось в главе «Мультиподписи Monero») для Monero требуется два этапа.

    И будет недостаточно просто разбить этот способ на два, например, StartGenerateMultisigScript и FinalizeMultisigScript, чтобы решить проблему. В случае с Monero требуется взаимодействие всех трёх правомочных подписантов (покупателя, продавца и модератора), которое происходит в два этапа, что, на мой взгляд, совершенно противоречит «духу» GenerateMultisigScript и, безусловно, идеи совершения и подготовки сделок в режиме оффлайн (см. главу «Оффлайн торговля»). Кроме того, это может не понравиться модераторам, так как они не смогут ожидать момента, пока разрешится вся ситуация, и им понадобится, по крайней мере, автоматизированная система, которая будет постоянно работать и взаимодействовать при создании кошельков.

    Как мне видится, поддержка мультиподписей Monero потребует серьёзной переработки концепции поддержки множества валют OpenBazaar и поднятия интерфейса драйверов wallet.go на значительно более абстрактный и менее «биткоиновый» уровень. Так как этот интерфейс появился совсем недавно, и он очень важен для сервера OpenBazaar, могу предположить, что такое предложение будет непросто «продвинуть».

    Я думаю, что даже пользовательский интерфейс для работы с кошельками пользователей платформы OpenBazaar потребует дополнения. Вы, вероятно, не сможете скрыть всё, что происходит, в глубинах сервера OpenBazaar: часто вашему кошельку придётся ожидать информации от другой стороны, а вам будет необходимо видеть, что уже пришло, а что ещё только ожидается. Посмотрите, как много команд моя система Multisig Messaging System добавила в CLI-кошелёк Monero, чтобы сделать обмен данными, связанными с мультиподписями, между кошельками реально прозрачным для пользователя, а также устойчивым к ошибкам при использовании.

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

    Политика

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

    Monero — «официальная» валюта OpenBazaar или нет?

    Первый вопрос: допустим, будет реализован первый драйвер валюты Monero для OpenBazaar. Каков будет статус этого кода? Станет ли он неотъемлемой частью пакета OpenBazaar от OB1, чтобы пользователь мог просто скачать OpenBazaar, установить его и пользоваться XMR как пятой или шестой «родной» / «официально» поддерживаемой криптовалютой? Или же всё будет несколько сложнее, если код не получит такого статуса? Теоретически это может оказаться столь же сложным, как компиляция самого кода OpenBazaar, например, понадобится специальный свитч или даже специальный форк OpenBazaar для Monero.

    Почему всё это вообще вызывает какие-либо вопросы? Насколько я понял из беседы с одним из разработчиков OB1, Майком Гринбергом (Mike Greenberg), с точки зрения OB1 в отношении поддержки валют всегда возникают хитрые вопросы. Например, может быть реализовано несколько вариантов поддержки одной и той же монеты несколькими разработчиками. Может ли OB1 выбрать один из этих вариантов в качестве «официального», отбросив остальные? Вообще, дело ли это OB1 решать, какой из вариантов лучше, а какой хуже?

    Я также могу представить себе проблемы, которые возникнут с ноу-хау. Чем больше валют будет поддерживаться, тем выше вероятность того, что кто-то из внешних «оригинальных» разработчиков прекратит поддержку какого-нибудь кода, что поставит OB1 перед выбором из двух вариантов, ни один из которых не будет привлекательным: прекратить поддержку такой валюты, даже несмотря на то, что она будет являться официально поддерживаемой, или же потратить деньги компании на собственную поддержку кода после приобретения необходимого ноу-хау.

    Гринберг упомянул идею реализации некой системы валютных плагинов в OpenBazaar. Такие плагины могли бы являться отдельными частями исполняемого кода, как DLLs в Windows или Linux. Пользователи смогли бы самостоятельно решать, какие из плагинов использовать, и смогли бы включать их в OpenBazaar и исключать, используя опции конфигурации. При наличии нескольких плагинов XMR пользователи смогли бы совершенно естественным образом выбирать, какой из них использовать. А также, совершенно очевидно, что ответственность за поддержание актуальности и рабочего состояния плагинов, например, после хардфорка поддерживаемой валюты, ложилось бы на плечи разработчиков таких плагинов, а не на OB1.

    Увы, кажется, такая система плагинов пока ещё не на «рабочем столе», и ещё менее вероятно, что кто-то над ней уже работал. Поэтому едва ли Monero стоит ждать, что такая система появится.

    Лично я в данный момент сомневаюсь, что простая «неофициальная» поддержка Monero имеет шансы на успех: я боюсь, что если продавцам и покупателям придётся преодолеть ряд барьеров до того, как они смогут торговать, используя XMR, то много ли продавцов и покупателей найдут друг друга подобным образом?

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

    Приемлемо ли отсутствие поддержки мультиподписей Monero?

    Второй политический вопрос заключается в том, как реагировать, если в результате более тщательных исследований подтвердят, что поддержка мультиподписей Monero в OpenBazaar будет невозможна, по крайней мере, в течение значительного времени, а в худшем случае, то и вообще «никогда». Что касается лично меня, то после проведения анализа и выявления ряда проблем, обозначенных в главе «Модерированные платежи», мне кажется, что результаты будут такими, как я ожидаю.

    Я цитирую документ OpenBazaar под названием Интеграция альткоинов, главу «Поддержка криптовалют на примерах реализации»: «Предлагаемая интеграция должна отвечать следующим условиям: 1. Монета должна поддерживать мультиподписи».

    Это требование определённо является разумным, так как бесшовная поддержка модерированных платежей с применением полностью автоматизированной схемы 2/3 multisig является важной частью UX OpenBazaar. Но как бы то ни было, если по техническим причинам не удастся интегрировать мультиподписи Monero, в чём будет некого винить, что окажется наименьшим из зол: забыть о Monero или интегрировать монету, но без поддержки мультиподписей?

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

    Источник: Implementing Monero Support for OpenBazaar: An Analysis

    Перевод:
    Mr. Pickles (@v1docq47)
    Редактирование:
    Agent LvM (@LvMi4)
    Коррекция:
    Kukima (@Kukima)
     
  • О нас

    Наш сайт является одним из уникальных мест, где русскоязычное сообщество Monero может свободно общаться на темы, связанные с этой криптовалютой. Мы стараемся публиковать полезные мануалы и статьи (как собственные, так и переводы с английского) о криптовалюте Monero. Если вы хорошо владеете английским (или можете писать собственные статьи/мануалы) и хотите помочь в переводах и общем развитии Monero для русскоязычной аудитории - свяжитесь с одним из администраторов.