В чем особенности фреймворка exonum от bitfury group
Exonum — это блокчейн фреймворк, который позволяет создавать безопасные приватные блокчейн приложения. Как любое программное обеспечение, Exonum имеет свой собственный набор особенностей и возможностей. Данная страница описывает случаи, в которых Exonum может быть полезен, и указывает основные различия между Exonum и другими решениями для распределенных реестров.
Exonum в двух словах
Фреймворк Exonum создавался специально для разработки приватных блокчейнов. Это система, в которой создавать новые блоки в блокчейне может только предварительно определенная группа узлов. В еe основе лежит желание специалистов Bitfury создать инструмент, который бы позволил относительно просто запустить систему, схожую по свойствам с публичными блокчейнами (надежность, неизменяемость данных, аудитируемость и т. д.), но при этом был бы более удобным в поддержании и обслуживании.
В отличие от Ethereum, который представляет собой виртуальную децентрализованную машину и выполняется одновременно на множестве узлов по всему миру, блокчейн, постороенный на Exonum, работает исключительно на вычислительных мощностях узлов-валидаторов, которые заинтересованы в работе этой системы, и будут обеспечивать ее надежное функционирование.
Развернутый на заранее определенных узлах приватный блокчейн Exonum как минимум иcключает возможность его внезапного хард-форка, засорения пула транзакций и других проблем, характерных для открытых блокчейнов, а операторы узлов следят за его эффективной работой: обновляют правила обработки транзакций и т. п.
Помимо этого, выполнение смарт-контрактов на Ethereum сильно зависит от колебания курса криптовалюты — эфира, что делает его непредсказуемым для использования, например, в государственных структурах, которые не могут оплачивать выполнение транзакций валютой, находящейся в нерегулируемой «серой зоне». В Exonum подобные зависимости отсутствуют в принципе.
И наконец Exonum-блокчейн работает существенно быстрее, чем публичные блокчейны (Bitcoin, Ethereum и др.), а именно обрабатывает несколько тысяч транзакций в секунду против нескольких десятков, обрабатываемых последними. Выбор стратегии обусловлен общей тенденцией к созданию большого количества независимых блокчейнов, которые бы взаимодействовали между собой посредством технологий сайдчейнов, привязки к публичным блокчейнам (анкоринг) и т. д.
Главными компонентами Exonum являются: византийский консенсус, легкие клиенты, привязка к биткойну и сервисы.
В системе используется особый алгоритм византийского консенсуса для синхронизации данных среди узлов. Он гарантирует целостность данных и корректное выполнение транзакций даже в случае выхода из строя вплоть до 1/3 узлов из-за неисправности или намеренной зловредной деятельности, при этом не требуя майнинга блоков.
Говоря о преимуществах Exonum над существующими аналогами можно отметить развитую модель данных (storage), которая представляет собой индексы, содержащие зависимости друг от друга (по сути таблицы) — они позволяют реализовать эффективную структуру данных, направленную на решение частных задач. Клиенты такого блокчейна могут получать криптографические доказательства корректности загружаемых данных (деревья Меркла), которые проверяются локально на машине клиента, и не могут быть подделаны даже оператором узла Exonum.
Легкие клиенты — это узлы сети, которые хранят у себя только небольшую часть блокчейна, представляющую интерес. Они позволяют взаимодействовать с блокчейном с помощью мобильных приложений или веб-браузеров. Клиенты «общаются» с одним и более сервисами на полнофункциональном узле через API. Работа таких тонких клиентов специфична для каждого отдельного сервиса и реализована настолько сложно, насколько того требует конкретный сервис.
Суть работы тонких клиентов Exonum и построения доказательств сводится к тому, что конечный пользователь, который осуществил привязку к биткойн-блокчейну, может не доверять оператору приватного блокчейна. Но может быть уверен, что данные, которые у него отображаются, получены в соответствии с правилами, заложенными в этот конкретный приватный блокчейн.
Защищенность легких клиентов в Exonum, сравнимую с той, которую предоставляет permissionless-блокчейн, обеспечивает уже упомянутая выше привязка к биткойну, так называемый анкоринг. Сервис периодически высылает хеши блоков в общедоступный биткойн-блокчейн в формате транзакций-свидетельств. В этом случае, даже если Exonum-блокчейн прекратит работать, данные все равно можно будет верифицировать. Более того, для атаки на такую сеть злоумышленникам приходится преодолевать защитные механизмы обоих блокчейнов, что требует колоссальных вычислительных мощностей.
И, наконец, сервисы — это основа фреймворка Exonum. Они напоминают смарт-контракты на других платформах и содержат бизнес-логику блокчейн-приложений. Но, в отличие от умных контрактов, сервисы в Exonum не «заперты» в виртуальной машине и не контейнеризованы.
Это делает их более эффективными и гибкими. Однако такой подход требует большей осторожности при программировании (изоляция сервисов отмечена на дорожной карте Exonum). Сервисы определяют правила обработки транзакций, а также открывают доступ к данным внешним клиентам.
Ознакомившись с основными компонентами, мы можем переходить к разбору примера.
Криптография
Блокчейн широко использует криптографию там, где традиционные системы полагаются на доверие и неформальные отношения между участниками системы. Наиболее значимым примером этого является аутентификация транзакций. Блокчейны используют криптосистему с публичным ключом для обеспечения подлинности и целостности транзакций (вместо, например, аутентификации на основе пароля). Это соответствует передовой практике в отраслях, где безопасность критически важна, а также гарантирует, что журнал транзакций полностью поддается проверке.
Безопасность
Несколько резонансных сбоев в работе блокчейнов показали, что обработка транзакций в блокчейне может быть нарушена вредоносными программами и другими способами, которые трудно обнаружить. Exonum использует язык программирования Rust, который гарантирует наивысшую степень безопасности доступа к памяти.
Изменяемость, ссылки и заимствования в Rust помогают применить ограничения доступа. Например, если переменная передается внешнему компоненту в неизменяемой ссылке, она не может быть изменена независимо от того, что делает этот компонент. Строгая статическая типизация и отсутствие нулевых указателей в Rust помогают предотвратить неопределенное поведение и нарушения доступа к памяти.
Основные компоненты
Гибкость
Одна из причин создания приватных блокчейнов — большая степень их гибкости. Exonum обеспечивает гибкость, предоставляя богатую среду для выполнения транзакций.
Временные метки документов, криптовалюты и реестры прав собственности — это три совершенно разные области, в которых можно эффективно использовать фреймворк Exonum.
Надежный аудиторский след
Основным компонентом блокчейна является журнал транзакций, устойчивый к несанкционированному доступу. (Устойчивость к несанкционированному доступу означает, что записи журнала не могут быть изменены задним числом.) Блокчейны используют те же методы, чтобы гарантировать неизменность журнала, как и доказательные записи, используемые органами сертификации и другими приложениями, в которых акцент делается на безопасность.
Надежный аудиторский след необходим во многих регулируемых отраслях (например, в финансовых и публичных реестрах), но он также может быть полезен и в других областях. Неизменность журнала транзакций является доказательством подлинности любой части данных в блокчейне, что позволяет надежно отслеживать его историю.
Контроль
Exonum ориентирован на приватные блокчейны. Это означает, что только ограниченный список узлов может записывать транзакции в блокчейн. Такой подход оправдан, если есть определенный администратор системы (или несколько таких администраторов), который должен сохранять некоторый контроль над сетью (например, определять и обновлять правила обработки транзакций). По сравнению с публичными блокчейнами (такими как Биткоин), приложения на Exonum являются более локальными, но в то же время обеспечивают большую гибкость и более управляемую среду.
Контролируемость Exonum не означает, что контроль поддерживающих систему участников неограничен; существуют четко определенные правила обработки транзакций, которые даже все участники сети вместе не смогут изменить. Exonum позволяет легко продемонстрировать соответствие правилам обработки транзакций третьим сторонам (будь то регуляторы, аудиторы или пользователи платформы).
В наиболее оправданных блокчейн настройках есть требование, чтобы все транзакции были подписаны цифровой подписью. Если участники, поддерживающие блокчейн, не имеют контроля над приватными ключами в системе, они не могут подделывать транзакции от имени владельцев ключей.
Почему блокчейн
С точки зрения управления данными, блокчейны предоставляют возможности транзакционной системы. Блокчейн обрабатывает транзакции, которые очень похожи на транзакции в обычных системах управления базами данных и соответственно изменяет сохраненные значения.
По сравнению с обычными решениями транзакционных систем, использование блокчейна дает несколько преимуществ.
Византийский консенсус
Exonum использует собственный алгоритм византийского консенсуса для синхронизации данных между узлами сети. Сеть Exonum будет продолжать работать, даже если до 1/3 валидаторов взломаны, скомпрометированы или отключены. Следовательно, нет единой точки отказа в сети, весь процесс обработки транзакций полностью децентрализован.
Легкие клиенты
Exonum поддерживает легкие клиенты – сетевые узлы, которые реплицируют только небольшую часть блокчейна, которая интересует пользователя. Легкие клиенты позволяют обеспечить доступ к блокчейну через веб- или мобильные приложения. Легкий клиент связывается с одним или несколькими сервисами на полном узле с помощью публичного API.
В руководстве по созданию криптовалюты клиент представляет владельца валюты. Его интересуют только транзакции, связанные с этим владельцем.
Exonum уделяет большое внимание безопасности легких клиентов. Легкие клиенты не безоговорочно доверяют ответам от полных узлов, а проверяют их, используя формально закодированные правила. Проверка использует криптографические методы, такие как деревья Меркла и привязанные временные метки, чтобы гарантировать, что полные узлы не могут вернуть клиенту неверную информацию незаметно, даже если существует сговор между администраторами блокчейна.
Что нового и изменения
Релиз Exonum 0.2 содержит внутренние системные доработки, упрощающие работу с фреймворком, и фиксы, которые «закрывают» самые очевидные недостатки.
Добавлена поддержка RocksDB
RocksDB представляет собой key — value базу данных с более широкими возможностями по сравнению с LevelDB, которая использовалась в Exonum изначально.
Мы перешли на RocksDB, потому что она имеет богатый коробочный функционал и хорошо поддерживается разработчиками. Отметим, что сейчас Exonum работает с обеими базами данных, но дальнейшая работа нацелена на внедрение нового функционала с окончательным переходом на RocksDB. Вот некоторые из планируемых дополнений:
1. Использование семейств столбцов (column families). Они позволят логично разделить базу данных на части (по сути, таблицы), упорядочить ее вид, обеспечить надежное хранение и управление данными. Кроме того, изменения к такой базе могут применяться атомарно, то есть прописываться одновременно в несколько таблиц.
Стоит отметить, что настройки базы позволяют в любой момент установить удобный вид параллелизма— пессимистический (строки в источнике данных блокируются, запрещая пользователям модифицировать данные, когда с ними работает другой пользователь) или оптимистический (блокировка не производится, однако приложение определяет, изменялась ли строка).
3. Резервное копирование данных (см. Backups и Checkpoints) — возможность создания снимка состояния базы данных. При необходимости такие снимки могут быть использованы как для чтения, так и для чтения и записи.
Резервное копирование может выполняться полностью, а может только для той части данных, которая была изменена после последнего бэкапа. Такая гибкая функциональность значительно облегчает запуск нового узла в системе или обновление данных прежнего узла после «падения».
4. Сбор статистики — административный функционал, который представляет собой получение динамических характеристик базы данных (объём, скорость работы и др.) в виде истории, и может использоваться для более эффективной настройки, управления и мониторинга системы. В частности, для выбора оптимальных настроек узлов.
Добавлена поддержка динамических таймаутов
До текущего релиза таймауты необходимо было фиксировать в конфигурации, и они оставались неизменными при любом состоянии системы. Это приводило к тому, что блоки транзакций принимались в блокчейн с постоянной частотой, и при нулевой загрузке системы происходило «замусоривание» блокчейна пустыми блоками.
Например, при установлении таймаута длительностью в одну секунду и нулевой загрузке системы размер одного блока для системы из четырех узлов-валидаторов в среднем составлял 472 байта. За сутки работы «вхолостую» система расходовала 41 мегабайт дискового пространства.
Жесткая фиксация таймаута приводила к тому, что при слишком низком его значении росла скорость принятия новых блоков. Это увеличивало количество затрачиваемых ресурсов на обработку транзакций для формирования блоков, а также криптографических доказательств при их проверке. Соответственно, при установлении слишком высокого значения таймаута в обработке входящих транзакций возникали задержки, а при большом трафике начинался «застой» необработанных транзакций в пуле.
В новой реализации были добавлены две новые опции для управления таймаутами:
- Динамическая (Dynamic) — выбор происходит между минимальным и максимальным значением таймаута в зависимости от загрузки системы.
- Скользящее среднее (Moving Average) — опция похожа на предыдущую, однако позволяет определять промежуточные значения таймаутов в соответствии с одноимённым правилом.
В отличие от Exonum, блокчейны на основе консенсуса Proof-of-Work (например, биткойн) имеют встроенный принцип регуляции интервалов между блоками. А именно: в биткойне сложность вычисления нового блока автоматически изменяется таким образом, чтобы скорость принятия блока всегда составляла 1 блок в 10 минут. Таким образом, чем выше скорость принятия блоков, тем выше сложность вычисления и наоборот. В результате интервал принятия нового блока практически не зависит от общей вычислительной мощности сети.
Внедрено поточное шифрование
Функционал связан с оптимизацией работы с памятью. Ранее для шифрования данных, которые хранятся в различных участках памяти, необходимо было предварительно скопировать эти данные в оперативную память (RAM), для чего в ней дополнительно выделялось место, соответствующее размеру шифруемых данных. С внедрением возможности шифрования раздробленных данных «на лету», дополнительного копирования в RAM удалось избежать, и, следовательно, увеличить быстродействие системы.
С полным перечнем изменений вы можете ознакомиться по ссылке. Руководство по работе с платформой есть в базе знаний Exonum. Там же вы найдете пример создания сервисов с кодом и комментариями.
Минорные релизы Exonum ожидаются раз в месяц. Следующий апдейт назначен на середину октября 2017 года. Следить за новостями о разработке продукта вы можете, оформив подписку, или в нашем блоге. Задать вопросы команде можно в Gitter (наш GitHub).
Exonum – это блокчейн-фреймворк для создания корпоративных блокчейн-проектов, который помогает бизнесу и государственным компаниям безопасно воплощать в жизнь решения, основанные на технологии блокчейн. Исходный код Exonum открыт, а благодаря блестящей команде разработчиков и инженеров Bitfury, фреймворк уже применяется во многих отраслях экономики.
Exonum – лидер отрасли по скорости обработки транзакций и универсальности. Вместе с тем мы обеспечиваем исключительную безопасность вашего блокчейн-проекта. В экосистеме Exonum вы можете создавать мощные блокчейн-приложения со смарт-контрактами, анкорингом в общедоступный блокчейн и другими функциями.
Exonum может выполнять анкоринг в общедоступный блокчейн, например, в блокчейн Bitcoin. Анкоринг – это процесс сохранения моментального снимка состояния системы в публичный источник, благодаря которому нет необходимости безоговорочно доверять администратору блокчейна. Анкоринг позволяет сохранять конфиденциальность данных, получая все выгоды от высокой безопасности общедоступного блокчейна. Таким образом, даже если злоумышленник захватит большинство узлов вашего Exonum-блокчейна, любые изменения в блокчейне будут записаны в общедоступный блокчейн и сразу замечены.
Чтобы ещё больше повысить безопасность, мы написали Exonum на одном из самых надёжных языков программирования — Rust, который обеспечивает всестороннюю безопасность в процессе исполнения и предсказуемое использование ресурсов.
Наш передовой алгоритм консенсуса позволяет блокчейнам, созданным с помощью Exonum, обрабатывать до 5000 транзакций в секунду (в некоторых случаях до 15000 транзакций в секунду), выпуск блока занимает 0,5 секунды.
Exonum позволяет вам ограничивать видимость данных в своем блокчейне, чтобы защитить конфиденциальность пользователей без ущерба для безопасности. Кроме того, Exonum использует собственный алгоритм византийского консенсуса, который обеспечивает безопасность данных, при этом не требуя выполнять обширные вычисления для майнинга блоков. Высокий уровень безопасности сохраняется даже тогда, когда узлы неисправны или взломаны.
Exonum можно интегрировать в множество пользовательских приложений, которые упрощают аудит блокчейна.
Чтобы ваш блокчейн-проект на базе Exonum как можно лучше адаптировался к разнообразным требованиям, мы предлагаем использовать наши многочисленные сервисы. Один из них — наше расширение Exonum Java Binding, которое обеспечивает гибкость при реализации пользовательской бизнес-логики в блокчейне Exonum.
Также мы предлагаем вам приложение с удобным интерфейсом пользователя — Exonum Dashboard, который позволяет быстро и легко запустить собственный блокчейн, и упростить его текущее обслуживание.
В Exonum Dashboard также есть пользовательские настройки, с помощью которых вы можете задавать различные уровни доступа, используя различные роли пользователей.
Сервисы
Сервисы позволяют указать бизнес-логику для приложений Exonum. Они являются основными точками расширения фреймворка, которые играют ту же роль, что и смарт-контракты в некоторых других блокчейнах.
Разработка сервисов в Exonum аналогична разработке веб-сервисов или сервисов на корпоративных платформах – они имеют одни и те же основные компоненты.
Конечные точки
Сервис имеет набор конечных точек (реализованных как REST API), с помощью которых сервис может взаимодействовать с внешним миром. Фреймворк Exonum действует как промежуточное программное обеспечение, отправляет запросы между сервисами и абстрагирует от разработчиков сервисов тонкости (де)сериализации данных, контроля доступа и других типичных задач.
Существует три типа конечных точек сервисов:
- Транзакции соответствуют запросам PUT или POST в REST.
- Запросы на чтение соответствуют запросам GET в REST.
- Приватные API-интерфейсы представляют собой административные и служебные конечные точки, обычно недоступные для внешнего мира.
Устойчивость
Exonum предоставляет средства для сервисов, чтобы хранить их данные в виде скаляров или как коллекции данных (словари и списки). Механизм хранения данных Exonum обеспечивает мощные абстракции для деревьев Меркла. В такой коллекции любой элемент может быть снабжен неизменяемым криптографическим доказательством того, что он принадлежит коллекции (без раскрытия каких-либо других элементов коллекции).
С помощью деревьев Меркла сервис может предоставлять строгие доказательства достоверности данных в ответ на запросы на чтение. Это требует минимального участия разработчиков сервисов — вся основная работа выполняется ядром Exonum.
Прозрачность
Фреймворк Exonum систематизирует всевозрастающую роль прозрачности в современном мире. Exonum предоставляет богатый набор инструментов для определения правильной работы системы и позволяет третьим сторонам (например, регуляторам, аудиторам и конечным клиентам) постоянно проверять прозрачность работы системы.
Создание сервисов в Exonum
Второго ноября состоялся релиз версии Exonum 0.3, и дальнейшее руководство написано с учетом внесенных изменений и усовершенствований в систему (о них вы можете прочитать в репозитории на GitHub). Мы создадим блокчейн с одним узлом, который реализует криптовалюту. Сеть будет принимать два типа транзакций: «создать кошелек» и «перевести средства с одного кошелька на другой».
Exonum написан на Rust, поэтому вам нужно установить компилятор. Для этого вы можете воспользоваться нашим руководством.
Создание узла
Для начала создадим новый crate:
И добавим необходимые зависимости в созданный cargo.toml:
Импортируем crate с необходимыми типами. Для этого нужно подредактировать файл src/main.rs:
И функцию main:
Все это позволяет настроить логгер, который будет выводить информацию об активности узлов Exonum в консоль.
Чтобы сформировать сам блокчейн, нужно создать экземпляр базы данных (в нашем случае MemoryDB, однако можно воспользоваться и RocksDB) и объявить список сервисов. Помещаем этот код после инициализации логгера:
По сути, блокчейн готов, однако взаимодействовать с ним не получится — у нас еще нет узла и API для обращения к нему. Узел потребуется сконфигурировать. В конфигурации указывается список открытых ключей валидаторов (в нашем случае он будет один). По сути каждому узлу требуется две пары открытых и закрытых ключей: одна для взаимодействия с другими узлами в процессе достижения консенсуса, а вторая — для сервисов. Для нашего примера создаем временные открытые ключи командой exonum::crypto::gen_keypair() и прописываем их в файл конфигурации.
Далее, настраиваем REST API для работы с внешними веб-запросами — для этого открываем порт 8000. Также откроем порт 2000, чтобы полные узлы Exonum-сети могли общаться друг с другом.
Объявляем данные
На этом этапе нам нужно определить, какие данные мы хотим хранить в блокчейне. В нашем случае — это информация о кошельке и балансе, публичный ключ для проверки запросов от владельца кошелька и имя владельца. Структура будет выглядеть следующим образом:
Макрос encoding_struct! помогает объявить упорядочиваемую структуру и обозначить границы полей значений. Нам нужно изменять баланс кошелька, потому добавим методы в Wallet:
Также нужно сформировать хранилище «ключ-значение» в MemoryDB. Для этого мы используем форк, чтобы иметь возможность в крайнем случае откатить все изменения.
Однако форк дает доступ к любой информации в базе данных. Чтобы изолировать кошельки, добавим уникальный префикс и используем карту абстракций MapIndex.
Определяем транзакции
Как уже было отмечено, для работы нашего образовательного примера нам понадобятся следующие типы транзакций: создать кошелек и добавить в него средства, а также перевести их на другой кошелек.
Транзакция для создания кошелька должна содержать его открытый ключ и имя пользователя.
Перед созданием кошелька будем проверять его уникальность. Также зачислим на него 100 монет.
Транзакция для перевода денег выглядит так:
В ней отмечены два публичных ключа (для обоих кошельков) и количество монет, которые переводятся. Поле seed добавлено для того, чтобы транзакцию было невозможно повторить. Также нужно проверить, что отправитель не пересылает средства самому себе:
Для того чтобы транзакции корректно отображались в обозревателе блоков блокчейна, нам также необходимо переопределить метод `info()`. Реализация будет одинаковой для обоих типов транзакций и будет выглядеть следующим образом:
Реализуем API для транзакций
Для этого создадим структуру с каналом и экземпляром блокчейна, который будет необходим для реализации запросов на чтение:
Чтобы упростить обработку процессов, добавим TransactionRequest enum, объединяющий оба типа транзакций: «создать кошелек» и «перевести средства».
Реализуем API для запросов на чтение
Для того чтобы иметь возможность проверить, что транзакции действительно выполняются, реализуем два вида запросов на чтение: возврат информации о всех кошельках системы и возврат информации только о конкретном кошельке, соответствующем публичному ключу.
Для этого определим пару методов в CryptocurrencyApi, которые будут обращаться к полю blockchain для чтения информации из хранилища блокчейна.
Стоит обратить внимание на то, что в данном случае мы используем метод fork, несмотря на то, что он дает доступ на запись и чтение данных (чтобы не перегружать пример). В реальных условиях целесообразно использовать формат доступа только на чтение (обращаясь к снапшотам).
Далее, также как и для транзакций, добавляем обработку запросов при помощи методов get_wallets() и get_wallet() в CryptocurrencyApi::wire().
Определяем сервис
Чтобы превратить структуру CurrencyService в блокчейн-сервис, мы должны назначить ей свойство Service. Оно имеет два метода: service_name, который возвращает имя нашего сервиса, и service_id, возвращающий его уникальный ID.
Метод tx_from_raw будет использоваться для десериализации транзакций, а метод public_api_handler — для создания REST Handler для обработки веб-запросов к узлу. Он будет применять логику, уже определенную в CryptocurrencyApi.
Мы реализовали все части нашего мини-блокчейна. Теперь осталось добавить CryptocyrrencyService в список сервисов блокчейна и запустить демо:
Тестирование сервисов
Отправка транзакций
После этого в консоли мы увидим, что кошелек был создан:
Второй кошелек формируется аналогично. После его создания можем перевести средства. Файл transfer-funds.json выглядит так:
Эта транзакция переводит 10 монет из первого кошелька на второй. Отправим команду узлу с помощью curl:
Узел покажет, что сумма успешно переведена:
А теперь проверим, что конечная точка обработки запросов на чтение действительно работает. Состояние обоих кошельков в системе мы можем запросить следующим образом:
Данный запрос выдаст информацию о кошельках в таком виде:
Вторая конечная точка также работает. Мы можем убедиться в этом, отправив следующий запрос:
Таким образом, в рамках нашего образовательного материала мы разобрались с тем, как работает простой блокчейн с одним валидатором. В следующих постах мы подробнее поговорим о привязке к блокчейнам, управлении узлами и консенсусе в Exonum.
По данным аналитических агентств, рынок блокчейн-технологий вырастет с 210 млн долларов в 2016 году до 2,3 млрд долларов к 2021. Среднегодовой рост составит 61,5%. При этом в формировании рынка участвуют как крупные компании (например, IBM, вложившие 200 млн долларов в IoT-проекты, связанные с блокчейном), так и небольшие стартапы, адаптирующие блокчейны под разные нужды.
Bitfury Group выпускает новую версию открытого фреймворка для разработки блокчейнов Exonum. Exonum 0.2 содержит регулярные исправления, а также некоторые конструктивные доработки. С помощью Exonum компании и правительственные организации могут создавать функциональные блокчейны, которые будут безопасны, прозрачны и контролируемы.
В Exonum реализован особый алгоритм византийского консенсуса (мы писали об этом в одном из наших материалов). Он не требует майнинга блоков и работает быстрее — блокчейн обрабатывает 3 тыс. транзакций в секунду.
Дополнительно Exonum привязывается к биткойн-блокчейну. Сеть высылает в поддерживающий блокчейн хеши блоков, чтобы повысить безопасность. Для атаки на такую сеть потребуется преодолеть механизмы консенсуса для обоих блокчейнов — поддерживающего и закрытого.
Производительность
Exonum ориентирован на максимальную пропускную способность в тысячи транзакций в секунду. Во время тестов, Exonum обрабатывает до 7 000 транзакций в секунду, с задержкой в 2,5 сек. (интервал между созданием транзакции и ее включением в блок).
Распределение
Подобно распределенным базам данных, таким как Cassandra, MongoDB или MySQL Cluster, блокчейны реплицируются на нескольких узлах. Однако, по сравнению с обычными распределенными БД, блокчейны устойчивы к гораздо более широкому диапазону сбоев:
- Блокчейны устойчивы к отказам одного узла (или даже нескольких узлов одновременно). Модель угрозы включает в себя отключение узлов, изолирование узлов от сети или ситуации, когда узел может быть полностью скомпрометирован (например, хакером).
- Блокчейны могут быть развернуты в децентрализованной сети, где нет единого администратора, управляющего всеми узлами. Это значительно снижает риск повреждения данных и предвзятости в системе (например, привилегированное отношение к некоторым участникам).
Задачи поставленные перед Exonum
Exonum — это фреймворк, а не готовый блокчейн (как, например, Биткоин). Вместо этого Exonum можно использовать для создания блокчейнов, так же как и фреймворки MVC (например, Django или Express) можно использовать для создания веб-приложений.
Биткоин анкоринг
Exonum предоставляет сервис анкоринга для достижения наивысшего уровня безопасности для легких клиентов. Сервис анкоринга периодически публикует хеш состояния всего блокчейна в блокчейн Биткоин. Это делает невозможным изменение истории транзакций или предоставление различным клиентам разных версий блокчейна, даже если все администраторы блокчейна вступают в сговор. Более того, анкоринг является резервным механизмом: даже если блокчейн Exonum перестает работать, аутентификация данных, хранящихся в легких клиентах, все еще может быть осуществлена.
Bitfury Group запускает свой собственный открытый фреймворк для разработки блокчейнов Exonum, который позволит компаниям и правительственным организациям воплощать в жизнь безопасные блокчейн-решения.
Технологию планируют применять для утверждения результатов выборов и защиты авторских прав создателей контента в цифровом пространстве. Exonum поможет «перевести» системы предоставления государственных услуг на Украине в блокчейн-среду. И платформа уже используется в Грузии, где на базе Exonum реализована регистрация прав собственности.
На рынке представлено множество решений, позволяющих бизнесам создавать собственные распределенные реестры (DLT) или использовать эту технологию для своих нужд. Однако DLT по своей сути сильно напоминает распределенную базу данных, которая лишена преимуществ в области безопасности, предлагаемых реальным блокчейном.
История распределенного реестра может быть переписана по сговору группы узлов, более того, такая система не имеет инструментов для проведения автоматического аудита. Exonum, в свою очередь, представляет собой решение для построения аутентичного и функционального блокчейна, гарантируя защищенность, прозрачность и контролируемость.
Exonum является полностью открытым решением, поэтому пользователям доступна не только вся библиотека кода, но и клиентское программное обеспечение для управления блокчейном.
«Почти 2 года глубокого анализа и тестирования различных блокчейн концептов, и мы запускаем платформу. Exonum — это плод совместных усилий нашей фантастической команды из математиков и ученых мирового класса, талантливейших разработчиков и аналитиков.
Уважая базовый принцип открытости и доступности блокчейна и биткойна, мы приняли решение сделать платформу открытой для всех, кто занимается разработкой решений на блокчейн, чтобы помочь правительствам и бизнесам раскрыть мощнейший потенциал технологии»
— Валерий Вавилов, генеральный директор Bitfury Group
Exonum основывается на языке программирования Rust — одном из самых безопасных ЯП на сегодняшний день. При этом Rust быстрее, чем Java, Go, C и C++ и постоянно совершенствуется.
Исходный код платформы — в репозитории проекта на GitHub. Дополнительная информация доступна на официальном сайте Exonum
Exonum использует особый алгоритм византийского консенсуса, который гарантирует безопасность данных (даже в случае выхода узлов из строя из-за неисправности или зловредной деятельности) и не требует майнинга блоков. Алгоритм позволяет блокчейну обрабатывать порядка 3 тыс. транзакций в секунду.
Платформа Exonum также предлагает работу со смарт-контрактами в корпоративной среде. Умные контракты Exonum, как Ethereum и Fabric, представляют собой бизнес-логику, добавляемую в блокчейн, однако имеют большую производительность (и безопасность по памяти благодаря Rust) по сравнению с конкурентами.
Exonum привязывается к биткойн-блокчейну, то есть периодически высылает хеши блоков для включения в поддерживающий общедоступный блокчейн в формате транзакций-свидетельств. Для атаки на сеть, защищенную привязкой к открытому блокчейну, злоумышленникам приходится одновременно преодолевать механизмы консенсуса для эксклюзивного блокчейна и для поддерживающей цепи, что требует колоссальных вычислительных мощностей.
Впервые платформа Exonum была представлена на конференции RustFest 2017, где были показаны возможности нового фреймворка и проведен воркшоп по созданию собственных криптовалют. Широкому IT-сообществу мы представим Exonum на серии конференций и вебинаров уже в ближайшее время. Среди городов числятся: Амстердам, Берлин, Сан-Франциско, Пекин, Киев, Лондон, Вашингтон и др.
Митап разработчиков и технических специалистов «Exonum: Your Next Step to Blockchain» пройдет и в Москве. 18 июля (c 17:30 до 21:00), во вторник, при поддержке компании КРОК. Мероприятие будет посвящено практическому применению блокчейн-решений в самых разных отраслях: государственном управлении, логистике, недвижимости, медицине и прочих сферах.
Слушатели смогут в реальном времени получить ответы на любые вопросы из первых уст разработчиков Exonum, познакомиться с возможностями платформы и увидеть, как на её основе создается новая криптовалюта.
Записаться на московский (18 июля) и киевский (20 июля) митапы можно здесь и здесь.
Exonum — это фреймворк с открытым исходным кодом для создания приложений на основе блокчейна. Он ориентирован на работу с закрытыми блокчейнами и применим в любых сферах: FinTech, GovTech и LegalTech.
Сегодня мы проведем небольшой обзор решения, а также в рамках образовательного формата разберемся с тем, как построить простой блокчейн-based проект на Exonum. Весь код, приведенный ниже, вы найдете в репозитории на GitHub.
/ Exonum. Your next step to blockchain / Exonum
Читайте также: