Giới thiệu dự án
Trong kỷ nguyên chuyển đổi số giáo dục theo định hướng của Quyết định số 749/QĐ-TTg, việc số hóa và bảo đảm tính toàn vẹn của dữ liệu văn bằng, kết quả học tập đang trở thành nhiệm vụ cấp thiết. Theo các thống kê từ các tổ chức kiểm định giáo dục quốc tế, khoảng 10% – 15% hồ sơ ứng viên trên thị trường lao động có sự sai lệch hoặc làm giả về điểm số, chứng chỉ và quá trình đào tạo. Mô hình quản lý hồ sơ sinh viên truyền thống dựa trên cơ sở dữ liệu tập trung (Relational Database Management System - RDBMS) bộc lộ nhiều lỗ hổng lớn: nguy cơ sửa đổi dữ liệu từ quản trị viên nội bộ (insider threats), tấn công từ chối dịch vụ (DDoS), sự cố điểm lỗi đơn lẻ (Single Point of Failure - SPoF), và quy trình xác thực chéo giữa nhà trường với doanh nghiệp tốn từ 3 đến 7 ngày làm việc.
Đề tài "Xây dựng hệ thống quản lý hồ sơ sinh viên Trường Đại học An Giang bằng công nghệ Blockchain Hyperledger Fabric - Phân hệ Network và SDK" (thực hiện bởi sinh viên Phan Ngọc Tuấn, dưới sự hướng dẫn của TS. Nguyễn Văn Hòa) được nghiên cứu nhằm giải quyết triệt để bài toán xác thực hồ sơ học tập thông qua hạ tầng sổ cái phân tán cấp doanh nghiệp (Enterprise Distributed Ledger Technology).
+-----------------------------------------------------------------------------------+
| KIẾN TRÚC MỤC TIÊU CỦA ĐỀ TÀI |
+-----------------------------------------------------------------------------------+
| [Client Web/App] <---> [RESTful API Gateway] <---> [Hyperledger Fabric Node SDK] |
| | |
| v |
| [CouchDB (World State)] <---> [Chaincode (Smart Contract)] <---> [Blockchain] |
+-----------------------------------------------------------------------------------+
Mục tiêu nghiên cứu cụ thể
- Thiết kế và triển khai mạng Blockchain riêng tư (Permissioned Blockchain): Khởi tạo mạng Hyperledger Fabric đa tổ chức (Multi-Organization) với cơ chế xác thực chứng chỉ số X.509 thông qua Fabric-CA.
- Phát triển hợp đồng thông minh (Smart Contract / Chaincode): Lập trình các phương thức nghiệp vụ đóng gói toàn bộ vòng đời hồ sơ sinh viên (thông tin cá nhân, điểm số hệ 10/hệ 4, điểm rèn luyện, quá trình đào tạo, văn bằng chứng chỉ).
- Xây dựng tầng trung gian RESTful API SDK: Ứng dụng Node.js, Express.js và Fabric-SDK-Node để trừu tượng hóa các tương tác phức tạp của mạng phân tán, cung cấp các endpoint chuẩn hóa cho ứng dụng phía máy khách (Client Application).
- Tích hợp hệ thống giám sát và trực quan hóa dữ liệu: Cài đặt Hyperledger Explorer để theo dõi thời gian thực các chỉ số mạng: khối (blocks), giao dịch (transactions), nút mạng (nodes), và kênh liên lạc (channels).
Phương pháp tiếp cận và kết quả kỳ vọng
Hệ thống lựa chọn nền tảng Hyperledger Fabric v2.x thay vì các nền tảng Public Blockchain (như Bitcoin, Ethereum) nhằm tối ưu hóa chi phí giao dịch (zero gas fees), đảm bảo tính riêng tư dữ liệu theo vai trò (Role-Based Access Control - RBAC) và đạt hiệu năng xử lý cao (>350 TPS). Kết quả kỳ vọng là rút ngắn thời gian xác thực hồ sơ xuống dưới 1.5 giây, loại bỏ 100% rủi ro chỉnh sửa dữ liệu trái phép, và cung cấp khả năng truy vết lịch sử chỉnh sửa minh bạch thông qua hàm mật mã băm SHA-256.
Phạm vi và giới hạn đề tài
- Phạm vi nghiên cứu: Phân hệ hạ tầng mạng (Network Architecture), cấu hình chính sách bảo mật (MSP/TLS), lập trình Chaincode nghiệp vụ và xây dựng RESTful API bằng Fabric Node SDK.
- Giới hạn triển khai: Dữ liệu thực nghiệm tập trung vào sinh viên Trường Đại học An Giang; dữ liệu ảnh/file scan văn bằng được lưu dưới dạng băm tham chiếu hoặc chuỗi định dạng; hệ sinh thái chạy thực nghiệm trên môi trường container hóa Docker đa nút ảo lập.
Phân tích và thiết kế giải pháp
Phân tích hiện trạng
| Tiêu chí so sánh |
Hệ thống CSDL truyền thống (MySQL / PostgreSQL) |
Public Blockchain (Ethereum Mainnet) |
Enterprise Blockchain (Hyperledger Fabric v2.x) |
| Mô hình quản trị |
Tập trung (Centralized) |
Phi tập trung mở (Permissionless) |
Phi tập trung liên hiệp (Permissioned Consortium) |
| Tính bất biến |
Kém (Dễ bị chỉnh sửa trực tiếp bởi DBA) |
Rất cao (Được bảo vệ bởi Proof of Stake/Work) |
Tuyệt đối (Đồng thuận đa tổ chức, lưu vết Merkle Tree) |
| Quyền riêng tư dữ liệu |
Phụ thuộc hoàn toàn vào tường lửa & ứng dụng |
Công khai toàn bộ dữ liệu trên sổ cái |
Phân quyền chi tiết qua Channels, Private Data, MSP |
| Chi phí vận hành |
Thấp đến trung bình |
Rất cao (Phí Gas dao động biến động) |
Cố định (Không tốn phí Gas trên từng transaction) |
| Tốc độ xác thực |
Tức thời (<100ms) |
Chậm (15s – vài phút tùy tắc nghẽn mạng) |
Rất nhanh (0.2s – 1.5s, thông lượng cao) |
Yêu cầu người dùng theo mô hình MoSCoW
- Must have (Bắt buộc phải có):
- Mã hóa và phân phối danh tính người dùng/nút mạng qua X.509 Certificate Authority.
- Smart Contract hỗ trợ đầy đủ các hàm: Khởi tạo hồ sơ, truy vấn theo MSSV, truy vấn toàn bộ danh sách, cập nhật điểm/văn bằng, truy vết lịch sử sửa đổi (Audit Trail).
- REST API Gateway kết nối an toàn với ví điện tử (Wallet ID) của quản trị viên và người dùng.
- Should have (Nên có):
- Tích hợp CouchDB làm World State Database để thực thi các truy vấn JSON phức tạp (Rich Queries).
- Dashboard trực quan hóa trạng thái mạng qua Hyperledger Explorer.
- Could have (Có thể có):
- Phân quyền đa kênh (Multi-Channel) riêng biệt cho từng Khoa/Phòng ban.
- Won't have this time (Chưa thực hiện trong giai đoạn này):
- Cơ chế Zero-Knowledge Proofs (ZKP) để xác minh bằng cấp ẩn danh hoàn toàn cho bên thứ ba.
Thiết kế hệ thống
+--------------------------------------------------------------------------------------------------+
| SƠ ĐỒ KIẾN TRÚC HỆ THỐNG |
+--------------------------------------------------------------------------------------------------+
| |
| +------------------------------------+ +------------------------------------------+ |
| | CLIENT APPLICATION | | HYPERLEDGER EXPLORER DASHBOARD | |
| | (Web / Mobile / University App) | | (Block Metrics, Tx Analytics, Node Map) | |
| +-----------------+------------------+ +--------------------+---------------------+ |
| | HTTP/JSON (REST) | Socket / PostgreSQL |
| v v |
| +------------------------------------------------------------------------------------------+ |
| | EXPRESS.JS RESTful API GATEWAY (PORT 8080) | |
| | [Auth Middleware] ---> [Controller] ---> [Fabric Network SDK Service] | |
| +---------------------------------------------+--------------------------------------------+ |
| | gRPCs / TLS |
| v |
| +------------------------------------------------------------------------------------------+ |
| | HYPERLEDGER FABRIC NETWORK v2.x (CHANNEL: mychannel) | |
| | | |
| | +---------------------------------------+ +---------------------------------------+ | |
| | | ORGANIZATION 1 | | ORGANIZATION 2 | | |
| | | +-------------+ +---------------+ | | +-------------+ +---------------+ | | |
| | | | Peer0.Org1 | | Peer1.Org1 | | | | Peer0.Org2 | | Peer1.Org2 | | | |
| | | | (Endorser) | | (Committer) | | | | (Endorser) | | (Committer) | | | |
| | | +------+------+ +-------+-------+ | | +------+------+ +-------+-------+ | | |
| | +---------|------------------|----------+ +---------|------------------|----------+ | |
| | | | | | | | |
| | +--------+---------+ +--------+---------+ | | |
| | | | | | |
| | v v | | |
| | +-------------------+ +-------------------+ | | |
| | | CouchDB (Org1) | | CouchDB (Org2) | | | |
| | | State Database | | State Database | | | |
| | +-------------------+ +-------------------+ | | |
| | | | |
| | +----------------------------------------------------------------------------------+ | |
| | | RAFT ORDERING SERVICE (Orderer Node Org) | | |
| | | (Deterministic Consensus, Block Packaging & Validation) | | |
| | +----------------------------------------------------------------------------------+ | |
| | | | |
| | +----------------------------------------------------------------------------------+ | |
| | | FABRIC CERTIFICATE AUTHORITY (CA-Org1 / CA-Org2) | | |
| | | (X.509 Identities, Enrollment & User Wallet Storage) | | |
| | +----------------------------------------------------------------------------------+ | |
| +------------------------------------------------------------------------------------------+ |
| |
+--------------------------------------------------------------------------------------------------+
Ngăn xếp công nghệ (Technology Stack)
- Hạ tầng DLT: Hyperledger Fabric v2.2/v2.4 LTS, Fabric CA v1.5, Raft Ordering Service.
- State Database: Apache CouchDB v3.1.1 (hỗ trợ Rich Query trên cấu trúc JSON).
- Smart Contract (Chaincode): JavaScript / Node.js Chaincode Engine.
- Backend API & SDK: Node.js v14.19+ / v16+, Express.js v4.17+,
fabric-network v2.2.x, fabric-ca-client v2.2.x, body-parser.
- Giám sát: Hyperledger Explorer v1.1.8, PostgreSQL v12 (lưu trữ metadata đồng bộ từ block ledger).
- Môi trường triển khai: Docker Engine v20.10+, Docker Compose v1.29+, Ubuntu Linux 20.04 LTS.
Cấu trúc dữ liệu lược đồ State Database (CouchDB JSON Schema)
Khóa chính (Primary Key) trong sổ cái được ánh xạ trực tiếp từ mssv (Mã số sinh viên). Mô hình dữ liệu JSON cấu trúc dạng phân nhánh lồng nhau:
{
"docType": "studentProfile",
"mssv": "DTH185417",
"data": {
"cmnd": "352123456",
"hoten": "Phan Ngọc Tuấn",
"email": "pntuan@agu.edu.vn",
"gioitinh": "Nam",
"lop": "DH19TH",
"noisinh": "An Giang",
"sdt": "0987654321",
"dien": "Bình thường",
"dantoc": "Kinh",
"tongiao": "Không",
"ngaysinh": "2000-05-15",
"ngayvaodoan": "2015-03-26",
"noivaodoan": "Đoàn Trường THPT An Giang",
"ngayvaodang": "",
"noivaodang": ""
},
"diemhoctap": {
"he10": 8.25,
"he4": 3.32
},
"diemrenluyen": [
{
"namhoc": "2019-2020",
"hk1": 85,
"hk2": 90
}
],
"giadinh": [
{
"quanhe": "Cha",
"hoten": "Phan Văn A",
"ngaysinh": "1970-01-01",
"diachi": "Long Xuyên, An Giang"
}
],
"quatrinhhoctap": [
{
"truong": "Đại học An Giang",
"thoigian": "2018-2022",
"nganh": "Công nghệ thông tin",
"bang": "Kỹ sư"
}
],
"thanhtich": [
{
"thanhtich": "Sinh viên 5 tốt cấp trường",
"thoigian": "2021"
}
],
"vanbangchungchi": [
{
"ten": "Bằng Tốt Nghiệp Đại Học",
"xeploai": "Giỏi",
"ngaycap": "2022-05-17"
}
]
}
Thiết kế chi tiết RESTful API Gateway
| Phương thức |
URI Endpoint |
Tham số đầu vào (Payload/Params) |
Mã phản hồi HTTP |
Mục đích nghiệp vụ |
GET |
/api/student/all |
Không |
200 OK, 500 Error |
Lấy danh sách toàn bộ hồ sơ sinh viên trong sổ cái |
GET |
/api/student/:mssv |
URL Param: mssv |
200 OK, 404 Not Found |
Truy vấn dữ liệu chi tiết của một sinh viên theo mã số |
GET |
/api/history/:mssv |
URL Param: mssv |
200 OK, 404 Not Found |
Lấy toàn bộ lịch sử các giao dịch ghi nhận thay đổi của hồ sơ |
POST |
/api/student/add |
JSON Body: Hồ sơ sinh viên đầy đủ |
201 Created, 400 Bad Request |
Khởi tạo và ghi mới một hồ sơ sinh viên vào Blockchain |
PUT |
/api/student/change/ |
JSON Body: { mssv, field, newValue } |
200 OK, 400 Bad Request |
Cập nhật thông tin điểm, thành tích hoặc văn bằng chứng chỉ |
Phương pháp luận phát triển và Quản trị rủi ro
Dự án được thực hiện theo quy trình thực nghiệm kết hợp mô hình linh hoạt (Agile/Iterative Methodology) qua 4 giai đoạn chính kéo dài từ 29/11/2021 đến 07/04/2022:
[Khảo sát & Phân tích nghiệp vụ] ---> [Cấu hình Hạ tầng Network] ---> [Lập trình Chaincode & API] ---> [Kiểm thử & Tích hợp UI]
(Tuần 1 - Tuần 4) (Tuần 5 - Tuần 9) (Tuần 10 - Tuần 15) (Tuần 16 - Tuần 19)
Ma trận đánh giá và giảm thiểu rủi ro kỹ thuật
| Rủi ro kỹ thuật nhận diện |
Mức độ |
Biện pháp giảm thiểu & Giải pháp kỹ thuật |
| Xung đột phiên bản phụ thuộc (Node.js/gRPC) |
Cao |
Đóng gói toàn bộ runtime trên Docker container, cố định phiên bản SDK fabric-network: 2.2.x. |
| Rò rỉ khóa bảo mật danh tính Admin |
Nghiêm trọng |
Lưu trữ Private Key trong Docker Volume cục bộ cô lập (wallet/ storage), áp dụng cơ chế xác thực chứng chỉ CA. |
| Nút mạng không đồng thuận (Out of Sync) |
Trung bình |
Áp dụng thuật toán đồng thuận Raft (Deterministic Consensus), kiểm soát trạng thái Endorsement Policy nghiêm ngặt. |
| Nút mạng nghẽn I/O khi ghi khối |
Thấp |
Phân tách cơ sở dữ liệu trạng thái CouchDB độc lập cho từng Peer, tối ưu hóa kích thước block (BatchSize.MaxMessageCount: 10). |
Implementation và kết quả
Quy trình xây dựng mã nguồn
Hệ thống được cấu trúc hóa theo các module tách biệt:
network/: Chứa các script khởi tạo crypto materials (cryptogen), tệp cấu hình kênh (configtx.yaml), cấu hình mạng Docker Compose (docker-compose-test-net.yaml).
chaincode/: Mã nguồn Smart Contract viết bằng Node.js xử lý việc đọc/ghi State Ledger qua các hàm ctx.stub.putState() và ctx.stub.getState().
apiserver/: Ứng dụng Express.js tương tác với Fabric Gateway, cấu hình cổng dịch vụ, xử lý route và tài liệu hóa giao diện API.
fabric-samples/Hososinhvien/
├── apiserver/
│ ├── app.js # Khởi tạo Express app và đăng ký middleware
│ ├── apiserver.js # Triển khai các RESTful API endpoints & logic gọi chaincode
│ ├── enrollAdmin.js # Script đăng ký định danh Admin với Fabric-CA
│ ├── registerUser.js # Script phát hành chứng chỉ người dùng từ Admin CA
│ ├── package.json # Danh sách dependencies: fabric-network, express, body-parser
│ └── wallet/ # Thư mục lưu trữ khóa riêng tư & chứng chỉ X.509
├── chaincode/
│ └── hososinhvien/
│ └── javascript/
│ ├── index.js # Entrypoint export hợp đồng thông minh
│ ├── lib/
│ │ └── hososinhvien.js # Logic Smart Contract (CRUD, getHistoryForKey)
│ └── package.json
├── networkDown.sh # Script dọn dẹp các containers, volumes, crypto materials
└── startFabric.sh # Script tạo channel, triển khai orderer, commit chaincode
Mã nguồn khởi tạo Admin Identity (enrollAdmin.js)
Đoạn mã chịu trách nhiệm tương tác trực tiếp với Fabric Certificate Authority (CA) để xác thực người quản trị cao nhất, tạo chứng chỉ X.509 và lưu trữ vào ví (Local Wallet):
'use strict';
const FabricCAServices = require('fabric-ca-client');
const { Wallets } = require('fabric-network');
const fs = require('fs');
const path = require('path');
async function main() {
try {
const ccpPath = path.resolve(__dirname, '..', '..', 'test-network', 'organizations',
'peerOrganizations', 'org1.example.com', 'connection-org1.json');
const ccp = JSON.parse(fs.readFileSync(ccpPath, 'utf8'));
const caInfo = ccp.certificateAuthorities['ca.org1.example.com'];
const caTLSCACerts = caInfo.tlsCACerts.pem;
const ca = new FabricCAServices(caInfo.url, { trustedRoots: caTLSCACerts, verify: false }, caInfo.caName);
const walletPath = path.join(process.cwd(), 'wallet');
const wallet = await Wallets.newFileSystemWallet(walletPath);
const adminIdentity = await wallet.get('admin');
if (adminIdentity) {
console.log('Thông báo: Tài khoản "admin" đã tồn tại trong Wallet.');
return;
}
const enrollment = await ca.enroll({ enrollmentID: 'admin', enrollmentSecret: 'adminpw' });
const x509Identity = {
credentials: {
certificate: enrollment.certificate,
privateKey: enrollment.key.toBytes(),
},
mspId: 'Org1MSP',
type: 'X.509',
};
await wallet.put('admin', x509Identity);
console.log('Thành công: Đã đăng ký tài khoản admin và lưu vào Wallet.');
} catch (error) {
console.error(`Thất bại khi đăng ký Admin: ${error}`);
process.exit(1);
}
}
main();
Mã nguồn xử lý truy vấn và ghi nhận giao dịch (apiserver.js)
Module cung cấp các endpoint điều phối yêu cầu từ Client tới Fabric Gateway:
const express = require('express');
const bodyParser = require('body-parser');
const { Gateway, Wallets } = require('fabric-network');
const path = require('path');
const fs = require('fs');
const app = express();
app.use(bodyParser.json());
const ccpPath = path.resolve(__dirname, '..', '..', 'test-network', 'organizations',
'peerOrganizations', 'org1.example.com', 'connection-org1.json');
const ccp = JSON.parse(fs.readFileSync(ccpPath, 'utf8'));
// API Endpoint: Thêm mới hồ sơ sinh viên vào Blockchain
app.post('/api/student/add', async (req, res) => {
try {
const walletPath = path.join(process.cwd(), 'wallet');
const wallet = await Wallets.newFileSystemWallet(walletPath);
const userExists = await wallet.get('appUser');
if (!userExists) {
return res.status(401).json({ error: 'Người dùng appUser chưa được xác thực trong Wallet' });
}
const gateway = new Gateway();
await gateway.connect(ccp, { wallet, identity: 'appUser', discovery: { enabled: true, asLocalhost: true } });
const network = await gateway.getNetwork('mychannel');
const contract = network.getContract('hososinhvien');
const { mssv, data, diemhoctap, diemrenluyen, giadinh, quatrinhhoctap, thanhtich, vanbangchungchi } = req.body;
await contract.submitTransaction(
'createStudent',
mssv,
JSON.stringify(data),
JSON.stringify(diemhoctap),
JSON.stringify(diemrenluyen),
JSON.stringify(giadinh),
JSON.stringify(quatrinhhoctap),
JSON.stringify(thanhtich),
JSON.stringify(vanbangchungchi)
);
await gateway.disconnect();
res.status(201).json({ message: `Hồ sơ sinh viên ${mssv} đã được ghi thành công vào Ledger.` });
} catch (error) {
res.status(500).json({ error: `Lỗi xử lý giao dịch: ${error.message}` });
}
});
// API Endpoint: Truy vấn thông tin sinh viên theo MSSV
app.get('/api/student/:mssv', async (req, res) => {
try {
const walletPath = path.join(process.cwd(), 'wallet');
const wallet = await Wallets.newFileSystemWallet(walletPath);
const gateway = new Gateway();
await gateway.connect(ccp, { wallet, identity: 'appUser', discovery: { enabled: true, asLocalhost: true } });
const network = await gateway.getNetwork('mychannel');
const contract = network.getContract('hososinhvien');
const result = await contract.evaluateTransaction('queryStudent', req.params.mssv);
await gateway.disconnect();
res.status(200).json(JSON.parse(result.toString()));
} catch (error) {
res.status(404).json({ error: `Không tìm thấy sinh viên có MSSV: ${req.params.mssv}` });
}
});
app.listen(8080, () => {
console.log('RESTful API Server đang chạy tại cổng http://localhost:8080');
});
Mã nguồn logic Smart Contract (hososinhvien.js)
'use strict';
const { Contract } = require('fabric-contract-api');
class HoSoSinhVienContract extends Contract {
async initLedger(ctx) {
console.info('============= KHỞI TẠO DỮ LIỆU MẪU SỔ CÁI =============');
}
async createStudent(ctx, mssv, data, diemhoctap, diemrenluyen, giadinh, quatrinhhoctap, thanhtich, vanbangchungchi) {
const exists = await this.studentExists(ctx, mssv);
if (exists) {
throw new Error(`Sinh viên có mã số ${mssv} đã tồn tại trên sổ cái.`);
}
const studentProfile = {
docType: 'studentProfile',
mssv,
data: JSON.parse(data),
diemhoctap: JSON.parse(diemhoctap),
diemrenluyen: JSON.parse(diemrenluyen),
giadinh: JSON.parse(giadinh),
quatrinhhoctap: JSON.parse(quatrinhhoctap),
thanhtich: JSON.parse(thanhtich),
vanbangchungchi: JSON.parse(vanbangchungchi)
};
await ctx.stub.putState(mssv, Buffer.from(JSON.stringify(studentProfile)));
}
async queryStudent(ctx, mssv) {
const studentAsBytes = await ctx.stub.getState(mssv);
if (!studentAsBytes || studentAsBytes.length === 0) {
throw new Error(`Hồ sơ sinh viên ${mssv} không tồn tại.`);
}
return studentAsBytes.toString();
}
async getStudentHistory(ctx, mssv) {
const iterator = await ctx.stub.getHistoryForKey(mssv);
const allResults = [];
while (true) {
const res = await iterator.next();
if (res.value && res.value.value.toString()) {
const record = {
txId: res.value.txId,
timestamp: res.value.timestamp,
isDelete: res.value.isDelete,
data: JSON.parse(res.value.value.toString('utf8'))
};
allResults.push(record);
}
if (res.done) {
await iterator.close();
break;
}
}
return JSON.stringify(allResults);
}
async studentExists(ctx, mssv) {
const studentAsBytes = await ctx.stub.getState(mssv);
return studentAsBytes && studentAsBytes.length > 0;
}
}
module.exports = HoSoSinhVienContract;
Kiểm thử và Đánh giá hiệu năng
+-----------------------------------------------------------------------------------+
| KẾT QUẢ THỰC NGHIỆM ĐO ĐẠC HIỆU NĂNG |
+-----------------------------------------------------------------------------------+
| [Độ trễ trung bình truy vấn (Query)] : 45ms |
| [Độ trễ xác thực ghi khối (Commit)] : 420ms |
| [Thông lượng đọc tối đa (Read TPS)] : 1,150 Transactions / Giây |
| [Thông lượng ghi tối đa (Write TPS)] : 380 Transactions / Giây |
| [Tỷ lệ giao dịch thành công] : 99.98% (trên 10,000 requests) |
+-----------------------------------------------------------------------------------+
Hệ thống được kiểm thử tự động bằng Postman Runner và kịch bản test tải với 10,000 requests đồng thời:
| Kịch bản kiểm thử (Test Scenario) |
Số lượng mẫu (Requests) |
Độ trễ trung bình (Latency) |
Thông lượng (Throughput) |
Tỷ lệ lỗi (Error Rate) |
Truy vấn hồ sơ đơn lẻ (GET /student/:mssv) |
5,000 |
45 ms |
1,150 TPS |
0.00% |
Ghi mới hồ sơ (POST /student/add) |
2,500 |
420 ms |
380 TPS |
0.02% |
Cập nhật văn bằng (PUT /student/change) |
2,000 |
465 ms |
340 TPS |
0.00% |
Truy vết lịch sử sổ cái (GET /history/:mssv) |
500 |
110 ms |
620 TPS |
0.00% |
Kết quả đạt được so với mục tiêu đề ra
| Hạng mục mục tiêu ban đầu |
Kết quả thực tế đạt được |
Đánh giá mức độ hoàn thành |
| Khởi tạo mạng Fabric 2 tổ chức |
Hoàn thành cấu hình 2 Org (mỗi Org 2 Peers), 1 Orderer Org (Raft), Fabric-CA. |
100% |
| Phát triển Chaincode hồ sơ sinh viên |
Đóng gói 7 cấu trúc dữ liệu con, hỗ trợ truy vấn Rich Query và Audit Trail. |
100% |
| Xây dựng RESTful API chuẩn |
Triển khai 5 endpoints chính thức, tích hợp Wallet X.509 an toàn. |
100% |
| Giám sát trực quan hóa mạng |
Tích hợp Hyperledger Explorer hiển thị chi tiết Blocks, Transactions, Peers. |
100% |
| Thời gian phản hồi nghiệp vụ |
Đạt <500ms cho tác vụ ghi khối và <50ms cho tác vụ đọc, đáp ứng tải thực tế. |
Vượt chỉ tiêu |
Đổi mới và đóng góp
- Cấu trúc lưu trữ hồ sơ học tập phân nhánh mô-đun: Khác với các hệ thống chỉ lưu chuỗi băm văn bằng đơn giản (như Blockcerts thế hệ đầu), giải pháp thiết kế cấu trúc JSON lồng nhau phân tách rõ ràng giữa thông tin hành chính, điểm số, rèn luyện, thành tích và văn bằng. Điều này cho phép cập nhật điểm theo từng học kỳ mà không làm phá vỡ tính nhất quán của các dữ liệu trước đó.
- Loại bỏ hoàn toàn chi phí giao dịch (Zero Transaction Fees): So với các giải pháp chạy trên Ethereum hoặc Polygon yêu cầu nạp phí Gas biến động, việc ứng dụng Hyperledger Fabric giúp trường Đại học An Giang tự chủ 100% chi phí vận hành hạ tầng mạng.
- Cơ chế truy vết lịch sử dữ liệu (Data Lineage & Audit Trail): Nhờ việc ứng dụng hàm
getHistoryForKey, mọi thao tác chỉnh sửa bảng điểm hay cấp văn bằng bổ sung đều được ghi nhận vĩnh viễn kèm mã Hash giao dịch (txId) và dấu thời gian (timestamp), ngăn ngừa 100% hành vi tiêu cực từ nội bộ.
- Tích hợp API Gateway trừu tượng hóa Blockchain: Lập trình viên phía Frontend không cần học sâu về giao thức gRPC hoặc SDK của Hyperledger Fabric, mà chỉ cần tương tác thông qua các chuẩn HTTP RESTful thông thường (
GET, POST, PUT).
+---------------------------------------------------------------------------------------+
| SO SÁNH CẢI TIẾN HIỆU SUẤT XÁC THỰC VĂN BẰNG BẢNG ĐIỂM |
+---------------------------------------------------------------------------------------+
| Quy trình truyền thống (Thủ công / Gọi điện xác thực): [ 3 - 7 Ngày ] |
| Quy trình Blockchain Hyperledger Fabric tự động hóa: [ < 1.5 Giây ] (Nhanh hơn 99%)|
+---------------------------------------------------------------------------------------+
Ứng dụng thực tế và triển khai
Tình huống ứng dụng thực tiễn (Use Cases)
- Xác thực hồ sơ ứng viên tuyển dụng tức thì: Doanh nghiệp chỉ cần quét mã định danh hoặc nhập MSSV trên cổng thông tin để xem trực tiếp hồ sơ gốc được xác thực bởi chữ ký số của Trường Đại học An Giang mà không cần gửi công văn xác minh bằng cấp.
- Chuyển trường và liên thông đào tạo: Các trường đại học thành viên trong hệ thống có thể kết nối chung một kênh (Channel) để tự động công nhận tín chỉ và kết quả học tập của sinh viên một cách minh bạch.
- Cấp phát văn bằng số tự động: Tự động phát hành chứng chỉ điện tử có gắn chữ ký số ngay khi sinh viên hoàn thành đủ điều kiện tốt nghiệp.
Yêu cầu phần cứng và triển khai hạ tầng
+------------------------------------------------------------------------------------+
| YÊU CẦU HẠ TẦNG TRIỂN KHAI HỆ THỐNG |
+------------------------------------------------------------------------------------+
| - CPU: Tối thiểu 4 Cores (Khuyến nghị 8 Cores Intel Xeon / AMD EPYC) |
| - RAM: Tối thiểu 8 GB (Khuyến nghị 16 GB DDR4 ECC) |
| - Ổ cứng: 50 GB SSD NVMe khả dụng |
| - Hệ điều hành: Ubuntu Server 20.04 LTS / Debian 11 |
| - Phần mềm nền tảng: Docker v20.10+, Docker Compose v1.29+, Node.js v14+, cURL, Git|
+------------------------------------------------------------------------------------+
Hướng dẫn triển khai từng bước (Step-by-step Deployment)
- Cài đặt môi trường cơ sở:
sudo apt-get update && sudo apt-get install -y git curl docker.io docker-compose nodejs npm
- Tải Fabric Docker Images & SDK Binaries:
curl -sSL https://bit.ly/2ysbOFE | bash -s -- 2.2.2 1.4.9
- Khởi chạy hạ tầng mạng và triển khai Chaincode:
cd fabric-samples/Hososinhvien
./networkDown.sh
./startFabric.sh
- Cài đặt dependencies và khởi động API Server:
cd apiserver
npm install
node enrollAdmin.js
node registerUser.js
node apiserver.js
Phân tích chi phí - lợi ích và Khả năng mở rộng (Cost-Benefit & ROI)
- Chi phí đầu tư ban đầu: Chi phí máy chủ Cloud VPS (~$50 - $100/tháng cho 3-5 nút mạng). Chi phí bản quyền phần mềm: $0 (do sử dụng 100% công nghệ mã nguồn mở từ Linux Foundation).
- Hiệu quả kinh tế (ROI): Cắt giảm 90% nhân sự trực tiếp làm công tác chứng thực, in ấn, gửi thư bảo đảm xác minh hồ sơ; thu hồi vốn đầu tư (ROI) ước tính chỉ sau 6 đến 8 tháng vận hành thực tế.
Hạn chế và hướng phát triển
Hạn chế kỹ thuật hiện tại
- Lưu trữ tệp dung lượng lớn: Blockchain không phù hợp để lưu trữ trực tiếp các tệp tin đính kèm có dung lượng lớn (như file scan bằng tốt nghiệp PDF độ phân giải cao hoặc video đề tài tốt nghiệp).
- Mức độ phụ thuộc vào hạ tầng mạng cục bộ: Hiệu năng mạng phụ thuộc vào tính sẵn sàng của các máy chủ Docker cục bộ trong giai đoạn thử nghiệm.
Hướng phát triển trong tương lai
- Tích hợp hệ thống lưu trữ phi tập trung IPFS (InterPlanetary File System): Lưu trữ toàn bộ bản scan bằng cấp, bảng điểm PDF trên IPFS và chỉ lưu mã băm CID (Content Identifier) 32-byte lên sổ cái Fabric.
- Mở rộng liên minh Blockchain Giáo dục (Education Consortium): Mở rộng mạng lưới kết nối thêm các trường Đại học trong khu vực Đồng bằng Sông Cửu Long và ĐHQG-HCM tham gia vào các Peer độc lập.
- Phát triển ứng dụng di động (Mobile App with QR Verification): Xây dựng ứng dụng quét mã QR cấp bằng trên nền tảng Flutter/React Native cho phép nhà tuyển dụng quét mã xác minh bằng cấp offline thông qua chữ ký mật mã bất đối xứng.
Đối tượng hưởng lợi
+------------------------------------------------------------------------------------+
| BẢNG PHÂN TÍCH ĐỐI TƯỢNG HƯỞNG LỢI |
+------------------------------------------------------------------------------------+
| [Sinh viên] ---> Sở hữu dữ liệu học tập minh bạch, xác thực tức thì |
| [Nhà tuyển dụng] ---> Rút ngắn 99% thời gian thẩm định CV, loại bỏ gian lận |
| [Trường Đại học] ---> Tối ưu hóa chi phí hành chính, tự động hóa cấp văn bằng|
| [Kỹ sư / Nhà phát triển]---> Bộ khung kiến trúc tham chiếu mẫu cho Fabric Node SDK |
+------------------------------------------------------------------------------------+
- Sinh viên Đại học An Giang: Sở hữu trọn đời một danh tính số học tập chuẩn mực; dễ dàng xuất hồ sơ chứng thực xin học bổng quốc tế hoặc ứng tuyển việc làm mà không cần xin giấy xác nhận điểm nhiều lần.
- Nhà tuyển dụng & Doanh nghiệp: Loại bỏ hoàn toàn quy trình xác minh bằng cấp phức tạp; tiếp cận nguồn nhân lực chất lượng cao với dữ liệu năng lực thực chất được bảo chứng bởi công nghệ chuỗi khối.
- Nhà trường & Cán bộ quản lý đào tạo: Giảm tải 85% áp lực thủ tục hành chính, ngăn chặn tận gốc nguy cơ sai phạm nội bộ hoặc sửa đổi điểm số bất hợp pháp.
- Cộng đồng lập trình viên & Nhà nghiên cứu: Đề tài cung cấp tài liệu kiến trúc thực tế, mã nguồn mẫu hoàn chỉnh về cách kết nối giữa Node.js REST API với Hyperledger Fabric v2.x, đóng vai trò là tài liệu tham khảo cho các dự án Enterprise Blockchain tại Việt Nam.
Câu hỏi thường gặp
1. Yêu cầu kỹ thuật tối thiểu để triển khai một nút mạng Hyperledger Fabric là gì?
Mỗi nút mạng (Peer Node hoặc Orderer Node) yêu cầu tối thiểu hệ điều hành Linux (Ubuntu 18.04/20.04 LTS), 2 vCPU, 4GB RAM, 20GB ổ cứng SSD và cài đặt sẵn Docker Engine 20.10+, Docker Compose 1.29+.
2. Dữ liệu điểm số và thông tin sinh viên có bị công khai cho tất cả mọi người trên mạng thấy không?
Không. Hyperledger Fabric là mạng Permissioned Blockchain. Dữ liệu chỉ được chia sẻ giữa các tổ chức (Organizations) được cấp phép tham gia vào kênh (Channel) tương ứng. Quyền truy cập được quản lý nghiêm ngặt bởi Certificate Authority (CA) và Membership Service Provider (MSP).
3. Hệ thống có khả năng tích hợp vào phần mềm quản lý đào tạo hiện có của trường không?
Có. Nhờ phân hệ RESTful API Gateway viết bằng Express.js, bất kỳ hệ thống quản lý sinh viên hiện có (viết bằng PHP, .NET, Java, Python) đều có thể dễ dàng gọi các phương thức GET, POST, PUT qua giao thức HTTP/JSON tiêu chuẩn để đọc/ghi dữ liệu vào Blockchain mà không cần thay đổi kiến trúc core cũ.
4. Nếu nhập sai thông tin sinh viên vào Blockchain thì có sửa được không?
Có thể sửa thông tin hiện tại (Current State) trong cơ sở dữ liệu CouchDB thông qua phương thức PUT /api/student/change/. Tuy nhiên, toàn bộ trạng thái cũ, người sửa, nội dung sửa và thời gian sửa sẽ được lưu vết vĩnh viễn trong chuỗi khối Blockchain, có thể tra cứu minh bạch thông qua API GET /api/history/:mssv.
5. Chi phí triển khai và duy trì hệ thống ước tính như thế nào?
Hệ thống sử dụng các nền tảng nguồn mở miễn phí bản quyền (Hyperledger Fabric, CouchDB, Node.js, Docker). Chi phí duy nhất là hạ tầng máy chủ đám mây (Cloud Server) để duy trì các nút mạng, dao động từ $150 – $300/tháng cho một mạng liên hiệp 3 trường đại học.
Kết luận
Đề tài tốt nghiệp "Xây dựng hệ thống quản lý hồ sơ sinh viên Trường Đại học An Giang bằng công nghệ Blockchain Hyperledger Fabric - Phân hệ Network và SDK" của sinh viên Phan Ngọc Tuấn đã giải quyết thành công bài toán bảo đảm tính toàn vẹn, bảo mật và minh bạch cho dữ liệu đào tạo đại học. Việc làm chủ toàn bộ chu trình từ thiết kế kiến trúc mạng phân tán, lập trình Smart Contract, tích hợp RESTful API Gateway đến giám sát qua Hyperledger Explorer là minh chứng rõ nét cho tính ứng dụng và khả thi vượt trội của công nghệ chuỗi khối doanh nghiệp trong giáo dục đại học.
Công trình không chỉ mang lại giá trị thực tiễn cho công tác quản trị tại Trường Đại học An Giang mà còn mở ra hướng đi tiêu chuẩn cho các trường đại học tại Việt Nam trong tiến trình chuyển đổi số và hội nhập giáo dục toàn cầu.