Blockchain-Based Patient Consent Management System

We worked with medical centers where paper consent forms got lost and records were backdated. GDPR requires explicit and informed consent; HIPAA mandates authorization for each disclosure of protected health information. Our blockchain-based patient consent management system uses smart contracts to

Blockchain Development Services

Frequently Asked Questions

Latest works

  • image_website-b2b-advance_0.webp
    B2B ADVANCE company website development
    1441
  • image_web-applications_feedme_466_0.webp
    Development of a web application for FEEDME
    1301
  • image_websites_belfingroup_462_0.webp
    Website development for BELFINGROUP
    998
  • image_ecommerce_furnoro_435_0.webp
    Development of an online store for the company FURNORO
    1267
  • image_logo-advance_0.webp
    B2B Advance company logo design
    713
  • image_crm_enviok_479_0.webp
    Development of a web application for Enviok
    1003

We worked with medical centers where paper consent forms got lost and records were backdated. GDPR requires explicit and informed consent; HIPAA mandates authorization for each disclosure of protected health information. Our blockchain-based patient consent management system uses smart contracts to manage patient consent for healthcare data. Blockchain turns consent into a verifiable, auditable record that can be instantly revoked. In one project, a patient revoked consent while the hospital continued using the data — the blockchain recorded the violation, helping avoid a fine.

Why blockchain for consent management?

Paper archives and centralized databases don’t give patients real control. They can be forged or altered retroactively. A blockchain system is 5 times more reliable: every transaction is irreversible, signing time is fixed, and accesses are logged. We implemented contracts with granular consent: not binary "yes/no" but a choice of 8 data categories (diagnoses, lab results, imaging, genetics, mental health, HIV status, substance abuse, prescriptions) and 6 purposes (treatment, payment, healthcare ops, research, quality improvement, care coordination). Our team’s experience: 5+ years in blockchain development for medical projects, certified engineers, 30+ successful implementations. We guarantee legal validity and compliance with GDPR/HIPAA.

Criterion Paper archive Centralized DB Our blockchain solution
Record integrity Vulnerable to forgery Admin can alter Immutable
Access transparency None Logs can be deleted Full audit trail on-chain
Patient control Zero Depends on vendor Patient signs and revokes themselves
Processing time Days Hours Seconds
GDPR/HIPAA compliance Difficult Requires adaptations Built into architecture

Technical Implementation

Smart Contract Design

Solidity contract (expand)
contract ConsentRegistry { enum ConsentStatus { ACTIVE, REVOKED, EXPIRED } enum DataCategory { DIAGNOSIS, LAB_RESULTS, PRESCRIPTIONS, IMAGING, MENTAL_HEALTH, GENETIC, HIV_STATUS, SUBSTANCE_ABUSE } enum Purpose { TREATMENT, // direct treatment PAYMENT, // insurance and payment operations HEALTHCARE_OPS, // operational activities RESEARCH, // medical research QUALITY_IMPROVEMENT, // quality improvement CARE_COORDINATION // care coordination } struct Consent { bytes32 patientId; address grantee; // to whom consent is given DataCategory[] categories; // which data categories Purpose[] purposes; // for which purposes uint256 grantedAt; uint256 expiresAt; // 0 = indefinite (until revocation) ConsentStatus status; bytes32 documentHash; // hash of the consent PDF string version; // privacy policy version } mapping(bytes32 => Consent) public consents; 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; } } 

We use Solidity with OpenZeppelin for battle-tested implementations. Contracts are covered by unit tests (Foundry) and fuzzing (Echidna).

Legal Validity with EIP-712

Consent must be provable in court. EIP-712 — a standard for signing structured data — solves this. The patient signs a structured object; the signature is verified in the contract. A PDF document is generated automatically, its SHA-256 hash is stored on-chain. The patient receives a PDF copy and can compare the hash with the blockchain record. This provides irrefutable proof of consent.

EIP-712 signing example (expand)
// Patient signs structured consent data via 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); // Signature stored with consent and verified when needed 

Documentation for EIP-712 is available on the Ethereum wiki.

Emergency Break-Glass

A critical scenario — patient unconscious, no consent given, but care is needed. We implemented a break-glass mechanism: an authorized provider logs the emergency access with a justification. The patient is notified post-factum and can challenge the access within 72 hours. Each case is approved post-factum by a committee. This balances data protection and medical necessity.

contract EmergencyAccess { struct EmergencyAccessEvent { bytes32 patientId; address requester; string justification; // reason for emergency access uint256 timestamp; bool approved; // approved post-factum } // Time to challenge emergency access: 72 hours uint256 constant CHALLENGE_PERIOD = 72 hours; mapping(bytes32 => EmergencyAccessEvent[]) public emergencyLog; // Emergency access available to authorized medical providers // Logged, patient notified after leaving critical state 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 // requires post-factum approval })); emit EmergencyAccessRequested(patientId, msg.sender, justification); } } 

Integration and Compatibility

National System Integration

Different countries have different consent requirements: EU (GDPR + eHealth) requires explicit consent and granularity; US (HIPAA) — authorization form and minimum necessary; other jurisdictions — national health data laws. We customize consent templates per country and automatically load the correct form based on geolocation.

Notifications

After each data access, the patient receives a notification: email or push with details — who, when, and why accessed the records. A patient portal shows all active consents, access history (audit trail), and allows one-click revocation.

Results and Cost

Savings and Impact

Implementing a blockchain consent management system yields measurable results. Consent processing time drops from 2 days to 15 minutes. Form-filling errors decrease by 90%. Savings on paper archives, administrative costs, and compliance fines can reach 70% — for a mid-size hospital, that equates to $50,000–$100,000 annually. The average project pays for itself in 6–9 months.

Project Timelines and Cost

A typical turnkey system costs $60,000–$90,000 depending on complexity. Development takes 2 to 3 months for an MVP with one jurisdiction. Cost is calculated individually based on the number of jurisdictions, integration depth, and required performance.

Our Delivery and Expertise

What We Deliver

Component Technology
Smart contracts Solidity + OpenZeppelin
EIP-712 signatures viem / ethers.js
PDF generation PDFKit / WeasyPrint
Patient portal React + wagmi
Notifications Email (SendGrid) + Push (Web Push API)
Indexing The Graph

Included in every project:

  • Audit of current consent management processes
  • Smart contract development (ERC-1155 for consent tokenization)
  • Configuration of consent templates per jurisdiction (up to 3)
  • Integration with existing EMR via REST API
  • Patient portal (web + mobile-friendly)
  • Comprehensive documentation and staff training
  • 3 months of post-launch support

Why Work With Us

5+ years of experience in blockchain for healthcare, 30+ successful implementations across 10 countries, 15 engineers specializing in Solidity, security, and health IT. Certifications: GDPR, HIPAA, ISO 27001. Audited contracts: over 50 security audits performed.

Process

  1. Analytics — study legal requirements (GDPR/HIPAA/local), current consent workflow, integration points.
  2. Design — contract architecture, portal design, network selection (Ethereum/Polygon/private).
  3. Development — contracts, EIP-712 signatures, PDF generation, portal, notifications.
  4. Testing — unit tests (Foundry), fuzzing (Echidna), security audit (Slither), legal scenario testing.
  5. Deployment — contract publication, The Graph setup, portal deployment, data migration (if needed).

Get a developer consultation for your blockchain patient consent management system. Contact us for a free estimate.