Сначала распределите выходы по ролям
`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Выписать требуемый хеш скрипта
Получите его из адреса расходования, политики выпуска или другого назначения конкретной операции, а не из названия приложения.
- 2Найти источник байтов
Проверьте, лежит ли код прямо в наборе свидетельств или в поле `reference script` выбранного UTXO. Одной ссылки без содержимого недостаточно.
- 3Пересчитать хеш
Убедитесь, что фактический скрипт и версия его языка дают именно требуемый хеш. Похожая версия проверочного скрипта — другое свидетельство.
- 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, комиссия или залог зафиксированы вечной константой без свежих параметров протокола.
Источники
Мы используем прямые ссылки и фиксируем дату проверки. Полный текст чужих материалов не перепечатывается.
- Cardano CIP-31 — Reference inputs Cardano Foundation · Проверено 25 августа 2026 г. в 10:10 GMT+5
- Cardano CIP-32 — Inline datums Cardano Foundation · Проверено 25 августа 2026 г. в 10:10 GMT+5
- Cardano CIP-33 — Reference scripts Cardano Foundation · Проверено 25 августа 2026 г. в 10:10 GMT+5
- Cardano CIP-110 — Plutus V1 and reference inputs Cardano Foundation · Проверено 25 августа 2026 г. в 10:10 GMT+5
- Cardano Ledger — Babbage script and datum resolution Intersect · Проверено 25 августа 2026 г. в 10:10 GMT+5
- Cardano Ledger — Plutus redeemer and execution budget Intersect · Проверено 25 августа 2026 г. в 10:10 GMT+5
