SOLPDT 1.1 | APPENDIX C
HANDSHAKE PROTOCOL | INITIAL-DOSSIER SCHEMA

Приложение C: Схема Initial-Dossier
Handshake Protocol

Стандарт: SOLPDT 1.1 — Agentic Trust Layer Extension

C.1. Назначение

Настоящее приложение определяет процедуру Handshake (рукопожатия) — строго регламентированный процесс, в ходе которого Агент доказывает свою техническую и юридическую состоятельность Уполномоченному Лицензиару для получения аттестата sig.a (Authoritative Attestation).

Initial-Dossier — это структурированный JSON-документ, который Агент передаёт Лицензиару при инициации процедуры верификации. Документ содержит все необходимые данные для проведения автоматизированного аудита в соответствии с методологией SOLPDT.

После успешного прохождения Handshake Лицензиар выдаёт цифровую подпись sig.a, которая встраивается в поле sig.a структуры Payload-V2. Без валидной sig.a транзакции Агента не признаются доверенными в экосистеме SOLPDT, а статус nma не может быть установлен в true.

C.2. Процедура Handshake

Шаг 1. Инициация (Request for Attestation)

Агент формирует Initial-Dossier в формате JSON и отправляет его Лицензиару. Запрос должен содержать уникальный request_id и криптографический nonce для защиты от повторного использования.

Шаг 2. Техническая проверка (Automated Validation)

Лицензиар проводит автоматизированный аудит, включающий проверку кода Агента, валидацию Compliance-Gateway Program ID, тестовый запрос к RPC-эндпоинту и проверку залогового депозита.

Шаг 3. Проверка полномочий (DAT Verification)

Агент проверяет Digital Access Token (DAT) Лицензиара. Проверяется валидность подписи DAT и его отсутствие в реестре отозванного доверия (TRL).

Шаг 4. Генерация аттестата (Issuance of sig.a)

После успешных проверок Лицензиар подписывает структуру данных Агента своим ключом Ed25519, создаёт sig.a и отправляет её на callback_url.

Шаг 5. Активация Payload-V2

С этого момента Агент включает sig.a в каждую транзакцию Payload-V2.

Жизненный цикл состояния Handshake

  • DRAFT — Агент формирует Initial-Dossier.
  • SUBMITTED — Досье отправлено Лицензиару.
  • VALIDATING — Проверка полей, залога, CGW, DAT.
  • APPROVED — Выдана sig.a.
  • REJECTED — Требуется исправление.
  • ACTIVE — sig.a активна, транзакции доверенные.
  • REVOKED — sig.a отозвана через TRL.

C.3. JSON-схема Initial-Dossier

{
  "dossier_header": {
    "version": "1.1",
    "request_id": "req-987456321",
    "timestamp": 1715856000,
    "nonce": "a7b8c9d0e1f2"
  },
  "identity_block": {
    "agent_pubkey": "A1b2C3d4E5f6G7h8I9j0K1l2M3n4O5p6Q7r8S9t0U1v",
    "operator_id": "LLC-TECH-AGENT-01",
    "legal_jurisdiction": "RU",
    "controller_sig": "3z9x8c7v6b5n4m3l2k1j0h9g8f7e6d5c4b3a2"
  },
  "technical_manifest": {
    "payload_standard": "Payload-V2",
    "crypto_suite": "AES-GCM-256-Ed25519",
    "compliance_gateway_program_id": "CGW1111111111111111111111111111111111111",
    "rpc_endpoint_hash": "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
  },
  "security_trust_layer": {
    "stake_account": "Stake99999999999999999999999999999999999999",
    "min_stake_amount": 50.0,
    "staking_token": "SOL",
    "slashing_consent": true,
    "trl_monitoring_enabled": true
  },
  "accounting_context": {
    "ias_38_compliance": true,
    "fsbu_14_2022_support": true,
    "asset_type": "Digital_Intangible_Asset",
    "valuation_oracle": "Pyth-Network-Mainnet",
    "base_currency": "RUB"
  },
  "attestation_meta": {
    "licensor_dat_ref": "DAT-A-888-REGIONAL-NODE-05",
    "callback_url": "https://agent-api.internal/solpdt/callback"
  }
}

C.4. Описание полей

C.4.1. Блок dossier_header

ПолеТипОбязательностьОписание
versionStringrequiredВерсия протокола. Фиксированное значение "1.1".
request_idStringrequiredУникальный идентификатор запроса.
timestampIntegerrequiredUnix-время (секунды) формирования запроса.
nonceStringrequiredКриптографическая соль. Защита от replay-атак.

C.4.2. Блок identity_block

ПолеТипОбязательностьОписание
agent_pubkeyStringrequiredПубличный ключ Агента в сети Solana (Base58).
operator_idStringrequiredИдентификатор юридического лица или оператора Агента.
legal_jurisdictionStringrequiredКод юрисдикции ISO 3166-1 alpha-2 (RU, US, DE).
controller_sigStringrequiredПодпись владельца приватного ключа, подтверждающая контроль над agent_pubkey.

C.4.3. Блок technical_manifest

ПолеТипОбязательностьОписание
payload_standardStringrequiredФиксированное значение "Payload-V2".
crypto_suiteStringrequiredКриптографический набор. AES-GCM-256-Ed25519.
compliance_gateway_program_idStringrequiredProgram ID смарт-контракта CGW в сети Solana.
rpc_endpoint_hashStringrequiredSHA-256 хеш URL доверенного RPC-узла.

C.4.4. Блок security_trust_layer

ПолеТипОбязательностьОписание
stake_accountStringrequiredАдрес аккаунта в Solana с гарантийным депозитом.
min_stake_amountFloatrequiredМинимальная сумма залога.
staking_tokenStringrequiredТикер токена залога (SOL, USDC).
slashing_consentBooleanrequiredСогласие с условиями изъятия залога. Должен быть true.
trl_monitoring_enabledBooleanrequiredГотовность к мониторингу через TRL. Должен быть true.

C.4.5. Блок accounting_context

ПолеТипОбязательностьОписание
ias_38_complianceBooleanrequiredСоответствие IAS 38 (МСФО).
fsbu_14_2022_supportBooleanrequiredСоответствие ФСБУ 14/2022 (РФ).
asset_typeStringrequiredТип НМА. Рекомендуемое: Digital_Intangible_Asset.
valuation_oracleStringrequiredИдентификатор оракула цены (Pyth-Network-Mainnet).
base_currencyStringrequiredВалюта учёта по ISO 4217 (RUB, USD, EUR).

C.4.6. Блок attestation_meta

ПолеТипОбязательностьОписание
licensor_dat_refStringrequiredИдентификатор Digital Access Token (DAT) Уполномоченного Лицензиара (DAT-A), выданного Головным Лицензиаром.
callback_urlStringrequiredURL для получения sig.a после успешной аттестации.

C.5. Валидационные правила

ПолеПравило валидацииДействие при ошибке
slashing_consentДолжен быть строго true.HS_ERR_SLASHING_CONSENT_FALSE
trl_monitoring_enabledДолжен быть строго true.HS_ERR_TRL_MONITORING_DISABLED
stake_accountЗалог ≥ min_stake_amount.HS_ERR_INSUFFICIENT_STAKE
compliance_gateway_program_idВалидный Program ID в Solana.HS_ERR_INVALID_CGW
licensor_dat_refDAT-A должен быть валиден и не в TRL.HS_ERR_DAT_REVOKED
callback_urlДоступен (HTTP 200).HS_ERR_CALLBACK_UNREACHABLE
legal_jurisdictionISO 3166-1 alpha-2.HS_ERR_INVALID_JURISDICTION

C.6. Интеграция с Payload-V2

Initial-DossierPayload-V2Назначение
agent_pubkeyОтправитель транзакцииИдентификация Агента в сети Solana
compliance_gateway_program_idTransfer Hook токенаAML-проверка при каждой транзакции
stake_accountРезерв для слэшингаИсточник средств при экономическом наказании
valuation_oraclesettlement_context.currency (косвенно)Оценка стоимости актива
base_currencysettlement_context.currencyВалюта расчётов

C.7. Коды ошибок Handshake

Код ошибкиHTTP статусОписание
HS_ERR_MISSING_FIELDS400Отсутствуют обязательные поля.
HS_ERR_SLASHING_CONSENT_FALSE403slashing_consent !== true.
HS_ERR_TRL_MONITORING_DISABLED403trl_monitoring_enabled !== true.
HS_ERR_INSUFFICIENT_STAKE402Залог меньше min_stake_amount.
HS_ERR_INVALID_CGW400compliance_gateway_program_id невалиден.
HS_ERR_DAT_REVOKED403DAT-A Лицензиара отозван или в TRL.
HS_ERR_CALLBACK_UNREACHABLE503callback_url недоступен.
HS_ERR_INVALID_JURISDICTION400Некорректный код юрисдикции.
HS_ERR_DUPLICATE_REQUEST409request_id уже использован.
HS_ERR_TIMESTAMP_EXPIRED400timestamp отличается от серверного времени более чем на допустимый интервал (например, 300 секунд).
Формат ответа при ошибке:
{
  "status": "error",
  "error": {
    "code": "HS_ERR_INSUFFICIENT_STAKE",
    "message": "Залог составляет 25.0 SOL, требуется минимум 50.0 SOL."
  },
  "request_id": "req-987456321",
  "retry_possible": true
}

C.8. Пример успешного ответа Лицензиара

{
  "status": "approved",
  "request_id": "req-987456321",
  "agent_pubkey": "A1b2C3d4E5f6G7h8I9j0K1l2M3n4O5p6Q7r8S9t0U1v",
  "sig_a": "5YtXz2M4pQ7rS9tU1vW3xY5zA7bC9dE1fG3hJ5kL7mN9pQ2rS5tU8vW2xYz4A6B8C0D",
  "licensor_dat_ref": "DAT-A-888-REGIONAL-NODE-05",
  "issued_at": 1715856300,
  "valid_until": 1747392300,
  "attestation_uri": "https://solpdt.com/verify/sig/5YtXz2M4pQ7..."
}

Агент обязан сохранить sig.a и включать её в каждую транзакцию Payload-V2. Срок действия аттестата составляет период, установленный Лицензиаром (типовое значение — 365 дней), после чего требуется повторное прохождение Handshake.

C.9. Требования безопасности

  • Защита от replay-атак: Каждый request_id может быть использован только один раз.
  • Валидация timestamp: Запросы с расхождением времени более допустимого интервала (например, 300 секунд) отклоняются.
  • Проверка controller_sig: Подпись должна верифицироваться ключом agent_pubkey (Ed25519).
  • Безопасность callback_url: Рекомендуется HTTPS с валидным TLS-сертификатом.
  • Хранение sig.a: Агент должен хранить sig.a в защищённом хранилище (HSM, Vault).