senaite.proofchain — это дополнение для Open Source LIMS SENAITE, которое вычисляет детерминированные хеши защищаемых лабораторных полей и регистрирует их во внешнем сервисе доказательств. Исходные лабораторные данные остаются в SENAITE; за пределы LIMS передаются только хеши и технические метаданные доказательств.
Дополнение предназначено для установок SENAITE 2.x на базе Plone 5 и Python 2.7.
- регистрирует доказательства после создания или изменения защищаемых объектов SENAITE;
- сохраняет блокчейн-квитанцию, идентификатор запроса и статус проверки в аннотациях объекта;
- помещает запросы в исходящую очередь SQLite, если внешний сервис недоступен;
- проверяет текущие данные объекта по подтверждённому доказательству в блокчейне;
- отображает в пользовательском интерфейсе состояния
PENDING,OK,FAILи ошибки регистрации; - корректно обрабатывает значения UTF-8 и кириллицу при вычислении канонического хеша.
Добавьте пакет в конфигурацию buildout SENAITE:
[buildout]
eggs +=
senaite.proofchain
auto-checkout +=
senaite.proofchain
[sources]
senaite.proofchain = git https://github.com/ivanluchkov/senaite.proofchain.git rev=v0.1.0Запустите buildout и перезапустите экземпляр SENAITE:
bin/buildout -N
bin/instance restartОткройте Site Setup → Add-ons и установите SENAITE Proofchain. После этого новые защищаемые объекты будут регистрироваться автоматически.
Следующие переменные окружения должны быть доступны процессу SENAITE:
| Переменная | Обязательна | Описание |
|---|---|---|
PROOF_SERVICE_URL |
да | Базовый URL внешнего сервиса доказательств |
PROOF_SERVICE_TOKEN |
да | Общий токен аутентификации |
PROOFCHAIN_OUTBOX_SQLITE_PATH |
да | Доступный для записи путь к исходящей очереди SQLite |
PROOFCHAIN_CRITICAL_FIELDS |
нет | JSON-сопоставление типов портала и защищаемых полей |
PROOFCHAIN_RELEVANT_TYPES |
нет | JSON-список типов объектов, обрабатываемых дополнением |
PROOFCHAIN_VERIFY_ON_VIEW |
нет | Установите значение true, чтобы выполнять проверку при каждом открытии страницы объекта |
Пример:
export PROOF_SERVICE_URL=http://proof-service:8000
export PROOF_SERVICE_TOKEN=replace-with-a-random-token
export PROOFCHAIN_OUTBOX_SQLITE_PATH=/var/lib/senaite-proofchain/outbox.sqlite3
export PROOFCHAIN_CRITICAL_FIELDS='{"AnalysisRequest":["Title","ClientSampleID"],"Analysis":["Result","Unit","Method"]}'Каталог исходящей очереди должен быть постоянным и доступным для записи процессу SENAITE.
| Состояние | Значение |
|---|---|
PENDING |
Доказательство принято сервисом и ожидает подтверждения в блокчейне |
OK |
Текущие защищаемые данные соответствуют подтверждённому доказательству |
FAIL |
Текущие защищаемые данные отличаются от подтверждённого доказательства |
SUBMISSION_FAILED |
Не удалось зарегистрировать доказательство; это не является нарушением целостности |
PROOF_OUTDATED |
Сохранённая блокчейн-квитанция больше не соответствует активной схеме доказательства или удалённой записи |
Используйте действие Verify на странице объекта, чтобы обновить состояние блокчейн-квитанции и сравнить текущий хеш с доказательством в блокчейне.
Если сервис доказательств недоступен, запросы сохраняются локально. После восстановления сервиса обработайте очередь:
bin/zopepy -m senaite.proofchain.outbox_worker --onceДля непрерывной обработки:
bin/zopepy -m senaite.proofchain.outbox_worker --interval 10Записи, уже находящиеся в очереди, отправляются раньше новых, чтобы сохранить порядок.
Запустите тесты пакета из окружения buildout SENAITE:
bin/test -s senaite.proofchainДля развёртывания полного стенда с SENAITE, сервисом доказательств и Besu используйте отдельный репозиторий senaite-proofchain-demo.