Quay lại trang blogThiết kế Web3 Bot hướng sự kiện: Kết hợp Fastify, BullMQ và MetaMask
Web3NodeJSRedisArchitecture

Thiết kế Web3 Bot hướng sự kiện: Kết hợp Fastify, BullMQ và MetaMask

20 tháng 7, 20264 phút đọc

"Kiến trúc hệ thống NFT sniper bot phi lưu ký (non-custodial) với dashboard WebSocket thời gian thực và hàng đợi công việc phân tán."

Các bot giao dịch trên blockchain có độ trễ thấp cần xử lý luồng dữ liệu thị trường theo thời gian thực, đối chiếu chiến thuật giao dịch và thực thi giao dịch on-chain chỉ trong chưa đầy một giây. Để xây dựng hệ thống này đòi hỏi một kiến trúc hướng sự kiện (event-driven) module hóa, tách biệt hoàn toàn giữa việc lắng nghe sự kiện và xử lý ghi dữ liệu database hoặc ký giao dịch ví.

Dưới đây là cách chúng tôi thiết kế hệ thống Monad NFT Sniper Bot chạy mô hình phi lưu ký (non-custodial).

Sơ đồ kiến trúc tổng thể

Hệ thống của chúng tôi phân rã thành các dịch vụ nhỏ (microservices) giao tiếp hướng sự kiện:

[Market Websocket API] 

         ▼ (Luồng giá realtime)
[Fastify API / Webhook] ──> [Redis/BullMQ Queue] ──> [Worker Pool]

                                                          ▼ (Tạo Tx)
[Client Browser] <─── WebSocket ─── [Realtime UI] <─── [MetaMask Sign]
  1. Market Feed: Dịch vụ lắng nghe kết nối WebSocket của các chợ NFT (như OpenSea hoặc Magic Eden), ngay lập tức đẩy dữ liệu listing mới về hàng đợi xử lý.
  2. Queueing (BullMQ): Vì việc cập nhật DB hay tính toán giao dịch mất nhiều thời gian, chúng tôi đẩy xử lý vào hàng đợi BullMQ lưu trên Redis.
  3. Transaction Preparation: Worker tính toán so khớp với bộ lọc của người dùng, tự động chuẩn bị một giao dịch EVM chưa ký (unsigned transaction).
  4. Ký phi lưu ký (Non-Custodial): Để bảo vệ an toàn private key của người dùng, giao dịch chưa ký được đẩy qua WebSocket về trình duyệt. Người dùng ký duyệt và gửi giao dịch trực tiếp bằng MetaMask của họ.

Xử lý vòng đời giao dịch

Dưới đây là mã nguồn TypeScript rút gọn của API Server Fastify để tiếp nhận sự kiện và theo dõi trạng thái giao dịch thông qua JSON-RPC:

import Fastify from 'fastify';
import Queue from 'bull';
import { ethers } from 'ethers';

const app = Fastify();
const tradeQueue = new Queue('trades', 'redis://127.0.0.1:6379');
const provider = new ethers.JsonRpcProvider("https://testnet-rpc.monad.xyz");

// 1. Endpoint tiếp nhận ứng viên mua nhanh (snipe candidate)
app.post('/api/snipe', async (request, reply) => {
  const { listingId, price, targetToken } = request.body as any;

  // Đẩy tác vụ vào hàng đợi Redis lập tức để tránh nghẽn luồng xử lý API
  const job = await tradeQueue.add({
    listingId,
    price,
    targetToken,
    status: 'PREPARING'
  });

  return { jobId: job.id, status: 'QUEUED' };
});

// 2. Hàm quét ngầm RPC kiểm tra xem giao dịch đã được đào hay chưa
async function checkTransactionStatus(txHash: string) {
  try {
    const receipt = await provider.getTransactionReceipt(txHash);
    if (receipt) {
      const status = receipt.status === 1 ? 'SUCCESS' : 'FAILED';
      console.log(`Transaction ${txHash} đã được đào với trạng thái: ${status}`);
      // Thực hiện cập nhật DB và đẩy thông báo Socket tại đây
    }
  } catch (error) {
    console.error("Lỗi kết nối RPC:", error);
  }
}

Phân bổ hạ tầng hàng đợi

Sử dụng BullMQ bảo đảm rằng kể cả khi kết nối mạng blockchain gặp độ trễ cao, các sự kiện listing mới vẫn được lưu trữ an toàn trong Redis mà không bị mất dữ liệu.

Thành phần Công nghệ Vai trò
API Layer Fastify Nhận sự kiện listing và request từ client với overhead siêu nhỏ.
Broker Redis (BullMQ) Quản lý định tuyến công việc, so khớp chiến thuật và retry khi lỗi.
State Store PostgreSQL Lưu trữ cấu hình bot, lịch sử giao dịch và thống kê của người dùng.
EVM Client MetaMask (Renders) Lưu giữ khóa bí mật local-first, ký giao dịch an toàn phía client.

Kết luận

Bằng cách tách biệt dòng chảy sự kiện thị trường khỏi các hoạt động ghi cơ sở dữ liệu và độ trễ của blockchain, bạn có thể xây dựng các bot giao dịch độ trễ thấp chịu tải cao. Việc đẩy giao dịch chưa ký về trình duyệt của khách hàng qua WebSocket đảm bảo quỹ tài sản của người dùng luôn an toàn theo cơ chế phi lưu ký mà không làm mất đi khả năng tự động hóa tốc độ cao.