Сначала распределите выходы по ролям

`UTXO` — конкретный неизрасходованный выход, обозначенный идентификатором транзакции и индексом. Тело транзакции само распределяет ссылки на выходы по ролям. Обычный вход заявляет расход, ссылочный — только чтение. Роль одной ссылки нельзя выводить из адреса или содержимого: сначала смотрят, в каком поле тела она находится.

Опись одного тела транзакции до подписи
ОбразецГде указанЧто даёт проверкеСостояние после успеха
Расходуемый UTXO A`inputs`Активы для баланса и условие расходаУдалён из набора UTXO
Ссылочный UTXO B`reference inputs`Содержимое выхода для контекста без расходаОстаётся неизрасходованным
Выход с datum CВстроенные данные или их хешСами байты либо только их хешЗависит от роли C
Выход со скриптом DПоле `reference script`Байты скрипта для требуемого хешаОстаётся, если D только читают
Новый выход E`outputs`Новые активы, данные и необязательный скриптПоявляется только при успехе
Опись одного тела транзакции до подписи
Образец
Расходуемый UTXO A
Где указан
`inputs`
Что даёт проверке
Активы для баланса и условие расхода
Состояние после успеха
Удалён из набора UTXO
Образец
Ссылочный UTXO B
Где указан
`reference inputs`
Что даёт проверке
Содержимое выхода для контекста без расхода
Состояние после успеха
Остаётся неизрасходованным
Образец
Выход с datum C
Где указан
Встроенные данные или их хеш
Что даёт проверке
Сами байты либо только их хеш
Состояние после успеха
Зависит от роли C
Образец
Выход со скриптом D
Где указан
Поле `reference script`
Что даёт проверке
Байты скрипта для требуемого хеша
Состояние после успеха
Остаётся, если D только читают
Образец
Новый выход E
Где указан
`outputs`
Что даёт проверке
Новые активы, данные и необязательный скрипт
Состояние после успеха
Появляется только при успехе

Активы ссылочного входа не участвуют в балансе, условие его расхода не проверяется, а свидетельство владельца не нужно. Это не разрешение потратить выход: после действительной транзакции он остаётся в наборе UTXO. По свежим параметрам протокола отдельно проверяются минимум ADA и состав активов самого выхода.

Хеш указывает на данные, встроенное поле хранит их

`Datum` — данные, которые проверочный скрипт Plutus получает вместе с аргументом вызова (`redeemer`) и контекстом транзакции. В старой схеме выход хранит только хеш: он доказывает соответствие, но реальные байты должны прийти отдельно, например в наборе свидетельств. Встроенный datum помещает сами данные в выход, поэтому при расходовании отдельный прообраз не требуется.

Как доказать фактический источник данных
Что записано в выходеЧто есть в цепочкеЧто показывает конструктор
Данных нетНи хеша, ни встроенных байтовСкрипт не может получить данные из этого выхода
Хеш datumТолько хешСоответствующий прообраз в наборе данных, если он нужен
Встроенный datumПолные байты внутри выходаТочное декодирование и ожидаемую схему
Ссылка с хешем datumПрочитанный выход и его хешПрообраз отдельно; ссылка сама его не создаёт
Ссылка со встроенным datumПрочитанный выход и сами байтыВерсия Plutus видит эти данные в контексте
Как доказать фактический источник данных
Что записано в выходе
Данных нет
Что есть в цепочке
Ни хеша, ни встроенных байтов
Что показывает конструктор
Скрипт не может получить данные из этого выхода
Что записано в выходе
Хеш datum
Что есть в цепочке
Только хеш
Что показывает конструктор
Соответствующий прообраз в наборе данных, если он нужен
Что записано в выходе
Встроенный datum
Что есть в цепочке
Полные байты внутри выхода
Что показывает конструктор
Точное декодирование и ожидаемую схему
Что записано в выходе
Ссылка с хешем datum
Что есть в цепочке
Прочитанный выход и его хеш
Что показывает конструктор
Прообраз отдельно; ссылка сама его не создаёт
Что записано в выходе
Ссылка со встроенным datum
Что есть в цепочке
Прочитанный выход и сами байты
Что показывает конструктор
Версия Plutus видит эти данные в контексте

Ссылочный скрипт даёт свидетельство, но не запускается сам

`Reference script` — необязательные байты скрипта, прикреплённые к выходу. Когда транзакции нужен определённый хеш, реестр может взять код из ссылочного выхода вместо повторной передачи в наборе свидетельств. Но конструктор всё равно выбирает правильную ссылку, а транзакция указывает назначение скрипта — например, расход или выпуск. Само хранение кода на UTXO ничего не исполняет.

Проверка свидетельства скрипта по цепочке доказательств

  1. 1
    Выписать требуемый хеш скрипта

    Получите его из адреса расходования, политики выпуска или другого назначения конкретной операции, а не из названия приложения.

  2. 2
    Найти источник байтов

    Проверьте, лежит ли код прямо в наборе свидетельств или в поле `reference script` выбранного UTXO. Одной ссылки без содержимого недостаточно.

  3. 3
    Пересчитать хеш

    Убедитесь, что фактический скрипт и версия его языка дают именно требуемый хеш. Похожая версия проверочного скрипта — другое свидетельство.

  4. 4
    Проверить отдельные входы Plutus

    Ссылочный скрипт меняет только источник байтов. Реестр выбирает код по хешу для конкретного назначения; для Plutus отдельно подаются аргумент вызова и бюджет исполнения, а datum — когда его требует это назначение и версия языка.

Большой встроенный datum или ссылочный скрипт увеличивает размер выхода и требуемый минимум средств; такую ссылку нельзя считать бесплатной навсегда. Берите параметры протокола и расчёт комиссии из той же сети и эры, где примут транзакцию. Залог при исполнении Plutus — отдельный набор входов с отдельной семантикой отказа.

Plutus V1: старое правило уточнено CIP-110

Первоначальная CIP-31 исходила из того, что старый скрипт Plutus нельзя использовать в транзакции со ссылочными входами. CIP-110 позже смягчила границу: Plutus V1 может участвовать, но список ссылочных входов исключается из его контекста. Поэтому проверочный скрипт V1 не получает эти данные и не должен вести себя так, будто видит их.

После включения перечитайте оба набора UTXO

Успех проверяют не по тому, что конструктор собрал CBOR. В окончательном теле транзакции снова отметьте расходуемые и ссылочные входы. Убедитесь, что первые исчезли, вторые остались с теми же ссылками и содержимым, а ожидаемые выходы появились с правильными активами, видом данных и хешем ссылочного скрипта. Общая проверка транзакции связывает этот снимок с включённым хешем.

До закрытия проверки составьте таблицу: ссылка на выход, роль, источник данных, источник скрипта, состояние до и после. Другой разработчик сможет воспроизвести вывод без кошелька автора и доступа к ключам. Подписи подтверждают полное тело транзакции, а не устное описание выбранных UTXO.

Красные флаги в конструкторе

  • ссылочный вход посчитан источником средств или исчезает из ожидаемого итогового состояния;
  • хеш datum назван встроенными данными без предъявления байтов;
  • ссылочный скрипт выбран по имени приложения, но его хеш не сравнен с требуемым;
  • Plutus V1 считают способным читать ссылочные входы после CIP-110;
  • минимум ADA, комиссия или залог зафиксированы вечной константой без свежих параметров протокола.

Источники

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

  1. Cardano CIP-31 — Reference inputs Cardano Foundation · Проверено 25 августа 2026 г. в 10:10 GMT+5
  2. Cardano CIP-32 — Inline datums Cardano Foundation · Проверено 25 августа 2026 г. в 10:10 GMT+5
  3. Cardano CIP-33 — Reference scripts Cardano Foundation · Проверено 25 августа 2026 г. в 10:10 GMT+5
  4. Cardano CIP-110 — Plutus V1 and reference inputs Cardano Foundation · Проверено 25 августа 2026 г. в 10:10 GMT+5
  5. Cardano Ledger — Babbage script and datum resolution Intersect · Проверено 25 августа 2026 г. в 10:10 GMT+5
  6. Cardano Ledger — Plutus redeemer and execution budget Intersect · Проверено 25 августа 2026 г. в 10:10 GMT+5
Материал носит информационный характер и не является индивидуальной рекомендацией. Криптоактивы связаны с риском волатильности, технических сбоев, хищения и полной потери средств.