Содержание статьи
Введение
— Начнем с самого коварного вопроса. На сайте сказано, что The Power — это масштабируемая блокчейн-среда для взаимодействия пользователей и организаций в реальном времени. Но если на сайт зайдет обычный пользователь или руководитель предприятия, он мало что поймет. Расскажите нам о реальных кейсах применения среды для взаимодействия пользователей и организаций, а еще лучше — на примере реальных клиентов.
— Текущая версия сайта предназначена для работы с инвесторами. Поэтому и информация там отражена для работы с ними. В ближайшее время мы добавим отдельный портал для разработчиков и партнеров.
Наш фокус — применение технологии в реальном бизнесе. В первую очередь сейчас мы начинаем работать со стартапами, использующими блокчейн в своих продуктах. Множество проектов провели ICO, но у них нет технологии, инфраструктуры, на которой они могли бы реализовать свои обещания.
На данном этапе мы проводим пилотные проекты. Один из примеров — сотрудничество с проектом Rucoin, кросс-платформенной программой лояльности на блокчейне. Rucoin фактически стал первым проектом, который начал активно использовать наш testnet. Партнеры проекта — такие известные компании, как Philips, Ozon, Ситилинк, Плеер.ру.
Другой интересный пилот — в сфере логистики. Произведем полностью автоматизированную поставку груза в партнерстве с компанией Atlas Delivery, занимающейся автоматизацией всего цикла поставки. На данный момент наша команда пишет смарт-контракт на Rust под эту задачу.
Недавно у нас появились еще два интересных партнера: CryptoWorkPlace (крипто компьютеры) и CPS Lab (бизнес-автоматизация). Благодаря такому сотрудничеству у нас есть возможность предлагать комбинированные решения клиентам из разных индустрий.
— В СМИ много чего наговорили о биткойне. Получилось так, что блокчейн в головах читателей ассоциируется исключительно с биткойном и другой криптой. В вашем проекте отсутствует майнинг. Почему?
— Майнинг применяется в протоколах, использующих Proof-of-Work. В нашем случае используется собственный энергоэффективный алгоритм консенсуса. Есть эмиссия токенов, которыми поощряются держатели узлов сети. Процесс называется Minting. Упрощенно — это такая форма эмиссии.
— А вот на главной странице в разделе Data processing есть пункт Fee mining — получение комиссии от процессинга данных. Так есть майнинг или нет?
— Как я сказал выше, есть поощрение держателей узлов токенами. Но это будет происходить ограниченное время — несколько лет. Основной заработок узлов в сети — это комиссия от проведенных транзакций. Data processing — это обработка данных с комиссионным вознаграждением. Таким образом, узлы получают доход из двух источников.
— Реально ли заработать на создании и поддержке собственной ноды? Если да, то сколько и какое оборудование необходимо?
— По экономической модели точка безубыточности лежит в районе одной транзакции в секунду, при стоимости аренды сервера до 100 долларов в месяц.
Для запуска собственной ноды специализированное оборудование не требуется. Достаточно иметь сервер, на который будет установлено ПО для ноды. Чтобы стать владельцем, нужно отправить токенов эквивалентно 5000 долларов на специальный адрес в системе — как обеспечительный депозит. Эти токены будут заморожены, а пользователь получит право владения узлом. После этого узел может быть подключен к какому-либо шарду и начинать проводить транзакции.
В данный момент мы используем серверы на базе ARM-процессоров. Примерно два ядра и 2 Гбайт RAM. Лучше 4 Гбайт RAM.
— Другими словами, цена входа — 5000 долларов плюс стоимость оборудования?
— Да, но на этапе private sale есть скидки, поэтому можно и дешевле. Если забрать депозит, то нода не будет работать. Но сделать это можно, чтобы у владельца была возможность выхода. Каких-либо особых условий нет.
— В комьюнити прочитал о планах запустить реферальную программу. Какие планируются условия?
— Условия опубликуем в ближайшие дни в нашем блоге на Medium. По реферальной программе можно получать вознаграждение за привлеченных пользователей. Два направления: вознаграждение за то, что реферал купил токены, и за участие рефералов в баунти-программе.
— На чем зарабатывает The Power?
— На комиссии от транзакций, на услугах интегратора при внедрении технологии в бизнес, на консалтинге, на партнерствах. В перспективе будут образовательные проекты.
— У вас есть API. Доступ к API бесплатный?
— Использование технологии полностью бесплатное, оплата только комиссий за проведенные транзакции. Условно Pay as you go.
— Уточните размер комиссии за проведенные транзакции.
— Для финансовых транзакций в публичной части сети фиксированная комиссия составляет примерно 0,01 доллара. Для нефинансовых транзакций может быть собственная экономика для каждого частного случая. В целом нефинансовые транзакции должны быть дешевле. Например, для IoT или M2M все может быть автоматизировано и будет большое количество транзакций. В этом случае благодаря объему стоимость может быть ниже. Также часть данных может находиться в приватном шарде, и там нет комиссии. Только якорение хешей блоков в публичную сеть. Стоимость обработки смарт-контрактов зависит от их сложности.
Киллер-фичи проекта
Автомасштабируемый шардинг
Шардинг — разделение базы данных на отдельные части (шарды), хранимые на разных серверах. Благодаря шардингу пропускная способность сети растет пропорционально количеству шардов. Шард как часть Power_blockchain — это мини-блокчейн с небольшим количеством узлов, работающий на основе алгоритма консенсуса Resonance.
Особенность автоматического шардинга, который разработал проект, в том, что шардирование происходит автоматически по мере возрастания нагрузки на сеть. При этом каждый шард является полноценным блокчейном.
Весной этого года проект провел тест: подняли сеть из 52 шардов, ограничили каждый шард 2000–3000 tps (транзакций в секунду). В результате сеть выдержала пиковую нагрузку в 102 000 tps.
Синхронный протокол Resonance
За основу был взят асинхронный алгоритм консенсуса PBFT (Practical Byzantine Fault Tolerance), предложенный в 1999 году. Проект разработал синхронный консенсус, благодаря которому транзакции в шардах происходят мгновенно, а время регистрации транзакции составляет менее секунды. Для сравнения: в сети Ethereum регистрация транзакции в среднем занимает 15 секунд, а в Bitcoin — 10 минут. В реальной жизни необходимо еще ждать закрытия от 3 до 5 блоков, что составляет около 30–50 минут для биткойна и 45–75 секунд для эфира.
В Power_blockchain благодаря синхронному протоколу пользователю нет необходимости ждать дополнительное время.
Трехуровневая архитектура:
- Уровень шардов (Shards layer).
- Уровень валидаторов (Validators layer).
- Управляющий уровень (Management layer).
Все ноды присутствуют одновременно на трех уровнях. Благодаря такой архитектуре в сети The Power все шарды (как публичные, так и приватные) находятся в едином адресном пространстве. При этом шарды кастомизируются под запросы бизнеса — время закрытия блока, количество узлов в шарде, экономика шарда, количество валидаторов, виртуальных машин.
Техническая часть
— О финансах, пожалуй, хватит. У нас все-таки технический журнал. Какое железо лежит в основе? Используется свое оборудование или арендуется?
— Как я уже говорил, в данный момент тестнет развернут на ARM-серверах, где оттачивается работа сети. Стремимся максимально снизить на старте требования к железу. Конечно, для обработки большого количества транзакций можно использовать и серверы на Xeon, производительность на них будет ощутимо выше. В целом нужен Linux, Vagrant, правильные настройки окружения и стандартный сервер. Можно использовать и бытовое железо, так как сам протокол легковесный. Главное, чтобы было хорошее подключение к сети.
— Благодаря горизонтальному шардированию ваша сеть выдерживает пятикратную пиковую нагрузку. А что принято за единицу?
— Суть следующая. Если на какой-то шард увеличивается нагрузка и держится продолжительное время, то система может принять решение о том, что пора делиться. И в этот момент шард делится на два. Мы предполагаем, что делить лучше сразу несколько шардов, например 3 на 5. Поэтому получается простая математика. Чем больше в сети шардов, тем выше ее пропускная способность. С добавлением каждого нового шарда сеть кратно ее производительности увеличивает общую ширину канала для обработки транзакций.
— Как обеспечивается безопасность персональных данных? В FAQ об этом одно предложение. Хотелось бы узнать более подробно. Можно ли доверять сети персональные данные и почему?
— В распределенных реестрах есть проблема приватности. Мы решаем ее двумя способами.
-
Приватные шарды. Компании могут хранить коммерческую тайну или чувствительную информацию в собственной сети и на собственных серверах. Но поскольку во всей сети есть единое адресное пространство (условно можно провести аналогии с протоколом TCP/IP — зная IP, можно отправить на него информацию), даже из приватной части сети можно работать с публичной. А хеши приватных блоков будут якориться в публичной части, чтобы можно было доверять неизменности данных в приватной части.
-
KYC proxy. Если пользователь прошел верификацию через KYC-провайдера (интегрирован в кошелек, на днях выйдет новая версия), то он может использовать услугу KYC proxy, которая позволяет маскировать действия в публичной сети. Пользователю выдается токен временного действия на какой-то период (допустим, сессию). Пользователь с токеном идет на KYC proxy и дает определенное задание, что нужно сделать «на той стороне» — в сервисе, оставляя в блокчейне только хеш этого задания.
— Что такое Smart Key токен и какова его роль в сети?
— Подробное описание токена SK и его экономики можно найти в нашей Токеномике. Основная функция — это топливо сети, в которой идет расчет с нодами при оплате транзакций. В некотором роде если сравнить с Ethereum, то это ETH + GAS вместе.
Тест
В ночь с 15 на 16 сентября команда The Power провела тест на 100 тысячах транзакций в секунду, теперь на мощностях Azure, любезно предоставленных компанией Microsoft. В лучших традициях современности на эту тему был записан видеоролик.
Основной целью теста было проверить стабильность кода при нагрузке более 100 тысяч транзакций в секунду. Microsoft Azure был выбран по трем причинам: широкая география выбора серверов, обширный набор инструментов и стабильная работа серверов.
Некоторое время ушло на разворачивание окружения. Изначально мы думали поднять сеть на 150 серверах, однако оказалось, что генератор транзакций требует больших мощностей, поэтому было задействовано 210 серверов.
Практика: как сделать свой тестнет
На этом ознакомительная часть статьи закончена, и мы переходим к реальному кейсу — настройке твоего локального Power_testnet. Я расскажу не только как построить свой тестнет, но и с какими подводными камнями тебе предстоит столкнуться при этом.
Прежде чем приступить, напомню о репозитории на GitHub — код открыт, и при желании ты можешь изучить его, как твоей душе угодно, никто ничего не прячет. Код предоставляется только для некоммерческого применения.
Для использования локального тестнета не нужно получать и использовать SK-токены, то есть попробовать технологию можно бесплатно. Просто следуешь руководству и получаешь результат.
Для работы тестнета потребуется виртуальная машина. Команда The Power тестировала работу тестнета в VirtualBox (Windows, Linux, macOS) и Parallels (macOS). Дистр Linux можешь выбрать на свое усмотрение, в статье мы будем использовать Ubuntu 18.04. В принципе, все должно работать в любой операционке, которую поддерживает Vagrant.
После разворачивания тестнета тебе станет доступным API, подробно описанный по ссылке.
На выходе будет получено три шарда с тремя нодами внутри, то есть всего будет девять нод, взаимодействующих между собой.
Специально для маководов
Если у тебя macOS, для установки Vagrant тебе нужен пакет Homebrew, установить который можно командой
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
После этого установим Vagrant:
brew install caskroom/cask/vagrant
Если у тебя PVM, установи Vagrant-плагин:
vagrant plugin install vagrant-parallels
При использовании VirtualBox необходимо изменить содержимое переменной окружения PATH:
export PATH=/Applications/VirtualBox.app/Contents/MacOS:$PATH
Подготовка в Linux
Тут все просто. Нужно установить пакеты vagrant и virtualbox. Но пока установи только virtualbox — дальше поймешь почему:
sudo apt install virtualbox
После этого нужно (и в macOS, и в Linux) установить плагин hostmanager, см. следующий раздел.
Далее все действия я выполнял от рута (после ввода команды sudo bash). Знаю, что сейчас меня закидают помидорами, но не люблю, когда что-то меня ограничивает при настройке тестовой системы. 🙂
Плагин hostmanager
Для изменения файла /etc/hosts разработчики рекомендуют использовать плагин hostmanager, установить который можно так:
vagrant plugin install vagrant-hostmanager
Вот только при попытке установки этого плагина в Ubuntu 18.04 я столкнулся со следующей ошибкой:
Пришлось сделать небольшой downgrade vagrant. Я удалил пакет, установленный предварительно из репозитория Ubuntu, и установил следующий:
wget -c https://releases.hashicorp.com/vagrant/2.0.3/vagrant_2.0.3_x86_64.deb
sudo dpkg -i vagrant_2.0.3_x86_64.deb
INFO
Отдельная благодарность сообществу GitHub за уже готовое решение проблемы с установкой плагина hostmanager — по ссылке описывается аналогичная проблема с плагином vbguest, но суть остается той же.
Установка testnet
Когда все приготовления закончены, создадим каталог для testnet:
mkdir thepower
cd thepower
Получим и распакуем архив, содержащий все необходимое — файл Vagrant, скрипты для управления testnet, конфигурационные файлы:
wget http://dist.thepower.io/blockchain.tar.bz2
tar xf blockchain.tar.bz2
Если это первый запуск Vagrant (скорее всего, так и есть), его нужно инициализировать:
vagrant init
Впрочем, Vagrant ничего не позволит сделать без предварительной инициализации, и рано или поздно тебе все равно придется ввести эту команду.
Сконфигурируем виртуальную машину:
vagrant up
Самый первый запуск у меня провалился, так как в конфиге было требование использовать плагин hostmanager, который у меня не установился, и я попытался продолжить без него. Но, как оказалось, у меня ничего не вышло, что и подвигло написать предыдущий раздел. На следующем скрине — нормальный запуск виртуалки (уже после установки hostmanager).
Запуск — процесс долгий. Возможно, потому, что у меня все работало по принципу матрешки (Ubuntu был запущен в VMware, а внутри него работала виртуалка Vagrant), хоть процессор и неслабый, тем не менее пришлось ждать несколько минут.
О том, как сделать матрешку
Если захочешь повторить мой подвиг, то есть запустить тестнет внутри виртуальной машины VMware, в настройках виртуалки включи параметр Virtualize Intel VT-x/EPT or AMD-V/RVI, иначе Vagrant при запуске ВМ будет ругаться на VT-X.
После первого запуска виртуалку нужно перезапустить — но это если все делать правильно:
vagrant halt
vagrant up
Признаюсь, мне не хотелось ждать повторного запуска, и я сразу залогинился по SSH.
Для входа в виртуальную машину нужно ввести команду
vagrant ssh
Если спросят пароль, используй vagrant (у меня почему-то пароль спросить забыли, видимо, знали, что «свой»). Теперь нужно проделать то же самое, но в виртуальной машине:
mkdir thepower
cd thepower
wget http://dist.thepower.io/blockchain.tar.bz2
tar xf blockchain.tar.bz2
В этой точке у тебя есть скрипт testnet2.sh и конфиги самого тестнета в текущем каталоге (внутри виртуалки — не забываем, где сейчас находимся).
Также в /etc/hosts виртуальной машины уже добавлен домен pwr.local. Особо он не нужен, поскольку можно обращаться напрямую к 127.0.0.1, но, если ты захочешь сделать красивые URL, тут тебе и пригодится локальный домен.
Загрузи последнюю версию софта для тестнета:
./testnet2.sh update
Запусти testnet:
./testnet2.sh start
Теперь надо немного подождать — пяти секунд вполне достаточно. Проверим, все ли запустилось: для этого нужно использовать netstat, чтобы убедиться, что все необходимые порты открыты. Ты должен увидеть девять разных портов — для каждой из нод:
netstat -an | grep 498
А вот пример обращения к API ноды:
curl http://127.0.0.1:49851/api/node/status | jq .
Каждая нода тестнета слушает собственный порт и предоставляет собственный API. Поскольку ноды запущены на localhost, отличать ты их будешь по номерам портов, начинающихся с 498*
. При желании можешь использовать для обращения к нодам браузер, а не curl, если тебе так удобнее.
После того как ноды запущены, ты можешь использовать API, приведенный по ссылке.
Пришлось немного потрудиться, но теперь у нас есть собственный тестнет для всякого рода экспериментов. Если возникнут вопросы, ты всегда сможешь задать их в комьюнити.