Сначала докажите, что активы записаны как AssetsTrapped

XCM — формат межконсенсусных сообщений в Polkadot. Поле `origin` хранит исходное расположение и контекст полномочий, а `VersionedAssets` — точный набор активов вместе с версией кодирования. При исполнении активы могут попасть во временное удержание (`holding`), а следующая инструкция, например DepositAsset, — не завершиться. Модуль pallet_xcm на целевой цепочке тогда может выпустить AssetsTrapped. Общий статус исходного вызова или событие Attempted эту запись не заменяют.

Карточка одного инцидента восстановления

  1. 1
    Определить целевую цепочку

    Запишите хеш генезис-блока или другое однозначное имя цепочки и блок с нужными метаданными. Отдельно сохраните идентификаторы версии исполняемой логики: `specName`, `specVersion` и `transactionVersion`. Runtime — исполняемая логика цепочки; одинаковый интерфейс pallet_xcm в разных версиях runtime может иметь разные источники полномочий, фильтры и веса.

  2. 2
    Найти финализированный AssetsTrapped

    Сохраните хеш блока, индексы внешнего вызова и события, хеш ловушки, origin и VersionedAssets ровно в той форме и версии XCM, в которой их записала цепочка.

  3. 3
    Связать с исходным сообщением

    Сопоставьте хеш сообщения или доступный журнал исполнения, исходную и целевую структуру Location — точное расположение внутри XCM, активы и последнюю выполненную инструкцию. Одинаковая сумма ничего не доказывает.

  4. 4
    Проверить, что запись ещё не погашена

    Ищите более позднее AssetsClaimed с теми же хешем, origin и набором активов, а также проверьте текущее состояние AssetTraps. Повторный запрос по погашенной записи не восстанавливает средства.

Что сохранить для повторной проверки
ДоказательствоЗачем нужноОпасное сокращение
Целевая цепочка и версия правилОпределяют вызов, преобразование origin, фильтры и версию XCM«Это Polkadot» без конкретной цепочки
Хеш ловушкиСвязывает событие с записьюХеш исходной транзакции вместо местной ловушки
origin в виде LocationВходит в ключ и должен совпасть с результатом преобразования вызывающей учётной записиОдин адрес без полного контекста Location
VersionedAssetsВ ключ входят точный набор активов и версия его представленияТикер, сумма или новое отображение кошелька
Блок и метаданныеПозволяют декодировать событие по правилам той версии, которая его создалаТекущие метаданные для исторических байтов
Что сохранить для повторной проверки
Доказательство
Целевая цепочка и версия правил
Зачем нужно
Определяют вызов, преобразование origin, фильтры и версию XCM
Опасное сокращение
«Это Polkadot» без конкретной цепочки
Доказательство
Хеш ловушки
Зачем нужно
Связывает событие с записью
Опасное сокращение
Хеш исходной транзакции вместо местной ловушки
Доказательство
origin в виде Location
Зачем нужно
Входит в ключ и должен совпасть с результатом преобразования вызывающей учётной записи
Опасное сокращение
Один адрес без полного контекста Location
Доказательство
VersionedAssets
Зачем нужно
В ключ входят точный набор активов и версия его представления
Опасное сокращение
Тикер, сумма или новое отображение кошелька
Доказательство
Блок и метаданные
Зачем нужно
Позволяют декодировать событие по правилам той версии, которая его создала
Опасное сокращение
Текущие метаданные для исторических байтов

Если на ожидаемой цепочке нет AssetsTrapped, ClaimAssets нельзя использовать как универсальный поиск средств. Проверьте исходную и целевую транзакции, очередь сообщений и получателя по обычной схеме подтверждения перевода. Отдельный разбор кроссчейн-мостов помогает оценить общие риски маршрута, но не заменяет доказательства из конкретной версии правил цепочки.

ClaimAssets воспроизводит запись, а не пересчитывает её по памяти

Локальный `claim_assets` — внешний вызов цепочки (`extrinsic`), который принимает набор активов и `beneficiary`. Поле beneficiary задаёт получателя как Location. Runtime отдельно преобразует подписанную учётную запись или другой местный источник полномочий в origin формата XCM.

Поле версии в VersionedAssets — часть сохранённого значения, а не подсказка интерфейсу. Реализация переносит эту версию в `ticket`, создаёт ClaimAsset для точного набора assets, затем DepositAsset для получателя. Ключ AssetTraps связан с хешем пары origin и VersionedAssets. Поэтому похожий идентификатор актива с другим Location, версией или origin указывает на другую запись.

Проверки перед подписью вызова восстановления
ПроверкаМожно продолжатьНужно остановиться
Версия правилМетаданные и индекс вызова взяты из актуального specVersionВызова нет или цепочка обновилась во время подготовки
originПреобразуется в тот же Location, что записан в событии ловушкиКошелёк предлагает другую учётную запись или иной origin без доказательства преобразования
АктивыДекодированы из исторического VersionedAssets без ручной заменыИнтерфейс показывает только тикер и округлённую сумму
beneficiaryТочный Location получателя поддерживается текущей версией правилФормат не проверен или указывает на другую сеть
API пробного прогонаЗавершает вызов и показывает ожидаемый исход и комиссиюМоделирование не завершилось, вернуло ошибку или требует большего веса
Проверки перед подписью вызова восстановления
Проверка
Версия правил
Можно продолжать
Метаданные и индекс вызова взяты из актуального specVersion
Нужно остановиться
Вызова нет или цепочка обновилась во время подготовки
Проверка
origin
Можно продолжать
Преобразуется в тот же Location, что записан в событии ловушки
Нужно остановиться
Кошелёк предлагает другую учётную запись или иной origin без доказательства преобразования
Проверка
Активы
Можно продолжать
Декодированы из исторического VersionedAssets без ручной замены
Нужно остановиться
Интерфейс показывает только тикер и округлённую сумму
Проверка
beneficiary
Можно продолжать
Точный Location получателя поддерживается текущей версией правил
Нужно остановиться
Формат не проверен или указывает на другую сеть
Проверка
API пробного прогона
Можно продолжать
Завершает вызов и показывает ожидаемый исход и комиссию
Нужно остановиться
Моделирование не завершилось, вернуло ошибку или требует большего веса

API пробного прогона (`dry-run`) полезен, если его предоставляет целевая цепочка. Он показывает исход локального вызова и XCM и предполагаемые последствия без настоящей подписи. Моделирование привязано к конкретному состоянию и не гарантирует будущий блок. Перед отправкой снова сверяют specVersion, наличие AssetTraps, актив для комиссии и баланс отправителя.

Подтвердите результат двумя независимыми следами

Первый след — вызов `claim_assets`, включённый в финализированный блок без ошибки исполнения, и AssetsClaimed с теми же хешем, origin и набором assets. Второй след — состояние получателя после вызова. Баланс, учётная запись актива или другой объект целевой цепочки должны измениться на ожидаемую величину с учётом комиссий и минимальных балансов.

Если событие и состояние не сходятся
НаблюдениеСледующее действие
AssetsClaimed уже есть, а баланс не виденИсследовать DepositAsset, учётную запись актива и Location получателя, а не повторять ClaimAssets
Runtime обновился после подготовкиЗаново декодировать вызов и вес по новым метаданным
origin или VersionedAssets отличаютсяОстановиться: это не та же запись AssetTraps
Нет финализированного AssetsTrappedВернуться к исходной и целевой транзакциям; одинаковая сумма не доказывает связь
Провайдер просит сид-фразу или закрытый ключНе продолжать и не переводить средства на «служебный» адрес
Если событие и состояние не сходятся
Наблюдение
AssetsClaimed уже есть, а баланс не виден
Следующее действие
Исследовать DepositAsset, учётную запись актива и Location получателя, а не повторять ClaimAssets
Наблюдение
Runtime обновился после подготовки
Следующее действие
Заново декодировать вызов и вес по новым метаданным
Наблюдение
origin или VersionedAssets отличаются
Следующее действие
Остановиться: это не та же запись AssetTraps
Наблюдение
Нет финализированного AssetsTrapped
Следующее действие
Вернуться к исходной и целевой транзакциям; одинаковая сумма не доказывает связь
Наблюдение
Провайдер просит сид-фразу или закрытый ключ
Следующее действие
Не продолжать и не переводить средства на «служебный» адрес

Сохраните идентификаторы обеих цепочек, сообщения и внешнего вызова. Рядом запишите блок и индекс события, версию исполняемой логики (`runtime`), исходные origin и VersionedAssets и результат пробного прогона. После исполнения добавьте хеш вызова `claim_assets`, AssetsClaimed и состояние получателя. По этим данным вывод можно проверить после обновления цепочки без интерфейса кошелька. Если вызов шёл через мультиподпись, отдельно сверьте Timepoint и хеш вызова; они не заменяют запись XCM.

Источники

Мы используем прямые ссылки и фиксируем дату проверки. Полный текст чужих материалов не перепечатывается.

  1. Polkadot SDK docs — pallet_xcm claim_assets Parity Technologies · Проверено 25 августа 2026 г. в 10:10 GMT+5
  2. Polkadot SDK source — pallet_xcm trap and claim implementation Parity Technologies · Проверено 25 августа 2026 г. в 10:10 GMT+5
  3. Polkadot SDK docs — pallet_xcm events Parity Technologies · Проверено 25 августа 2026 г. в 10:10 GMT+5
  4. Polkadot SDK docs — XCM v5 ClaimAsset Parity Technologies · Проверено 25 августа 2026 г. в 10:10 GMT+5
  5. Polkadot SDK docs — XCM dry-run runtime APIs Parity Technologies · Проверено 25 августа 2026 г. в 10:10 GMT+5
Материал носит информационный характер и не является индивидуальной рекомендацией. Криптоактивы связаны с риском волатильности, технических сбоев, хищения и полной потери средств.