В апреле этого года, после нескольких лет успешного развития платформы 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.
Тип сети | 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 можно найти у нас в документации).
UPD: С обновлением InfluxDB стандартный язык запросов поменялся с InfluxQL на FLUX. Он требует дополнительных настроек, поэтому в рамках данного поста мы будем принудительно использовать более старую версию, поддерживающую InfluxQL. Для этого в docker-compose нужно будет поменятьimage: influxdb
на image: influxdb:1.7.11
.
Запустите свою блокчейн-платформу и войдите в клиентское приложение 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, напишите об этом в комментариях.