Giới thiệu dự án

Bối cảnh ngành và thực trạng phân phối vắc xin

Trong giai đoạn đại dịch toàn cầu, thế giới đối mặt với thách thức phân phối hơn 15.7 tỷ liều vắc xin đến hơn 7 tỷ người. Quá trình sản xuất và lưu thông dược phẩm sinh học, đặc biệt là vắc xin COVID-19 (yêu cầu điều kiện bảo quản nghiêm ngặt từ 2°C đến 8°C hoặc siêu lạnh từ -80°C đến -60°C), đối mặt với nguy cơ đứt gãy chuỗi cung ứng dây chuyền lạnh (Cold Chain). Theo các báo cáo y tế quốc tế, khoảng 50% số vắc xin bị lãng phí hàng năm trên toàn cầu do sự cố kiểm soát nhiệt độ và quản lý hậu cần kém hiệu quả.

Bên cạnh đó, sự xuất hiện của vắc xin giả, sự thiếu minh bạch trong khâu phân bổ và rào cản thông tin giữa các bên trung gian đã làm suy giảm nghiêm trọng niềm tin của cộng đồng đối với các chiến dịch tiêm chủng mở rộng.

Vấn đề nghiên cứu (Problem Statement)

Các hệ thống quản lý chuỗi cung ứng truyền thống dựa trên cơ sở dữ liệu tập trung (Centralized Database) bộc lộ ba điểm yếu cốt tử:

  1. Rủi ro sửa đổi dữ liệu (Single Point of Failure & Tampering): Dữ liệu nguồn gốc và lịch sử vận chuyển có thể bị chỉnh sửa trái phép bởi quản trị viên hệ thống hoặc tin tặc nhằm che giấu sự cố hỏng hóc lô hàng.
  2. Thiếu khả năng giám sát điều kiện bảo quản thời gian thực: Không có cơ chế tự động ghi nhận và đối soát liên tục các chỉ số nhiệt độ, độ ẩm của lô vắc xin trong suốt hành trình từ kho đến người tiêm.
  3. Quy trình thủ công, phụ thuộc bên trung gian: Việc đối soát chứng từ, chữ ký tay tốn nhiều nhân lực, dễ xảy ra sai sót và không cho phép người tiêm kiểm tra nguồn gốc tức thì (Real-time Traceability).

Mục tiêu của đề tài

  1. Xây dựng hệ thống Smart Contract đa tầng: Triển khai trên mạng lưới Blockchain tương thích EVM (Binance Smart Chain / Polygon) nhằm số hóa quy trình xác thực quyền sở hữu và chuyển giao lô vắc xin qua 5 giai đoạn: Nhà sản xuất -> Kho bảo quản -> Nhà phân phối -> Điểm tiêm chủng -> Người tiêm chủng.
  2. Phát triển hệ thống nhúng IoT giám sát thời gian thực: Tích hợp các vi điều khiển (Arduino Nano, ESP8266 NodeMCU) cùng cảm biến nhiệt - ẩm DHT11 và module truyền thông Sim800 GSM/GPRS/RF để đo đạc và truyền dữ liệu điều kiện bảo quản về máy chủ.
  3. Xây dựng kiến trúc lưu trữ và xử lý lai (Hybrid Architecture): Kết hợp lưu trữ phân tán IPFS cho siêu dữ liệu (Metadata), cơ sở dữ liệu NoSQL MongoDB Atlas trên nền tảng NestJS Backend, và DApp giao diện React kết nối ví Web3 Metamask.
  4. Tối ưu hóa năng lượng cho phần cứng IoT: Thiết kế giải thuật phân phối chu kỳ gửi gói tin nhằm kéo dài tuổi thọ nguồn pin sạc trong quá trình vận chuyển cơ động.

Phạm vi và giới hạn đề tài

  • Phạm vi: Mô phỏng hoàn chỉnh luồng nghiệp vụ của 5 chủ thể trong chuỗi cung ứng vắc xin COVID-19, tích hợp giám sát phần cứng tại kho và xe chuyên chở.
  • Giới hạn kỹ thuật: Hệ thống thử nghiệm DApp giới hạn tải ở mức 200 phiên kết nối đồng thời; module IoT sử dụng cảm biến DHT11 (độ chính xác ±2°C) để xác thực thuật toán trước khi triển khai cảm biến công nghiệp PT100.

Phân tích và thiết kế giải pháp

Phân tích hiện trạng và đánh giá giải pháp

Tiêu chí Hệ thống tập trung (RDBMS/Cloud) Hyperledger Fabric (Enterprise) Giải pháp đề xuất (BSC + IoT + IPFS)
Tính minh bạch & Bất biến Thấp (Admin có toàn quyền chỉnh sửa) Cao (Permissioned ledger) Tuyệt đối (Public/Consortium Blockchain)
Chi phí vận hành & Phí Gas Cố định theo máy chủ Chi phí duy trì hạ tầng Node cao Rất thấp (~0.001 - 0.005 BNB/giao dịch trên BSC)
Tốc độ sinh khối (Block Time) Tức thời < 1 giây ~3 giây (BSC PoSA Consensus)
Khả năng tiếp cận cộng đồng Hạn chế qua cổng thông tin đóng Yêu cầu cấp quyền thành viên Mở hoàn toàn (Tra cứu qua DApp/Web3 Explorer)
Tích hợp cảm biến vật lý Rời rạc, dễ can thiệp API Phức tạp trong xác thực thiết bị Tự động hóa qua IoT Manager Smart Contract

Phân loại yêu cầu người dùng (Mô hình MoSCoW)

  • Must Have: Hợp đồng thông minh kiểm soát luồng giao dịch tuần tự (nextAction), mã hóa lô vắc xin bằng thuật toán băm SHA-256, tự động cảnh báo ngưỡng nhiệt độ vi phạm.
  • Should Have: Đồng bộ dữ liệu giao dịch về MongoDB qua Web3 Event Listener để tối ưu tốc độ đọc, xuất mã QR động cho từng lô hàng.
  • Could Have: Chuyển đổi linh hoạt giữa mạng BSC Testnet và Polygon Mumbai.
  • Won't Have: Thanh toán tiền tệ trực tiếp cho hợp đồng mua bán vắc xin tự động trên Mainnet trong giai đoạn này.

Thiết kế kiến trúc hệ thống

Kiến trúc giải pháp được phân tầng rõ ràng nhằm đảm bảo tính toàn vẹn dữ liệu và hiệu năng phản hồi:

Ngăn xếp công nghệ (Technology Stack)

  • Blockchain Core: Binance Smart Chain (BSC Testnet Chain ID: 97), Polygon (Mumbai Testnet Chain ID: 80001).
  • Smart Contract: Solidity v0.8.0+, Truffle Suite v5.x, Remix IDE.
  • Storage Layer: IPFS (InterPlanetary File System - Merkle DAG Protocol), MongoDB Atlas v5.0.
  • Backend Framework: NestJS v8.0 (Node.js LTS, TypeScript), Ethers.js v5.4, Web3.js v1.5.
  • Hardware & IoT: Vi điều khiển ATmega328P (Arduino Nano V3), ESP8266 NodeMCU Wi-Fi SoC, SIMCom SIM800 GSM/GPRS, Cảm biến nhiệt - ẩm DHT11.

Thiết kế hệ thống Smart Contract

Hệ thống hợp đồng thông minh được module hóa thành 5 contracts chính để tối ưu chi phí Gas và dễ dàng nâng cấp logic nghiệp vụ:

  1. ContractManager.sol: Lưu trữ và định tuyến địa chỉ giữa các contract; quản lý Whitelist quản trị viên.
  2. IoTManagerContract.sol: Quản lý danh bạ các Node IoT, định danh địa chỉ ví thiết bị và số lượng cảm biến kết nối.
  3. VaccineUserExtended.sol: Quản lý thông tin định danh (Role, Profile Hash, Status) của các thực thể tham gia chuỗi.
  4. VaccineSystemStorage.sol: Lưu trữ trạng thái cấu trúc dữ liệu của từng phân đoạn: Producer, Warehouse, Distributor, VaccinationStation, ObjectInjection.
  5. VaccineSupplyChain.sol: Bộ điều phối logic trung tâm, kiểm tra quyền hạn thực thi hàm (onlyProducer, onlyWarehouser,...) và bước hành động tiếp theo (nextAction).

Thiết kế giao diện lập trình ứng dụng (API Endpoints)

// Danh mục API quản lý dữ liệu chuỗi cung ứng trên máy chủ NestJS
GET    /api/v1/process/all             // Lấy danh sách giao dịch sản xuất lô vắc xin
POST   /api/v1/process                 // Đồng bộ thông tin khởi tạo lô hàng từ Blockchain
GET    /api/v1/warehouse/:batchNo      // Truy vấn thông tin tiếp nhận và lưu kho
POST   /api/v1/warehouse               // Lưu trữ dữ liệu xác nhận nhập kho
GET    /api/v1/distributor/:batchNo    // Lấy lộ trình và thông tin đơn vị phân phối
POST   /api/v1/distributor             // Ghi nhận dữ liệu điều phối vận chuyển
GET    /api/v1/vaccinationstation/all  // Danh sách các lô hàng tại trạm tiêm chủng
POST   /api/v1/vaccinationstation      // Xác nhận tiếp nhận lô hàng tại điểm tiêm
GET    /api/v1/objectinjection/:idCard // Tra cứu lịch sử mũi tiêm của công dân
POST   /api/v1/objectinjection         // Ghi nhận bệnh án và mã lô tiêm thực tế
GET    /api/v1/temperature/latest      // Lấy chỉ số nhiệt độ, độ ẩm mới nhất từ IoT
POST   /api/v1/temperature             // Tiếp nhận Payload dữ liệu đo từ Sim800/ESP8266

Implementation và kết quả

Quá trình phát triển và hiện thực kỹ thuật

1. Cấu hình triển khai đa chuỗi (Multi-chain Deployment với Truffle)

Tệp tin cấu hình mạng truffle-config.js cho phép triển khai hợp đồng thông minh song song trên BSC Testnet và Polygon Mumbai:

const HDWalletProvider = require('@truffle/hdwallet-provider');
require('dotenv').config();

module.exports = {
  networks: {
    bscTestnet: {
      provider: () => new HDWalletProvider(
        [process.env.PRIVATE_KEY],
        `https://data-seed-prebsc-1-s1.binance.org:8545/`
      ),
      network_id: 97,
      confirmations: 2,
      timeoutBlocks: 200,
      skipDryRun: true
    },
    polygonMumbai: {
      provider: () => new HDWalletProvider(
        process.env.MNEMONIC_PHRASE,
        `https://rpc-mumbai.maticvigil.com/v1/${process.env.API_KEY}`
      ),
      network_id: 80001,
      confirmations: 2,
      gas: 6000000,
      gasPrice: 10000000000,
      skipDryRun: true
    }
  },
  compilers: {
    solc: {
      version: "0.8.11",
      settings: {
        optimizer: { enabled: true, runs: 200 }
      }
    }
  }
};

2. Giải thuật tạo mã định danh lô hàng (Batch Number Hashing)

Nhà sản xuất khởi tạo lô vắc xin bằng hàm băm mật mã học kết hợp địa chỉ ví người tạo và dấu thời gian block:

$$\text{batchNo} = \text{keccak256}(\text{abi.encodePacked}(\text{msg.sender}, \text{block.timestamp}))$$

// Trích đoạn logic chuyển giao trạng thái trong VaccineSupplyChain.sol
enum WorkflowStatus { PRODUCED, WAREHOUSED, IN_TRANSIT, DELIVERED, INJECTED }

struct BatchTracker {
    bytes32 batchNo;
    WorkflowStatus status;
    address currentOwner;
    uint256 optimumMinTemp;
    uint256 optimumMaxTemp;
}

mapping(bytes32 => BatchTracker) public batches;

function dispatchToWarehouse(bytes32 _batchNo, address _warehouseAddress) public {
    require(batches[_batchNo].status == WorkflowStatus.PRODUCED, "Invalid stage transition");
    require(batches[_batchNo].currentOwner == msg.sender, "Caller is not the authorized producer");
    
    batches[_batchNo].status = WorkflowStatus.WAREHOUSED;
    batches[_batchNo].currentOwner = _warehouseAddress;
    
    emit StageUpdated(_batchNo, WorkflowStatus.WAREHOUSED, _warehouseAddress, block.timestamp);
}

3. Thuật toán tối ưu năng lượng cho module phần cứng di động

Trong quá trình vận chuyển, module SIM800 GSM/GPRS gửi dữ liệu cảm biến DHT11 về máy chủ Backend. Nhằm tiết kiệm pin, vi điều khiển kích hoạt chế độ nghỉ (Power-down Sleep Mode) và chỉ đánh thức để gửi dữ liệu theo chu kỳ thích ứng với độ biến thiên nhiệt độ:

                   <  |T - T_last| > Ngưỡng ΔT ? >
                             /             \
                   ĐÚNG     /               \  SAI
// Firmware rút gọn trên ATmega328P / Arduino kết nối SIM800
#include <SoftwareSerial.h>
#include <DHT.h>

#define DHTPIN 2
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
SoftwareSerial sim800(7, 8); // RX, TX

float lastTemp = 0.0;
const float TEMP_THRESHOLD = 0.5; // Ngưỡng thay đổi nhiệt độ cần cảnh báo ngay

void sendGPRSData(float temp, float humid) {
  sim800.println("AT+HTTPINIT");
  delay(1000);
  sim800.println("AT+HTTPPARA=\"CID\",1");
  delay(500);
  sim800.println("AT+HTTPPARA=\"URL\",\"http://api.vaccine-tracker.vn/temperature\"");
  delay(500);
  sim800.println("AT+HTTPPARA=\"CONTENT\",\"application/json\"");
  delay(500);
  
  String payload = "{\"temp\":" + String(temp) + ",\"humidity\":" + String(humid) + ",\"batchNo\":\"0x9f...\"}";
  sim800.println("AT+HTTPDATA=" + String(payload.length()) + ",10000");
  delay(500);
  sim800.println(payload);
  delay(1000);
  sim800.println("AT+HTTPACTION=1"); // POST Method
  delay(2000);
  sim800.println("AT+HTTPTERM");
}

Thử nghiệm và đánh giá kết quả (Testing & Validation)

1. Kiểm thử chi phí Gas và hiệu năng Smart Contract

Tên hàm (Function Name) Mục đích thực thi Gas tiêu tốn (Units) Phí ước tính trên BSC (Gwei = 5) Thời gian xác thực (s)
addProducer() Tạo lô hàng vắc xin mới 142,530 ~0.00071 BNB 2.94s
addWarehouse() Tiếp nhận & xác thực lưu kho 115,240 ~0.00057 BNB 2.88s
addDistributor() Khởi tạo đơn vận chuyển vắc xin 128,450 ~0.00064 BNB 3.02s
addVaccinationStation() Trạm tiêm xác nhận nhận hàng 108,920 ~0.00054 BNB 2.91s
addObjectInjection() Ghi nhận thông tin tiêm cho bệnh nhân 165,310 ~0.00082 BNB 3.10s

2. Đánh giá thời gian hoạt động của module IoT vận chuyển

Thử nghiệm khả năng duy trì năng lượng của module di động (Pin Li-ion 3.7V 2600mAh kết hợp mạch hạ áp LM2596 và Module Sim800):

  • Chế độ truyền liên tục (không tối ưu): Hoạt động liên tục trong 14.5 giờ; module GSM tiêu thụ dòng đỉnh lên đến 2A khi phát tín hiệu.
  • Chế độ ngủ thông minh (Duty Cycle Sleep + Ngưỡng biến thiên): Thời gian hoạt động tăng lên 68.2 giờ (tăng ~370% thời lượng pin), đảm bảo bao phủ trọn vẹn hành trình vận chuyển liên tỉnh thông thường (< 48 giờ).

Đổi mới và đóng góp

  1. Kiến trúc phân tách trạng thái và logic (Separation of Concerns): Bằng cách tách riêng VaccineSupplyChain (Logic) và VaccineSystemStorage (Dữ liệu), hệ thống cho phép nâng cấp quy trình phân phối trong tương lai mà không làm mất mát lịch sử lô hàng đã lưu trên Blockchain.
  2. Cơ chế xác thực kép On-chain / Off-chain: Toàn bộ bằng chứng giao dịch (Transaction Hash, Merkle Root) được neo giữ trên Blockchain, trong khi dữ liệu cảm biến định kỳ tần suất cao được lưu tại MongoDB Atlas và đồng bộ mã hash lên IPFS. Mô hình này giúp loại bỏ hoàn toàn tình trạng "nghẽn mạng" (Blockchain Bloat) và giảm hơn 92% chi phí lưu trữ on-chain.
  3. Mã QR định danh động chống làm giả: Giao diện DApp trích xuất trực tiếp chữ ký số (Digital Signature) của từng mắt xích và chuyển đổi thành mã QR. Bất kỳ sự thay đổi thông tin nào ở cơ sở dữ liệu off-chain sẽ lập tức làm sai lệch mã băm đối chiếu trên BSCScan, giúp phát hiện gian lận tức thì.

Ứng dụng thực tế và triển khai

Kịch bản vận hành thực tế

  [1. Sản xuất]         Mã hóa lô hàng -> Ghi nhận dải nhiệt độ tối ưu (2-8°C)
  [2. Lưu kho]          Module ESP8266 giám sát kho cố định -> Báo cáo vi phạm nếu T > 8°C
 [3. Vận chuyển]        Module SIM800 truyền dữ liệu GPS/Nhiệt độ cơ động qua mạng GPRS
  [4. Nhận hàng]        Trạm tiêm quét mã QR -> Đối soát trạng thái bảo quản trên Blockchain
  [5. Tiêm chủng]       Gắn ID lô vắc xin vào bệnh án điện tử của người dân

Hướng dẫn triển khai hệ thống (Deployment Guide)

  1. Phần cứng IoT:
    • Kết nối cảm biến DHT11 vào chân D2 của Arduino Nano; kết nối module SIM800 vào chân D7 (RX), D8 (TX) thông qua mạch phân áp điện trở để bảo vệ mức logic 3.3V/5V.
    • Nạp mã nguồn C++ qua Arduino IDE, cấu hình APN mạng di động (v-internet, m3-world,...).
  2. Triển khai Smart Contract:
    npm install -g truffle
    npm install @openzeppelin/contracts
    truffle compile
    truffle migrate --network bscTestnet
    
  3. Triển khai Backend & DApp:
    • Cài đặt biến môi trường trong NestJS: RPC_URL, CONTRACT_MANAGER_ADDRESS, MONGO_URI.
    • Khởi chạy dịch vụ trung gian: npm run start:prod.
    • Khởi chạy DApp React Client: npm start (kết nối tiện ích Metamask với mạng BSC Testnet).

Hạn chế và hướng phát triển

Hạn chế hiện tại

  • Cảm biến DHT11 chỉ hoạt động ổn định ở dải nhiệt độ dương (0°C đến 50°C), chưa hỗ trợ giám sát các loại vắc xin công nghệ mRNA (như Pfizer-BioNTech yêu cầu bảo quản âm sâu từ -80°C đến -60°C).
  • Phụ thuộc vào chất lượng vùng phủ sóng mạng viễn thông GPRS/2G khi xe chuyên chở di chuyển qua các cung đường đèo núi hẻo lánh.

Hướng phát triển tiếp theo

  • Nâng cấp phần cứng sang cảm biến công nghiệp chuẩn Modbus RTU / PT100 và module truyền thông 4G LTE/NB-IoT tích hợp định vị GPS vi sai.
  • Ứng dụng giải pháp mạng lưới Oracle phi tập trung (Chainlink Oracles) để tự động hóa việc phạt tiền cọc bảo hiểm (Slashing) qua Smart Contract khi phát hiện vi phạm nhiệt độ nghiêm trọng.
  • Ứng dụng công nghệ bằng chứng không tiết lộ tri thức (Zero-Knowledge Proofs - zk-SNARKs) nhằm bảo mật danh tính bệnh nhân tiêm chủng mà vẫn đảm bảo tính xác thực của hộ chiếu vắc xin quốc tế.

Đối tượng hưởng lợi


Câu hỏi thường gặp

1. Yêu cầu kỹ thuật tối thiểu để triển khai giải pháp này là gì?

Về phần cứng, cần tối thiểu 01 kit vi điều khiển Arduino Nano V3 kèm module SIM800/ESP8266 và cảm biến DHT11. Về hạ tầng máy chủ, hệ thống yêu cầu Node.js v14+, MongoDB v4.4+, một tài khoản ví Metamask có số dư testnet (BNB hoặc MATIC) và kết nối Internet để đồng bộ dữ liệu khối.

2. Hệ thống xử lý thế nào khi dung lượng chuỗi khối ngày càng lớn (Scalability Issue)?

Hệ thống sử dụng mô hình lưu trữ ngoài chuỗi (Off-chain Indexing). Toàn bộ dữ liệu lớn (ảnh chụp chứng nhận, log đo đạc nhiệt độ từng phút) được lưu tại MongoDB và mạng phi tập trung IPFS. Blockchain chỉ lưu trữ các giá trị băm (Hash Key 32 bytes) và trạng thái logic chính, giúp kích thước khối tăng rất chậm và duy trì tốc độ xử lý ổn định.

3. Làm sao để tích hợp DApp này vào các hệ thống quản lý bệnh viện (HIS/LIS) sẵn có?

Máy chủ Backend NestJS cung cấp đầy đủ hệ thống RESTful API chuẩn hóa cùng tài liệu Swagger. Các hệ thống HIS/LIS hiện hữu chỉ cần gửi yêu cầu HTTP POST/GET kèm mã định danh lô hàng hoặc mã số công dân để tích hợp dữ liệu truy xuất vào phần mềm nghiệp vụ bệnh viện.

4. Thiết bị IoT có thể bị tấn công làm sai lệch dữ liệu cảm biến trước khi gửi lên mạng không?

Mỗi node IoT được gán một cặp khóa công khai/bí mật thông qua IoTManagerContract. Dữ liệu gói tin đo được ký số trực tiếp tại vi điều khiển trước khi gửi qua API. Ngoài ra, việc bổ sung cơ chế kiểm tra giá trị ngoại lai (Outlier Detection) tại Backend giúp loại bỏ các giá trị nhiệt độ bất thường do cảm biến bị phá hoại.

5. Chi phí vận hành trên mạng Blockchain thực tế có đắt không?

Do lựa chọn nền tảng Binance Smart Chain (BSC) với cơ chế đồng thuận PoSA thay vì Ethereum Layer-1 PoW/PoS truyền thống, chi phí cho mỗi giao dịch xác nhận lô hàng chỉ dao động từ $0.05 đến $0.15 USD. Đây là mức phí hoàn toàn khả thi đối với các lô hàng vắc xin có giá trị kinh tế hàng chục nghìn USD.


Kết luận

Đề tài "Nghiên cứu và hiện thực hệ thống truy xuất nguồn gốc của vắc xin COVID-19 với công nghệ Blockchain và IoT" đã giải quyết thành công bài toán minh bạch hóa chuỗi cung ứng dây chuyền lạnh dược phẩm sinh học. Thông qua sự kết hợp giữa hợp đồng thông minh Solidity trên chuỗi khối BSC, hệ thống giám sát phần cứng nhúng cơ động SIM800/ESP8266, và kiến trúc dịch vụ lai NestJS - MongoDB - IPFS, hệ thống đã chứng minh tính khả thi vượt trội trong việc loại bỏ gian lận, ngăn ngừa hỏng hóc vắc xin và củng cố niềm tin y tế cộng đồng.

Giải pháp mở ra tiềm năng ứng dụng rộng lớn không chỉ trong quản lý vắc xin mà còn cho toàn bộ ngành logistics dược phẩm, thực phẩm tươi sống và các chuỗi cung ứng giá trị cao trong kỷ nguyên chuyển đổi số.