Идентификатор одного IBC Classic packet
ПолеЗачем фиксироватьЧастая ошибка
Source/destination chain IDsВыбрать правильные state и clientsСмотреть одноимённую сеть из другого environment
Source port + source channel + sequenceОднозначно найти commitmentИскать только по tx hash получателя
Timeout height/timestampОпределить допустимую timeout branchСравнивать source height вместо destination
Denom trace и amountПонять escrow/burn и возвращаемый assetЖдать token symbol без учёта channel path
Идентификатор одного IBC Classic packet
Поле
Source/destination chain IDs
Зачем фиксировать
Выбрать правильные state и clients
Частая ошибка
Смотреть одноимённую сеть из другого environment
Поле
Source port + source channel + sequence
Зачем фиксировать
Однозначно найти commitment
Частая ошибка
Искать только по tx hash получателя
Поле
Timeout height/timestamp
Зачем фиксировать
Определить допустимую timeout branch
Частая ошибка
Сравнивать source height вместо destination
Поле
Denom trace и amount
Зачем фиксировать
Понять escrow/burn и возвращаемый asset
Частая ошибка
Ждать token symbol без учёта channel path

Один packet оставляет следы на обеих chain

На source chain MsgTransfer проверяет отправителя, receiver, token, source port/channel и deadline, затем приложение выполняет send logic вместе с sendPacket. Core IBC сохраняет commitment, включающий данные packet и timeout. Relayer переносит доказательство на destination; destination обрабатывает receive и пишет acknowledgement. Другой relay доставляет ack обратно, после чего source удаляет commitment и вызывает application callback.

Такой маршрут похож на кроссчейн-мост только на уровне пользовательской задачи. Безопасность IBC опирается на clients, connections, channels и proofs конкретных chain, а ICS-20 задаёт token application. Перед переводом сверяйте channel counterparty и denom trace, а не только знакомый ticker.

Receive, acknowledgement и timeout взаимно ограничивают друг друга

Реконструкция состояния без повторной отправки

  1. 1
    Разобрать source tx

    Сохраните MsgTransfer event, port/channel, sequence, packet data, amount/denom, sender/receiver и оба timeout fields.

  2. 2
    Проверить commitment

    Убедитесь, что он существовал после send. Его отсутствие позже может означать обработанный ack/timeout, но не раскрывает ветку без событий.

  3. 3
    Искать recv на destination

    Сопоставьте те же packet fields и success/error acknowledgement. Баланс интерфейса не заменяет receive transaction.

  4. 4
    Искать обратную обработку

    На source найдите acknowledgement или timeout callback и точный transaction hash relayer.

  5. 5
    Сверить token result

    Проверьте фактический balance/event receiver при success либо refund receiver/amount при error или timeout.

Как читать конечную ветку
НаблюдениеСтатусRecovery
Recv success, ack ещё не на sourceAsset мог быть зачислен, lifecycle не закрыт на sourceНе timeout; дождаться/проверить reverse relay
Recv error, error ack обработанDestination отклонила application resultПодтвердить ICS-20 refund на source
Deadline прошёл, recv не доказан, timeout tx отсутствуетPacket ожидает доказанного timeoutПроверить client/relayer и подготовить timeout relay
Timeout callback обработанPacket больше не должен приниматься destinationСверить refund receiver, denom и raw amount
Commitment исчез, ветка неизвестнаДанных одного query недостаточноНайти ack/timeout events и исторический block
Как читать конечную ветку
Наблюдение
Recv success, ack ещё не на source
Статус
Asset мог быть зачислен, lifecycle не закрыт на source
Recovery
Не timeout; дождаться/проверить reverse relay
Наблюдение
Recv error, error ack обработан
Статус
Destination отклонила application result
Recovery
Подтвердить ICS-20 refund на source
Наблюдение
Deadline прошёл, recv не доказан, timeout tx отсутствует
Статус
Packet ожидает доказанного timeout
Recovery
Проверить client/relayer и подготовить timeout relay
Наблюдение
Timeout callback обработан
Статус
Packet больше не должен приниматься destination
Recovery
Сверить refund receiver, denom и raw amount
Наблюдение
Commitment исчез, ветка неизвестна
Статус
Данных одного query недостаточно
Recovery
Найти ack/timeout events и исторический block

Refund возвращает protocol amount, а не все расходы пользователя

ICS-20 на исходном направлении escrow-ит local asset и выпускает voucher на принимающей стороне; при обратном направлении сжигает voucher и unescrow-ит исходный denom. Failure acknowledgement и timeout вызывают refundTokens: escrowed asset возвращается либо voucher mint-ится обратно отправителю. Network fees, relayer fees, middleware fees или изменение отображаемого denom этой формулой не обещаны.

Проверяйте raw amount и полный denom path. Сумма в интерфейсе может отличаться из-за decimals отображения, а тот же base denom после другого channel имеет другой trace. Для результата сохраните transaction hashes обеих chain, packet identity и balance delta; материал «подтверждение перевода» помогает оформить доказательство, но не заменяет IBC state.

Проверяемый итог — source/destination chain IDs, port/channel/sequence, send/recv/ack или timeout tx hashes, timeout height/timestamp, client height, denom trace, raw amount и финальный receiver balance. Если block ещё может быть реорганизован, отметьте уровень finality и повторите query после достаточных подтверждений.

Источники

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

  1. IBC spec — channel and packet semantics Cosmos Docs / IBC · Проверено 22 августа 2026 г. в 10:38 GMT+5
  2. ICS-20 fungible token transfer spec Cosmos Docs / IBC · Проверено 22 августа 2026 г. в 10:38 GMT+5
  3. ibc-go v10.1.x — transfer messages Cosmos SDK / IBC-Go · Проверено 22 августа 2026 г. в 10:38 GMT+5
  4. ibc-go v10.1.x — transfer events Cosmos SDK / IBC-Go · Проверено 22 августа 2026 г. в 10:38 GMT+5
Материал носит информационный характер и не является индивидуальной рекомендацией. Криптоактивы связаны с риском волатильности, технических сбоев, хищения и полной потери средств.