Что такое hlf-core
Hyperledger Fabric даёт мощную, но намеренно низкоуровневую модель: контракт (chaincode)
видит состояние как плоское key-value хранилище, аутентифицирует не пользователя, а
организацию, и не навязывает ни способа хранить сущности, ни способа вызывать операции. Всё
это приходится достраивать самому — как правило, заново на каждом проекте. hlf-core — это
слой, который мы достроили один раз и вынесли в набор пакетов @hlf-core/*, чтобы не писать
его снова.
Иными словами, это фреймворк на TypeScript для разработки chaincode и клиентских приложений Fabric. Он вырос из реальных продакшн-систем — финансового учёта, депозитария, custody, и собирает то, что в этих системах оказалось общим: работу с состоянием, протокол вызова команд, идентификацию пользователя и систему токенов.
Что он берёт на себя
Прежде всего — состояние. Вместо ручных getState/putState hlf-core даёт ORM-подобный слой:
сущности, связи parent-child, пагинацию и автоматическую валидацию. Ключи при этом строятся
так, чтобы вторичный поиск по левой части составного ключа оставался предсказуемым, а не
превращался в случайный обход диапазона.
Дальше — вызов операций. В обычном контракте каждая операция это отдельная функция, и добавление
новой меняет его интерфейс. Мы пошли иначе: у контракта одна точка входа, а любая операция
упаковывается в конверт команды, где поле name и определяет, что именно вызвано. К этому
добавлена идентификация конечного пользователя поверх организационной идентичности Fabric —
подпись на уровне приложения и защита от повторного воспроизведения транзакции через nonce.
Наконец, токены. Эмиссия, переводы, удержание (hold), сжигание, полный аудит и строковая арифметика без потери точности — всё это уже написано и проверено, а не изобретается под каждый проект заново. Сюда же относится разбор блоков и событий: превращение сырых данных Fabric в типизированный вид, с которым можно работать.
Из чего он состоит
hlf-core — монорепозиторий из публикуемых npm-пакетов @hlf-core/*, выстроенных слоями: от
платформо-нейтрального фундамента до предметной пары пакетов для токенов.
| Слой | Пакеты | Назначение |
|---|---|---|
| Фундамент | @hlf-core/common | Платформо-нейтральные классы — ключи состояния, идентичность, команды |
| Сеть / ORM | @hlf-core/api, @hlf-core/chaincode | Подключение к Fabric и ORM поверх key-value |
| Транспорт | @hlf-core/transport, @hlf-core/transport-common, @hlf-core/transport-chaincode | Протокол «клиент ↔ chaincode» |
| Токены | @hlf-core/coin, @hlf-core/coin-chaincode | Управление валютами и токенами |
Почему слоёв именно столько и как по ним проходит типичная команда — в разделе «Философия»; там же схема и разбор пути от клиента до блока и обратно.
С чего начать
Если вы раньше не работали с hlf-core, удобнее всего начать с быстрого старта и собрать минимальный chaincode. Если хочется сперва понять идею целиком, прежде чем писать код, стоит прочитать «Философию». А если вы ищете конкретный пакет, переходите сразу в раздел «Пакеты».