MedRec

医疗记录需要创新。患者因生活事件从一个提供商的数据转移到另一个提供商的数据,导致数据分散在各个司法管辖区。在此过程中,他们无法轻松访问过往数据,因为通常是提供商而非患者保留主要管理权。因此,患者以一种破碎的方式与记录互动,这反映了这些记录的管理方式。拥有许多医院大量医疗病史的患者不应再以庞大的病历形式保留他们的病史。患者和提供商可能会在数据检索和共享的启动方面面临重大障碍,这是由于鼓励“健康信息阻塞”的经济激励所致。在网上银行和社交媒体时代,患者越来越愿意、能够并且渴望在网上和旅途中管理他们的数据。这项工作探讨了一种基于区块链的结构,其后端基于 Rinkeby 测试网络,使用以太坊进行数据存储,并使用智能合约进行数据逻辑。医疗记录包含敏感信息,因此使用 DAPPs 和智能合约可确保必需的安全功能,例如零停机时间(即,与患者相关的数据始终可供获取和更新)、隐私(患者数据应得到保护,并且只能由与患者密切相关的人员访问)和完整的数据完整性(数据不得被无权修改的人员更改)。这款 MedRec 区块链实现旨在通过将患者数据整合并组织成账本的形式来解决患者数据的大规模碎片化问题,同时提供区块链和 DAPP 所带来的优势。

因此,通过在区块链上实现医疗记录,我们实现了以下功能,而这些功能通过其他方式只能部分实现或根本无法实现。

  1. 医疗记录的不可否认性,即一旦患者从医生那里收到了处方,交易就会以数字方式存储在区块链上,并由患者和医生的私钥签名,因此,如果任何一方拒绝声明交易的所有权,则可以使用双方的公钥轻松检测到。

  2. 只有授权的医生才能建议添加到患者记录的处方。

  3. 无论医生、患者还是试图骚扰患者的攻击者,一旦添加了处方,任何相关方都无法修改该处方。

  4. 通过智能合约自动执行交易,即一旦患者授权医生建议处方,资金将从患者的钱包自动转移到患者合约,一旦医生发送处方,资金将从患者合约转移到医生的钱包。要发送的处方基于医生和患者之间的相互信任,不受应用程序的监管。

  5. 合约的创建考虑了重入、交易排序、值下溢-上溢等漏洞,因此,如果这些情况发生,该应用程序在这种情况下是安全的。

下载 APK

您可以通过 Releases 或使用此链接下载 MedRec 的最新可安装 Android 版本:MedRec.apk

如何使用

步骤 1

使用下面的链接下载或克隆此仓库

https://github.com/Abhishekkr3003/MedRec.git

步骤 2

转到项目根目录并在控制台中执行以下命令以获取所需的依赖项(确保您已成功安装 flutter)

flutter pub get 

步骤 3

连接您的设备并运行

flutter run 

截图

使用的库和工具

文件夹结构

这是 Flutter 提供的核心文件夹结构。

flutter-app/
|- android
|- assets
|- build
|- ios
|- lib
|- test
|- linux
|- macos
|- test
|- web
|- windows

这是我们在此项目中使用的文件夹结构

assets/
|- contracts/
        |- doctor.json
        |- patient.json
|- Icons/
        |- 1024.png
|-images
        |-welcomeImage.png

lib/
|- Pages/
        |- doctor_home_page.dart
        |- login.dart
        |- patient_home_page.dart
        |- splash_screen.dart
        |- view_prescription.dart

|- Utils/
        |- routes.dart
        |- routes.dart

|- main.dart

Routes

此文件包含您应用程序的所有路由。

import 'package:flutter/material.dart';
import 'package:medrec/Pages/doctor_home_page.dart';
import 'package:medrec/Pages/login.dart';
import 'package:medrec/Pages/patient_home_page.dart';

class MyRoutes {
  static const String loginPage = "/loginPage";
  static const String doctorHomePage = "/doctorHome";
  static const String patientHomePage = "/patientHome";

  static final routes = <String, WidgetBuilder>{
    loginPage: (context) => const LoginPage(),
    doctorHomePage: (context) => const DoctorHomePage(),
    patientHomePage: (context) => const PatientHomePage(),
  };
}

Main

这是应用程序的起点。所有应用程序级别的配置都在此文件中定义,即主题、路由、标题、方向等。

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:google_fonts/google_fonts.dart';
import 'Pages/splash_screen.dart';
import 'Utils/routes.dart';

void main() {
  SystemChrome.setSystemUIOverlayStyle(const SystemUiOverlayStyle(
      statusBarColor: Colors.black, statusBarIconBrightness: Brightness.light));
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        textTheme: GoogleFonts.poppinsTextTheme(
          Theme.of(context).textTheme,
        ),
      ),
      home: const Splash2(),
      routes: MyRoutes.routes,
    );
  }
}

Solidity 合约

Doctor

患者

GitHub

查看 Github