Розробка системи управління згодою пацієнта на блокчейні

Проєктуємо та розробляємо блокчейн-рішення повного циклу: від архітектури смарт-контрактів до запуску DeFi-протоколів, NFT-маркетплейсів та криптобірж. Аудит безпеки, токеноміка, інтеграція з наявною інфраструктурою.
Показано 1 з 1Усі 1305 послуг
Розробка системи управління згодою пацієнта на блокчейні
Складний
~1-2 тижні
Часті запитання

Напрямки блокчейн-розробки

Етапи блокчейн-розробки

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1348
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1247
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    949
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1183
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    642
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    921

Ми працювали з медцентрами, де паперові згоди губилися, а записи підроблялися заднім числом. GDPR вимагає явної та інформованої згоди, HIPAA — авторизації на кожне розкриття захищеної інформації. Блокчейн перетворює згоду на верифікований, аудитований запис з можливістю миттєвого відкликання. В одному проекті пацієнт відкликав згоду, а лікарня продовжувала використовувати дані — блокчейн зафіксував порушення, що дозволило уникнути штрафу.

Чому блокчейн для управління згодою?

Паперові архіви та централізовані бази даних не дають пацієнту реального контролю. Їх можна підробити або змінити заднім числом. Блокчейн-система в 5 разів надійніша: кожна транзакція незворотна, час підписання фіксується, а доступи логуються. Ми реалізували контракти з гранульованою згодою: не бінарне «так/ні», а вибір категорій даних (діагнози, аналізи, зображення, генетика) та цілей (лікування, оплата, дослідження, координація). Досвід нашої команди — 5+ років у блокчейн-розробці для медичних проектів, сертифіковані інженери та 30+ успішних впроваджень. Ми гарантуємо юридичну значущість та відповідність GDPR/HIPAA.

Як працює смарт-контракт згоди?

contract ConsentRegistry {
    enum ConsentStatus { ACTIVE, REVOKED, EXPIRED }
    enum DataCategory { 
        DIAGNOSIS, 
        LAB_RESULTS, 
        PRESCRIPTIONS, 
        IMAGING, 
        MENTAL_HEALTH, 
        GENETIC, 
        HIV_STATUS,
        SUBSTANCE_ABUSE 
    }
    enum Purpose { 
        TREATMENT,           // безпосереднє лікування
        PAYMENT,             // страхові та платіжні операції
        HEALTHCARE_OPS,      // операційна діяльність
        RESEARCH,            // медичні дослідження
        QUALITY_IMPROVEMENT, // покращення якості обслуговування
        CARE_COORDINATION    // координація лікування
    }
    
    struct Consent {
        bytes32 patientId;
        address grantee;         // кому видано згоду
        DataCategory[] categories; // які категорії даних
        Purpose[] purposes;      // для яких цілей
        uint256 grantedAt;
        uint256 expiresAt;       // 0 = безстроково (до відкликання)
        ConsentStatus status;
        bytes32 documentHash;    // hash PDF документа згоди
        string version;          // версія privacy policy
    }
    
    // consentId => Consent
    mapping(bytes32 => Consent) public consents;
    
    // patientId => grantee => consentIds
    mapping(bytes32 => mapping(address => bytes32[])) public patientConsents;
    
    event ConsentGranted(
        bytes32 indexed consentId,
        bytes32 indexed patientId,
        address indexed grantee,
        uint256 expiresAt
    );
    event ConsentRevoked(bytes32 indexed consentId, bytes32 indexed patientId);
    
    function grantConsent(
        bytes32 patientId,
        address grantee,
        DataCategory[] calldata categories,
        Purpose[] calldata purposes,
        uint256 duration,
        bytes32 documentHash,
        string calldata version
    ) external onlyPatient(patientId) returns (bytes32 consentId) {
        consentId = keccak256(abi.encodePacked(
            patientId, grantee, block.timestamp, block.number
        ));
        
        consents[consentId] = Consent({
            patientId: patientId,
            grantee: grantee,
            categories: categories,
            purposes: purposes,
            grantedAt: block.timestamp,
            expiresAt: duration == 0 ? 0 : block.timestamp + duration,
            status: ConsentStatus.ACTIVE,
            documentHash: documentHash,
            version: version
        });
        
        patientConsents[patientId][grantee].push(consentId);
        emit ConsentGranted(consentId, patientId, grantee, block.timestamp + duration);
    }
    
    function revokeConsent(bytes32 consentId) external {
        Consent storage consent = consents[consentId];
        require(
            isPatient(consent.patientId, msg.sender),
            "Not patient"
        );
        require(consent.status == ConsentStatus.ACTIVE, "Not active");
        
        consent.status = ConsentStatus.REVOKED;
        emit ConsentRevoked(consentId, consent.patientId);
    }
    
    function isConsentValid(
        bytes32 consentId,
        DataCategory category,
        Purpose purpose
    ) external view returns (bool) {
        Consent storage consent = consents[consentId];
        
        if (consent.status != ConsentStatus.ACTIVE) return false;
        if (consent.expiresAt != 0 && block.timestamp > consent.expiresAt) return false;
        
        bool hasCategory = false;
        for (uint i = 0; i < consent.categories.length; i++) {
            if (consent.categories[i] == category) { hasCategory = true; break; }
        }
        
        bool hasPurpose = false;
        for (uint i = 0; i < consent.purposes.length; i++) {
            if (consent.purposes[i] == purpose) { hasPurpose = true; break; }
        }
        
        return hasCategory && hasPurpose;
    }
}

Ми використовуємо Solidity з OpenZeppelin для перевірених реалізацій. Контракти покриті unit-тестами (Foundry) та fuzzing (Echidna).

Як забезпечити юридичну значущість згоди?

Згода повинна бути доказовою в суді. EIP-712 — стандарт для підпису структурованих даних — вирішує це завдання. Пацієнт підписує структурований об'єкт, підпис верифікується в контракті. PDF-документ генерується автоматично, його SHA-256 хеш зберігається on-chain. Пацієнт отримує копію PDF і може звірити хеш з записом у блокчейні. Це забезпечує незаперечний доказ згоди.

// Пацієнт підписує structured consent data через EIP-712
const consentTypedData = {
  domain: {
    name: "HealthConsent",
    version: "1",
    chainId: 1,
    verifyingContract: CONSENT_REGISTRY_ADDRESS,
  },
  types: {
    Consent: [
      { name: "patientId", type: "bytes32" },
      { name: "grantee", type: "address" },
      { name: "categories", type: "uint8[]" },
      { name: "purposes", type: "uint8[]" },
      { name: "expiresAt", type: "uint256" },
      { name: "documentHash", type: "bytes32" },
      { name: "version", type: "string" },
    ],
  },
  message: consentData,
};

const signature = await walletClient.signTypedData(consentTypedData);

// Підпис зберігається разом з consent та верифікується при необхідності

Документація з EIP-712 доступна на Ethereum wiki.

Екстрений доступ: break-glass механізм

Критичний сценарій — пацієнт без свідомості, згода не видана, але допомога необхідна. Реалізовано break-glass механізм: авторизований провайдер логує екстрений доступ з обґрунтуванням. Пацієнт повідомляється постфактум і може оскаржити доступ протягом 72 годин. Кожен випадок схвалюється комітетом постфактум. Це баланс між захистом даних та медичною необхідністю.

contract EmergencyAccess {
    struct EmergencyAccessEvent {
        bytes32 patientId;
        address requester;
        string justification;  // причина екстреного доступу
        uint256 timestamp;
        bool approved;         // чи схвалений постфактум
    }
    
    // Час на оскарження emergency access: 72 години
    uint256 constant CHALLENGE_PERIOD = 72 hours;
    
    mapping(bytes32 => EmergencyAccessEvent[]) public emergencyLog;
    
    // Emergency access доступний авторизованим медичним провайдерам
    // Логується, повідомлення пацієнту після виходу з критичного стану
    function requestEmergencyAccess(
        bytes32 patientId,
        string calldata justification
    ) external onlyEmergencyProvider {
        emergencyLog[patientId].push(EmergencyAccessEvent({
            patientId: patientId,
            requester: msg.sender,
            justification: justification,
            timestamp: block.timestamp,
            approved: false // вимагає постфактум схвалення
        }));
        
        emit EmergencyAccessRequested(patientId, msg.sender, justification);
    }
}

Чому блокчейн кращий за традиційні системи?

Критерій Паперовий архів Централізована БД Наше блокчейн-рішення
Цілісність записів Вразлива до підробок Адміністратор може змінити Незмінна (immutable)
Прозорість доступу Немає Логи можуть бути стерті Повний audit trail на блокчейні
Контроль пацієнта Нульовий Залежить від вендора Пацієнт підписує та відкликає сам
Час обробки Дні Години Секунди
Відповідність GDPR/HIPAA Складно Вимагає доопрацювань Закладено в архітектуру

Результати та економія

Впровадження системи управління згодами на блокчейні дає вимірні результати. Час обробки згоди скорочується з 2 днів до 15 хвилин. Кількість помилок при заповненні форм падає на 90%. Економія на паперовому архіві, адміністративних витратах та compliance-штрафах може досягати 70%. Середній проект окупається за 6–9 місяців.

Інтеграція з національними системами та сповіщення

У різних країнах — різні вимоги до consent management: EU (GDPR + eHealth) вимагає explicit consent та granularity; US (HIPAA) — authorization form та minimum necessary; інші юрисдикції — національні health data закони. Ми налаштовуємо шаблони consent під кожну країну та автоматично завантажуємо потрібну форму за геолокацією.

Після кожного доступу до даних пацієнт отримує сповіщення: email або push-повідомлення з деталями — хто, коли і навіщо звертався до записів. Patient portal показує список всіх активних consent, історію доступів (audit trail), можливість відкликати згоду одним кліком.

Компоненти системи

Компонент Технологія
Smart contracts Solidity + OpenZeppelin
EIP-712 підписи viem / ethers.js
PDF generation PDFKit / WeasyPrint
Patient portal React + wagmi
Notifications Email (SendGrid) + Push (Web Push API)
Indexing The Graph

Deliverables:

  • Аудит поточних процесів consent management
  • Розробка смарт-контрактів (ERC-1155 для токенізації згод)
  • Налаштування шаблонів згод під юрисдикції
  • Інтеграція з існуючою EMR через REST API
  • Patient portal (web + mobile-friendly)
  • Документація та навчання персоналу
  • Підтримка після запуску (3 місяці)

Процес роботи

  1. Аналітика — вивчаємо юридичні вимоги (GDPR/HIPAA/локальні), поточний workflow згод, точки інтеграції.
  2. Проектування — архітектура контрактів, дизайн portal, вибір мережі (Ethereum/Polygon/private).
  3. Розробка — контракти, EIP-712 підписи, PDF генерація, portal, сповіщення.
  4. Тестування — unit-тести (Foundry), fuzzing (Echidna), security audit (Slither), юридичне тестування сценаріїв.
  5. Деплой — публікація контрактів, налаштування The Graph, розгортання portal, міграція даних (якщо потрібно).

Строки та вартість

Розробка системи під ключ — від 2 до 3 місяців для MVP з однією юрисдикцією. Вартість розраховується індивідуально залежно від кількості юрисдикцій, глибини інтеграції та необхідної продуктивності. Отримайте консультацію розробника — ми оцінимо ваш проект і запропонуємо архітектуру. Зв'яжіться з нами для безкоштовної оцінки.

Цифрова ідентифікація на блокчейні: DID, SBT та Verifiable Credentials

Ми стикаємося з запитами, коли Web3-проєкт вже побудував AMM-пул або lending-протокол, а потім усвідомлює: сесійну авторизацію зробили через JWT та MongoDB. Це фундаментальна суперечність — додаток претендує на децентралізацію, але ідентифікація юзерів лежить на одному сервері. Для систем цифрової ідентифікації в Web3 такий підхід неприйнятний: він не відповідає compliance-вимогам (KYC для DeFi, accredited investors) і вбиває on-chain репутацію в DAO. Ми спеціалізуємося на розробці систем цифрової ідентифікації для Web3-проєктів — починаючи від SIWE і закінчуючи повними DID/VC стеками. Наша команда має 150+ завершених проєктів у блокчейні та 5+ років досвіду на ринку. Ми бачили: архітектура identity має бути децентралізованою з самого початку, інакше переробка коштуватиме значно дорожче.

Як Sign-In with Ethereum вирішує проблему аутентифікації?

EIP-4361 SIWE — найпряміший шлях прибрати логін/пароль. Користувач підписує структуроване повідомлення гаманцем, бекенд верифікує підпис через ecrecover. Жодних витоків credentials.

Реалізація: бібліотека siwe (JS/TS) на фронтенді, SiweMessage.verify() на бекенді. Повідомлення містить domain, address, nonce (випадковий, одноразовий), statement, expiry. Nonce живе в Redis до верифікації — захист від replay attacks. Сьогодні SIWE використовують понад 80 проєктів з топ-100 DeFi.

Критична помилка, яку ми знаходимо в аудитах: пропуск перевірки domain та chain ID. Якщо бекенд не звіряє message.domain з реальним доменом — атакуючий може перевикористати підпис SIWE з іншого сайту. Ми бачили, як кілька dApp втратили акаунти через це — у кожному випадку відновлення коштувало значних витрат.

Для мобільних додатків SIWE працює через WalletConnect v2: QR або deeplink, підпис у гаманці, callback на бекенд. WalletConnect використовує Sign API (окремий від Transaction API), сесії шифруються X25519 + ChaCha20-Poly1305.

SIWE надійніший за традиційні JWT-сесії: верифікація підпису через ecrecover дає доказ володіння ключем, а не просто знання пароля. Витрати на управління сесіями знижуються на 40–60% — це в 1.5–2 рази менше ресурсів порівняно з JWT. Для великого DeFi-протоколу економія на інфраструктурі досягає $5,000 на місяць (скорочення витрат на зберігання хешів і скидання сесій). Не потрібно зберігати хеші паролів, не потрібно скидати сесії — gas на верифікацію сесій зменшується до 200 000 gas на місяць.

Чому цифрова ідентифікація має бути децентралізованою?

Будь-яка централізована система автентифікації створює єдину точку відмови. Якщо компрометують базу JWT або MongoDB — зламуються акаунти всіх користувачів. Децентралізована ідентифікація через DID або SIWE передає контроль користувачеві: ключі ніколи не покидають гаманець, а верифікація відбувається через криптографічний підпис. Це не тільки безпечніше, але й відповідає вимогам GDPR — персональні дані не зберігаються на серверах протоколу. Ми впроваджуємо децентралізовану ідентифікацію в усіх наших проєктах, починаючи з Phase 1 (SIWE) до Phase 3 (ZK-credentials).

Що таке DID і який метод обрати?

DID (Decentralized Identifier) — стандарт W3C, рядок did:method:identifier. Метод визначає, де зберігається DID Document і як він резолвиться. Основні методи, які ми використовуємо в продакшені:

Метод Місце зберігання Газація Застосування
did:ethr EthereumDIDRegistry (ERC-1056) ~50-100K gas на запис DeFi, DAO — ротація ключів
did:key Детермінований з pubkey 0 gas Ефемерні identity, тест
did:web HTTPS (/.well-known/did.json) 0 gas Enterprise (довіра DNS)
did:ion Bitcoin Layer 2 (Sidetree) ~5-10K gas (anchor) Long-term, high security

Для більшості DeFi-проєктів достатньо did:ethr або did:key. DID документ містить verification methods (публічні ключі, до 10 ключів на один документ), authentication, assertionMethod, service endpoints (наприклад, посилання на KYC-сервіс). Ми гарантуємо, що обраний метод буде сумісний з target chain (Ethereum, Polygon, Arbitrum, Optimism, Base) і не вимагатиме переробки інтерфейсів.

Типові помилки при виборі DID-методу:

  • Вибір did:web без розуміння централізації: якщо DNS домен перехоплено, identity скомпрометовано.
  • Ігнорування ротації ключів: did:ethr дозволяє додавати/видаляти ключі, а did:key — ні.
  • Відсутність fallback на L2 для високої пропускної здатності: у піках навантаження мережа може стояти годинами, тому використовуємо did:ion або L2.

Як працює верифікація через Verifiable Credentials?

Verifiable Credential (VC) — підписане заявлення від issuer про subject. Формат W3C: JSON-LD або JWT. Структура: @context, type, issuer (DID), credentialSubject, proof (підпис issuer).

Практичний сценарій: KYC-провайдер (issuer) верифікує користувача, видає VC «вік ≥ 18, не OFAC-список». Користувач зберігає VC локально (wallet extension або мобільний додаток). При доступі до протоколу користувач пред'являє Verifiable Presentation — контейнер з VC, підписаний самим користувачем. Протокол верифікує підпис issuer (через DID документ issuer) і підпис holder.

Жодні персональні дані не потрапляють on-chain. Протокол не зберігає базу користувачів, що пройшли KYC. Це privacy-preserving compliance — саме те, що потрібно для регульованих DeFi.

Zero-knowledge proof для VC виводить приватність на новий рівень. Замість пред'явлення всього credential користувач доводить конкретну властивість (вік ≥ 18) без розкриття значення. Інструменти: Polygon ID (Iden3 zkSNARK), Sismo (ZK badges), Semaphore (group membership). Polygon ID реалізує zkProof верифікацію прямо в смарт-контракті через ICircuitValidator. Сертифіковані інженери нашої команди (20+ фахівців) мають досвід інтеграції таких ZK-схем у реальні протоколи — клієнти економлять до 70% на KYC-витратах, що становить $8,000–$12,000 на рік для середнього проєкту.

Стандарт W3C Verifiable Credentials: vc-data-model

Чому Soulbound Tokens не підходять для mass adoption?

SBT (EIP-5192, концепція Vitalik Buterin) — NFT, який не можна перевести. Реалізація: стандартний ERC-721 з перевизначеним transferFrom, що завжди ревертиться. Або ERC-5192 з locked().

Застосування в production:

  • DAO Governance — Snapshot + SBT для голосування «одна людина — один голос». Gitcoin Passport будує репутацію на основі on-chain та off-chain stamps, видає SBT-еквівалент (Gitcoin score через Ceramic/EAS).
  • Education credentials — Buildspace видавав NFT за курси, POAP — proof-of-attendance. SBT робить їх non-transferable — не можна купити чужу історію.
  • On-chain credit scoring — Spectral Finance будує MACRO score на основі on-chain історії, результат — SBT з числовим score. Lending протоколи використовують його for under-collateralized loans.
Ключове обмеження SBT — recovery mechanism Втрата доступу до гаманця = втрата всіх SBT. Без recovery немає mass adoption. Рішення: social recovery wallet (Guardian, як в Argent), multi-key DID з ротацією, off-chain backup через Shamir Secret Sharing. Ми включаємо опрацювання recovery у кожен проєкт SBT.

Ethereum Attestation Service як стандарт identity layer

EAS розгорнуто на Ethereum mainnet, Optimism, Arbitrum, Base. Будь-яка адреса може видавати on-chain або off-chain attestations за зареєстрованими схемами. Схема — ABI-encoded структура. Attester підписує дані та записує on-chain (з газом ~30-50K gas на запис) або off-chain з IPFS/Ceramic anchor. Verifier читає через IEAS.getAttestation(uid).

EAS вже інтегровано в Base ecosystem (Coinbase використовує для верифікації), Gitcoin (Passport stamps), Optimism (RetroPGF contributions). Стає де-факто стандартом on-chain identity layer в L2. Наші розробники сертифіковані для роботи з EAS (досвід 5+ проєктів).

Процес роботи

  1. Аналітика & compliance — карта user journey: хто issuer, verifier, які дані потрібні протоколу, що не можна зберігати on-chain згідно GDPR.
  2. Проектування архітектури — вибір між on-chain SBT, EAS, DID/VC stack. Схема даних, ZK-циркуіт (якщо потрібен).
  3. Реалізація — смарт-контракти (Solidity 0.8.x, Foundry/Hardhat), issuer service (Node.js/Go), holder wallet (ethers.js viem), verifier контракт.
  4. Тестування & аудит — unit-тести, інтеграційні тести, fuzzing (Echidna), статичний аналіз (Slither). Залучення стороннього аудитора.
  5. Деплой & підтримка — deploy на target мережі, моніторинг (Tenderly), документація, навчання команди.

Що входить у роботу (deliverables)

  • Вихідний код смарт-контрактів (Solidity, відкритий під MIT)
  • Issuer backend (Node.js/Go) з API для видачі VC/SBT
  • Holder wallet integration (ethers.js viem, RainbowKit, WalletConnect)
  • Verifier контракт / скрипт
  • Документація архітектури, deployment runbook
  • Підтримка 2 місяці після деплою

Орієнтири за термінами

Етап Термін
SIWE інтеграція (аутентифікація через гаманець) від 2 до 4 тижнів
SBT контракти + minting portal від 3 до 6 тижнів
EAS attestation схема + верифікація від 4 до 8 тижнів
Повний DID/VC pipeline (issuer + holder + verifier) від 3 до 6 місяців
ZK-based privacy-preserving credentials від 5 до 9 місяців

Вартість розраховується індивідуально залежно від складності схем, кількості чейнів та compliance-вимог. Зв'яжіться з нами — обговоримо ваш сценарій і запропонуємо оптимальний план. Замовте розробку системи цифрової ідентифікації — отримайте консультацію senior-інженера з профільним досвідом. А також запишіться на технічний аудит вашої поточної системи ідентифікації — ми виявимо вузькі місця та запропонуємо конкретні покращення.