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.