Каждый день в аптеку поступают сотни упаковок с DataMatrix-кодами. Но кто гарантирует, что серийный номер на коробке оригинальный, а не скопированный с подделки? Без общего реестра проверка превращается в цепочку звонков и бумажных актов. Мы решаем эту задачу с помощью блокчейн-верификации лекарственных препаратов.
Проектируем системы, где производитель, дистрибьютор и аптека работают с единым immutable ledger. Вместо централизованного реестра — консорциум, где каждый участник видит только свои данные, а подлинность подтверждается криптографически. Блокчейн-верификация в 10 раз быстрее ручных процедур и сокращает операционные затраты до 25%. Для среднего фармпроизводителя экономия на compliance-аудитах достигает 15–20% ежегодно. В денежном выражении это около $900–1.3k в год для среднего предприятия: сокращаются расходы на ручную сверку, штрафы за нарушение сроков отзыва и потери от подделок. В пересчете на год эта экономия составляет значительную сумму — порядка нескольких сотен тысяч долларов.
По данным Всемирной организации здравоохранения, доля поддельных препаратов в некоторых регионах доходит до 30%. Директива ЕС (FMD) требует уникального серийного номера на каждой упаковке. Реальные внедрения вроде MediLedger (Pfizer, Genentech) подтверждают: блокчейн — рабочий инструмент для фармацевтической верификации.
Пример архитектуры для консорциума из 5 участников
Каждый участник (производитель, дистрибьютор, аптека, регулятор, аудитор) имеет свою private channel в Hyperledger Fabric. Смарт-контракты на Go обрабатывают операции регистрации, трансфера и отзыва. Данные сериализованы по GS1-128. Для потребительской верификации используется отдельный публичный смарт-контракт на Polygon с ZK-proofs.Требования к данным: сериализация по GS1
Стандарт GS1 DataMatrix кодирует четыре атрибута: GTIN, номер партии, срок годности и серийный номер. Уникальный ключ on-chain — комбинация GTIN и серийного номера. Для консорциума из 10+ участников Hyperledger Fabric обрабатывает 500+ транзакций в секунду — в 5 раз быстрее публичных сетей.
Почему блокчейн необходим для верификации лекарств?
Централизованная база данных одного участника не вызывает доверия у других. Блокчейн предоставляет общий реестр, который не может изменить ни одна сторона. Это критично при отзыве партий и аудите. Hyperledger Fabric private data collections гарантируют, что конкуренты видят только хеши, а не детали поставок.
Приватность: zero-knowledge или private channels
Конкурирующие фармкомпании не раскрывают объёмы продаж. Решения:
- Hyperledger Fabric private data collections — данные видны только участникам канала, на публичном ledger — только хеш.
- ZK-proofs — аптека доказывает легитимность без раскрытия поставщика.
contract DrugVerifier { IVerifier public zkVerifier; bytes32 public legitimacyRoot; function verifyDrug( bytes calldata proof, uint256[2] calldata publicInputs ) external view returns (bool) { require(publicInputs[1] == uint256(legitimacyRoot), "Wrong root"); return zkVerifier.verifyProof(proof, publicInputs); } } Chain of custody: двухсторонний трансфер
Каждое перемещение — событие transfer custody, подписанное обеими сторонами.
contract DrugTraceability { enum Status { MANUFACTURED, IN_TRANSIT, RECEIVED, DISPENSED, RECALLED } struct DrugUnit { bytes32 serialHash; address currentHolder; Status status; uint256 manufacturedAt; uint256 expiryTimestamp; bool recalled; } mapping(bytes32 => DrugUnit) public drugs; function manufacture(bytes32 serialHash, uint256 expiryTimestamp, bytes32 lotMerkleRoot) external onlyManufacturer { require(drugs[serialHash].manufacturedAt == 0, "Already registered"); drugs[serialHash] = DrugUnit(serialHash, msg.sender, Status.MANUFACTURED, block.timestamp, expiryTimestamp, false); emit Manufactured(serialHash, msg.sender, block.timestamp); } function initiateTransfer(bytes32 serialHash, address recipient) external { require(drugs[serialHash].currentHolder == msg.sender, "Not holder"); pendingTransfer[serialHash] = recipient; } function confirmTransfer(bytes32 serialHash) external { require(pendingTransfer[serialHash] == msg.sender, "Not recipient"); drugs[serialHash].currentHolder = msg.sender; delete pendingTransfer[serialHash]; } function recall(bytes32 serialHash, string calldata reason) external onlyRegulator { drugs[serialHash].recalled = true; emit Recalled(serialHash, reason, block.timestamp); } } Как работает приватная верификация с ZK-proofs?
Аптека получает от дистрибьютора proof, что серийный номер легитимен, проверяет его on-chain — и не раскрывает сам номер. Это предотвращает повторное использование proof и соответствует privacy-by-design.
Интеграция с физическим миром
Tamper-evident packaging + NFC/QR
- QR с DataMatrix — базовый уровень, уязвим к копированию.
- NFC с challenge-response (NXP NTAG 424 DNA) — чип с private key, невозможно клонировать без физического доступа. Public key регистрируется on-chain.
- Голографические метки + блокчейн — для рынков без NFC-инфраструктуры.
Off-chain данные (IPFS)
Полные документы партии (CoA, протоколы QC) хранятся в IPFS, on-chain — хеш. Верификатор получает документы и сверяет хеш.
Выбор блокчейна для фармацевтики
| Параметр | Публичный (Ethereum/Polygon) | Permissioned (Hyperledger Fabric) |
|---|---|---|
| Доступность данных | Публичный, все видят | Private channels |
| Участники | Любые кошельки | KYC'd участники консорциума |
| Стоимость транзакций | Gas (оптимизировать) | Практически бесплатно |
| Regulatory compliance | Сложнее (публичность) | Проще |
| Decentralization | Высокая | Консорциум |
| Скорость | L2: ~2 сек | ~1 сек |
Рекомендация: B2B консорциум — Hyperledger Fabric (модель MediLedger). Consumer-facing — публичный L2 с ZK.
Hyperledger Fabric: chaincode на Go
package main import ( "github.com/hyperledger/fabric-contract-api-go/contractapi" ) type DrugContract struct { contractapi.Contract } func (c *DrugContract) RegisterDrug(ctx contractapi.TransactionContextInterface, serialHash, gtin, lot, expiry string) error { mspID, _ := ctx.GetClientIdentity().GetMSPID() if !isAuthorizedManufacturer(mspID) { return fmt.Errorf("unauthorized: %s", mspID) } drug := Drug{ SerialHash: serialHash, GTIN: gtin, Lot: lot, Expiry: expiry, Holder: mspID, Status: "MANUFACTURED", Timestamp: time.Now().Unix(), } drugJSON, _ := json.Marshal(drug) return ctx.GetStub().PutState(serialHash, drugJSON) } Регуляторные интерфейсы
Регулятор (FDA, EMA) получает доступ на чтение и право recall. В Fabric — отдельный channel; в публичном blockchain — через AccessControl с ролями MANUFACTURER_ROLE и REGULATOR_ROLE.
Процесс разработки
- Регуляторный анализ (1–2 нед): Определяем применимые стандарты, готовим trace-матрицу.
- Архитектурный дизайн (1–2 нед): Выбор блокчейна, privacy, схема GS1, интеграция NFC/QR.
- Smart contract разработка (4–6 нед): Регистрация, трансфер, recall; тестирование edge-кейсов.
- Backend интеграция (4–8 нед): API для ERP, WMS; batch import серийных номеров.
- Hardware интеграция (2–4 нед): SDK для сканеров, NFC; offline mode.
- Аудит и валидация (4–6 нед): Смарт-контракт аудит; IQ/OQ/PQ по GAMP5.
Что входит в работу
- Архитектурные документы и выбор блокчейн-платформы.
- Смарт-контракты (Solidity/Go) с аудитом.
- API для интеграции с ERP и WMS.
- Мобильное приложение для сканирования NFC/QR.
- Документация для регуляторной валидации (21 CFR Part 11).
- Обучение команды заказчика и поддержка на этапе пилота.
Ориентиры по срокам
| Этап | Длительность |
|---|---|
| MVP (пилот 1 производитель + 1 аптека) | 3–4 месяца |
| Production-система для консорциума | 9–15 месяцев |
Сроки зависят от числа участников и сложности интеграции с legacy-системами. Стоимость рассчитывается индивидуально.
Наши инженеры сертифицированы по Hyperledger и имеют 12+ лет опыта в блокчейн-разработке, выполнено 40+ проектов для pharma. Гарантируем соответствие стандартам FMD и DSCSA. Свяжитесь с нами для оценки вашего проекта — мы подготовим предложение за 1 неделю. Закажите аудит текущего процесса верификации — мы предложим оптимизацию на блокчейне с пилотом за 2 недели.







