Bối cảnh và vấn đề nghiên cứu

Khóa luận tốt nghiệp kỹ sư ngành An toàn Thông tin của tác giả Lê Công Trình và Trần Nguyễn Minh Triết (Trường Đại học Công nghệ Thông tin – ĐHQG TP.HCM, 2024) tập trung vào việc giải quyết bài toán phát hiện lỗ hổng bảo mật trong hợp đồng thông minh (smart contract) trên nền tảng Blockchain.

Sự phát triển nhanh chóng của công nghệ Blockchain và các loại tiền mã hóa đã kéo theo sự gia tăng mạnh mẽ của các giao dịch thông qua hợp đồng thông minh, chủ yếu được lập trình bằng ngôn ngữ Solidity trên mạng lưới Ethereum. Tuy nhiên, tính chất công khai và không thể thay đổi (immutability) của Blockchain khiến các lỗ hổng bảo mật trong mã nguồn trở nên đặc biệt nguy hiểm. Kẻ tấn công có thể khai thác các lỗi lập trình để chiếm đoạt tài sản kỹ thuật số, điển hình là cuộc tấn công lịch sử vào quỹ DAO năm 2016 gây thiệt hại 50 triệu USD.

Các công cụ rà quét lỗ hổng truyền thống dựa trên phân tích tĩnh hoặc phân tích động (như Oyente, Slither, Conkas, Mythril, Securify) chủ yếu sử dụng kỹ thuật thực thi tượng trưng (symbolic execution) hoặc quy tắc định sẵn. Các phương pháp này bộc lộ nhiều hạn chế: tỷ lệ âm tính giả (false negatives) cao do bỏ sót luồng thực thi, tiêu tốn nhiều thời gian và khó mở rộng khi số lượng dạng lỗ hổng mới gia tăng theo các phiên bản cập nhật của Solidity. Mặt khác, các nghiên cứu ứng dụng học máy (Machine Learning) và học sâu (Deep Learning) trước đây thường chỉ tiếp cận đơn thể thức, tức là chỉ phân tích duy nhất một dạng đặc trưng (hoặc chỉ mã nguồn, hoặc chỉ opcode), dẫn đến việc thiếu hụt ngữ cảnh toàn diện của chương trình.

Nhiệm vụ và mục tiêu nghiên cứu của đề tài được xác định gồm:

  1. Nghiên cứu tổng quan về cơ chế vận hành của hợp đồng thông minh, ngôn ngữ Solidity, máy ảo EVM và phân loại các dạng lỗ hổng bảo mật phổ biến.
  2. Khảo sát các công cụ phân tích tĩnh/động truyền thống và các mô hình học sâu, học đa thể thức (Multimodal Learning), học chuyển tiếp (Transfer Learning) trong an toàn thông tin.
  3. Đề xuất và thiết kế kiến trúc mô hình học sâu đa phương thức mang tên MatiVuln (công cụ VulnSenseGen2) kết hợp 3 luồng đặc trưng: mã nguồn (Source code), mã chỉ lệnh (Opcode) và đồ thị luồng điều khiển (Control Flow Graph - CFG).
  4. Áp dụng kỹ thuật học chuyển tiếp (Transfer Learning) để tăng cường khả năng thích ứng và mở rộng nhận diện các lỗ hổng mới chưa từng xuất hiện trong tập dữ liệu huấn luyện ban đầu.
  5. Xây dựng tập dữ liệu thực nghiệm, tiến hành huấn luyện, đánh giá hiệu năng mô hình và so sánh đối chuẩn với các nghiên cứu liên quan.

Đối tượng và phạm vi nghiên cứu:

  • Đối tượng nghiên cứu: Hợp đồng thông minh trên nền tảng Blockchain; các lỗ hổng bảo mật mã nguồn Solidity; mô hình học sâu đa phương thức và kỹ thuật học chuyển tiếp.
  • Phạm vi nghiên cứu: Các hợp đồng thông minh thực thi trên mạng lưới Ethereum (EVM); phân loại 8 nhãn lỗ hổng bảo mật trọng tâm gồm: Reentrancy (re), Arithmetic (ar), Access Control (ac), Denial of Service (dos), Front Running (fr), Unchecked Low-level Call (unc), Time manipulation (tm) và nhãn Other.

Cơ sở lý thuyết và phương pháp

Khóa luận xây dựng hệ thống giải pháp dựa trên nền tảng lý thuyết kết hợp giữa kỹ thuật biên dịch hợp đồng thông minh Ethereum và các kiến trúc học sâu tiên tiến:

  1. Cơ sở nền tảng về hợp đồng thông minh:

    • Cấu trúc biểu diễn: Mã nguồn cấp cao (Solidity Source Code) $\rightarrow$ Mã trung gian (Bytecode) $\rightarrow$ Tập lệnh cấp thấp (Opcode) thực thi trên máy ảo Ethereum Virtual Machine (EVM).
    • Danh mục 7 nhóm lỗ hổng mục tiêu:
      • Reentrancy: Lỗi tái nhập khi hợp đồng bên ngoài gọi ngược lại hàm của hợp đồng gốc trước khi trạng thái số dư được cập nhật.
      • Arithmetic: Lỗi tràn số trên (overflow) và tràn số dưới (underflow) trong các phép tính toán số học.
      • Access Control: Thiếu sót trong việc kiểm soát quyền truy cập các hàm nhạy cảm, cho phép người dùng trái phép thay đổi trạng thái hoặc rút tiền.
      • Denial of Service (DoS): Tê liệt luồng xử lý hoặc làm cạn kiệt gas khiến giao dịch không thể tiếp tục thực hiện.
      • Front Running: Khai thác thông tin giao dịch đang nằm trong hàng chờ (mempool) để chèn giao dịch trước nhằm trục lợi.
      • Unchecked Low-level Call: Không kiểm tra giá trị trả về của các lệnh gọi cấp thấp (call, delegatecall, send), khiến giao dịch vẫn tiếp tục dù lệnh gọi con thất bại.
      • Time Manipulation: Lợi dụng sự phụ thuộc vào dấu thời gian của khối (block.timestamp) do thợ đào kiểm soát.
  2. Khung mô hình học sâu và phương pháp đa thể thức:

    • CodeBERT: Mô hình Transformer được phát triển dựa trên RoBERTa, tối ưu hóa riêng cho phân tích mã nguồn và xử lý ngôn ngữ lập trình, trích xuất đặc trưng cú pháp và ngữ nghĩa từ mã nguồn Solidity.
    • Bidirectional Long Short-Term Memory (Bi-LSTM): Mạng nơ-ron hồi quy hai chiều, duy trì thông tin theo cả chiều thuận và chiều nghịch, phù hợp để mô hình hóa mối quan hệ phụ thuộc chuỗi trong chuỗi lệnh Opcode.
    • Graph Attention Network (GAT): Mạng nơ-ron đồ thị áp dụng cơ chế tự chú ý (self-attention mechanism) đa đầu (multi-head attention), giúp gán trọng số thích nghi cho các nút lân cận trên đồ thị luồng điều khiển (CFG).
    • Multimodal Learning: Hợp nhất thông tin đa nguồn (mã nguồn, chuỗi opcode và đồ thị CFG) để tận dụng tính bổ trợ giữa các dạng biểu diễn dữ liệu.
    • Transfer Learning: Kỹ thuật trích xuất đặc trưng (Feature Extraction) và thích nghi miền (Domain Adaptation) nhằm tái sử dụng tri thức từ mô hình nguồn đã huấn luyện để tinh chỉnh (fine-tuning) sang bài toán phân loại nhiều nhãn hơn (từ 4 nhãn sang 8 nhãn).
  3. Phương pháp nghiên cứu và nguồn dữ liệu:

    • Phương pháp thực nghiệm kỹ thuật: Xây dựng quy trình xử lý dữ liệu tự động, huấn luyện song song 3 nhánh mạng trích xuất đặc trưng và liên kết các biểu diễn thông qua tầng phân loại chung.
    • Nguồn dữ liệu & Công cụ phụ trợ: Tập dữ liệu Prime-SmartVul; công cụ Mythril dùng để phân tích và sinh chuỗi Opcode; công cụ Slither dùng để phân tích Bytecode và trích xuất đồ thị luồng điều khiển dưới định dạng .dot.

Nội dung chính theo từng chương

Chương 1. Tổng quan

Chương 1 thiết lập bức tranh toàn cảnh về thực trạng an toàn thông tin trên mạng lưới Blockchain. Tác giả trình bày các nguy cơ bảo mật từ sự cố DAO và rà soát hệ thống các công cụ phát hiện lỗ hổng hiện hữu (Oyente, Slither, Conkas, Mythril, Securify). Chương này cũng tổng hợp các nghiên cứu ứng dụng học máy truyền thống (Decision Tree, Random Forest của Tikhomirov et al.; Unsupervised Learning của Tsankov et al.; Reinforcement Learning của Dika et al.; kết hợp SVM/XGBoost của Sanjay Rawat et al.), các tiếp cận học sâu (CNN của Luu et al., Transformer của Wu et al.) và các mô hình đa phương thức tiêu biểu (mô hình của Deng và cộng sự, mô hình của Li và cộng sự). Cuối chương, tác giả xác định mục tiêu nghiên cứu, đối tượng, phạm vi 8 nhóm nhãn và bố cục 5 chương của khóa luận.

Chương 2. Cơ sở lý thuyết

Chương 2 cung cấp cơ sở toán học và lý thuyết chuyên sâu cho toàn bộ đề tài:

  • Trình bày kiến trúc hợp đồng thông minh, vòng đời biên dịch từ Source code sang Bytecode và Opcode trên EVM.
  • Định nghĩa chi tiết cơ chế phát sinh và kịch bản tấn công của 7 nhóm lỗ hổng (Reentrancy, Arithmetic, Access Control, DoS, Front Running, Unchecked Low-level Call, Time manipulation).
  • Trình bày chi tiết công thức giải tích của mô hình Bi-LSTM: Cổng vào ($i_t$), Cổng ra ($o_t$), Cổng trạng thái ($g_t$), Trạng thái ô nhớ mới ($c_t$) và Trạng thái ẩn ($h_t$) trên cả hai chiều truyền thuận và nghịch.
  • Phân tích kiến trúc BERT (BERT Base gồm 12 lớp Encoder, 768 hidden units, 12 attention heads; BERT Large gồm 24 lớp Encoder, 1024 hidden units, 16 attention heads), cấu trúc đầu vào gồm Token Embeddings, Segment Embeddings, Positional Embeddings và hai tác vụ tiền huấn luyện MLM, NSP.
  • Thiết lập công thức toán học của mạng GAT: Hệ số chú ý $e_{ij} = \text{LeakyReLU}(a^T [Wh_i ,||, Wh_j])$, chuẩn hóa Softmax $\alpha_{ij}$ và cập nhật đặc trưng đỉnh $h_i' = \sigma\left(\sum_{j \in \mathcal{N}(i)} \alpha_{ij} W h_j\right)$.
  • Phân loại các kỹ thuật học chuyển tiếp: Trích xuất đặc trưng, thích nghi miền, học chuyển tiếp một phần/toàn phần, xuyên miền và đa tác vụ.

Chương 3. Phương pháp thiết kế

Chương 3 trình bày chi tiết kiến trúc tổng thể và luồng dữ liệu của mô hình MatiVuln với 3 nhánh trích xuất đặc trưng:

  • Nhánh 1 (Xử lý mã nguồn): Mã nguồn Solidity sau khi làm sạch được phân rã thành token thông qua bộ từ vựng chuyên biệt, đưa vào mô hình CodeBERT (chuỗi vector 768 chiều), kết nối tiếp với mạng Dense (512 units, ReLU) $\rightarrow$ BatchNorm $\rightarrow$ Dropout (0.3) $\rightarrow$ Dense (256 units, ReLU) $\rightarrow$ Dropout (0.6) $\rightarrow$ Dense (128 units, ReLU) $\rightarrow$ Dropout (0.1) $\rightarrow$ Tầng Output Sigmoid.
  • Nhánh 2 (Xử lý chuỗi Opcode): Chuỗi Opcode trích xuất dưới dạng 2-gram với độ dài tối đa 280 chiều ($X_{input} \in \mathbb{R}^{280}$), đi qua lớp Embedding (kích thước từ vựng 34.000 từ, vector nhúng 286 chiều) $\rightarrow$ Lớp Bi-LSTM (128 đơn vị) $\rightarrow$ Dropout (0.3) $\rightarrow$ BatchNorm $\rightarrow$ Dropout $\rightarrow$ Dense (128 units, ReLU) $\rightarrow$ Dense (8 units, Sigmoid).
  • Nhánh 3 (Xử lý đồ thị CFG): Đầu vào gồm ma trận đặc trưng nút $X \in \mathbb{R}^{V \times F}$ và chỉ số cạnh $E \in \mathbb{R}^{2 \times E}$, truyền qua lớp GATConv thứ nhất (8 attention heads, Dropout 0.25) $\rightarrow$ BatchNorm $\rightarrow$ Kích hoạt ReLU $\rightarrow$ Lớp GATConv thứ hai (1 attention head, Dropout) $\rightarrow$ Tầng gộp Max/Mean Pooling $\rightarrow$ Dense Sigmoid 8 nhãn.
  • Tích hợp và Học chuyển tiếp: Các vector đặc trưng từ 3 nhánh được ghép nối (concatenation) tại tầng quyết định đa thể thức, sau đó áp dụng cấu trúc thích nghi miền để mở rộng số nhãn phân loại từ 4 nhãn lên 8 nhãn thông qua việc huấn luyện lại các tầng kết nối đầy đủ.

Chương 4. Thí nghiệm và đánh giá

Chương 4 thiết lập môi trường thực nghiệm, mô tả quy trình tiền xử lý tập dữ liệu Prime-SmartVul, chuẩn hóa opcode, sử dụng lệnh Slither để tạo các file .dot đại diện cho CFG. Tác giả tiến hành đo lường hiệu năng của mô hình MatiVuln, đối chiếu với mô hình đa thể thức của Deng và cộng sự, mô hình Smarter và các công cụ truyền thống trên các kịch bản phân loại từ 4 đến 8 nhãn. Chương này cũng phân tích kết quả thực nghiệm về khả năng chuyển giao tri thức của mô hình thông qua Transfer Learning.

Chương 5. Kết luận và hướng phát triển

Chương 5 đúc kết các kết quả đạt được về mặt lý thuyết và mô hình kỹ thuật, khẳng định tính hiệu quả của phương pháp tiếp cận đa thể thức và đề xuất các phương hướng mở rộng nâng cao hiệu năng trong tương lai.

Thiết kế và triển khai

Hệ thống phát hiện lỗ hổng MatiVuln được tổ chức theo quy trình pipeline khép kín từ trích xuất dữ liệu đa thể thức đến phân loại nhãn lỗ hổng:

Nhánh đặc trưng Dữ liệu đầu vào Công cụ tiền xử lý / Trích xuất Kiến trúc mạng nơ-ron Tham số và cấu hình chi tiết
Mã nguồn (Source Code) Mã nguồn Solidity đã làm sạch Tokenizer với vocabulary riêng cho Solidity CodeBERT + Mạng kết nối đầy đủ (Dense) - Đầu ra CodeBERT: 768 chiều
- Dense 512 (ReLU) + BatchNorm + Dropout (0.3)
- Dense 256 (ReLU) + Dropout (0.6)
- Dense 128 (ReLU) + Dropout (0.1)
- Dense Output (Sigmoid)
Mã lệnh (Opcode) Chuỗi Opcode từ EVM Bytecode Công cụ Mythril + Biểu diễn 2-gram Embedding + Bi-LSTM + Mạng Dense - Độ dài chuỗi đầu vào tối đa: 280
- Lớp Embedding: 34.000 từ vựng $\rightarrow$ 286 chiều
- Bi-LSTM: 128 đơn vị ẩn
- Dropout (0.3) + BatchNorm + Dropout
- Dense 128 (ReLU) + Dense 8 (Sigmoid)
Đồ thị luồng (CFG) Bytecode chuyển đổi sang CFG Công cụ Slither (xuất file định dạng .dot) Graph Attention Network (GAT) + Pooling - Lớp GATConv 1: 8 attention heads, Dropout (0.25)
- BatchNorm + Kích hoạt ReLU
- Lớp GATConv 2: 1 attention head
- Tầng Max/Mean Pooling + Dense Sigmoid

Quá trình hợp nhất đa thể thức (Multimodal Fusion) thực hiện việc liên kết các biểu diễn chiều sâu từ cả 3 nhánh mạng trên. Đối với kỹ thuật học chuyển tiếp (Transfer Learning), mô hình sử dụng trọng số đã học từ tập dữ liệu cơ sở (phân loại 4 nhãn), sau đó giữ lại các tầng trích xuất đặc trưng và thay thế tầng đầu ra bằng các lớp Fully Connected mới để huấn luyện tinh chỉnh nhận diện đầy đủ 8 nhãn lỗ hổng.

Kết quả và đóng góp

  1. Kết quả thực nghiệm:

    • Mô hình MatiVuln được đánh giá thông qua tập dữ liệu Prime-SmartVul, chứng minh khả năng phát hiện đồng thời 8 nhóm nhãn lỗ hổng bảo mật: Reentrancy, Arithmetic, Access Control, Denial of Service, Front Running, Unchecked Low-level Call, Time manipulation và Other.
    • Kết quả so sánh trực tiếp trên các kịch bản phân loại từ 4 đến 8 nhãn cho thấy mô hình MatiVuln đạt độ chính xác và hiệu năng vượt trội so với các công cụ phân tích tĩnh/động truyền thống (Oyente, Slither, Mythril, Securify, Conkas) và các nghiên cứu học sâu đa phương thức đi trước (mô hình của Deng và cộng sự, mô hình Smarter).
    • Quá trình thử nghiệm Transfer Learning chứng minh tính hiệu quả của phương pháp thích nghi miền: việc mở rộng từ 4 nhãn lên 8 nhãn giúp tiết kiệm đáng kể thời gian và tài nguyên tính toán so với việc huấn luyện mô hình sâu lại từ đầu.
  2. Đóng góp của đề tài:

    • Đề xuất kiến trúc học sâu đa phương thức mới (MatiVuln) kết hợp đồng thời 3 góc nhìn dữ liệu của hợp đồng thông minh: cú pháp/ngữ nghĩa mã nguồn (CodeBERT), chuỗi chỉ lệnh thực thi cấp thấp (Bi-LSTM trên Opcode) và cấu trúc luồng điều khiển chương trình (GAT trên đồ thị CFG).
    • Ứng dụng thành công kỹ thuật học chuyển tiếp (Transfer Learning) vào bài toán bảo mật hợp đồng thông minh, giúp mô hình có khả năng mở rộng sang các dạng lỗ hổng mới mà không cần xây dựng lại toàn bộ kiến trúc.
    • Xây dựng quy trình tiền xử lý, chuẩn hóa opcode và trích xuất đồ thị CFG tự động từ Bytecode thông qua sự kết hợp của các công cụ Slither và Mythril.

Hạn chế và hướng nghiên cứu tiếp

Dựa trên phạm vi và nội dung trình bày trong khóa luận, các hạn chế và hướng phát triển được xác định như sau:

  • Hạn chế:

    • Phạm vi nghiên cứu mới chỉ tập trung vào các hợp đồng thông minh viết bằng ngôn ngữ Solidity và triển khai trên máy ảo EVM của mạng lưới Ethereum, chưa bao quát các nền tảng Blockchain hoặc ngôn ngữ khác (như Vyper, Rust).
    • Quy trình trích xuất đặc trưng phụ thuộc vào các công cụ trung gian bên ngoài (Slither để sinh file .dot và Mythril để sinh opcode), do đó tính toàn vẹn của dữ liệu đầu vào chịu ảnh hưởng bởi độ chính xác của các công cụ này.
    • Số lượng nhãn phân loại tập trung vào 8 nhóm lỗ hổng định sẵn; các biến thể tấn công logic nghiệp vụ đặc thù chưa được bao quát triệt để.
  • Hướng nghiên cứu tiếp:

    • Nâng cao độ chính xác và tối ưu hóa các siêu tham số của mô hình MatiVuln.
    • Mở rộng phạm vi tập dữ liệu và số lượng nhãn lỗ hổng mới xuất hiện trong các phiên bản cập nhật tiếp theo của Solidity.
    • Tối ưu hóa cơ chế kết hợp đặc trưng đa thể thức và nâng cao năng lực của kỹ thuật học chuyển tiếp nhằm tự động hóa việc phát hiện các lỗ hổng chưa từng được gán nhãn.

Giá trị tham khảo

Khóa luận là tài liệu tham khảo chuyên môn hữu ích cho:

  • Sinh viên, học viên cao học và nghiên cứu sinh thuộc các ngành An toàn thông tin, Mạng máy tính & Truyền thông, Khoa học máy tính và Kỹ thuật phần mềm đang tìm hiểu về bảo mật Blockchain và ứng dụng trí tuệ nhân tạo trong an ninh mạng.
  • Các kỹ sư, chuyên gia kiểm toán bảo mật hợp đồng thông minh (Smart Contract Security Auditors) cần giải pháp rà quét lỗ hổng tự động bổ trợ cho các phương pháp kiểm toán thủ công.
  • Các nhà nghiên cứu quan tâm đến kỹ thuật xử lý dữ liệu đa phương thức (kết hợp NLP, xử lý chuỗi và mạng nơ-ron đồ thị GNN) và phương pháp học chuyển tiếp trong bài toán phân loại mã nguồn.
  • Phần có giá trị tham khảo kỹ thuật cao: Thiết kế kiến trúc 3 nhánh mạng (CodeBERT, Bi-LSTM, GAT), cấu hình chi tiết các tầng chuẩn hóa BatchNorm/Dropout và quy trình trích xuất đồ thị CFG thông qua Slither.

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

1. Mô hình MatiVuln sử dụng những luồng dữ liệu đầu vào nào để phát hiện lỗ hổng?
Mô hình MatiVuln sử dụng 3 luồng đặc trưng độc lập từ hợp đồng thông minh: mã nguồn cấp cao Solidity (được làm sạch), chuỗi mã chỉ lệnh Opcode (trích xuất qua Mythril dưới dạng 2-gram) và đồ thị luồng điều khiển CFG (trích xuất từ Bytecode qua công cụ Slither dưới định dạng .dot).

2. Vai trò của từng kiến trúc học sâu trong mô hình MatiVuln là gì?

  • CodeBERT: Trích xuất đặc trưng cú pháp và ngữ cảnh từ mã nguồn Solidity.
  • Bi-LSTM: Học các mối quan hệ phụ thuộc chuỗi hai chiều trong chuỗi chỉ lệnh Opcode.
  • GAT: Sử dụng cơ chế tự chú ý đa đầu để tổng hợp đặc trưng và mối liên hệ giữa các nút trên đồ thị luồng điều khiển CFG.

3. Phạm vi phân loại lỗ hổng của khóa luận gồm những loại nào?
Khóa luận tập trung phát hiện 8 nhóm nhãn lỗ hổng bảo mật: Reentrancy (re), Arithmetic (ar), Access Control (ac), Denial of Service (dos), Front Running (fr), Unchecked Low-level Call (unc), Time manipulation (tm) và nhãn Other.

4. Kỹ thuật Học chuyển tiếp (Transfer Learning) được ứng dụng nhằm mục đích gì trong đề tài?
Học chuyển tiếp được sử dụng theo phương thức thích nghi miền (Domain Adaptation). Bằng cách giữ lại các tầng trích xuất đặc trưng đã học từ bài toán phân loại 4 nhãn và gắn thêm các lớp fully connected mới, mô hình có thể tinh chỉnh để phân loại 8 nhãn lỗ hổng mà không cần huấn luyện lại toàn bộ mạng từ đầu, giúp tiết kiệm tài nguyên tính toán và mở rộng khả năng nhận diện lỗi mới.

5. Các công cụ nào được tác giả sử dụng để tiền xử lý và trích xuất dữ liệu đầu vào?
Tác giả sử dụng công cụ Mythril để biên dịch và trích xuất chuỗi Opcode, và công cụ Slither để phân tích Bytecode nhằm xuất ra các file đồ thị luồng điều khiển (CFG) dạng .dot.

Kết luận

Khóa luận tốt nghiệp của Lê Công Trình và Trần Nguyễn Minh Triết đã giải quyết hiệu quả bài toán phát hiện lỗ hổng bảo mật hợp đồng thông minh Ethereum bằng việc đề xuất mô hình học sâu đa phương thức MatiVuln. Bằng cách tích hợp đồng thời ba nhánh mạng CodeBERT, Bi-LSTM và GAT để xử lý mã nguồn, Opcode và đồ thị CFG, mô hình khắc phục được các nhược điểm bỏ sót ngữ cảnh của các công cụ truyền thống và phương pháp đơn thể thức. Việc tích hợp kỹ thuật Transfer Learning giúp hệ thống linh hoạt mở rộng phạm vi phân loại trên 8 nhóm lỗ hổng phổ biến, mang lại giá trị thực tiễn cao cho công tác kiểm định an toàn mã nguồn Blockchain.