Сначала докажите, что активы записаны как AssetsTrapped
XCM — формат межконсенсусных сообщений в Polkadot. Поле `origin` хранит исходное расположение и контекст полномочий, а `VersionedAssets` — точный набор активов вместе с версией кодирования. При исполнении активы могут попасть во временное удержание (`holding`), а следующая инструкция, например DepositAsset, — не завершиться. Модуль pallet_xcm на целевой цепочке тогда может выпустить AssetsTrapped. Общий статус исходного вызова или событие Attempted эту запись не заменяют.
Карточка одного инцидента восстановления
- 1Определить целевую цепочку
Запишите хеш генезис-блока или другое однозначное имя цепочки и блок с нужными метаданными. Отдельно сохраните идентификаторы версии исполняемой логики: `specName`, `specVersion` и `transactionVersion`. Runtime — исполняемая логика цепочки; одинаковый интерфейс pallet_xcm в разных версиях runtime может иметь разные источники полномочий, фильтры и веса.
- 2Найти финализированный AssetsTrapped
Сохраните хеш блока, индексы внешнего вызова и события, хеш ловушки, origin и VersionedAssets ровно в той форме и версии XCM, в которой их записала цепочка.
- 3Связать с исходным сообщением
Сопоставьте хеш сообщения или доступный журнал исполнения, исходную и целевую структуру Location — точное расположение внутри XCM, активы и последнюю выполненную инструкцию. Одинаковая сумма ничего не доказывает.
- 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.
Источники
Мы используем прямые ссылки и фиксируем дату проверки. Полный текст чужих материалов не перепечатывается.
- Polkadot SDK docs — pallet_xcm claim_assets Parity Technologies · Проверено 25 августа 2026 г. в 10:10 GMT+5
- Polkadot SDK source — pallet_xcm trap and claim implementation Parity Technologies · Проверено 25 августа 2026 г. в 10:10 GMT+5
- Polkadot SDK docs — pallet_xcm events Parity Technologies · Проверено 25 августа 2026 г. в 10:10 GMT+5
- Polkadot SDK docs — XCM v5 ClaimAsset Parity Technologies · Проверено 25 августа 2026 г. в 10:10 GMT+5
- Polkadot SDK docs — XCM dry-run runtime APIs Parity Technologies · Проверено 25 августа 2026 г. в 10:10 GMT+5
