Стандарт: SOLPDT 1.1 — Agentic Trust Layer Extension
Настоящее приложение определяет протокол автоматического списания нематериальных активов (НМА) в экосистеме SOLPDT при наступлении событий, прекращающих действие аттестата доверия sig.a. Документ устанавливает:
Протокол обеспечивает соответствие требованиям ФСБУ 14/2022 (п. 41) и IAS 38 (п. 112) в части выбытия и обесценения активов.
В соответствии с ФСБУ 14/2022 и IAS 38, нематериальный актив подлежит списанию с баланса при прекращении его признания. В экосистеме SOLPDT такими событиями являются:
| Код события | Наименование | Статус TRL | Основание по ФСБУ 14/2022 |
|---|---|---|---|
TRL_PROTOCOL_FRAUD | Доказанная попытка двойной траты или подделки Payload-V2 | PERMANENT | Утрата контроля (пп. «б» п. 4) |
TRL_COMPLIANCE_VIOLATION | Попадание оператора агента в санкционные списки | PERMANENT | Прекращение использования вследствие регуляторных ограничений |
TRL_SKILLS_INCONSISTENCY | Расхождение данных skills.json с блокчейн-историей | SUSPENDED → PERMANENT | Утрата способности приносить экономические выгоды |
TRL_CRITICAL_DRIFT | PDT-Score ниже 0.4 на протяжении 3 расчётных циклов | SUSPENDED → PERMANENT | Утрата способности приносить экономические выгоды (пп. «в» п. 4) |
TRL_STAKE_EXHAUSTED | Полное исчерпание залогового депозита при слэшинге | PERMANENT | Прекращение контроля вследствие экономической несостоятельности агента |
TRL_LICENSOR_REVOCATION | Отзыв DAT Лицензиара Корневым узлом | PERMANENT | Аннулирование аттестации всех агентов данного Лицензиара |
При наступлении любого из перечисленных событий актив перестаёт соответствовать критериям признания НМА:
sig.a аннулируется, агент более не может формировать доверенные транзакцииТриггер может быть обнаружен следующими компонентами:
| Компонент | Тип обнаруживаемых событий |
|---|---|
| Compliance-Gateway (CGW) | AML-нарушения, санкционные списки |
| PDT-Engine | Критическое падение PDT-Score |
| Мониторинг skills.json | Расхождение заявленных и фактических метрик |
| Корневой узел / Лицензиар | Ручное внесение при форс-мажоре |
При обнаружении триггера в реестр отозванного доверия (TRL) вносится запись со следующими полями:
{
"trl_entry_id": "TRL-2026-00158",
"agent_pubkey": "A1b2C3d4E5f6G7h8I9j0K1l2M3n4O5p6Q7r8S9t0U1v",
"status": "SUSPENDED",
"reason_code": "TRL_CRITICAL_DRIFT",
"reason_details": {
"pdt_score_current": 0.32,
"pdt_score_threshold": 0.4,
"cycles_below_threshold": 3,
"last_valid_tx": "2026-04-01T12:00:00Z"
},
"reported_by": "PDT-Engine-01",
"reported_at": "2026-04-09T10:30:00Z",
"grace_period_ends_at": "2026-04-10T10:30:00Z",
"licensor_dat_ref": "DAT-888-REGIONAL-NODE-05"
} Длительность: 24 часа (86 400 секунд) с момента reported_at.
В течение этого периода:
nma в Payload-V2 временно сбрасывается в false, но актив остаётся на балансе с пометкой «под вопросом»Возможные действия в Grace Period:
| Инициатор | Действие | Результат |
|---|---|---|
| Лицензиар | Подтверждение нарушения | Немедленный переход к Шагу 4 |
| Лицензиар | Оспаривание с доказательствами | Отмена записи TRL → RESTORED |
| Система | Истечение 24 часов без оспаривания | Автоматический переход к Шагу 4 |
При подтверждении нарушения или истечении Grace Period выполняется:
4.1. Обновление статуса TRL
{
"trl_entry_id": "TRL-2026-00158",
"status": "PERMANENT",
"confirmed_at": "2026-04-10T10:30:00Z",
"confirmed_by": "SYSTEM_AUTO"
} 4.2. Обновление метаданных Payload-V2
В блоке accounting_asset_details производятся следующие изменения:
{
"impairment_test": {
"last_test_timestamp": "2026-04-10T10:30:00Z",
"last_test_result": "written_off",
"write_off_reason": "TRL_CRITICAL_DRIFT",
"write_off_trl_ref": "TRL-2026-00158"
}
} 4.3. Обнуление балансовой стоимости
Остаточная стоимость (NBV) принудительно устанавливается в 0. Накопленная амортизация становится равной первоначальной стоимости за вычетом ликвидационной.
4.4. Отзыв sig.a
Подпись sig.a аннулируется. Любая проверка через https://solpdt.com/verify возвращает статус TRUST_REVOKED.
4.5. Слэшинг (если применимо)
При наличии неуплаченных обязательств или умышленного нарушения залоговый депозит (stake_account) изымается в пользу пострадавшей стороны или сжигается.
Compliance-Gateway автоматически формирует Акт списания НМА (шаблон — Приложение H) и направляет его в ERP-систему организации через настроенный sync_endpoint_url.
use anchor_lang::prelude::*;
#[derive(AnchorSerialize, AnchorDeserialize, Clone, PartialEq, Eq)]
pub enum AssetStatus {
Active,
Suspended,
WrittenOff,
}
#[account]
pub struct AssetAccount {
pub agent_pubkey: Pubkey,
pub initial_cost: u64,
pub current_nbv: u64,
pub accumulated_amortization: u64,
pub status: AssetStatus,
pub sig_a: String, // Authoritative Attestation
pub trl_entry_id: Option, // Ссылка на запись в TRL
pub suspended_at: Option, // Unix-время приостановки
pub written_off_at: Option, // Unix-время списания
pub write_off_reason: Option, // Код причины
}
/// Обработчик события списания актива.
/// Вызывается после подтверждения нарушения и истечения Grace Period.
pub fn write_off_asset(ctx: Context<WriteOffAsset>, reason_code: String) -> Result<()> {
let asset = &mut ctx.accounts.asset_account;
let clock = Clock::get()?;
// Проверка, что актив ещё не списан
require!(
asset.status != AssetStatus::WrittenOff,
ErrorCode::AssetAlreadyWrittenOff
);
// Обнуление стоимости
asset.current_nbv = 0;
asset.accumulated_amortization = asset.initial_cost;
// Обновление статуса
asset.status = AssetStatus::WrittenOff;
asset.written_off_at = Some(clock.unix_timestamp);
asset.write_off_reason = Some(reason_code);
// Аннулирование подписи (помечается как невалидная)
asset.sig_a = String::from("REVOKED");
// Эмиссия события для off-chain систем
emit!(AssetWrittenOffEvent {
agent_pubkey: asset.agent_pubkey,
written_off_at: clock.unix_timestamp,
reason: reason_code,
trl_entry_id: asset.trl_entry_id.clone(),
});
Ok(())
}
#[event]
pub struct AssetWrittenOffEvent {
pub agent_pubkey: Pubkey,
pub written_off_at: i64,
pub reason: String,
pub trl_entry_id: Option,
}
#[error_code]
pub enum ErrorCode {
#[msg("Актив уже списан")]
AssetAlreadyWrittenOff,
} /// Проверяет, истёк ли Grace Period для приостановленного актива.
/// Вызывается периодически или при попытке совершения транзакции.
pub fn check_grace_period_expired(
suspended_at: i64,
current_timestamp: i64,
grace_period_seconds: i64,
) -> bool {
current_timestamp >= suspended_at + grace_period_seconds
}
/// Переводит актив из SUSPENDED в WRITTEN_OFF после истечения Grace Period.
pub fn finalize_suspension(ctx: Context<FinalizeSuspension>) -> Result<()> {
let asset = &mut ctx.accounts.asset_account;
let clock = Clock::get()?;
require!(
asset.status == AssetStatus::Suspended,
ErrorCode::AssetNotSuspended
);
let suspended_at = asset.suspended_at.ok_or(ErrorCode::MissingSuspendedAt)?;
const GRACE_PERIOD_SECONDS: i64 = 86_400; // 24 часа
require!(
check_grace_period_expired(suspended_at, clock.unix_timestamp, GRACE_PERIOD_SECONDS),
ErrorCode::GracePeriodNotExpired
);
// Автоматическое списание
write_off_asset(
ctx.accounts.as_write_off_context(),
String::from("TRL_GRACE_PERIOD_EXPIRED")
)?;
Ok(())
} При списании НМА формируется следующая бухгалтерская запись:
| Дебет | Кредит | Сумма | Основание |
|---|---|---|---|
| Счёт 05 (Амортизация НМА) | Счёт 04 (НМА) | Накопленная амортизация | Списание амортизации |
| Счёт 91.02 (Прочие расходы) | Счёт 04 (НМА) | Остаточная стоимость | Убыток от списания |
| Дебет | Кредит | Сумма |
|---|---|---|
| 05 | 04 | 50 000 ₽ |
| 91.02 | 04 | 100 000 ₽ |
Итого: счёт 04 закрыт, в прочих расходах отражён убыток 100 000 ₽.
Если списание сопровождается изъятием залогового депозита:
| Дебет | Кредит | Сумма | Основание |
|---|---|---|---|
| 91.02 (Прочие расходы) | 58 (Финансовые вложения) | Сумма изъятого залога | Потеря депозита при слэшинге |
В соответствии с НК РФ:
Выход из TRL и восстановление статуса nma: true возможны только через переаттестацию у Лицензиара (или, в исключительных случаях, у Корневого узла).
| Условие | Доказательство |
|---|---|
| Устранение причины отзыва | PDT-Score восстановлен выше 0.7 / skills.json синхронизирован / кошелёк легитимизирован |
| Повторный AML-скрининг | Пройден с риском ≤ 7/10 |
| Методологический аудит | Подтверждение соответствия FEBA/SOL |
| Погашение задолженности (если применимо) | Транзакция погашения в Solana |
/// Восстанавливает актив после успешной переаттестации.
pub fn restore_asset(ctx: Context<RestoreAsset>, new_sig_a: String) -> Result<()> {
let asset = &mut ctx.accounts.asset_account;
let clock = Clock::get()?;
require!(
asset.status == AssetStatus::WrittenOff || asset.status == AssetStatus::Suspended,
ErrorCode::AssetNotRevoked
);
// Восстановление стоимости (из истории или заново)
// ВАЖНО: первоначальная стоимость не меняется,
// но срок полезного использования может быть скорректирован
asset.status = AssetStatus::Active;
asset.sig_a = new_sig_a;
asset.suspended_at = None;
asset.written_off_at = None;
asset.write_off_reason = None;
// Обновление записи в TRL
asset.trl_entry_id = None;
emit!(AssetRestoredEvent {
agent_pubkey: asset.agent_pubkey,
restored_at: clock.unix_timestamp,
new_sig_a,
});
Ok(())
} Согласно ФСБУ 14/2022, восстановление ранее списанного НМА не допускается. Актив должен быть принят к учёту заново:
Для обеспечения возможности внешнего аудита при списании фиксируются:
| Данные | Источник | Хранение |
|---|---|---|
trl_entry_id | TRL | Блокчейн |
write_off_reason | Смарт-контракт | Блокчейн |
written_off_at | Unix-время | Блокчейн |
nbv_before_write_off | Состояние до списания | История аккаунта |
accumulated_amortization | Состояние до списания | История аккаунта |
tx_hash | Хеш транзакции списания | Solana Explorer |
Аудитор может проверить легитимность списания, используя чек-лист из Приложения G: Чек-лист аудитора (Auditor Checklist).
При наступлении события WRITTEN_OFF Compliance-Gateway отправляет на sync_endpoint_url следующий JSON:
{
"event_type": "ASSET_WRITTEN_OFF",
"event_id": "WO-2026-00158",
"timestamp": "2026-04-10T10:30:00Z",
"asset": {
"inventory_number": "SOL-PDT-2026-042",
"agent_pubkey": "A1b2C3d4E5f6G7h8I9j0K1l2M3n4O5p6Q7r8S9t0U1v",
"initial_cost": 150000.00,
"currency": "RUB",
"accumulated_amortization": 50000.00,
"nbv_before_write_off": 100000.00,
"write_off_amount": 100000.00
},
"reason": {
"code": "TRL_CRITICAL_DRIFT",
"description": "PDT-Score ниже 0.4 на протяжении 3 расчётных циклов",
"trl_entry_id": "TRL-2026-00158"
},
"transaction": {
"tx_hash": "5kP9xYtZv7wK1LmNpQ2rS5tU8vW2xYz4A6B8C0D",
"slot": 123456789,
"block_time": "2026-04-10T10:30:00Z"
},
"audit_uri": "https://solpdt.com/audit/wo-2026-00158"
} <?xml version="1.0" encoding="UTF-8"?>
<SOLPDT_WriteOff>
<EventID>WO-2026-00158</EventID>
<EventDate>2026-04-10T10:30:00</EventDate>
<InventoryNumber>SOL-PDT-2026-042</InventoryNumber>
<AssetName>Цифровое право / AI-Agent Payload</AssetName>
<InitialCost>150000.00</InitialCost>
<AccumulatedAmortization>50000.00</AccumulatedAmortization>
<WriteOffAmount>100000.00</WriteOffAmount>
<ReasonCode>TRL_CRITICAL_DRIFT</ReasonCode>
<ReasonDescription>PDT-Score ниже 0.4 на протяжении 3 расчётных циклов</ReasonDescription>
<TRL_EntryID>TRL-2026-00158</TRL_EntryID>
<Solana_TxHash>5kP9xYtZv7wK1LmNpQ2rS5tU8vW2xYz4A6B8C0D</Solana_TxHash>
<AuditURI>https://solpdt.com/audit/wo-2026-00158</AuditURI>
<AccountingEntry>
<Debit account="05" amount="50000.00"/>
<Credit account="04" amount="50000.00"/>
<Debit account="91.02" amount="100000.00"/>
<Credit account="04" amount="100000.00"/>
</AccountingEntry>
</SOLPDT_WriteOff> | № | Проверка | Критерий | Подтверждающий документ |
|---|---|---|---|
| 1 | Основание для списания | Наличие записи в TRL со статусом PERMANENT | Выписка из TRL |
| 2 | Истечение Grace Period | Прошло ≥ 24 часов с момента reported_at | Системный лог |
| 3 | Остаточная стоимость | Корректно рассчитана на момент списания | Приложение E |
| 4 | Накопленная амортизация | Соответствует учётным данным | Оборотно-сальдовая ведомость |
| 5 | Первичный документ | Сформирован Акт списания НМА | Приложение H |
| 6 | Проводки | Соответствуют учётной политике | Журнал проводок |
| 7 | Налоговый учёт | Убыток включён во внереализационные расходы | Налоговый регистр |
| Термин | Определение |
|---|---|
| TRL (Trust Revocation List) | Реестр отозванного доверия — децентрализованный список агентов, чей статус доверия аннулирован |
| Слэшинг (Slashing) | Механизм экономического наказания — изъятие залогового депозита при подтверждении умышленного нарушения |
| Grace Period | Период ожидания (24 часа) между приостановкой и окончательным списанием, предназначенный для оспаривания |
| NBV (Net Book Value) | Остаточная балансовая стоимость актива |
| Permanent Delegate | Механизм Token-2022 в Solana, позволяющий протоколу управлять токенами (изымать, блокировать) |
| DAT (Digital Access Token) | Цифровой допуск, выдаваемый Корневым узлом Лицензиарам для права верификации агентов |
КОРНЕВОЙ УЗЕЛ (СОЗДАТЕЛЬ СТАНДАРТА): Юрий Соколов (SOL Trust Network)
КОНТАКТЫ: standards@solpdt.com