Chương 3: Thử Thách Hackathon
Đại học Bách Khoa Hà Nội, tòa nhà C7, tầng ba — sáu giờ sáng thứ Bảy.
Bốn mươi đội thi Hackathon Fintech Vietnam 2026 đang lục đục kê bàn, cắm ổ điện, và bày la liệt máy tính xách tay, màn hình phụ, cáp mạng.
Mùi cà phê hòa tan Nescafé trộn lẫn với mùi mồ hôi và nhựa nóng từ những chiếc adapter sạc.
Phạm Tuấn Kiệt ngồi một mình ở bàn số bốn mươi — góc cuối cùng của hội trường, sát cửa sổ nhìn ra sân trường.
Trước mặt anh chỉ có một chiếc ThinkPad X1, một bình nước năm lít mua ở Circle K trên đường Tạ Quang Bửu, và một túi ni lông đựng sáu cái bánh mì chả lụa từ xe đẩy trước cổng trường.
Ban tổ chức — gồm đại diện Ngân hàng Nhà nước Việt Nam, Hiệp hội Fintech Việt Nam, và khoa Công nghệ Thông tin Bách Khoa — công bố đề bài lúc bảy giờ đúng.
Màn hình projector hiện lên: "Xây dựng giải pháp thanh toán xuyên biên giới cho doanh nghiệp nhỏ và vừa Việt Nam, đảm bảo tuân thủ quy định chống rửa tiền (AML) và xác thực danh tính điện tử (eKYC)."
Thời gian: bốn mươi tám tiếng.
Deadline nộp sản phẩm: bảy giờ sáng thứ Hai.
Kiệt đọc đề bài hai lần, rồi mở terminal.
Trong khi các đội khác bắt đầu brainstorm trên whiteboard, vẽ wireframe, phân công task trên Trello — Kiệt đã bắt đầu code.
Anh không cần brainstorm vì kiến trúc đã nằm sẵn trong đầu.
Suốt hai tuần kể từ khi bị đuổi khỏi PayViet, anh ngồi trong phòng trọ ở ngõ 68 Trần Thái Tông, vẽ lại từ đầu hệ thống mà anh mơ ước xây — thứ mà Đức Anh luôn bác bỏ vì "quá phức tạp, nhà đầu tư không hiểu."
Bây giờ, không ai ngăn anh nữa.
Giờ thứ nhất đến giờ thứ sáu: Kiệt viết smart contract core trên Solidity — một payment channel bidirectional cho phép hai bên giao dịch off-chain và chỉ settle on-chain khi cần.
Thiết kế này giảm phí gas xuống còn một phần nghìn so với thanh toán on-chain truyền thống.
Anh tích hợp module AML bằng cách mapping mỗi ví với dữ liệu eKYC được hash trên chain — đủ để xác minh danh tính mà không lộ thông tin cá nhân, tuân thủ cả Thông tư 09/2023 của Ngân hàng Nhà nước lẫn GDPR.
Giờ thứ bảy đến giờ thứ mười hai: Backend API bằng Rust — không phải Node.js, không phải Go — Rust.
Kiệt chọn Rust vì hiệu năng xử lý concurrent connections cao gấp ba lần Node, và vì memory safety của Rust loại bỏ hoàn toàn các lỗ hổng buffer overflow mà anh đã từng phải vá cho PayViet suốt sáu tháng.
API kết nối với smart contract qua Web3 gateway, xử lý webhook từ Vietcombank và Agribank sandbox cho phần quy đổi VND.
Đến nửa đêm thứ Bảy, hội trường bắt đầu thưa dần.
Các đội thay phiên nhau ngủ — một nửa code, một nửa nằm trên sàn, đắp áo khoác, ngáy đều đều.
Tiếng gõ bàn phím thưa dần thành những tiếng lách tách rời rạc.
Kiệt không ngủ.
Anh mở lon cà phê Highlands thứ ba, uống một hơi, nhăn mặt vì vị ngọt nhân tạo.
Mắt anh bắt đầu cay, vai nhức vì ngồi cong quá lâu.
Nhưng trên màn hình, code đang chạy — mỗi test case xanh lè, pass hết, không một lỗi.
Giờ thứ mười tám đến giờ thứ hai mươi tư: Frontend.
Kiệt không phải UI designer — anh biết điều đó.
Nhưng anh chỉ cần một giao diện đủ sạch để demo.
React, TailwindCSS, ba màn hình chính: đăng ký ví, gửi tiền xuyên biên giới, và dashboard theo dõi giao dịch real-time.
Không fancy, không animation thừa — chỉ cần hoạt động mượt và trực quan.
Bốn giờ sáng Chủ Nhật.
Kiệt ra ngoài hành lang, ngồi bệt dưới sàn gạch lạnh, dựa lưng vào tường.
Từ cửa sổ, anh nhìn thấy ánh đèn vàng của ký túc xá Bách Khoa phía bên kia sân — nơi anh từng sống bốn năm, từng code những dự án đầu tiên, từng mơ về một startup thay đổi fintech Việt Nam.
Ba năm trước, anh và Đức Anh ngồi đúng ở cái sân đó, uống trà đá vỉa hè, và vẽ sơ đồ PayViet trên giấy A4.
Đức Anh lúc đó hào hứng lắm, mắt sáng rỡ khi nói về tầm nhìn "banking for the unbanked."
Kiệt tin vào tầm nhìn đó.
Anh tin vào Đức Anh.
Kiệt lắc đầu, đứng dậy, quay lại bàn code.
Giờ thứ hai mươi tư đến giờ thứ ba mươi sáu: Đây là phần khó nhất — integration testing.
Kiệt chạy một testnet Ethereum local bằng Hardhat, deploy smart contract, kết nối với backend Rust, và bắt đầu simulate hàng nghìn giao dịch song song.
Lỗi đầu tiên xuất hiện ở giờ thứ hai mươi tám — race condition trong module AML khiến hai giao dịch cùng lúc bị flag sai là rửa tiền.
Kiệt mất bốn tiếng để tìm ra nguyên nhân: một biến mutex bị khởi tạo sai trong thread pool Rust.
Anh sửa, test lại, pass.
Lỗi thứ hai: frontend WebSocket listener không reconnect khi mất kết nối mạng — trivial nhưng mất thêm một tiếng.
Đến chiều Chủ Nhật, ba mươi sáu tiếng sau khi bắt đầu, Kiệt có một sản phẩm hoàn chỉnh.
Anh gọi nó là PayBlock — cái tên anh đã nghĩ ra từ lúc ngồi trong quán cà phê trên phố Trần Thái Tông hai tuần trước.
Giờ thứ ba mươi sáu đến giờ thứ bốn mươi tám: Kiệt dành toàn bộ thời gian còn lại để viết documentation, chuẩn bị slide thuyết trình, và stress test hệ thống.
Anh simulate mười nghìn giao dịch đồng thời — hệ thống xử lý hết trong bốn phẩy hai giây, không crash, không memory leak, không một transaction bị mất.
Bảy giờ sáng thứ Hai.
Deadline.
Kiệt nộp sản phẩm — repo GitHub private, link demo live trên Vercel, và slide thuyết trình mười lăm trang.
Anh nhìn quanh hội trường: ba mươi chín đội còn lại cũng đang nộp, hầu hết mắt thâm quầng, tóc bết mồ hôi, áo nhăn nhúm.
Nhưng Kiệt nhận ra một điều: phần lớn các đội đang nộp prototype chưa hoàn thiện — mockup UI, backend chưa kết nối, smart contract chưa deploy.
Phần thuyết trình diễn ra từ chín giờ đến mười hai giờ trưa.
Mỗi đội mười phút.
Kiệt là đội cuối cùng — bàn số bốn mươi, solo.
Khi anh bước lên sân khấu, ban giám khảo — bốn người: một phó vụ trưởng Ngân hàng Nhà nước, một giáo sư Bách Khoa, một CEO fintech, và Nguyễn Hà Linh — nhìn anh với vẻ tò mò.
Một đội solo ở hackathon bốn mươi đội là chuyện hiếm.
Kiệt không bắt đầu bằng slide.
Anh mở laptop, kết nối projector, và chạy demo live.
"Đây là PayBlock," anh nói, giọng khàn vì hai đêm không ngủ.
"Tôi sẽ gửi năm trăm đô từ ví Việt Nam sang ví Singapore ngay trước mặt quý vị.
Thời gian settle: ba giây.
Phí: không phẩy không một phần trăm.
AML check: tự động, real-time, tuân thủ Thông tư 09."
Anh nhấn nút "Gửi" trên giao diện.
Màn hình hiện transaction hash, rồi loading spinner quay đúng ba giây, rồi "Confirmed" — chữ xanh lá, kèm theo blockchain receipt hiển thị đầy đủ: sender, receiver, amount, timestamp, AML status: PASSED.
Ban giám khảo im lặng hai giây.
Rồi vị phó vụ trưởng Ngân hàng Nhà nước — ông Trần Minh Đức — nhoài người về phía trước.
"Anh chạy trên testnet hay mainnet?" ông hỏi.
"Testnet, nhưng kiến trúc tương thích mainnet.
Nếu có giấy phép fintech, tôi deploy lên mainnet trong hai tuần," Kiệt đáp.
"AML module kiểm tra dựa trên danh sách nào?"
"OFAC SDN list, EU sanctions list, và danh sách cảnh báo của Cục Phòng chống rửa tiền Việt Nam.
Cập nhật tự động mỗi sáu tiếng qua API."
Ông Đức gật đầu, viết gì đó vào sổ.
Hà Linh ngồi bên cạnh, mắt cô không rời màn hình — không phải nhìn slide, mà nhìn dòng code backend đang hiện trên terminal mà Kiệt để mở ở góc màn hình.
"Source code có bao nhiêu dòng?"
Linh hỏi.
"Mười hai nghìn ba trăm dòng.
Smart contract: hai nghìn.
Backend Rust: bảy nghìn.
Frontend: ba nghìn ba trăm."
"Anh viết một mình mười hai nghìn dòng trong bốn mươi tám tiếng?"
"Không.
Tôi đã thiết kế kiến trúc trong hai tuần trước.
Ở đây tôi chỉ implement.
Khi anh biết mình cần viết gì, code nhanh hơn nhiều."
Kết quả được công bố lúc ba giờ chiều.
Kiệt đứng ở hành lang, uống chai nước suối Lavie, tay run nhẹ — không phải vì hồi hộp, mà vì thiếu ngủ bốn mươi tám tiếng.
MC đọc từ giải ba lên: đội từ FPT University được giải ba, đội liên trường Ngoại thương — Bách Khoa được giải nhì.
Giải nhất — "Đội PayBlock, thành viên duy nhất: Phạm Tuấn Kiệt."
Tiếng vỗ tay vang lên — không ồn ào, nhưng đều và kéo dài.
Kiệt bước lên sân khấu nhận cúp và phong bì tiền thưởng năm mươi triệu đồng.
Tay anh nắm chiếc cúp thuỷ tinh, cảm nhận trọng lượng của nó — nặng hơn anh tưởng.
Khi bước xuống sân khấu, Hà Linh đã đứng ở chân cầu thang.
Cô mặc áo blazer xanh navy hôm nay, tóc xõa, tay cầm chiếc iPad.
"Chín giờ sáng mai," cô nói.
"Văn phòng VinaTech Ventures, tầng hai mươi ba Lotte Center.
Mang theo business plan."
Cô quay đi, gót giày gõ nhịp trên sàn gạch hành lang Bách Khoa.
Kiệt đứng đó, tay vẫn cầm cúp, mắt nhìn theo cho đến khi cô khuất sau cánh cửa.
Anh rút điện thoại, mở Vietcombank app.
Số dư: bốn triệu hai trăm nghìn — cộng thêm năm mươi triệu tiền thưởng sẽ về trong ba ngày làm việc.
Lần đầu tiên trong hai tuần, Kiệt cho phép mình mỉm cười.
Anh bước ra sân trường Bách Khoa, trời chiều tháng Năm vẫn còn nắng gắt.
Xe ôm công nghệ Be hiện giá ba mươi hai nghìn về ngõ 68 Trần Thái Tông.
Kiệt đặt xe, leo lên, và ngủ gật suốt quãng đường mười phút.