Semux Light Core

Savel
SEMUX на русском
3 min readAug 20, 2020

Команда UNO-labs представляет Semux Light Core — библиотеку, написанную на языке C++, для работы с аккаунтами и подписью транзакций в сети Semux. Библиотека является альтернативным решением основного клиента Semux-core (написан на Java) и может применяться для реализации легких кошельков, а также при разработке сервисов и децентрализованных приложений (dApps).

Отличительными чертами Semux Light Core является скорость работы, простота использования и кроссплатформенность. Библиотека может быть скомпилирована под различные платформы (например, x86, x86–64, ARM и ARM64) и операционные системы (Linux, Windows, macOS, Android и iOS). Также библиотека компилируется в WebAssembly, что позволяет ее использование внутри браузера и в проектах Node.js.

В дальнейшем мы надеемся получить с помощью сообщества проекта Semux обвязки библиотеки Semux Light Core под распространенные языки программирования, такие как Java, Python, Ruby, Dart и др. Это даст возможность использования единой кодовой базы в самой ответственной секьюрной части (с минимальными издержками на сопровождение) различных проектов в экосистеме Semux, что существенно понижает точку входа для новых разработчиков.

Для чего это нужно

Основная идея в том, что вы можете безопасно работать с приватными ключами и аккаунтами Semux на своем компьютере, ноутбуке, телефоне или собственном сервере, но при этом:

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

Структура проекта

Библиотека Semux Light Core имеет модульную структуру и состоит из следующих основных блоков:

  1. GpCore — низкоуровневая библиотека, реализует общие утилиты и типы С++, в том числе работа с памятью, обработка исключительных ситуаций, дебаг-логгер, потоки и т.п.
  2. Libsodium — широко известная криптографическая библиотека, реализующая функции шифрования, подписи и хеширования. Библиотека работает с безопасной памятью и предоставляет функции для генерации непредсказуемых данных, подходящих для создания секретных ключей.
  3. Utf8proc — библиотека для нормализации юникода.
  4. GpCryptoCore — ядро, безопасно реализующее все необходимые нам криптографические функции.
  5. Semux Light Core — ядро, реализующее работу с ключами и подпись транзакций непосредственно в блокчейне Semux.

Для сборки проекта используются компиляторы QMake и EMSCRIPTEN. Процесс сборки довольно сложен, поэтому мы создали докер-образ, содержащий скрипт для сборки проекта https://github.com/uno-labs/UnoLabsBuild. Скрипт автоматически подгружает все зависимости и выполняет сборку для Linux и Web Assembly.

Готовые сборки под различные платформы и операционные системы можно найти в разделах релизы в Semux Light Core и Semux Light Core Wasm.

Проект находится под лицензией MIT.

Насколько это безопасно

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

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

Тем не менее, обратите внимание, что в настоящий момент наша библиотека выпущена в альфа версии и ей еще подлежит пройти проверку и тщательное тестирование.

Основные функции Semux Light Core

  • Генерация случайных мнемонических фраз;
  • Создание или восстановление HD-аккаунта на основе мнемонической фразы;
  • Импорт приватного ключа;
  • Генерация адресов — случайных пар ключей;
  • Получение последовательности пар ключей (HD-адресов) для HD-аккаунта;
  • Поиск производных HD-адресов в HD-аккаунте;
  • Поиск non-HD-адресов (импортированных или сгенерированных);
  • Формирование сообщения о транзакции;
  • Подписание сообщений о транзакциях;
  • Подписание любых сообщений.

Справочно: в Semux используется криптография на эллиптических кривых Ed25519, а для хеширования используются функции Blake2B, SHA256 и RIPEMD-160. Кроме того, Semux Light Core реализует стандарты bip32, bip39 и bip44.

Подробная документация доступна по ссылке https://light-core-wasm.readthedocs.io/en/latest/index.html

Демо https://testnet.semux.top/wasm/

Примеры использования для C++ https://github.com/uno-labs/UnoSemuxLightCore/tree/master/Examples

Использование в Node.js:
- https://gist.github.com/dinc334/300186d8322c783d5283e1f969c53e66
- https://github.com/tell-1c/semux-light-core-test — генерация SEM-аккаунтов с подбором красивого адреса.

Обсудить с разработчиками, задать вопросы и получить консультацию можно на нашем сервере в Дискорде. Ждем ваших отзывов.

Друзья, изучайте блокчейн-технологии и присоединяйтесь к разработке в Semux!

--

--