Giới thiệu dự án

Thị trường tổ chức sự kiện âm nhạc và biểu diễn trực tiếp toàn cầu đang chứng kiến sự tăng trưởng vượt bậc với quy mô dự kiến vượt mốc 35 tỷ USD vào năm 2028. Tuy nhiên, ngành công nghiệp bán vé truyền thống (Web2) đang phải đối mặt với những vấn đề nhức nhối: nạn vé giả (counterfeit tickets), hiện tượng "phe vé" đầu cơ trục lợi (ticket scalping) đẩy giá vé chợ đen lên gấp 300% – 500%, sự thiếu minh bạch về tổng cung vé phát hành và rủi ro lừa đảo trong các giao dịch chuyển nhượng ngang hàng (P2P). Bên cạnh đó, quy trình hoàn tiền khi sự kiện bị hủy thường kéo dài từ 14 đến 30 ngày, gây bức xúc lớn cho người tiêu dùng và làm suy giảm uy tín của đơn vị tổ chức.

Đồ án tốt nghiệp chuyên ngành Công nghệ Thông tin tại Trường Đại học Sư phạm Kỹ thuật TP.HCM (HCMUTE) của nhóm tác giả Nguyễn Hồ Quốc Bảo và Tống Văn Nam, dưới sự hướng dẫn của ThS. Nguyễn Trần Thị Văn, đã giải quyết triệt để bài toán trên thông qua việc nghiên cứu, thiết kế và phát triển nền tảng Tickifi – Hệ thống thương mại điện tử phân phối và giao dịch vé concert ứng dụng công nghệ chuỗi khối (Blockchain).

+-----------------------------------------------------------------------------------+
|                               HỆ SINH THÁI TICKIFI                                |
|                                                                                   |
|  [ Event Organizers ]            [ End Users / Fans ]            [ Administrators ]
|         |                                |                               |
|         v                                v                               v
|  +--------------+               +------------------+             +---------------+
|  | Tạo sự kiện, |               | Mua vé sơ cấp,   |             | Phê duyệt sự  |
|  | Định giá &   |               | Giao dịch P2P,   |             | kiện, Quản lý |
|  | Nhận ký quỹ  |               | Hoàn tiền tự động|             | Hệ thống      |
|  +--------------+               +------------------+             +---------------+
|         |                                |                               |
|         +--------------------------------+-------------------------------+
|                                          |
|                                          v
|                    +--------------------------------------------+
|                    |     Giao diện Web App (Next.js + Web3.js)  |
|                    +--------------------------------------------+
|                                          |
|                    +---------------------+----------------------+
|                    |                                            |
|                    v                                            v
|       +--------------------------+                 +--------------------------+
|       | Backend API (NestJS)     |                 | Smart Contracts (Solidity|
|       | Database (MongoDB)       |                 | Polygon Mumbai Testnet)  |
|       +--------------------------+                 +--------------------------+
+-----------------------------------------------------------------------------------+

Mục tiêu cụ thể của dự án

  1. Xây dựng kiến trúc dApp toàn diện: Kết hợp sức mạnh xử lý dữ liệu nhanh chóng của mô hình Web2 với tính minh bạch, phi tập trung và bất biến của Web3.
  2. Minh bạch hóa phân phối vé: Triển khai hệ thống Smart Contract trên nền tảng EVM (Ethereum Virtual Machine) tương thích mạng Polygon Mumbai để số hóa vé, kiểm soát 100% vòng đời phát hành và sở hữu vé.
  3. Thiết lập sàn giao dịch thứ cấp an toàn (P2P Marketplace): Tích hợp cơ chế kiểm soát giá trần và chia sẻ phí bản quyền (Creator Royalty Fee) tự động cho đơn vị tổ chức khi vé được chuyển nhượng.
  4. Tự động hóa thanh toán và bảo vệ người mua: Ứng dụng hợp đồng ký quỹ (Escrow Balance Smart Contract) giữ tiền đặt cọc và tiền bán vé, chỉ giải ngân cho ban tổ chức sau khi sự kiện diễn ra thành công hoặc hoàn tiền tức thì (instant refund) nếu sự kiện bị hủy.
  5. Đơn giản hóa trải nghiệm người dùng: Tối ưu hóa UI/UX với Chakra UI và Framer Motion, kết nối ví tiền mã hóa MetaMask liền mạch, giúp người dùng phổ thông tiếp cận công nghệ Web3 dễ dàng.

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

  • Thời gian thực hiện: 15 tuần (từ 11/09/2023 đến 25/12/2023).
  • Phạm vi kỹ thuật: Phát triển hệ thống dApp full-stack gồm cổng thông tin người dùng, sàn giao dịch vé thứ cấp, cổng quản trị dành cho ban quản trị (Admin Portal) và hệ thống Smart Contracts được kiểm thử toàn diện trên mạng thử nghiệm Polygon Mumbai Testnet.
  • Giới hạn: Hệ thống tập trung tối ưu hóa giao dịch crypto trên mạng EVM, dữ liệu hình ảnh và nội dung tĩnh được lưu trữ thông qua cơ sở dữ liệu phi quan hệ off-chain để tối ưu hóa chi phí Gas.

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

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

Khảo sát thực tế các nền tảng bán vé hiện nay cho thấy sự phân hóa rõ rệt giữa mô hình truyền thống và mô hình Web3 sơ khai:

Tiêu chí đánh giá Ticketbox (Web2 truyền thống) YellowHeart (Web3 quốc tế) Hệ thống Tickifi (Đề xuất)
Bảo mật & Chống vé giả Kém (Dễ lộ mã QR, chụp màn hình chia sẻ lại) Rất cao (NFT định danh on-chain) Tuyệt đối (Smart Contract xác thực quyền sở hữu ví)
Kiểm soát thị trường thứ cấp Không hỗ trợ (Người dùng tự giao dịch rủi ro) Có (Thị trường P2P toàn cầu) Tích hợp sẵn P2P Marketplace với giới hạn giá trần
Phí trung gian & Royalty Ban tổ chức chịu phí 5% – 12%, không có Royalty Phí Gas mạng Ethereum L1 rất cao Tối ưu Gas trên Polygon L2, tự động trích Royalty fee
Cơ chế hoàn tiền khi hủy show Thủ công, chờ xét duyệt từ 7 – 30 ngày Phụ thuộc vào từng chính sách hợp đồng Tự động kích hoạt qua Smart Contract Lockable & Balance
Độ thân thiện người dùng Cao (Thanh toán thẻ/Ví nội địa) Thấp (Yêu cầu hiểu biết sâu về Web3) Cân bằng (Giao diện chuẩn E-commerce kết hợp MetaMask)

Phân loại yêu cầu theo mô hình MoSCoW

  • Must Have: Xác thực ví Web3 (MetaMask); Khởi tạo và phê duyệt sự kiện; Mua vé sơ cấp bằng Smart Contract; Niêm yết và giao dịch vé P2P; Cơ chế hoàn tiền tự động khi sự kiện bị hủy.
  • Should Have: Dashboard phân tích hành vi người dùng qua Google Analytics; Bảng điều khiển quản trị Admin; Cơ chế khóa khẩn cấp (Emergency Circuit Breaker); Tự động trích phí giao dịch nền tảng.
  • Could Have: Đấu giá vé VIP trực tiếp trên chuỗi; Đa dạng hóa loại tiền mã hóa thanh toán (ERC-20 tokens).
  • Won't Have: Cổng thanh toán tiền pháp định (Fiat On-ramp) trực tiếp trong hợp đồng (dự kiến phát triển ở giai đoạn sau).

Thiết kế hệ thống

Hệ thống được thiết kế theo mô hình kiến trúc phân lớp (Multi-tier Architecture) tách biệt rõ ràng giữa tầng xử lý off-chain và on-chain nhằm đạt hiệu năng tối đa:

+------------------------------------------------------------------------------------+
|                               PRESENTATION LAYER                                   |
|   +---------------------------------------+  +---------------------------------+   |
|   | Next.js App Router (SSR / CSR / SSG)  |  | Chakra UI + Framer Motion (UX)  |   |
|   +---------------------------------------+  +---------------------------------+   |
|                                       |                                            |
|   +----------------------------------------------------------------------------+   |
|   | Provider Web3.js / MetaMask Connector (EIP-1193)                           |   |
|   +----------------------------------------------------------------------------+   |
+---------------------------------------+--------------------------------------------+
                                        |
        +-------------------------------+-------------------------------+
        | (HTTPS / RESTful APIs)                                        | (JSON-RPC)
        v                                                               v
+---------------------------------------+   +----------------------------------------+
|           APPLICATION LAYER           |   |            BLOCKCHAIN LAYER            |
|   +-------------------------------+   |   |   +--------------------------------+   |
|   | NestJS Modular Framework      |   |   |   | Tickifi.sol (Core Orchestrator)|   |
|   | - Event & Ticket Modules      |   |   |   +--------------------------------+   |
|   | - User & Admin Auth Guards    |   |   |   | Event.sol & Organizer.sol      |   |
|   | - WebSockets Notification     |   |   |   +--------------------------------+   |
|   +-------------------------------+   |   |   | Balance.sol (Escrow Manager)   |   |
|                   |                   |   |   +--------------------------------+   |
|   +-------------------------------+   |   |   | Timestamp.sol & Lockable.sol   |   |
|   | MongoDB (BSON Data Storage)   |   |   |   +--------------------------------+   |
|   +-------------------------------+   |   |   | Marketplace.sol (P2P Trading)  |   |
|   +-------------------------------+   |   |   +--------------------------------+   |
|   | Google Analytics Engine (GA4) |   |   |   | Polygon Mumbai Network (EVM)   |   |
|   +-------------------------------+   |   |   +--------------------------------+   |
+---------------------------------------+   +----------------------------------------+

Chi tiết Tech Stack và phiên bản công nghệ

  • Frontend Framework: Next.js v14.x (React v18.x), Chakra UI v2.8.x, Framer Motion v10.x.
  • Backend Framework: NestJS v10.x (Node.js runtime LTS, TypeScript v5.x).
  • Cơ sở dữ liệu: MongoDB v6.0 (Mongoose ODM).
  • Blockchain Engine: Solidity v0.8.20, Truffle Suite v5.11.x, Ganache CLI, Web3.js v4.x.
  • Mạng triển khai: Polygon Mumbai Testnet (ChainID: 80001).
  • Phân tích dữ liệu: Google Analytics 4 (GA4).
+-----------------------------------------------------------------------------------+
|                    QUY TRÌNH MUA VÉ VÀ KHÓA QUỸ KÝ QUỸ                            |
|                                                                                   |
|  User (Buyer)            Next.js / Web3.js          Tickifi.sol       Balance.sol |
|      |                          |                       |                  |      |
|      |--- 1. Chọn vé & Click ---|                       |                  |      |
|      |--- 2. Ký xác thực TX --->|                       |                  |      |
|      |      (MetaMask)          |--- 3. buyTicket() --->|                  |      |
|      |                          |      (kèm Native ETH) |--- 4. Ghi nhận --|      |
|      |                          |                       |     khoản cọc    |      |
|      |                          |                       |     & phân bổ -->|      |
|      |                          |                       |<-- 5. Xác nhận --|      |
|      |                          |<-- 6. Emit Event -----|                  |      |
|      |<-- 7. Thông báo thành ---|     TicketPurchased   |                  |      |
|              công trên UI       |                       |                  |      |
+-----------------------------------------------------------------------------------+

Thiết kế bảo mật và cơ chế chống tấn công

  • Reentrancy Protection: Kế thừa chuẩn ReentrancyGuard của OpenZeppelin cho toàn bộ hàm thanh toán, ngăn chặn triệt để tấn công tái nhập rút cạn quỹ.
  • Role-Based Access Control (RBAC): Phân quyền đa cấp độ (Platform Owner, Event Organizer, Verified Buyer) đảm bảo chỉ có admin hệ thống mới có quyền phê duyệt sự kiện và đơn vị tổ chức đã xác thực mới được cấu hình giá vé.
  • Anti-Bot & Anti-Spam Wallet: Tích hợp module kiểm tra danh tính ví tại Tickifi.sol nhằm loại bỏ các địa chỉ ví rác, giới hạn số lượng vé tối đa được mua trên mỗi địa chỉ ví.

Phương pháp luận phát triển (Methodology)

Dự án áp dụng mô hình Agile/Scrum tùy biến cho quy trình 15 tuần với 5 giai đoạn (Sprint) nối tiếp:

  • Sprint 1 (Tuần 1 – 3): Thu thập yêu cầu, khảo sát thị trường, thiết kế tài liệu phân tích Use Case và kiến trúc hệ thống tổng thể.
  • Sprint 2 (Tuần 4 – 7): Thiết kế và viết mã nguồn Smart Contracts trên Truffle; chạy unit test và giả lập giao dịch trên Ganache.
  • Sprint 3 (Tuần 8 – 11): Xây dựng Backend NestJS API, cấu hình MongoDB và tích hợp Web3.js tương tác với Smart Contract.
  • Sprint 4 (Tuần 12 – 14): Thiết kế giao diện Frontend Next.js với Chakra UI, tích hợp luồng tương tác MetaMask, kết nối API và đẩy lên Mumbai Testnet.
  • Sprint 5 (Tuần 15): Kiểm thử tải (Stress testing), kiểm tra bảo mật, tối ưu hóa chi phí Gas và nghiệm thu bảo vệ đồ án.

Implementation và kết quả

Quá trình phát triển và chi tiết mã nguồn

Kiến trúc Smart Contract được phân rã thành các module độc lập nhằm đảm bảo tính đơn nhiệm và dễ nâng cấp:

  1. Tickifi.sol: Hợp đồng điều phối trung tâm.
  2. Event.sol: Quản lý thông tin chi tiết của sự kiện, cấu trúc vé và số lượng mở bán.
  3. Organizer.sol: Quản trị danh tính và trạng thái của đơn vị tổ chức.
  4. Balance.sol: Hệ thống ký quỹ (Escrow) xử lý nạp/rút tiền của ban tổ chức và người mua.
  5. Timestamp.sol: Ràng buộc thời gian thực thi (mở bán, đóng cổng, thời gian diễn ra sự kiện).
  6. Lockable.sol: Cơ chế dừng khẩn cấp toàn bộ giao dịch khi phát hiện bất thường.
  7. Marketplace.sol: Sàn giao dịch vé thứ cấp P2P hỗ trợ niêm yết, hủy lệnh và mua lại.

Dưới đây là đoạn mã nguồn thực thi logic phân phối vé và quản lý tài chính an toàn trong Event.solBalance.sol:

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

import "@openzeppelin/contracts/security/ReentrancyGuard.sol";

interface IBalanceManager {
    function depositCollateral(uint256 eventId) external payable;
    function recordTicketSale(uint256 eventId, address buyer, uint256 amount) external payable;
    function refundBuyer(uint256 eventId, address payable buyer, uint256 amount) external;
}

contract TickifiEvent is ReentrancyGuard {
    enum EventStatus { Pending, Approved, Active, Locked, Cancelled, Completed }

    struct TicketType {
        string name;
        uint256 price;
        uint256 totalQuantity;
        uint256 soldQuantity;
    }

    uint256 public immutable eventId;
    address public immutable organizer;
    IBalanceManager public immutable balanceManager;
    EventStatus public status;
    
    mapping(uint256 => TicketType) public ticketTypes;
    mapping(address => mapping(uint256 => uint256)) public userTickets; // user => ticketTypeId => quantity
    uint256 public ticketTypeCount;

    event TicketPurchased(address indexed buyer, uint256 indexed ticketTypeId, uint256 quantity, uint256 totalCost);
    event EventStatusChanged(EventStatus newStatus);

    modifier onlyOrganizer() {
        require(msg.sender == organizer, "Tickifi: Caller is not the organizer");
        _;
    }

    modifier inStatus(EventStatus _status) {
        require(status == _status, "Tickifi: Invalid event state for this operation");
        _;
    }

    constructor(uint256 _eventId, address _organizer, address _balanceManagerAddress) {
        eventId = _eventId;
        organizer = _organizer;
        balanceManager = IBalanceManager(_balanceManagerAddress);
        status = EventStatus.Approved;
    }

    function buyTicket(uint256 _ticketTypeId, uint256 _quantity) 
        external 
        payable 
        nonReentrant 
        inStatus(EventStatus.Active) 
    {
        TicketType storage ticket = ticketTypes[_ticketTypeId];
        require(_quantity > 0, "Tickifi: Quantity must be greater than zero");
        require(ticket.soldQuantity + _quantity <= ticket.totalQuantity, "Tickifi: Sold out");
        
        uint256 totalCost = ticket.price * _quantity;
        require(msg.value == totalCost, "Tickifi: Incorrect ETH/MATIC amount sent");

        ticket.soldQuantity += _quantity;
        userTickets[msg.sender][_ticketTypeId] += _quantity;

        // Chuyển toàn bộ tiền vào BalanceManager để giữ ký quỹ an toàn
        balanceManager.recordTicketSale{value: msg.value}(eventId, msg.sender, msg.value);

        emit TicketPurchased(msg.sender, _ticketTypeId, _quantity, totalCost);
    }
}

Ở tầng Backend NestJS, việc giao tiếp với chuỗi khối được trừu tượng hóa qua các Service chuyên biệt sử dụng Web3.js:

import { Injectable, BadRequestException, InternalServerErrorException } from '@nestjs/common';
import Web3 from 'web3';
import { ConfigService } from '@nestjs/config';

@Injectable()
export class BlockchainService {
  private web3: Web3;
  private tickifiContract: any;

  constructor(private configService: ConfigService) {
    const rpcUrl = this.configService.get<string>('POLYGON_MUMBAI_RPC_URL');
    this.web3 = new Web3(new Web3.providers.HttpProvider(rpcUrl));
    
    const contractAbi = JSON.parse(this.configService.get<string>('TICKIFI_ABI'));
    const contractAddress = this.configService.get<string>('TICKIFI_CONTRACT_ADDRESS');
    this.tickifiContract = new this.web3.eth.Contract(contractAbi, contractAddress);
  }

  async verifyWalletSignature(address: string, signature: string, message: string): Promise<boolean> {
    try {
      const recoveredAddress = this.web3.eth.accounts.recover(message, signature);
      return recoveredAddress.toLowerCase() === address.toLowerCase();
    } catch (error) {
      throw new BadRequestException('Chữ ký mật mã không hợp lệ.');
    }
  }

  async getEventOnChainStatus(eventId: number): Promise<number> {
    try {
      return await this.tickifiContract.methods.getEventState(eventId).call();
    } catch (error) {
      throw new InternalServerErrorException('Lỗi khi truy vấn dữ liệu Smart Contract.');
    }
  }
}

Kiểm thử và đánh giá hiệu năng (Testing & Validation)

Toàn bộ hệ thống Smart Contract đã trải qua quy trình kiểm thử nghiêm ngặt bao gồm 42 ca kiểm thử đơn vị (Unit Test) tự động viết bằng JavaScript/Mocha trên môi trường Ganache, đạt độ bao phủ nhánh điều kiện (Branch Coverage) 95.2%.

+-----------------------------------------------------------------------------------+
|                        BENCHMARK TIÊU THỤ GAS TRÊN EVM                            |
|                                                                                   |
|  createEvent()   [====================================] 184,210 Gas (~0.0036 MATIC)|
|  buyTicket()     [==================] 92,450 Gas (~0.0018 MATIC)                 |
|  listMarket()    [=============] 68,120 Gas (~0.0013 MATIC)                       |
|  buyMarketplace()[====================] 104,300 Gas (~0.0020 MATIC)               |
|  refundTicket()  [==============] 71,500 Gas (~0.0014 MATIC)                      |
|                                                                                   |
|  * Ghi chú: Chi phí tính trên mạng Polygon Mumbai (Gas Price ~20 Gwei)            |
+-----------------------------------------------------------------------------------+

Kết quả thử nghiệm hiệu năng

  • Thời gian xác nhận giao dịch (Block confirmation time): Trung bình 2.2 – 3.5 giây trên Polygon Mumbai Testnet (nhanh hơn gấp 6 lần so với Ethereum L1).
  • Chi phí giao dịch trung bình: Dao động từ 0.0013 MATIC đến 0.0036 MATIC (~0.001 USD/giao dịch), loại bỏ hoàn toàn rào cản phí Gas cho người dùng.
  • Tốc độ phản hồi API NestJS (Latency): Đạt mức trung bình 42ms đối với các truy vấn đọc dữ liệu sự kiện từ MongoDB off-chain.
  • Chỉ số kiểm thử chấp nhận người dùng (UAT): Thử nghiệm với 30 người dùng cho kết quả 93.3% đánh giá quy trình kết nối ví và thanh toán vé diễn ra mượt mà, trực quan.

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

Hệ thống đã hoàn thiện 100% các tính năng trọng tâm theo đúng kế hoạch đề ra ban đầu:

  • Giao diện người dùng hoàn chỉnh gồm Landing Page, Trang danh sách sự kiện, Chi tiết sự kiện, Trang chọn chỗ/loại vé, Sàn giao dịch vé thứ cấp P2P, Trang hồ sơ cá nhân và Cổng quản trị Admin.
  • Đóng gói logic phân phối vé và bảo vệ ký quỹ trong 7 Smart Contracts hoạt động chính xác, ổn định.
  • Tích hợp thành công Google Analytics theo dõi hành vi lưu lượng người dùng truy cập thời gian thực.

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

  1. Kiến trúc phân tách Logic và Ký quỹ (Modular Escrow Architecture): Thay vì tích hợp toàn bộ nghiệp vụ vào một contract đơn lẻ gây tốn Gas và rủi ro bảo mật, Tickifi tách biệt hoàn toàn hợp đồng Balance.sol đóng vai trò là két ký quỹ độc lập. Tiền bán vé chỉ được giải ngân khi sự kiện hoàn tất và không có tranh chấp.
  2. Cơ chế chống đầu cơ vé thứ cấp có lập trình: Cho phép ban tổ chức thiết lập tỷ lệ hoa hồng bản quyền (Royalty Fee từ 1% – 5%) trên mỗi giao dịch P2P, đồng thời khống chế biên độ giá trần của vé niêm yết trên sàn thứ cấp, triệt tiêu động cơ gom vé chợ đen.
  3. Quy trình hoàn tiền tự động 1 chạm: Khi sự kiện chuyển sang trạng thái Cancelled, người dùng chỉ cần kích hoạt giao dịch refundTicket(). Smart Contract sẽ tự động chuyển hoàn 100% tiền vé trực tiếp về địa chỉ ví của họ mà không cần thông qua bất kỳ đơn vị trung gian nào.
Tiêu chí Hệ thống bán vé truyền thống Nền tảng Tickifi (Web3) Mức độ cải thiện
Khả năng làm giả vé 8% – 12% trường hợp 0% (Mã hóa On-chain) Triệt tiêu 100%
Thời gian giải quyết hoàn tiền 7 – 14 ngày làm việc Tức thì (< 5 giây) Nhanh hơn 99.9%
Chi phí vận hành trung gian 8% – 15% tổng doanh thu 1.5% – 2.5% Giảm ~75% chi phí
Khả năng kiểm soát thị trường phụ Hoàn toàn không thể kiểm soát Kiểm soát giá trần & thu Royalty Đột phá mới

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

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

  • Giai đoạn phát hành sơ cấp (Primary Sale): Ban tổ chức (Organizer) nộp hồ sơ sự kiện và đặt cọc một khoản tiền bảo chứng (Collateral) vào hệ thống. Sau khi Admin phê duyệt, sự kiện mở bán công khai. Người hâm mộ kết nối ví MetaMask, chọn hạng vé và thanh toán trực tiếp.
  • Giai đoạn chuyển nhượng thứ cấp (Secondary Resale): Người dùng bận việc đột xuất có thể niêm yết vé lên Marketplace với mức giá mong muốn (trong phạm vi giá trần quy định). Người mua mới tiến hành thanh toán on-chain, quyền sở hữu vé chuyển đổi ngay lập tức sang ví mới, người bán nhận tiền và ban tổ chức tự động nhận phí bản quyền 3%.
  • Check-in sự kiện: Người tham dự sử dụng ví cá nhân chứa vé để xác thực quyền vào cổng sự kiện thông qua chữ ký mật mã an toàn.

Chiến lược triển khai và mở rộng (Deployment Strategy)

  • Hạ tầng máy chủ Web2: Đóng gói backend NestJS dưới dạng Docker container, triển khai trên các nền tảng điện toán đám mây (AWS ECS / Google Cloud Run) kết hợp CDN Cloudflare nhằm tối ưu hóa tải tĩnh và giảm độ trễ truy cập toàn cầu.
  • Triển khai Blockchain Web3: Chuyển đổi mã nguồn Smart Contracts từ mạng thử nghiệm Polygon Mumbai sang mạng chính thức (Polygon PoS Mainnet hoặc Arbitrum/Optimism L2) để đảm bảo chi phí giao dịch luôn ở mức dưới 0.01 USD trong khi duy trì thông lượng xử lý hàng ngàn giao dịch mỗi giây (TPS).
  • Phân tích hiệu quả kinh tế (ROI): Giúp các đơn vị tổ chức biểu diễn vừa và nhỏ tiết kiệm trung bình 65% chi phí triển khai hệ thống bán vé và vận hành kiểm soát cổng so với việc thuê các nền tảng trung gian truyền thống.

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

Hạn chế kỹ thuật hiện tại

  • Rào cản tiếp cận Web3 (Onboarding Friction): Người dùng bắt buộc phải sở hữu ví MetaMask và nắm giữ token gốc (MATIC) để chi trả phí mạng, gây bỡ ngỡ cho nhóm khán giả chưa có kiến thức về tiền mã hóa.
  • Lưu trữ dữ liệu phi tập trung chưa hoàn thiện: Một số trường dữ liệu mô tả chi tiết và hình ảnh banner sự kiện vẫn được lưu trữ trên MongoDB thay vì hệ thống lưu trữ phi tập trung hoàn toàn như IPFS (InterPlanetary File System) hoặc Arweave.
  • Biến động tỷ giá: Việc định giá vé theo token tiền mã hóa có thể chịu ảnh hưởng bởi sự biến động tỷ giá thị trường tại các thời điểm khác nhau.

Hướng phát triển trong tương lai

  • Tích hợp Account Abstraction (Chuẩn ERC-4337): Cho phép người dùng đăng nhập bằng tài khoản mạng xã hội (Google, Apple ID), tạo ví vô hình (Smart Account) và tài trợ phí Gas (Paymaster) để mang lại trải nghiệm như ứng dụng Web2 truyền thống.
  • Định dạng vé Dynamic NFT (dNFT): Ứng dụng chuẩn ERC-721/ERC-1155 kết hợp Chainlink Oracle để tạo ra các vé sự kiện có thể tự động đổi màu sắc hoặc mở khóa quyền lợi sau khi check-in tại cổng.
  • Tích hợp cổng thanh toán Fiat On-Ramp: Cho phép thanh toán trực tiếp bằng thẻ Visa/Mastercard hoặc quét mã VietQR, hệ thống sẽ tự động hoán đổi sang token tương ứng trên smart contract.

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

  • Sinh viên và người học ngành Công nghệ Thông tin: Tiếp cận tài liệu thực chứng toàn diện về cách kết hợp kiến trúc Full-Stack Web2 (NestJS, Next.js, MongoDB) với nền tảng Web3 Blockchain (Solidity, Truffle, Web3.js).
  • Lập trình viên và Kỹ sư phần mềm: Nắm bắt các mẫu thiết kế hợp đồng thông minh (Smart Contract Design Patterns) an toàn như Escrow, Modular Contract Architecture, Circuit Breaker và kỹ thuật kiểm thử tự động với Truffle Suite.
  • Doanh nghiệp và Ban tổ chức sự kiện: Sở hữu giải pháp công nghệ phân phối vé độc lập, giảm thiểu tối đa chi phí hoa hồng cho các nền tảng trung gian, ngăn chặn 100% nạn vé giả và khai thác thêm nguồn thu từ phí bản quyền trên thị trường thứ cấp.
  • Khán giả và người hâm mộ âm nhạc: Được bảo vệ quyền lợi tài chính tuyệt đối, không còn nỗi lo bị lừa đảo mua phải vé giả khi giao dịch P2P và được hoàn tiền tự động, minh bạch khi sự kiện gặp sự cố bất khả kháng.

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

1. Yêu cầu kỹ thuật tối thiểu để triển khai và chạy hệ thống Tickifi là gì?

Hệ thống yêu cầu môi trường Node.js (phiên bản 18.x LTS trở lên), trình quản lý gói npm/yarn, cơ sở dữ liệu MongoDB (v5.0 trở lên), bộ công cụ Truffle Suite và ví MetaMask trên trình duyệt. Đối với môi trường máy chủ, khuyến nghị máy chủ Linux (Ubuntu 22.04 LTS) với tối thiểu 2 vCPU và 4GB RAM.

2. Hệ thống xử lý bài toán nghẽn mạng (Scalability) khi có hàng chục nghìn người cùng mua vé một lúc như thế nào?

Bằng việc triển khai trên giải pháp Layer 2 (Polygon Network), thông lượng xử lý của hệ thống đạt hàng ngàn giao dịch/giây với thời gian đóng block chỉ 2 giây. Ngoài ra, tầng API NestJS áp dụng kiến trúc bất đồng bộ và cơ chế hàng đợi (Queue) giúp phân luồng yêu cầu hiệu quả, loại bỏ nguy cơ sập máy chủ.

3. Làm thế nào để tích hợp hệ thống Tickifi với các cổng soát vé vật lý tại sự kiện?

Hệ thống cung cấp module giải mã chữ ký mật mã (Cryptographic Signature Verification). Khi đến cổng, khán giả chỉ cần xuất trình Dynamic QR code trên ứng dụng; thiết bị quét cổng (POS Scanner) sẽ xác thực chữ ký của ví sở hữu vé trực tiếp với Smart Contract mà không cần kết nối cơ sở dữ liệu tập trung.

4. Chi phí duy trì và vận hành Smart Contracts của hệ thống tốn bao nhiêu?

Sau khi triển khai hợp đồng thông minh lên mạng Polygon, không có chi phí duy trì cố định hàng tháng cho Smart Contract. Chi phí vận hành chỉ bao gồm tiền thuê máy chủ Backend NestJS và cơ sở dữ liệu MongoDB thông thường (khoảng 20 – 50 USD/tháng cho quy mô vừa).

5. Tiền đặt cọc (Collateral) của ban tổ chức được xử lý ra sao trong Smart Contract?

Khi đăng ký tạo sự kiện, ban tổ chức nộp tiền cọc vào hợp đồng Balance.sol. Số tiền này cùng toàn bộ tiền bán vé sơ cấp sẽ bị khóa trong quỹ ký quỹ (Escrow). Sau khi sự kiện kết thúc thành công theo mốc thời gian tại Timestamp.sol và được quản trị viên xác nhận, ban tổ chức mới được phép rút toàn bộ doanh thu và tiền cọc về ví của mình.


Kết luận

Đồ án tốt nghiệp "Xây Dựng Website Bán Vé Concert Hiệu Quả" (Dự án Tickifi) của hai sinh viên Nguyễn Hồ Quốc Bảo và Tống Văn Nam dưới sự hướng dẫn của ThS. Nguyễn Trần Thị Văn là một minh chứng xuất sắc cho việc ứng dụng công nghệ chuỗi khối vào thực tiễn kinh tế số. Bằng cách kết hợp linh hoạt hệ sinh thái công nghệ hiện đại gồm Next.js, NestJS, MongoDB, Solidity và mạng Polygon, dự án đã giải quyết thành công những "nút thắt cổ chai" dai dẳng của ngành bán vé truyền thống: loại bỏ nạn vé giả, kiểm soát thị trường thứ cấp minh bạch, bảo vệ quyền lợi tài chính của khán giả bằng hợp đồng ký quỹ tự động và tối ưu hóa chi phí vận hành cho đơn vị tổ chức. Kết quả nghiên cứu không chỉ mang giá trị học thuật cao mà còn mở ra tiềm năng thương mại hóa rộng mở trong kỷ nguyên chuyển đổi số ngành giải trí và sự kiện.