IZZZIO

Материал из BitcoinWiki
Перейти к: навигация, поиск
IZZZIO logo

IZZZIO, izzz.io — универсальная блокчейн платформа-фреймворк с открытым исходным кодом, с функциональностью смарт-контрактов. Платформа предоставляет возможность модульной конфигурации узлов сети с выбором функциональных блоков, разных вариантов консенсуса, настройкой времени генерации и размеров блока. По умолчанию платформа использует встроенный консенсус LCPoA основанный на использовании (unix timestamp) в качестве значения nonce.

Использование платформы[править]

Платформа используется несколькими компаниями в качестве блокчейн основы:

  1. BigNet
  2. BitCoen
  3. Buzcoin[1][2]
  4. Baikalika[3]
  5. NWP Solution[4]
  6. SBS Platform[5]
  7. NS Platform[6]

Архитектура[править]

Платформа написана на языке JavaScript и использует фреймворк Node.js в качестве среды исполнения.

Цепочка блоков[править]

Цепочка блоков организована по принципу 1 транзакция - 1 блок. В качестве структуры данных блоков используется JSON. Для хранения цепочки блоков используется БД LevelDB.

Основная цепочка состоит из JSON блоков со структурой

  • Хеш текущего блока
  • Хеш предыдущего блока
  • Порядковый номер блока
  • Время начала генерации блока
  • Время окончания генерации блока
  • Данные блока в виде JSON объекта

Использование JSON в качестве способа хранения блоков позволяет производить запись структурированных данных произвольного размера напрямую в цепочку блоков.

Смарт-контракты[править]

Смарт контракты организованы модулем EcmaContracts. Для написания контрактов используется язык JavaScript ES6. Все контракты запускаются в изолированной виртуальной машине, с изоляцией от доступа к системе и к другим контрактам. При синхронизации каждый узел последовательно повторяет все действия с контрактами из цепочки блоков, и сохраняет измененные состояния локально. В результате локальные состояния на каждом из узлом полностью синхронизируются, что позволяет выполнять код децентрализованно и достоверно, и обеспечивает детерминированность результата работы. Принципы написания контрактов схожи с Ethereum, однако в EcmaContracts уже встроена минимальная реализация токена на подобии стандарта ERC20 а также библиотека для безопасной работы с числами.

Для запуска кода контрактов используется специальная изолированная среда Isolated VM на базе JavaScript движка V8. Каждой изолированной среде доступно ограниченное количество ресурсов (процессорное время, ОЗУ, количество вызовов) а также ограниченный функционал:

  1. Контракты не могут использовать системные методы, а также методы среды выполнения напрямую
  2. Сохранение данных между запусками может выполнятся только с помощью встроенного типа KeyValue и его производных BlockchainArraySafe, BlockchainArray, TokenRegister, BlockchainMap
  3. Контрактам недоступны методы асинхронного выполнения кода, Promise, setTimeout, setInterval, nextTick
  4. Код контракта работает полностью синхронно
  5. Превышение разрешенных ресурсов моментально завершает выполнение контракта с ошибкой
  6. Методы работы с датами заменены. В качестве текущей даты используется время текущего блока
  7. Метод работы со случайными числами заменён. Генерация случайных чисел зависит от текущего состояния контракта
  8. В коде контракта недоступно использование конструктора. Вместо конструктора используется метод init и deploy
  9. Все контракты должны наследоваться от класса Contract или его производных

Также контрактам доступны дополнительные функции:

  1. Встроенный тип BigNumber для безопасной работы с большими числами
  2. Класс TokensRegister реализующий функционал токена (монеты)
  3. Контракт TokenContract реализующий функционал токена (монеты)
  4. ContractConnector класс для взаимодействия с другими контрактами в системе
  5. TokenContractConnector класс для взаимодействия с другими контрактами в системе, которые наследуются от ContractConnector
  6. SellerContractConnector класс для взаимодействия с контрактами-продавцами
  7. Require - альтернативный способ взаимодействия с другими контрактами в системе
  8. BlockchainArray - тип данных, схожий с массивом (Array), использующий объект KeyValue для хранения данных между запусками
  9. BlockchainMap - тип данных, реализующий представление Map, использующий объект KeyValue для хранения данных между запусками
  10. TypedKeyValue - аналог KeyValue, сохраняющий исходные типы значений
  11. Event - класс для генерации событий
  12. assert - встроенный класс, который позволяет выполнять проверки критически важных элементов

Мастер-контракты[править]

Мастер контракт - смарт контракт системы EcmaContracts, который отвечает за выделение ресурсов (процессорное время, ОЗУ, лимиты вызовов в минуту) другим контрактам, реализует функционал встроенного в систему токена, а также управляет системой взаиморасчетов между другими контрактами.

Криптография[править]

Благодаря модульности, система поддерживает различные варианты реализации криптографических функций:

  1. Стандартный модуль iz3-basic-crypto реализует основные криптографические функции (хеш-функция SHA256, цифровая подпись RSA с ключом 2048 бит)
  2. Модуль криптографии iz3-bitcore-crypto предоставляет возможность использовать криптографию, основанную на модуле bitcore (который используется Bitcoin и Litecoin)
  3. Модуль GOSTModules предоставляет возможность использования несертифицированной ГОСТ криптографии (ГОСТ Р 34.10-2012, ГОСТ Р 34.11-2012 (Стрибог))
  4. Модуль cryptoPRO реализует встраивание ГОСТ криптографии (ГОСТ Р 34.10-2012, ГОСТ Р 34.11-2012 (Стрибог)) с использованием сертифицрованной версии СКЗИ КриптоПРО CSP 4.0

Протокол передачи данных StarWave[править]

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

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

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

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

В случае нарушения маршрута, и недоступности узлов из списка, маршрут перестраивается заново с последнего доступного узла, что позволяет передавать сообщения даже при постоянном изменении топологии сети.

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

StarWaveCrypto[править]

Плагин-расширение протокола StarWave. StarWaveCrypto реализует обмен ключами шифрования secp256k1 по протоколу Диффи-Хеллмана (DH). Последующий обмен данными между узлами будет использовать шифрованный канал.

См. также на BitcoinWiki[править]


Источники[править]

  1. Wikipedia
  2. BuzarWhitepaper
  3. Wikipedia
  4. Wikipedia
  5. Wikipedia
  6. ForkLog