Перейти к основному содержимому

StateKey и ключи состояния

Состояние Fabric — это key-value хранилище с диапазонными запросами по префиксу. Никакого «вторичного индекса» в привычном смысле здесь нет: всё, что у нас есть — это ключ и возможность перечислить записи, у которых общее начало. Поэтому то, как мы строим ключ, целиком определяет, какие запросы к данным вообще окажутся возможны.

StateKey из @hlf-core/common — это сборщик составных ключей для одного пространства имён. Он умеет две вещи. Метод key(...items) собирает точный ключ записи, соединяя части разделителем ~. Метод prefix(...items) собирает префикс для диапазонного запроса и, что важно, всегда завершает его разделителем.

Ключевая мысль в том, что искать можно только по левой части составного ключа. Значит, порядок частей, от общего к частному, и задаёт доступные «разрезы» данных: по чему мы хотим перечислять, то и должно стоять слева. А префикс обязан заканчиваться разделителем — иначе диапазонный запрос захватит соседние записи, и перечисление по RUB незаметно подтянет ещё и RUB2.

const key = new StateKey('→coin~account');
key.key('coin_RUB', 'user_abc'); // →coin~account:coin_RUB~user_abc (точная запись)
key.prefix('coin_RUB'); // →coin~account:coin_RUB~ (перечисление)

На этой же механике построены связи между сущностями — о них в @hlf-core/chaincode.