Выполните правило возврата в точных лимитах и сохраните предмет проверки.
Native-команда lispex rule run готовит проверенное правило, принимает один строгий JSON-ввод и один раз вычисляет его на отдельном движке, который ничего не берёт извне и обязан отчитаться за каждую единицу работы и выделения внутри объявленных вами лимитов. После запуска остаётся каталог решения из пяти членов. Это подготовленный артефакт правила, ввод, записанный в закреплённом виде, чтобы тот же запрос можно было узнать потом, детерминированный результат с точной привязкой запроса, та часть записи, которую можно передать другому, и производная сводка. Исходного текста правила среди них сознательно нет.
- 01Проверенное правило
- 02Строгий JSON-ввод
- 03Решение allow
- 04Запись, которую можно проверить
1. Правило
(let ((days (cdr (car input)))
(opened (cdr (car (cdr input)))))
(if (< days 15)
(if opened "deny" "allow")
"deny"))2. Ввод
{
"days": 14,
"opened": false
}3. Один запуск в объявленных пределах
lispex rule run \
--source refund-window.lspx \
--input day-14-unopened.json \
--prepare-limits prepare-limits.json \
--eval-limits evaluation-limits.json \
--out decision
lispex rule inspect --dir decision
lispex rule verify --dir decision
lispex rule replay --dir decisionДля случая «14-й день, не открыт», который хранится вместе с этой страницей, запуск возвращает allow.
rule inspect сводит каталог без выполнения. rule verify тоже без выполнения проверяет точный набор членов, идентификаторы, хеши и привязки. rule replay один раз вычисляет записанный запрос в свежем экземпляре движка и требует того же результата. Ни одна из трёх операций не даёт полномочий.
Что связывает передаваемая часть записи
Она связывает смысл правила, ввод в закреплённом виде, точные лимиты, точную программу, которая выполнила правило, и результат, который выходит одним и тем же каждый раз. Этого достаточно, чтобы точно знать, на какой вопрос и под какими потолками был дан ответ. Израсходованный или оставшийся ресурс сюда не входит.
Чего запись не устанавливает
Кто выполнил запуск, свежо ли решение, справедлива и корректна ли политика в правиле, не использовано ли то же решение дважды. И никакого разрешения действовать за пределами процесса.
Сначала прочтите решение
Правило задаёт только два вопроса. Сколько дней прошло и был ли товар открыт. Оно не читает файлы, не обращается к сети или часам и не вызывает скрытые функции приложения-хоста.
| Ввод | Решение | Причина |
|---|---|---|
| 14-й день, товар не открыт | allow | заказ ещё находится в сроке возврата |
| 15-й день, товар не открыт | deny | срок возврата уже истёк |
| 14-й день, товар открыт | deny | открытый товар не допускается |
Значение allow или deny для рабочего процесса определяет приложение.
Лиспекс возвращает данные, но не оформляет возврат сам.
Зачем нужны четыре команды
| Команда | Действие |
|---|---|
rule run | подготавливает правило, вычисляет строгий JSON с точными лимитами и атомарно записывает каталог решения из пяти файлов |
rule inspect | читает и кратко описывает каталог без выполнения |
rule verify | без выполнения проверяет точный набор файлов, идентификаторы, хэши и связи |
rule replay | один раз выполняет записанный запрос в свежем экземпляре программы, которая выполняет правило, и требует тот же результат |
Каталог содержит подготовленный артефакт, ввод, заданный с точностью до байта, детерминированный результат с точной привязкой запроса, допустимое переносимое ядро и производную сводку. Переносимое ядро представляет собой ту часть, которая держит вместе правило, его ввод, его пределы и его результат, и этого достаточно, чтобы проверить, что именно было вычислено. Сама сводка не даёт никаких полномочий. Исходного текста правила в каталоге нет. Существующий результат не перезаписывается, а неверный ввод, изменённые или лишние файлы и символические ссылки отклоняются.
Аутентифицируйте один разрешённый ключ издателя
Native после глубокой проверки каталога может упаковать точные материалы
решения и конверт издателя в один файл .lpxdecision ограниченного размера,
формат которого задан с точностью до байта. Политику доверия создаёт получатель. Ни пакет, ни конверт не могут
сами выбрать доверенный ключ или правило.
lispex rule issue --dir decision \
--private-key issuer.pkcs8.der \
--issuer-label "Refund desk A" \
--out issuer-envelope.json
lispex rule policy create --dir decision \
--public-key issuer.spki.der \
--consumer-label "Refund receiver" \
--out recipient-policy.json
lispex rule authenticate --dir decision \
--envelope issuer-envelope.json \
--policy recipient-policy.json
lispex decision issue --dir decision \
--private-key issuer.pkcs8.der \
--issuer-label "Refund desk A" \
--out refund.lpxdecision
lispex decision inspect --bundle refund.lpxdecision
lispex decision authenticate --bundle refund.lpxdecision \
--policy recipient-policy.json
lispex decision replay --bundle refund.lpxdecision \
--policy recipient-policy.jsonПакет содержит ровно семь файлов. Это заданный с точностью до байта ввод, манифест, конверт издателя, подготовленный артефакт, переносимое ядро, артефакт результата и производная сводка. В нём нет исходника правила, исходного JSON, закрытого ключа, времени, способа выполнения и токена полномочия. Native может выпускать, проверять, аутентифицировать и повторно выполнять пакет. npm только проверяет и аутентифицирует его без сети, а выпуска и повторного выполнения там нет. Браузер и Playground не экспортируют этот модуль проверки.
Отчёт раздельно показывает целостность пакета, подпись и допуск политикой,
точную привязку запроса, свежее повторное выполнение, защиту от повторного
использования и полномочие на внешнее действие. rule authenticate не
выполняет правило, поэтому повторное выполнение имеет статус not-performed,
защита от повторного использования имеет статус not-provided, а внешнее
полномочие имеет статус absent. Метка издателя является неподписанным
описанием.
Аутентификация решения и Ваучер являются разными процессами
Переносимое ядро связывает смысловое правило, заданный с точностью до байта ввод, лимиты, точный артефакт программы, которая выполняет правило, и детерминированный результат. Этого достаточно, чтобы проверить, что именно было вычислено.
Необязательный конверт решения аутентифицирует один точный ключ, разрешённый политикой получателя. Он не устанавливает организацию, свежесть, справедливость, защиту от повторного предъявления или разрешение действовать. Ваучер является отдельным процессом со своей аутентификацией и привязкой к запросу, и запись решения не входит в него и не становится его свидетельством. Ни аутентификация решения, ни свидетельства Ваучера не превращаются во внешнее полномочие сами по себе.
Где доступна команда
Процесс rule, выпуск решения и повторное выполнение предоставляет продукт
Native. npm дополнительно предоставляет только проверочные decision inspect
и decision authenticate. Публичная браузерная сборка WebAssembly и
Playground не экспортируют эти команды решения.
Режим первого решения в Playground позволяет скачать точную передачу материалов с исходником для выбранного ввода. Распакуйте ZIP в новый каталог и выполните вложенную явную команду, чтобы перейти к этому процессу Native. Этот ZIP является материалом подготовки, а не каталогом решения, переносимым ядром, подписью или полномочием.
Куда дальше
Соберите правило по шагам в разделе Первое решающее правило или изучите зафиксированный контракт небольшого движка, который выполняет одно правило в объявленных вами пределах, в разделе Контракт ограниченного вычислителя.