Обзор Возможностей Протокола Bitshares

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

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

Кроме того, протокол Bitshares был взят за основу в других децентрализованных системах: Steemit, EOS. Идея протокола Bitshares заключается в создании инструмента, с помощью которого можно было бы торговать различными активами и валютами в децентрализованной среде, фактически не размещая их на торговой платформе.

Сама идея принадлежит программисту по имени Дэниел Лаример.

Он предложил это в 2013 году и активно обсуждал на форумах в течение пяти недель.

Так Дэниел Лаример познакомился с другим активным криптовалютным активистом по имени Чарльз Хоскинсон, который помог разработать бизнес-план и привлечь инвестиции.



Обзор возможностей протокола Bitshares

Дэниел Лаример в школьной столовой



Цель платформы Bitshares

Дэниел Лаример, также известный как Bytemaster, является главным идеологом и разработчиком протокола.

Платформа Bitshares позволяет любому создавать пользовательские активы (UIA) или цифровые токены.

Таким образом, платформа учитывает базовую валюту, то есть криптовалюту с тикером BTS и различные пользовательские токены.

Протокол реализует децентрализованную биржу, на которой можно торговать этими цифровыми активами.

При проектировании системы учета и механизма консенсуса разработчики уделили большое внимание пропускной способности.

В результате Bitshares позиционирует себя как децентрализованную альтернативу учетной системе Visa. В то время как Visa утверждает, что может обрабатывать пару десятков тысяч транзакций в секунду, Bitshares говорит о способности обрабатывать сто тысяч транзакций в секунду децентрализованно с открытой базой данных и возможностью аудита.

Кроме того, Bitshares позиционирует себя как платформу смарт-контрактов.

Правда, смарт-контракты здесь предустановлены и их количество ограничено — реализованы самые популярные контракты.

Но они более энергоэффективны и, следовательно, дешевле с точки зрения платы.

Еще одна особенность платформы — поддержка платежей с повышенным уровнем конфиденциальности пользователей, которую можно использовать опционально.

В Bitshares эта технология называется Stealth Transfers.

История разработки и запуска

Давайте кратко познакомимся с историей запуска этой децентрализованной платформы.

Объем работ по созданию запланированной платформы был очень большим.

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

Так в ноябре 2013 года родилась идея Bitshares PTS, что означает протошары.

Суть его заключалась в том, что распространение монет начнется с использованием майнинга на основе простого протокола, и в это время будет разработана полноценная версия Bitshares. Для реализации Bitshares PTS мы сделали форк Bitcoin (клон репозитория с исходным кодом), внесли в него небольшие изменения и запустили новую сеть.

Любой, кто был заинтересован в проекте, мог установить на свой компьютер полную ноду сети Bitshares PTS, добывать монеты, обменивать и торговать ими.

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

Позже разработчики представили протокол Bitshares версии 1.0 и заранее объявили дату выхода последнего блока в блокчейне Bitshares PTS. Поскольку новая версия протокола написана практически с нуля и использует совершенно новые форматы данных, обновление имеет свои особенности.

Снимок состояния всех неизрасходованных монет делается на момент создания последнего блока старого блокчейна и переносится в блок Genesis нового блокчейна.

Получается, что все соответствия между публичными ключами и балансами сохраняются, т.е.

вы можете продолжать использовать монеты, используя те же приватные ключи.

Так, 14 декабря 2014 года пользователи перешли на новую версию протокола, где уже достигнут консенсус по делегированным правилам доказательства доли, а майнинг и выпуск новых монет не предусмотрены.

В октябре 2015 года произошло еще одно крупное обновление протокола Bitshares до версии 2.0, которое прошло аналогичный процесс.

Стоит отметить, что само ядро децентрализованной платформы разработчики Bitshares создали в рамках отдельного проекта под названием Graphene. Графен является основой для создания децентрализованных систем бухгалтерского учета нового поколения.

Помимо Bitshares, Graphene лег в основу нескольких других проектов.



Модель аккаунта

Теперь давайте посмотрим, как структурированы учетные записи в протоколе Bitshares 2.0. Он использует криптографию эллиптических кривых, а сама кривая точно такая же, как и в протоколе Биткойн.

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

Но этот формат используется редко, поскольку общая база данных платформы оптимизирована таким образом, что каждый объект, включая учетную запись пользователя, имеет свой собственный уникальный идентификатор, который на самом деле представляет собой 8-байтовое (или 64-битное) целое число.

В обычных операциях отправки платежа указывается идентификатор счета.

Кроме того, протокол поддерживает регистрацию уникальных имен.

Подобный функционал впервые был реализован в протоколе Namecoin. Таким образом, в Bitshares вы можете зарегистрировать удобочитаемую строку, которая будет уникальной в соответствующем блокчейне, и связать ее со своей учетной записью, чтобы использовать это имя вместо идентификатора учетной записи.



Достижение консенсуса на основе DPoS

Как отмечалось ранее, правила протокола DPoS предполагают, что все пользователи могут участвовать в достижении консенсуса, выбирая валидаторов посредством голосования.

В процессе голосования вес голоса пользователя определяется его балансом в базовой валюте.

Генерация блоков выполняется подмножеством выбранных валидаторов.

В протоколе Bitshares валидатор называется свидетелем.



Модель транзакции

Давайте подробнее рассмотрим модель транзакций в Bitshares.

Обзор возможностей протокола Bitshares

На диаграмме видно, что тело транзакции состоит из пяти основных полей.

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

Это необходимо для определения цепочки блоков, в которую можно добавить данную транзакцию, так как по правилам протокола транзакция не может быть подтверждена в цепочке, к которой она не привязана.

Поле expiration_time указывает время, до которого транзакция может быть добавлена в блок.

Если он не был подтвержден до этого времени, то он считается недействительным и больше не может быть включен в блокчейн.

Поле Operations_vector является особенным.

Особенность в том, что в нем можно разместить множество различных операций.

Операция — еще один ключевой объект протокола Bitshares. Назовем несколько наиболее популярных типов операций: Transfer (перевод), account_update (обновление аккаунта), Asset Issue (выпуск токена) и Order (торговое предложение).

Каждая операция имеет свой формат и необходимые параметры.

Например, для операции перевода необходимо указать счет отправителя, тип актива, сумму перевода и счет получателя.

Сами операции независимы друг от друга, но могут выполняться вместе только в том случае, если транзакция принята.

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

Конечно, старое ПО не будет уметь корректно проверять дополнительные поля новых транзакций, но, по крайней мере, сможет корректно обрабатывать транзакции по старым правилам.

Это беззнаковый формат транзакции.

Чтобы правильно подписать транзакцию, вам необходимо проанализировать все операции из поля Operations_veсtor и составить список аккаунтов, которые должны подтвердить эту транзакцию.

Тогда станет понятно, какими ключами нужно подписать транзакцию.

Все необходимые подписи помещаются в отдельное поле – подписи.

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

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

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

Комиссия за транзакции может быть постоянной или меняться.

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



Децентрализованный обмен активами

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

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

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

фактически происходит обмен активами, исходя из того, что оба пользователя подписали удовлетворяющие друг друга заявления об обмене.

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



Гибкость управления учетными записями

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

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

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

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

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

Более того, для разных операций могут быть установлены разные критерии.

Данный механизм управления позволяет существенно снизить риски кражи активов и потери контроля над счетом.



Обзор возможностей протокола Bitshares

Представим это схематически.

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

Это можно сделать только путем подтверждения нескольких других учетных записей и ключей.

Участников на более низких уровнях иерархии обычно называют подписывающими сторонами.

Каждый из них имеет свой вес в подтверждении операции.

Например, в этой схеме подписанты имеют вес 25, 40, 35 и 40 единиц, а необходимый порог для подтверждения определенного типа транзакции может составлять 50, 60 или 70 единиц.

При этом другие типы операций могут иметь другое распределение весов и другое пороговое значение.

Как это работает на уровне транзакции? Один из подписантов создает транзакцию с определенными операциями и подтверждает ее от имени своей учетной записи.

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

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



ЭМиссия МАУ

Давайте подробнее рассмотрим особенности выдачи пользовательских активов на платформе Bitshares. Любой желающий может создать транзакцию по созданию нового актива, заплатить определенную комиссию, установить параметры этого актива и начать выпуск соответствующих токенов.

Данный функционал протокола реализован в виде предустановленного смарт-контракта и имеет некоторые особенности.

По желанию эмитента возможно удовлетворение требований KYC (Знай своего клиента) с использованием механизма белого списка (списка разрешенных учетных записей) и дополнительного подтверждения эмитента.

Белый список содержит учетные записи, которым эмитент актива дает разрешение на получение и хранение своих токенов.

А дополнительный механизм подтверждения позволяет эмитенту контролировать каждую транзакцию перевода или торговли токенами (он может отклонить или одобрить каждую транзакцию со своим активом).

Кроме того, эмитент может ограничить торговлю токенами и разрешить только хранение и передачу или ограничить передачу и разрешить только торговлю.

Эмитент также может устанавливать дополнительные комиссии за переводы и торговлю токенами.

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

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

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

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

И эти параметры контракта будут видны всем пользователям.

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

Конвертация осуществляется по обменному курсу, установленному эмитентом.



Механизм голосования

При изучении платформы Bitshares обязательно нужно упомянуть механизм, который помогает принимать решения в децентрализованной среде — голосование.

Члены комитета, валидаторы (свидетели) и разработчики (работники) избираются голосованием.

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

И разработчики предлагают улучшения программного обеспечения.

Если они наберут достаточно голосов и уложатся в срок разработки, они получат вознаграждение.

При голосовании вес голоса каждого аккаунта пропорционален его балансу в базовой валюте.

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

Это удобно в тех случаях, когда пользователь сам не знает, за какого кандидата лучше проголосовать, и передает это право более компетентному пользователю.

В целом голосование очень важно для обеспечения высокой надежности платформы Bitshares.

Комиссионный механизм

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

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

Этот баланс называется резервным пулом.

Правила предусматривают, что комиссионные за все транзакции со всех счетов поступают в Резервный пул.

На аккаунты валидаторов и разработчиков выплачиваются вознаграждения из Резервного пула в процентах от его баланса.

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



Обзор возможностей протокола Bitshares

Стоит упомянуть максимальное количество монет базовой валюты.

Всего выпущено 3,6 миллиарда монет, дополнительная эмиссия не планируется.

При этом на момент 2018 года в свободном обращении находится около 2,6 млрд монет, а в резервном пуле — около 1 млрд.

СмартКоины

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

Их еще называют SmartCoins. Он работает по принципу контракта на разницу, то есть контракта на разницу.

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

В этом случае коэффициент обеспечения значительно выше единицы, рекомендуется 2 и более.

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

Чтобы платформа имела данные о цене актива на внешних рынках, доверенные лица размещают данные о цене актива в блокчейне Bitshares с помощью специального типа операции.

В этом случае этими доверенными сторонами являются сами валидаторы.



Формат заголовка блока

Заголовок блока в Bitshares имеет более простую структуру и меньший размер, чем заголовок блока в Биткойне.



Обзор возможностей протокола Bitshares

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

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

В протоколе Bitshares есть 4 понятия, которые играют ключевую роль в работе платформы: блоки, транзакции, операции и объекты.

Объектами здесь являются счет, актив, баланс, предложение и т. д.

Многие операции и особенности их реализации

Давайте подробнее рассмотрим концепцию операции в контексте этого протокола.

По состоянию на 2018 год Bitshares имеет около 40 различных типов операций, и новые типы могут быть добавлены с новыми обновлениями протокола.

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

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

Вот небольшой список наиболее популярных операций:

  • Transfer_operation переводит конкретный актив с баланса одного аккаунта на другой;
  • limit_order_create_operation создает объект ордера на обмен актива; limit_order_cancel_operation отменяет такой ордер;
  • fill_order_operation выполняется автоматически, когда два ордера удовлетворяют друг друга, и не требует создания транзакции, поэтому ее еще называют виртуальной операцией;
  • account_create_operation создает учетную запись обычного пользователя;
  • blind_transfer_operation осуществляет конфиденциальный платеж;
  • assets_create_operation создает новый объект актива;
  • assets_update_operation изменяет параметры смарт-контракта существующего токена;
  • assets_issue_operation выпускает токены существующего актива;
  • свидетеля_create_operation создает учетную запись-кандидата-валидатора.

Что касается статистики, то можно сказать, что нагрузка на сеть Bitshares по количеству транзакций сравнима с нагрузкой на сеть Bitcoin или Ethereum. Более того, в некоторые моменты 2018 года платформа Bitshares обрабатывала больше транзакций, чем Биткойн и Эфириум вместе взятые.

А результаты нагрузочного тестирования показывают, что максимальная пропускная способность сети Bitshares в сотни раз превышает максимальную пропускную способность сетей Bitcoin и Ethereum.

Обзор возможностей протокола Bitshares

По данным аналитического ресурса Blocktivity.info по состоянию на июль 2018 года платформа Bitshares обрабатывает более 60% от общего количества транзакций, подтвержденных всеми децентрализованными платформами.



Организация базы данных

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



Обзор возможностей протокола Bitshares

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

Справа — еще один способ организации базы данных — Ledger. Обычно используется для хранения соответствий между идентификаторами и состояниями (например, аккаунтом и его балансом).

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

Ledger удобен тем, что он компактно хранит последнее состояние базы данных, обеспечивая при этом быстрый поиск, чтение и обновление записей.

Именно поэтому они принципиально имеют более высокую пропускную способность.

Ledger обычно используется в централизованных системах бухгалтерского учета.

Идея Bitshares заключается в одновременном использовании обоих способов организации базы данных.

Таким образом, полный узел сети ведет учет одновременно, используя две базы данных, организованные как Blockchain и Ledger соответственно.

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

Это позволяет существенно ускорить процесс проверки и принятия новых транзакций.



Оптимизация выполнения бизнес-логики

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

Эти системы учета в конечном итоге используют «процессор бизнес-логики» в качестве виртуальной машины, и все транзакции определяются как сценарии, которые будут выполняться виртуальной машиной.

Этот подход использует механизмы синхронизации потоков реального процессора и объединяет их, выполняя все инструкции через виртуальный процессор.

Виртуальный процессор, даже при компиляции Just-In-Time, всегда будет медленнее реального процессора, но результирующая скорость вычислений — не единственная проблема подхода «все есть сценарий».

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

Еще одним этапом оптимизации является сохранение данных о конечном состоянии системы учета в оперативной памяти.

Это означает, что процессор бизнес-логики может быстро следовать указателям памяти и напрямую получать необходимые ему данные, вместо того чтобы выполнять трудоемкие запросы к базе данных.

Это также означает, что к данным можно получить доступ без копирования и что данные можно изменить на месте.

Эта оптимизация обеспечивает прирост производительности по сравнению с использованием подхода на основе базы данных.

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

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



Варианты повышения конфиденциальности пользователей

Выше было отмечено, что система учета Bitshares использует счета и балансы, в отличие от Биткойна, где учет основан на неизрасходованных выходах транзакций.

Повышение уровня конфиденциальности на платформе Bitshares — нетривиальная задача, поскольку в случае со счетами и балансами деанонимизировать пользователей даже проще, чем в Биткойне.

Но разработчики Bitshares решили эту проблему интересным способом.

Они реализовали возможность указывать несколько входов и выходов в рамках одной операции.

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

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

Конфиденциальная транзакция скрывает суммы входов и выходов транзакции, но использует доказательство того, что сумма выходов не превышает сумму входов.

А Stealth Addresses скрывает связь между открытым ключом, который используется в качестве идентификатора получателя, и адресом, который фактически указан в выходных данных транзакции.

Bitshares по умолчанию использует обычные (нечастные) платежи, но пользователи могут использовать скрытые переводы, если захотят. Таким образом, учет монет на платформе ведется двумя разными способами.

Есть такое понятие, как перевод монет с одного метода учета на другой.

Для этого реализованы отдельные операции:

  • Transfer_to_blind_operation используется для перевода монет из открытого обращения в скрытое обращение;
  • blind_transfer_operation предназначен для перевода монет скрытым способом, а Transfer_from_blind_operation предназначен для перевода монет из скрытого обращения в открытое обращение.

Понятно, что эти операции больше по объему данных, чем обычные и, соответственно, требуют большей комиссии.

Примечательно, что любой может подсчитать, сколько монет ушло в скрытое обращение, поэтому и существует такое понятие, как Stealth Supply (количество монет в скрытом обращении).

Но на данный момент (июль 2018 г.

) у опции конфиденциальности в Bitshares есть один практический недостаток.

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

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

— Поддерживает ли Bitshares возможность устанавливать произвольные условия траты монет, например, с помощью Bitcoin Script? Нет, текущая версия протокола не поддерживает эту функцию.

Вряд ли он будет добавлен, поскольку удобнее всего будет создавать новые типы операций в Bitshares и внедрять их в последующих обновлениях протокола.

— Существуют ли реализации облегченных нод для сети Bitshares, аналогичных, например, нодам SPV для сети Bitcoin? Не в данный момент. Они также будут технически более сложными, чем Bitcoin SPV, поскольку они используют DPoS, а не PoW, что очень просто.

Вместо использования облегченного хоста вы можете использовать приложения, подключающиеся к доверенным хостам.

— Каков период формирования блока на платформе Bitshares? По состоянию на 2018 год это 3 секунды.

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

— Если вы зарегистрируете красивое имя аккаунта на платформе Bitshares, сможете ли вы продать его другому пользователю? Да, действительно, такая опция есть и она хорошо работает. Теги: #информационная безопасность #Криптовалюты #Криптография #блокчейн #токен #Криптовалюта #смарт-контракт #dex #мультиподпись #Bitshares #конфиденциальные транзакции

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.