Nodes Plus BlockchainТехнология

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

Разрабатываемая программная платформа может быть использована как унифицированный фреймворк – в своем роде промышленный стандарт – для разработки блокчейн-приложений. N+ как технология хранения данных с интегрированными программными библиотеками позволяет создавать решения в сфере “Big Data” и позволяет создать среду для развертывания систем «искусственного интеллекта», включая AI эволюционирующего типа.

Стек технологий

N+ разрабатывается на языке C++14 и в качестве компонента имеет модуль ядра для операционных систем Linux, написанный на C. Помимо стандартных, используются библиотеки:

  • boost
  • crypto++
  • kyotokabinet
  • v8
  • qrenode
  • openssl (может быть заменена libressl)
  • png
  • qt5 (проприетарная) (только для Desktop UI)
  • webtoolkit (проприетарная) (только для библиотек с веб-интерфейсами) (будет заменяться на собственную библиотеку веб-сервера с HTTP(S)-фреймворком).

В ближайших планах – перевод на Python, Java, JavaScript, Swift, Go.

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

Кроссплатформенность позволяет применять блокчейн-приложения на широком спектре устройств, включая сервера, персональные компьютеры, мобильные устройства, планшеты, одноплатные компьютеры, системы на основе микроконтроллеров под управлением различных операционных систем: Linux, *nix, Windows, Android, iOS, macOS, Эльбрус.

Характеристики блокчейна

В качестве криптографической функции используется RSA с конфигурируемой длиной ключа. В качестве хэш-функции используется SHA-512. Соответственно, для расчета кода аутентификации используется HMAC-SHA-512.

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

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

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

Транзакция не содержит UTXO из-за правила однократного использования адресов для отправки. Входы транзакции проверяются при валидации.

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

Для хранения блокчейна используется NoSQL хранилище на основе библиотеки Kyotocabinet; ведутся работы по организации SQL хранилища на Postgres. При получении очередного блока нода проверяет его хэш и, если это полная нода или пользователь принял решение хранить полный блокчейн, нода индексирует полученный блок и записывает в базу данных. Индексация производится для быстрого доступа к данным транзакций.

Nodes PlusЗаявка на блокчейн-фреймворк
Nodes Plus WebsiteЗаявка на защищенный веб-сайт
Производительность

Nodes Plus

25000+TPS

32kbмакс. размер транзакции

0секунд валидация транзакции

1..15секунд добавление в блок