В апреле этого года, после нескольких лет успешного развития платформы Waves Enterprise и ее использования в различных проектах мы решили выпустить её open-source версию, чтобы расширить охват потенциальных пользователей платформы. Мы сохранили в ней почти всю функциональность и классные фичи: это контейнеризированные смарт-контракты на любом языке, поддержка трех разных консенсусов, возможность обмена конфиденциальными данными и не только. Убрали только поддержку ГОСТ-криптографии, TLS и PKI.

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

Зачем это вообще нужно

Платформа Waves Enterprise начала развиваться в 2018, и за это время на ее основе разработали немало проектов для различных отраслей.

  • Цифровая платформа распределенного реестра Федеральной налоговой службы России. Изначально создавалась для выдачи кредитов малому и среднему и бизнесу в рамках государственной поддержки в условиях пандемии. Сейчас на базе этой платформы создаются и эксплуатируются новые сервисы.

  • Распределенная система управления денежными средствами и B2B-сервис для работы с самозанятыми в Альфа-Банке.

  • Федеральная платформа дистанционного электронного голосования. Эта платформа применяется в регионах России; кстати, ее на Хабре анализировали независимые наблюдатели.

  • Сервис блокчейн-голосований WE.Vote.

  • NFT-маркетплейс Raritet.io.

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

Подробней обо всех проектах можно почитать у нас на сайте. Они были развернуты, в основном, в приватных блокчейн-сетях, но использовали те же наработки, что легли в основу open-source версии. Поэтому ее легко можно применять и для каких-то собственных проектов — технологии обкатаны уже не раз. Далее мы сравним Waves Enterprise с другими open-source блокчейнами и перейдем к технической части статьи.

Waves Enterprise и другие блокчейн-платформы

Для начала мы свели в одну таблицу значимые характеристики известных блокчейнов, чтобы сравнить их с Waves Enterprise. Все они поддерживают open source. Хотя кое-где есть пробелы, большую часть информации найти удалось и общую картину оценить можно. Пункты, где информация отсутствует, отмечены как N/A.

Waves Enterprise

Waves

Ethereum

Hyperledger Fabric

Solana

Hedera

NEAR

Тип сети

Permissioned

Public

Public

Permissioned

Public

Permissioned

Public

Пропускная способность, TPS

2000

150

15

3000

50000

10000

1000000

Консенсусы

LPoS, PoA, CFT

PoS

PoS

PoW, PoS, PBFT, Raft

PoH

PoS, HCS, Hashgraph DCA

PoS

Язык смарт-контрактов

Любой

RIDE

Solidity

Go, JS

Rust, C, C++

Solidity

Rust, AssemblyScript

SDK

Java, Kotlin, JS

Java, Kotlin

TS, JS, Go, Python, PHP, Swift

Node.js, Java, Go

Rust, JS, C#, Swift, Java, Python, Go

Java, JS, Go, C#, PHP

Rust, JS, AssemblyScript

Экосистема (мосты, оракулы, интеграция)

Waves, Oracle Contract

DeFi, Dex, GameFi

Lending, DeFi, Dex, Marketplace, Wallet, GameFi

Lending, Dex, DeFi,  Marketplace, Wallet

Lending, DeFi, Dex, Marketplace, Wallet (streaming, social, Web3.0, browser)

N/A

Wallet, P2E, DAO, DeFi, Education, Dex, Marketplace, Web3.0, Dev platform, IDO

Интерфейсы

REST, gRPC

REST, gRPC

JSON-RPC

CLI, REST, Node.js

JSON-RPC

REST, gRPC

N/A

Минимальные системные требования

2 vCPU, 4 ГБ RAM, 50 ГБ SSD

2 vCPU, 4 ГБ RAM, 50 ГБ SSD

Intel NUC 7th gen или выше, 4–8 ГБ RAM, 2 ТБ SSD

4 ГБ RAM, Ubuntu Linux 14.04/16.04 LTS  (64-bit) или Mac OS 10.12

24-thread 2.8 GHz CPU, 128 ГБ RAM, 500 ГБ PCIe Gen3 x4 NVMe SSD

48-thread Intel Xeon Silver CPU, 256 ГБ DDR4 RAM, 5 ТБ NVMe SSD

16-thread Intel i7/Xeon, 8 ГБ DDR4, 500 ГБ SSD

Многие другие проекты уже обросли большим количеством надстроек и связанных сервисов. Опенсорс Waves Enterprise только недавно начал свой путь: у платформы всё впереди. Здесь также стоит пояснить, почему в таблице так сильно различаются показатели пропускной способности.

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

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

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

Waves Enterprise: 

  • поддержка смарт-контрактов на любом языке программирования;

  • поддержка PoA консенсуса, который является одним из самый стабильных, предсказуемых и производительных;

  • сети Waves Enterprise уже 3 года, она работает стабильно, и опенсорс-версия основана на тех же технологиях;

  • низкий порог вхождения в майнинг как по требованиям к оборудованию, так и по балансу токенов (на данный момент около $2000);

  • защита permissioned-сети в виде авторизованного доступа и защищенного реестра докер-контрактов.

Waves: 

  • низкий порог вхождения в майнинг по требованиям к оборудованию;

  • богатая экосистема.

Ethereum: 

  • богатая экосистема;

  • высокая стоимость транзакций.

Hyperledger Fabric: 

  • отсутствие публичной сети;

  • техническая сложность развертывания Hyperledger Fabric;

  • длительность и сложность внедрения.

Solana:

  • богатая экосистема;

  • высокая пропускная способность;

  • высокий порог входа для ноды с точки зрения оборудования;

  • на текущем этапе развития нередко встречаются просадки производительности вплоть до остановки сети.

Hedera:

  • собственный консенсус;

  • высокая пропускная способность;

  • проблемы со стабильностью публичной сети.

NEAR: 

  • богатая экосистема;

  • высокая пропускная способность;

  • rainbow bridge для связи с Ethereum;

  • требуется иметь баланс токенов на сумму около $1000000, чтобы стать валидатором сети.

Общие отличия понятны, теперь перейдем именно к Waves Enterprise.

Как развернуть open-source версию платформы Waves Enterprise

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

  • отправка транзакций;

  • прием данных из блокчейна;

  • установка и вызов смарт-контрактов;

  • передача конфиденциальных данных между нодами;

  • тестирование мониторинга ноды при помощи InfluxDB и Grafana.

Системные требования:

  • CentOS 6/7 (x64); Debian 8/9/10 (x64); Red Hat Enterprise Linux 6/7 (x86); Ubuntu 18.04 (x64) (для серверов). Ubuntu 18.04+ (x64); macOS Sierra и выше (для рабочих станций).

  • Docker Engine и Docker Compose

  • 2+ vCPU, 4 ГБ RAM, 50 ГБ SSD

Взаимодействовать с платформой можно как через клиентское приложение, так и через интерфейсы gRPC и REST API. Для удобства работы через REST API в дистрибутив встроен Swagger, который позволяет формировать и отправлять запросы прямо в браузере. Для выполнения команд на ОС Linux могут потребоваться права администратора.

Создайте рабочую директорию и поместите в нее файл docker-compose.yml. Этот файл вы можете скачать из официального репозитория Waves Enterprise, выбрав последний релиз платформы, либо в терминале при помощи утилиты wget. Не забудьте далее подставить номер последней доступной версии из репозитория:

wget https://github.com/waves-enterprise/WE-releases/releases/download/v1.8.4/docker-compose.yml

Откройте терминал и перейдите в директорию с файлом docker-compose.yml. Запустите Docker-контейнер для развертывания платформы, подставив используемую версию платформы:

docker run --rm -ti -v $(pwd):/config-manager/output wavesenterprise/config-manager:v1.8.4

После развертывания вы получите сообщение:

INFO [launcher] WE network environment is ready!

Информация о всех нодах сети доступна в файле ./credentials.txt и выглядит примерно так:

node-0
blockchain address: 3Nzi7jJYn1ek6mMvtKbPhehxMQarAz9YQvF
public key: 7cLSA5AnvZgiL8CnoffwxXPkpQhvviJC9eywBKSUsi58
keystore password: OEtrVSL9gzjO87jYx-gIoQ
keypair password: JInWk1kauuZDHGXFJ-rNXQ
API key: we

node-1
blockchain address: 3Nxz6BYyk6CYrqH4Zudu5UYoHU6w7NXbZMs
public key: VBkFFQmaHzv3YMiWLhh4qsCn4prUvteWsjgiiHEpWEp
keystore password: FsUp3xiX_NF-bQ9gw6t0sA
keypair password: Qf2rBgBT9pnozLPOkO1yYw
API key: we

node-2
blockchain address: 3NtT9onn8VH1DsbioPVBuhU4pnuCtBtbsTr
public key: 8YkDPLsek5VF5bNY9g2dxAthd9AMmmRyvMPTv1H9iEpZ
keystore password: T77fAroHavbWCS6Uir2oFg
keypair password: bELB4EU1GDd5rS-RId_6pA
API key: we

Теперь можно запустить готовую конфигурацию через команду

docker-compose up -d

При успешном запуске нод и сервисов вы получите сообщение:

Creating network "platf_we-network" with driver "bridge"
Creating node-2       ... done
Creating postgres     ... done
Creating node-0       ... done
Creating node-1       ... done
Creating auth-service ... done
Creating crawler      ... done
Creating data-service ... done
Creating frontend     ... done
Creating nginx-proxy  ... done

После запуска контейнеров клиент платформы будет доступен в браузере локально по адресу 127.0.0.1 или localhost. Интерфейс REST API ноды располагается по адресу 127.0.0.1/node-0 или localhost/node-0.

По умолчанию для локального nginx-сервера платформы предоставляется порт 80:80. Если у вас этот порт занят другим приложением, укажите доступный порт в параметре ports секции nginx-proxy в файле docker-compose.yml. Например, чтобы клиент и REST API стали доступны по адресу 127.0.0.1:81 или localhost:81, нужно указать

nginx-proxy:
image: nginx:latest
  hostname: nginx-proxy
  container_name: nginx-proxy
  ports:
    - "81:80"

Остановить запущенные ноды можно командой:

docker-compose down

Настройка мониторинга ноды

Для нод блокчейн-сети можно подключить мониторинг через InfluxDB и Grafana. Предварительно  не забудьте остановить запущенные контейнеры через предыдущую команду.

Теперь важно определить, планируете ли вы использовать Docker Compose. Если да, то пропускайте этот шаг. Если нет, то вам нужно отдельно установить Docker-образ Grafana:

docker run -d --name=grafana -p 3000:3000 grafana/grafana

И Docker-образ InfluxDB:

docker run -d --name influxdb -p 8086:8086 -e
INFLUXDB_DB=sandbox_influxdb -e
INFLUXDB_ADMIN_USER=sandbox_influxdb_admin -e INFLUXDB_ADMIN_PASSWORD=sandbox_influxdb_pass quay.io/influxdb/influxdb:v2.0.3

Перейдите в директорию ./configs/nodes/node-0 и с правами администратора откройте файл конфигурации ноды node.conf. В конце файла добавьте параметры сервисов мониторинга:

# Performance metrics
kamon {
  # Set to "yes", if you want to report metrics
  enable = yes
  # An interval within metrics are aggregated. After it, them will be sent to the server
  metric.tick-interval = 1 second
  # Reporter settings
  influxdb {
    hostname = "localhost"
    port = 8086
    database = "sandbox_influxdb"
    time-units = "ms"
    authentication {
      user = "sandbox_influxdb_admin"
      password = "sandbox_influxdb_pass"
    }
    environment.host = "node-0"
  }
}

# Non-aggregated data (information about blocks, transactions, ...)
metrics {
  enable = yes
  node-id = "node-0"
  influx-db {
    uri = "http://localhost:8086"
    db = "sandbox_influxdb"
    username = "sandbox_influxdb_admin"
    password = "sandbox_influxdb_pass"
    batch-actions = 100
    batch-flash-duration = 1s
  }
}

Если вы работаете с Docker Compose, откройте файл docker-compose.yml и добавьте параметры развертывания сервисов мониторинга (полный листинг docker-compose.yml можно найти у нас в документации).

Запустите свою блокчейн-платформу и войдите в клиентское приложение Grafana. Для этого запустите контейнеры платформы при помощи команды docker-compose up -d и дождитесь завершения развертывания. Затем откройте клиент Grafana, доступный на порте 3000:

http://127.0.0.1:3000/login

Для аутентификации в клиенте используйте данные, установленные в подкатегории environment раздела services: grafana файла docker-compose.yml:

services:
  grafana:
    image: grafana/grafana:latest
    hostname: grafana
    container_name: grafana
    environment:
      GF_SECURITY_ADMIN_USER: 'admin'
      GF_SECURITY_ADMIN_PASSWORD: 'pass'

Подключите базу данных платформы к Grafana. Для этого нажмите на вкладку Configuration (Конфигурация) и перейдите в категорию Data Sources (Источники данных). Добавьте новый источник данных, нажав на кнопку Add Data Source, и из предложенного списка выберите InfluxDB.

Теперь настройте базу данных, используемую платформой.

  • Секция HTTP, поле URL:http://influxdb:8086

  • Секция InfluxDB Details: введите данные, установленные в подкатегории environment раздела services: influxdb: файла docker-compose.yml:

influxdb:
    image: influxdb
    hostname: influxdb
    container_name: influxdb
    environment:
      - INFLUXDB_DB=influxdb // database field
      - INFLUXDB_ADMIN_USER=admin //  user field
      - INFLUXDB_ADMIN_PASSWORD=pass // password field

Нажмите Save & Test. При успешном подключении базы данных появится сообщение «Data source is working».

Осталось настроить визуализацию данных в Grafana. Для этого нажмите на + (Добавить) на левой панели клиента и перейдите на вкладку Import (Импортировать). В окно Import via panel json (Импортировать через json панели) вставьте файл json, содержащий параметры визуализации данных. Нажмите Load (Загрузить). В окне Options выберите желаемое имя панели, либо оставьте название sandbox, установленное по умолчанию. Нажмите Import (Импортировать).

Теперь вы сможете просматривать показатели вашей демо-платформы на созданной панели. Перейдите во вкладку Dashboard/Manage и выберите панель sandbox, чтобы открыть её.

Различия open-source и платной версии платформы Waves Enterprise

Помимо open-source версии, существует и лицензируемая версия платформы, которая используется в ряде проектов. Отличается платная версия важными для корпоративного использования дополнительными функциями — поддержка криптографии в соответствии с ГОСТ, TLS и PKI. Все остальные фичи есть и там, и там: контейнеризированные смарт-контракты, обмен конфиденциальными данными, поддержка трех вариантов консенсуса (LPoS, PoA, CFT), анкоринг, а также криптография Waves (Curve25519, Blake2b256 и Keccak256) по умолчанию.

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

Комментарии (0)