NOXYDocs
GitHub
Docs/Протокол/Аккаунты

Аккаунты

Модель аккаунта, идентификаторы, ключи, адреса и человекочитаемые handle в NOXY.

Обновлено 2026-08-03Статус ReferenceИсточник content/wiki/ru/protocol/accounts.mdx

Аккаунты

Аккаунт в NOXY — это 32-байтный идентификатор (AccountId), группирующий балансы, sequence-нонсы и зарегистрированные открытые ключи в состоянии блокчейна. Идентификатор остается неизменным при ротации подписывающих ключей аккаунта.

Вывод AccountId

AccountId выводится путем хэширования BLAKE3 с разделением домена:

AccountId = BLAKE3("NOXY-L0/v0.1/account-id/v1\0" || preimage)
preimage  = BLAKE3(public_key) || account_type_u16_le || salt

Переменные преимеджа:

  • public_key: байты начального публичного ключа ML-DSA-44 (1312 байт).
  • account_type_u16_le: 2-байтный little-endian дискриминант типа аккаунта.
  • salt: произвольная соль длиной 0..=64 байт (обычно пустая).

Вывод идентификатора реализован в TypeScript SDK (@noxy/core) и воспроизводится кошельком.

Типы аккаунтов

Тип аккаунта жестко определяет спектр допустимых транзакционных payload, которые он может авторизовать.

| Дискриминант | Имя типа | Описание | |:---|:---|:---| | 1 | User | Обычные пользователи. По умолчанию кошельки создают этот тип. | | 2 | ValidatorOperator | Владелец ноды валидатора. Может отправлять управляющие транзакции. | | 3 | ChainCreator | Создатель service chains. | | 4 | ServiceDefinitionOwner | Владелец определений межсетевых сервисов. | | 5 | Governance | Управление глобальными параметрами консенсуса. |

Бинарная структура Account

На уровне хранения в RocksDB запись аккаунта сериализуется в фиксированном формате:

Account {
  account_id:     AccountId   // 32 байта
  account_type:   u16         // LE дискриминант
  status:         u16         // Active (0) | Inactive (1)
  sequence_nonce: u64         // LE счетчик транзакций
  primary_key_id: KeyId       // 32 байта
}

Поле sequence_nonce инкрементируется строго на 1 при каждом исполненном TransactionEnvelope, независимо от числа внутренних действий в батче.

Реестр ключей

Ключи хранятся отдельно от аккаунта в общем индексе KeyRegistryEntry. Идентификатор ключа KeyId выводится по формуле:

KeyId = BLAKE3("NOXY-L0/v0.1/key-id/v1\0" || account_id || BLAKE3(public_key) || key_role_u16_le)

Роли ключей

| Дискриминант | Роль ключа | Назначение | |:---|:---|:---| | 1 | AccountAuth | Подпись пользовательских транзакций (Transfer, RegisterKey и др.). | | 2 | ValidatorConsensusPq | ML-DSA-44 ключ для подписи BFT-голосов консенсуса. | | 3 | ValidatorConsensusClassical | Ed25519 ключ для гибридного BFT-голосования. | | 4 | CheckpointSigner | Авторизация payload SubmitCheckpoint. |

Внешнее представление адресов

Канонической формой адреса на сетевом уровне всегда остаются 32 сырых байта AccountId. В UI и CLI используются три внешних формата.

Hex-формат

Строка из 64 строчных символов шестнадцатеричной системы. RPC-эндпоинты принимают только строчный hex и отклоняют прописной.

f63052cfff6e7141bf90b7f9170a589f0674771a2d44173549fe60ba6aebf251

Bech32m-формат

Строка bech32m (BIP-350) с контрольной суммой для защиты от опечаток.

tnxy17cc99nlldec5r0usklu3wzjcnur8gac694zpwd2flest56ht7fgscpxscj

Префиксы (HRP):

  • noxy — основная сеть (mainnet).
  • tnxy — тестовая сеть (testnet).

Трёхсловный верификатор (Verifier words)

Для визуальной сверки без чтения 64 hex-символов генерируются 3 английских слова BIP-39 и контрольное число:

Verify: general · leisure · vote · 97

Формула генерации:

VerifierDigest = BLAKE3("NOXY-L0/v0.1/account-verifier/v1\0" || account_id)
Word1Index     = u16_le(VerifierDigest[0..2]) & 0x07FF
Word2Index     = u16_le(VerifierDigest[2..4]) & 0x07FF
Word3Index     = u16_le(VerifierDigest[4..6]) & 0x07FF
ChecksumNumber = u16_le(VerifierDigest[6..8]) % 100

Человекочитаемые имена (Account Names)

Имена аккаунтов связывают домен и AccountId в рамках одной сети. Формат записи:

alice@noxy-localnet-0
quanta://alice.noxy-localnet-0/

Записи хранятся в on-chain реестре:

AccountNameRecord {
  labels:              Vec<String>  // Части имени до '@' (макс. account_name_max_labels)
  owner_account_id:    AccountId    // Аккаунт, оплачивающий аренду и ротации
  target_account_id:   AccountId    // Адресат резолва
  target_account_type: u16
  version:             u32          // CAS-версия для оптимистичных блокировок
  registered_at_epoch: u64
  expires_at_epoch:    u64
  grace_until_epoch:   u64
  status:              u16          // Active (0) | Grace (1) | Released (2)
}

Резолв работает через состояние: SDK нормализует метки, выводит хеш имени и читает запись из StateNamespace::AccountNameRecord. Кошелёк резолвит имена так же и отказывается резолвить против чужой сети. Отдельный публичный HTTP-эндпоинт резолва запланирован, но пока не открыт.