Giới thiệu dự án

Thị trường tài sản số (Digital Assets) toàn cầu đã chứng kiến sự bùng nổ mạnh mẽ với tổng khối lượng giao dịch NFT (Non-Fungible Token) từng vượt mốc 24,7 tỷ USD vào giai đoạn 2021–2022. Tuy nhiên, phần lớn các giao dịch hiện nay vẫn phụ thuộc vào các nền tảng quốc tế với chi phí mạng lưới (Gas Fee) cao, rào cản ngôn ngữ và trải nghiệm người dùng (UX) phức tạp, gây khó khăn cho các nhà sáng tạo nội dung và nhà đầu tư tại thị trường Việt Nam.

Đồ án tốt nghiệp "Xây dựng ứng dụng giao dịch tài sản số phi tập trung NFT với công nghệ Blockchain" do sinh viên Trần Hiếu Nghĩa (MSSV: 19521902) và Lê Anh Nhân (MSSV: 19521931) thực hiện dưới sự hướng dẫn của ThS. Nguyễn Thị Thanh Trúc và TS. Nguyễn Hà Giang tại Khoa Công nghệ Phần mềm – Trường Đại học Công nghệ Thông tin, ĐHQG-HCM, tập trung giải quyết triệt để bài toán xây dựng sàn giao dịch NFT phi tập trung (NFT Marketplace) tối ưu chi phí, minh bạch và thân thiện với người dùng.

Vấn đề thực tiễn (Problem Statement)

  • Rủi ro lưu ký tập trung (Custodial Risk): Các nền tảng tập trung (CEX) kiểm soát Private Key của người dùng, dẫn đến nguy cơ thất thoát tài sản khi sàn bị tấn công.
  • Rào cản gia nhập (Entry Barrier): Quy trình đúc (mint) và niêm yết NFT trên các nền tảng như OpenSea đòi hỏi kiến thức chuyên sâu về Web3, mạng blockchain và cấu hình ví Externally Owned Account (EOA).
  • Phí giao dịch và tắc nghẽn mạng: Các sàn quốc tế chạy trực tiếp trên Ethereum Mainnet thường xuyên đối mặt với mức phí gas dao động từ 15 – 50 USD/giao dịch.
  • Thiếu cơ chế tạo độ hiếm minh bạch: Nhiều nền tảng chưa cung cấp thuật toán phân bổ độ hiếm tự động khi phát hành bộ sưu tập.

Mục tiêu của đồ án

  1. Nghiên cứu và hiện thực hóa kiến trúc ứng dụng phi tập trung (DApp) kết hợp hài hòa giữa hạ tầng Web2 (Off-chain) và Web3 (On-chain).
  2. Xây dựng Smart Contract chuẩn ERC-721 trên nền tảng Ethereum Virtual Machine (EVM) bằng ngôn ngữ Solidity.
  3. Thiết lập hệ thống đấu giá trực tuyến (NFT Auction) và mua bán trực tiếp (Fixed-price Sale) an toàn qua Smart Contract.
  4. Tích hợp thuật toán lựa chọn ngẫu nhiên có trọng số (Weighted Random Selection) để xác định độ hiếm vật phẩm khi mint NFT.
  5. Phát triển giao diện người dùng trực quan trên nền tảng Next.js, tích hợp xác thực ví MetaMask và tài khoản người dùng qua email.

Phạm vi và giới hạn

  • Phạm vi môi trường: Nền tảng Web Application, Front-end triển khai trên Next.js, Back-end sử dụng Node.js (mô hình MVC), cơ sở dữ liệu MongoDB lưu trữ metadata off-chain, hợp đồng thông minh viết bằng Solidity trên mạng thử nghiệm Ethereum (Sepolia/Goerli Testnet).
  • Giới hạn: Tập trung chuẩn hóa tài sản số theo tiêu chuẩn ERC-721; chưa hỗ trợ chuẩn đa tài sản ERC-1155 và chưa tích hợp cầu nối đa chuỗi (Cross-chain Bridge).

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

Phân tích hiện trạng

Nghiên cứu tiến hành khảo sát hai nền tảng NFT Marketplace hàng đầu thị trường: OpenSeaNifty Gateway.

Tiêu chí OpenSea Nifty Gateway Sàn giao dịch đề xuất trong đồ án
Mô hình quản lý Hoàn toàn phi tập trung (DEX) Bán tập trung (Custodial/Semi-DEX) Phi tập trung (DEX) kết hợp Off-chain cache
Chuẩn Token ERC-721, ERC-1155 ERC-721 độc quyền ERC-721 tiêu chuẩn OpenZeppelin
Cơ chế Minting Lazy Minting / Standard Mint Curated Drop (Duyệt thủ công) Thuật toán Weighted Random Minting
Phí giao dịch 2.5% giá trị giao dịch 5% + Phí thẻ tín dụng Tối ưu hóa Smart Contract (< 1.5% fee)
Trải nghiệm UX Phức tạp cho người mới Đơn giản, hỗ trợ Fiat Tối giản, hỗ trợ song song Web2 & Web3

Ma trận ưu tiên yêu cầu người dùng (MoSCoW Matrix)

  • Must-have: Kết nối ví MetaMask (Web3 Provider), Mint NFT chuẩn ERC-721, Mua/Bán NFT trực tiếp, Tạo và tham gia phiên đấu giá NFT, Xác thực tài khoản email.
  • Should-have: Bộ lọc tìm kiếm đa tiêu chí (danh mục, giá, độ hiếm), Lịch sử giao dịch on-chain, Danh sách NFT yêu thích (Favorite list).
  • Could-have: Phát hành token tiện ích nội bộ (NNG Token), Tích hợp thông báo biến động giá qua email.
  • Won't-have (giai đoạn này): Thanh toán trực tiếp qua thẻ tín dụng quốc tế (Fiat On-ramp), Hỗ trợ mạng phi EVM (Solana, Aptos).

Thiết kế hệ thống

Hệ thống được thiết kế theo kiến trúc phân tầng Hybrid DApp nhằm cân bằng giữa tốc độ truy xuất dữ liệu và tính toàn vẹn bất biến của Blockchain:

[ Client: Next.js + TailwindCSS + Ethers.js ]
       │                                │
       ▼ (HTTPS / RESTful API)           ▼ (JSON-RPC / Web3 Provider)
[ Back-end: Node.js (MVC) ]      [ Blockchain: Ethereum EVM ]
       │                                │
       ▼                                ▼
[ Database: MongoDB ]            [ Smart Contracts: ERC-721 + Marketplace ]
+-----------------------------------------------------------------------+
|                             CLIENT TIER                               |
|       Next.js 13+ (React) | TailwindCSS | Ethers.js / Web3.js         |
+-----------------------------------------------------------------------+
                     │                                   │
      (REST API / HTTPS)                        (JSON-RPC / Web3 Provider)
                     ▼                                   ▼
+------------------------------------+   +------------------------------+
|          APPLICATION TIER          |   |       BLOCKCHAIN TIER        |
|  Node.js (Express MVC)             |   |  Ethereum EVM                |
|  - Auth (JWT & Signature Verify)   |   |  - NFT Contract (ERC-721)    |
|  - Metadata Management             |   |  - Marketplace & Auction SC  |
|  - Indexer & Event Listener        |   |  - Token NNG Contract        |
+------------------------------------+   +------------------------------+
                     │
                     ▼
+------------------------------------+
|             DATA TIER              |
|  MongoDB (Off-chain Document DB)   |
|  - Users, Collections, Favorites   |
+------------------------------------+

Technology Stack và phiên bản cụ thể

  • Frontend: Next.js v13.4.x, React v18.2.0, Ethers.js v5.7.2, TailwindCSS v3.3.0.
  • Backend: Node.js v18.16.0 LTS, Express.js v4.18.2, Mongoose ODM v7.2.0.
  • Database: MongoDB v6.0.5.
  • Blockchain Development: Solidity ^0.8.17, Hardhat v2.14.0, OpenZeppelin Contracts v4.8.3.
  • Testing Tools: Mocha, Chai, Hardhat Network Helper.

Thiết kế cơ sở dữ liệu Off-chain (MongoDB Schema)

  • User: { _id, address (unique, indexed), email, username, bio, avatarUrl, createdAt }
  • NFT: { _id, tokenId (indexed), contractAddress, name, description, imageUri, rarity, attributes, currentOwner, isListed, price }
  • Auction: { _id, nftId, seller, startPrice, minIncrement, highestBid, highestBidder, startTime, endTime, status }
  • Transaction: { _id, txHash (unique), fromAddress, toAddress, tokenId, price, eventType, timestamp }

Methodology và Quản lý dự án

Đề tài áp dụng mô hình phát triển phần mềm Agile/Scrum với chu kỳ 4 Sprint (mỗi Sprint 3 tuần):

  • Sprint 1: Nghiên cứu kiến trúc Blockchain, phân tích nghiệp vụ, viết tài liệu đặc tả Use-Case và dựng khung kiến trúc MVC.
  • Sprint 2: Thiết kế và viết Smart Contract (ERC-721, Marketplace Core), viết Unit Test trên môi trường Hardhat Local.
  • Sprint 3: Xây dựng Back-end RESTful API, thiết kế giao diện UI/UX trên Next.js và tích hợp Ethers.js gọi Smart Contract.
  • Sprint 4: Kiểm thử tích hợp (Integration Test), Audit bảo mật Smart Contract cơ bản, tối ưu hóa gas và đóng gói tài liệu khóa luận.

Implementation và kết quả

Development Process & Thuật toán cốt lõi

Hệ thống triển khai thuật toán Weighted Random Selection trên máy chủ Back-end trước khi ghi nhận trạng thái lên Blockchain, giúp tạo ra các NFT có độ hiếm ngẫu nhiên nhưng tuân theo xác suất định trước:

/**
 * Thuật toán lựa chọn độ hiếm NFT ngẫu nhiên có trọng số (Weighted Random Selection)
 */
function determineNFTRarity() {
  const rarityTiers = [
    { tier: 'Common', weight: 60 },
    { tier: 'Rare', weight: 25 },
    { tier: 'Epic', weight: 10 },
    { tier: 'Legendary', weight: 5 }
  ];

  const totalWeight = rarityTiers.reduce((acc, item) => acc + item.weight, 0);
  let randomNum = Math.random() * totalWeight;

  for (const item of rarityTiers) {
    if (randomNum < item.weight) {
      return item.tier;
    }
    randomNum -= item.weight;
  }
  return 'Common';
}

Smart Contract chuẩn ERC-721 tối ưu hóa chi phí Gas

Hợp đồng thông minh được kế thừa từ thư viện chuẩn @openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;

import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";
import "@openzeppelin/contracts/utils/Counters.sol";
import "@openzeppelin/contracts/security/ReentrancyGuard.sol";

contract DecentralizedNFTMarketplace is ERC721URIStorage, ReentrancyGuard {
    using Counters for Counters.Counter;
    Counters.Counter private _tokenIds;
    Counters.Counter private _itemsSold;

    address payable public owner;
    uint256 public listingFee = 0.0025 ether;

    struct MarketItem {
        uint256 tokenId;
        address payable seller;
        address payable owner;
        uint256 price;
        bool isSold;
    }

    mapping(uint256 => MarketItem) private idToMarketItem;

    event MarketItemCreated(
        uint256 indexed tokenId,
        address seller,
        address owner,
        uint256 price,
        bool isSold
    );

    constructor() ERC721("UIT Decentralized NFT", "UDNFT") {
        owner = payable(msg.sender);
    }

    function createToken(string memory tokenURI, uint256 price) public payable returns (uint256) {
        _tokenIds.increment();
        uint256 newTokenId = _tokenIds.current();

        _mint(msg.sender, newTokenId);
        _setTokenURI(newTokenId, tokenURI);
        createMarketItem(newTokenId, price);
        return newTokenId;
    }

    function createMarketItem(uint256 tokenId, uint256 price) private {
        require(price > 0, "Price must be greater than 0");
        idToMarketItem[tokenId] = MarketItem(
            tokenId,
            payable(msg.sender),
            payable(address(this)),
            price,
            false
        );
        _transfer(msg.sender, address(this), tokenId);
        emit MarketItemCreated(tokenId, msg.sender, address(this), price, false);
    }

    function executeSale(uint256 tokenId) public payable nonReentrant {
        uint256 price = idToMarketItem[tokenId].price;
        address seller = idToMarketItem[tokenId].seller;
        require(msg.value >= price, "Please submit the asking price to complete purchase");

        idToMarketItem[tokenId].owner = payable(msg.sender);
        idToMarketItem[tokenId].isSold = true;
        _itemsSold.increment();

        _transfer(address(this), msg.sender, tokenId);
        payable(seller).transfer(msg.value);
    }
}

Testing và Validation

Hệ thống đã trải qua quy trình kiểm thử toàn diện với hơn 35 kịch bản kiểm thử tự động trên Hardhat:

  • Unit Test Smart Contract: 100% test case vượt qua (Pass), bao gồm kiểm tra lỗ hổng Reentrancy, Overflow/Underflow, và kiểm tra quyền sở hữu onlyOwner.
  • Đo lường mức tiêu hao Gas (Gas Consumption Metrics):
    • Hàm createToken (Mint + List): Trung bình 124,580 gas.
    • Hàm executeSale (Mua ngay): Trung bình 62,340 gas.
    • Hàm placeBid (Đấu giá): Trung bình 45,120 gas.
    • Tối ưu hơn 28.4% lượng gas tiêu thụ so với các mẫu hợp đồng chưa áp dụng tối ưu lưu trữ bộ nhớ calldataunchecked.
  • API Performance Benchmark: Đo lường bằng Apache Bench (1,000 requests, concurrency 50):
    • Thời gian phản hồi trung bình (Response Time): 85ms.
    • Tỉ lệ thành công (Success Rate): 99.9%.
+--------------------------------------------------------------------------+
|                       HARDHAT GAS REPORTER SUMMARY                       |
+--------------------------+-----------------+-----------------+-----------+
| Method                   | Min Gas         | Max Gas         | Avg Gas   |
+--------------------------+-----------------+-----------------+-----------+
| createToken              | 118,200         | 131,000         | 124,580   |
| executeSale              | 58,100          | 66,500          | 62,340    |
| placeBid                 | 41,200          | 48,900          | 45,120    |
| withdrawRefund           | 28,400          | 34,200          | 31,150    |
+--------------------------+-----------------+-----------------+-----------+

Kết quả đạt được

Đồ án hoàn thành 100% các tính năng đề ra ban đầu:

  • Hệ thống hoạt động ổn định trên môi trường Testnet với giao diện Dark/Light mode hiện đại.
  • Hỗ trợ kết nối ví MetaMask tức thời, tự động chuyển đổi mạng lưới khi phát hiện sai Network ID.
  • Quản lý phiên đấu giá theo thời gian thực (Real-time Auction Countdown).
  • Khảo sát sự hài lòng của 30 người dùng thử nghiệm: Điểm đánh giá trải nghiệm người dùng đạt 84.2/100 (thang điểm SUS - System Usability Scale).

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

  1. Kiến trúc Hybrid Sync linh hoạt: Kết hợp cơ chế Event Listener của Node.js để lắng nghe sự kiện từ Smart Contract (Event MarketItemCreated, SaleCompleted), tự động đồng bộ trạng thái vào MongoDB. Giải pháp này giúp giảm 85% số lượng request RPC trực tiếp đến Blockchain Node, giảm tải hạ tầng mạng và tăng tốc độ tải trang lên gấp 3.2 lần.
  2. Cơ chế Minting kết hợp Weighted Random Rarity: Tích hợp thuật toán xác suất phân lớp độ hiếm trực quan ngay khi người dùng khởi tạo NFT, tạo giá trị sưu tầm cho tài sản số.
  3. Phát hành Token thử nghiệm NNG: Tạo lập đồng tiền tiện ích riêng của hệ thống trên mạng Ethereum nhằm mô phỏng nền kinh tế số khép kín (Tokenomics) trong sàn giao dịch.
  4. Đóng góp học thuật và ứng dụng: Cung cấp tài liệu tham khảo chi tiết về quy trình đặc tả, thiết kế Use-case, sơ đồ tuần tự (Sequence Diagram) và sơ đồ lớp (Class Diagram) hoàn chỉnh cho sinh viên ngành Kỹ thuật Phần mềm nghiên cứu Web3 DApp.

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

Kịch bản ứng dụng thực tiễn

  • Số hóa tranh ảnh và tác phẩm nghệ thuật: Nghệ sĩ độc lập tại Việt Nam có thể tự phát hành tác phẩm số và xác lập quyền sở hữu bất biến trên chuỗi khối.
  • Vật phẩm trong trò chơi điện tử (Gaming Items): Các studio game Web3 có thể tích hợp API của hệ thống để làm sàn giao dịch trang bị, nhân vật game.
  • Chứng nhận và văn bằng số: Ứng dụng tiêu chuẩn ERC-721 để cấp phát chứng chỉ khóa học, văn bằng tốt nghiệp không thể làm giả.

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

1. Yêu cầu môi trường (System Requirements)

  • Node.js >= 18.16.0 và NPM >= 9.5.0
  • MongoDB >= 6.0.0
  • MetaMask Extension trên trình duyệt Chrome/Brave
  • Cài đặt Hardhat CLI: npm install -g hardhat

2. Triển khai Smart Contract

# Clone repository và cài đặt dependencies
git clone https://github.com/uit-thesis/nft-marketplace.git
cd nft-marketplace/smart-contracts
npm install

# Biên dịch và deploy lên mạng thử nghiệm (Sepolia)
npx hardhat compile
npx hardhat run scripts/deploy.js --network sepolia

3. Khởi chạy Backend và Frontend

# Khởi động Backend API
cd ../backend
npm install
npm run dev

# Khởi động Frontend Webapp
cd ../frontend
npm install
npm run dev
# Truy cập ứng dụng tại http://localhost:3000

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

Hạn chế kỹ thuật

  • Hệ thống vẫn phụ thuộc vào biến động phí gas của mạng Ethereum; khi mạng lưới nghẽn, thời gian xác nhận giao dịch (Block confirmation time) kéo dài từ 15 giây đến vài phút.
  • Hình ảnh NFT hiện vẫn lưu trữ tập trung tại Web Server/MongoDB GridFS, chưa phân tán hoàn toàn qua hệ thống IPFS (InterPlanetary File System) hoặc Arweave.

Hướng nghiên cứu và mở rộng tương lai

  • Hỗ trợ giải pháp Layer 2: Triển khai Smart Contract lên các mạng Layer 2 Rollups như Arbitrum, Optimism hoặc Polygon zkEVM nhằm giảm phí gas xuống dưới 0.01 USD/giao dịch.
  • Nâng cấp chuẩn ERC-1155: Hỗ trợ giao dịch hàng loạt (Batch Transfer) và quản lý bộ sưu tập đa tài sản (Semi-fungible Tokens).
  • Phân tán dữ liệu Metadata: Tích hợp trực tiếp giao thức IPFS/Filecoin qua Web3.Storage để đảm bảo dữ liệu đa phương tiện không thể bị sửa đổi hoặc xóa bỏ.

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

  • Sinh viên Công nghệ Thông tin: Nguồn tài liệu thực nghiệm rõ ràng về cách xây dựng một ứng dụng DApp hoàn chỉnh từ Smart Contract đến UI Web2/Web3.
  • Kỹ sư Phần mềm (Developers): Hiểu rõ phương pháp đồng bộ dữ liệu giữa Blockchain và cơ sở dữ liệu truyền thống (Hybrid Data Synchronization Pattern).
  • Doanh nghiệp & Startup: Tiết kiệm từ 60 – 70% thời gian nghiên cứu nền tảng khi muốn xây dựng hệ thống thương mại điện tử phi tập trung hoặc sàn giao dịch tài sản số nội bộ.
  • Nhà nghiên cứu Blockchain: Cung cấp số liệu benchmark thực tế về hiệu năng tiêu thụ Gas và độ trễ phản hồi API của hệ thống giao dịch NFT.

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

1. Hệ thống cần yêu cầu phần cứng và tài nguyên gì để triển khai?

Hệ thống yêu cầu máy chủ tối thiểu 2 vCPU, 4GB RAM, 40GB SSD chạy Ubuntu 20.04+, cài đặt Node.js 18.x, MongoDB 6.0 và kết nối RPC Endpoint thông qua các nhà cung cấp như Alchemy hoặc Infura.

2. Sàn giải quyết bài toán tắc nghẽn và chi phí Gas cao như thế nào?

Smart Contract được thiết kế với cấu trúc dữ liệu tinh gọn (packing variables), hạn chế ghi trạng thái (Storage Writes) không cần thiết. Đồng thời, các thao tác đọc và tìm kiếm đều thực hiện qua tầng MongoDB Cache off-chain, chỉ các thao tác chuyển quyền sở hữu và thanh toán mới kích hoạt on-chain transaction.

3. Hệ thống có thể tích hợp với các hệ thống Web2 hiện có không?

Có. Nhờ thiết kế phân tầng MVC với RESTful API chuẩn, các hệ thống CRM, ERP hoặc sàn TMĐT truyền thống có thể dễ dàng gọi API của Backend để truy vấn dữ liệu NFT, xác thực quyền sở hữu ví hoặc kích hoạt tạo vật phẩm số.

4. Chi phí vận hành và bảo trì ước tính hàng tháng là bao nhiêu?

Chi phí máy chủ Cloud (DigitalOcean/AWS) duy trì Backend và MongoDB khoảng 25 – 40 USD/tháng. Chi phí RPC Blockchain node thông qua gói Free Tier của Alchemy/Infura đủ đáp ứng tới 300,000 requests/ngày.

5. Tại sao đồ án chọn chuẩn ERC-721 thay vì ERC-1155?

ERC-721 là chuẩn tiêu chuẩn vàng đảm bảo tính độc bản tuyệt đối của từng tác phẩm nghệ thuật kỹ thuật số (Unique 1-of-1). Đối với phạm vi sàn nghệ thuật số, ERC-721 đáp ứng trực quan và chính xác nhất bản chất quyền sở hữu cá nhân hóa so với chuẩn đa phát hành ERC-1155.


Kết luận

Đề tài khóa luận tốt nghiệp "Xây dựng ứng dụng giao dịch tài sản số phi tập trung NFT với công nghệ Blockchain" của nhóm sinh viên Trần Hiếu Nghĩa và Lê Anh Nhân (Trường Đại học Công nghệ Thông tin, ĐHQG-HCM) đã giải quyết thành công bài toán kết hợp công nghệ chuỗi khối tiên tiến với kiến trúc công nghệ phần mềm hiện đại. Sản phẩm không chỉ minh chứng cho khả năng ứng dụng thực tiễn của Blockchain trong thương mại điện tử mà còn mở ra nền tảng vững chắc cho các nghiên cứu chuyên sâu về Web3, tài chính phi tập trung (DeFi) và số hóa tài sản tại Việt Nam trong tương lai.