Перейти к содержанию

Модели данных

Здесь описаны основные структуры данных, используемые в Kaspeak SDK для формирования, отправки и приёма сообщений.


Структура Payload

Payload — это структура данных, которая вставляется в транзакцию Kaspa. Каждый payload содержит полезную нагрузку (данные) и необходимую служебную информацию.

Payload всегда начинается с уникального маркера KSPK (0x4B53454B).

Формат payload-а

Смещение Поле Размер Описание
0 marker 4 Маркер KSPK (идентификатор SDK)
4 version 1 Версия протокола (сейчас = 1)
5 prefix 4 Префикс приложения (ASCII)
9 type 2 Тип сообщения (messageType)
11 id 33 Идентификатор (Identifier) сообщения
44 publicKey 33 Публичный ключ отправителя
77 signature 64 Schnorr-подпись payload-а
141 dataLen 2 Длина данных (в байтах)
143 data N Данные (CBOR, сжатые, возможно зашифрованные)

Объект Peer

Peer — это объект, описывающий отправителя сообщения. Он формируется при получении сообщения и хранит информацию о публичном ключе и вычисленном общем секрете (для зашифрованных сообщений).

Поля объекта Peer

Поле Тип Описание
address string Адрес отправителя (Kaspa-адрес)
publicKey Uint8Array Публичный ключ отправителя (secp256k1, 33 байта)
signature Uint8Array Schnorr-подпись payload-а
isOwn boolean true, если сообщение отправлено самим SDK
sharedSecret Uint8Array Общий секрет (ключ для шифрования), вычисляется лениво
chainKey bigint Скаляр для генерации цепочек идентификаторов сообщений

Identifier и SecretIdentifier

Эти объекты представляют криптографические идентификаторы сообщений. Они обеспечивают приватность и связность сообщений в рамках диалогов.

Identifier

Компактная метка-точка на эллиптической кривой secp256k1, позволяющая однозначно идентифицировать сообщение, не раскрывая их порядок посторонним.

Поле Тип Описание
hex string Hex-представление точки (66 символов, сжатый формат)
bytes Uint8Array Бинарное представление идентификатора (33 байта)

Ключевые методы:

  • fromHex(hex) / fromBytes(buf) — создание из существующей точки.
  • fromChainKey(chainKey, i, PK) — создание на основе цепочки идентификаторов.
  • next(chainKey, n) / prev(chainKey, n) — получение следующего/предыдущего идентификатора в цепочке.
  • verify(sig, msg) — проверка Schnorr-подписи относительно идентификатора.

SecretIdentifier

Расширяет Identifier, добавляя приватный ключ (скаляр) для создания подписей.

Поле Тип Описание
secret bigint Закрытый скаляр для подписи сообщений

Дополнительные методы:

  • sign(msg) — создание Schnorr-подписи сообщения с помощью секретного ключа.

Важно: SecretIdentifier нельзя создавать из публичных данных. Используйте фабрики:
- SecretIdentifier.fromSecret(secret)
- SecretIdentifier.random()


Объект MessageHeader

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

Поля объекта MessageHeader:

Поле Тип Описание
txid string Идентификатор транзакции Kaspa
peer Peer Информация об отправителе
prefix string Префикс приложения
type number Тип сообщения (messageType)
identifier Identifier Идентификатор сообщения
blockMeta.hash string Хеш блока, в котором подтверждена транзакция
blockMeta.timestamp bigint Время подтверждения (Unix-time)
blockMeta.daaScore bigint Показатель сложности сети Kaspa (DAA)
consensusHash string Хеш консенсуса (подписываемые данные)