Что происходит с collateral при разных исходах

  • Phase-1 rejection не запускает Plutus и не списывает collateral: нужно исправить тело и пересобрать его из свежего UTXO state.
  • Phase-2 failure применяет collateral path: regular effects не исполняются, но их пересечение с collateralInputs всё равно может быть потрачено как collateral.
  • CIP-40 позволяет явно задать totalCollateral и один collateralReturn output; расчёт проверяют по live protocol parameters той же сети и эпохи.
Три разных исхода
ИсходОбычная часть transactionCollateral path
Phase-1 rejectНе включена; Plutus не запущенCollateral inputs не расходуются
Phase-2 successInputs/outputs/fee применяютсяCollateral inputs остаются UTXO
Phase-2 failure, tx included invalidОбычные эффекты inputs/outputs, mint/certs не применяютсяРасходуются collateral inputs; совпавший normal outpoint потребляется здесь; возможен collateralReturn
Три разных исхода
Исход
Phase-1 reject
Обычная часть transaction
Не включена; Plutus не запущен
Collateral path
Collateral inputs не расходуются
Исход
Phase-2 success
Обычная часть transaction
Inputs/outputs/fee применяются
Collateral path
Collateral inputs остаются UTXO
Исход
Phase-2 failure, tx included invalid
Обычная часть transaction
Обычные эффекты inputs/outputs, mint/certs не применяются
Collateral path
Расходуются collateral inputs; совпавший normal outpoint потребляется здесь; возможен collateralReturn

Смотрите подписанный transaction body, а не обещание dApp

Collateral inputs — отдельный набор ссылок на UTXO в body, но CIP-40 допускает тот же outpoint и среди normal inputs. Поэтому до подписи сравните пересечение двух наборов: при phase-2 failure обычный эффект такого input пропускается, однако сам outpoint расходуется через collateral path. totalCollateral — точная ADA-сумма, которую body объявляет собираемой, а collateralReturn — один output для оставшегося value. Перед подтверждением полезно понимать, что именно подписывает кошелёк, и записать каждый collateral outpoint, его полный value и return address.

CIP-40 задаёт баланс: суммарный value collateral inputs равен collateralReturn плюс consumed collateral. Если return содержит native assets или сложный value, output также должен удовлетворять minimum ADA и правилам текущей эпохи. Не переносите min-ADA из другого output: руководство про minimum ADA показывает, почему его считают для окончательно сериализованного return.

Live parameters важнее старого процента из инструкции

Required collateral выводится из fee и текущего collateralPercentage; maxCollateralInputs ограничивает число collateral UTXO. Оба значения получают для той же сети и актуального tip через node/provider protocol-parameters query. Публичная документация может приводить текущее на дату страницы число, но governance меняет параметры: для доказательства сохраните JSON snapshot и версию node/builder.

Что сверить до подписи
ПолеПроверкаStop
collateralInputsExact outpoints существуют; пересечение с normal inputs вычисленоStale/spent input, неизвестный value или незамеченный общий outpoint
fee + collateralPercentageBuilder/node вычисляет minimum по live paramsПроцент взят из скриншота
totalCollateralЯвная consumed ADA покрывает protocol requirementПоле отсутствует при обещанном частичном возврате
collateralReturnAddress, полный value и min-ADA валидныUI показывает только ADA и скрывает assets
maxCollateralInputsЧисло inputs не превышает live limitBuilder молча выбрал другой collateral set
Что сверить до подписи
Поле
collateralInputs
Проверка
Exact outpoints существуют; пересечение с normal inputs вычислено
Stop
Stale/spent input, неизвестный value или незамеченный общий outpoint
Поле
fee + collateralPercentage
Проверка
Builder/node вычисляет minimum по live params
Stop
Процент взят из скриншота
Поле
totalCollateral
Проверка
Явная consumed ADA покрывает protocol requirement
Stop
Поле отсутствует при обещанном частичном возврате
Поле
collateralReturn
Проверка
Address, полный value и min-ADA валидны
Stop
UI показывает только ADA и скрывает assets
Поле
maxCollateralInputs
Проверка
Число inputs не превышает live limit
Stop
Builder молча выбрал другой collateral set

После отправки отделите reject от включённого invalid

Runbook проверки

  1. 1
    Заморозьте body

    Сохраните CBOR/body hash, network ID, fee, normal inputs, collateralInputs, их пересечение, totalCollateral, collateralReturn и validity interval.

  2. 2
    Снимите parameters

    Запишите slot/tip, collateralPercentage, maxCollateralInputs, min-UTXO параметры и node/provider version.

  3. 3
    Воспроизведите phase-1

    Проверьте inputs, signatures, size, fee и body rules. Reject здесь означает rebuild, а не collateral loss.

  4. 4
    Оцените Plutus

    Выполните script evaluation против exact spent/reference inputs и datum/redeemer; не меняйте body между оценкой и подписью.

  5. 5
    Найдите ledger outcome

    После submission сохраните block/slot и признак valid/invalid, а не только tx hash из wallet.

  6. 6
    Сверьте UTXO effects

    При invalid найдите расход каждого collateral outpoint и exact collateralReturn output. Ordinary-only inputs должны остаться, но outpoint из пересечения будет потрачен как collateral.

Проверку транзакции завершайте по ledger effects: при phase-2 failure посчитайте разницу между суммой collateral inputs и фактическим return value, сравните ADA-часть с totalCollateral и убедитесь, что обычные outputs не появились. Ordinary-only outpoints должны остаться, а каждый outpoint из пересечения normal/collateral — быть учтён как потраченный collateral. Затем учитывайте подтверждения и финальность выбранного блока; один pending/404 ответ провайдера не устанавливает окончательный исход.

Recovery и stop-сигналы

  • не повторять submission, пока неизвестно, был ли первый body включён как invalid;
  • при phase-1 reject обновить UTXO set и полностью пересобрать body, а не менять подписанные bytes;
  • при phase-2 failure сохранить script evaluation, datum/redeemer и exact state для разработчика dApp;
  • не считать collateralReturn возвратом всех assets, пока не декодирован полный output value;
  • не считать normal input нетронутым, пока не проверено его пересечение с collateralInputs;
  • не подписывать body с неизвестным return address или чрезмерным collateral set;
  • не передавать seed/private keys службе поддержки: для диагностики достаточно публичных body/UTXO/ledger данных.

Источники

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

  1. CIP-40 — Collateral Output Cardano Foundation · Проверено 24 августа 2026 г. в 09:25 GMT+5
  2. Cardano Developer Portal — transaction fees and collateral Cardano Foundation · Проверено 24 августа 2026 г. в 09:25 GMT+5
  3. Cardano Developer Portal — transaction building Cardano Foundation · Проверено 24 августа 2026 г. в 09:25 GMT+5
  4. Intersect cardano-node — release 11.0.1 IntersectMBO · Проверено 24 августа 2026 г. в 09:25 GMT+5
Материал носит информационный характер и не является индивидуальной рекомендацией. Криптоактивы связаны с риском волатильности, технических сбоев, хищения и полной потери средств.