Trình xử lý sự kiện với TronWeb: Giám sát TRC-20 Chuyển trên TRON — TRON Wiki

Trình xử lý sự kiện với TronWeb: Giám sát TRC-20 Chuyển trên TRON

10 phút đọc · ⌘K tìm kiếm

Phát hiện tiền gửi USDT theo thời gian thực cho phép trao đổi, cổng thanh toán và nền tảng trò chơi trên TRON. Thay vì thăm dò balanceOf mỗi giây, hệ thống sản xuất sẽ lắng nghe các sự kiện Transfer do hợp đồng USDT phát ra khi tiền đến các địa chỉ được giám sát.

Hướng dẫn này đề cập đến cơ chế sự kiện, truy vấn TronGrid, mẫu TronWeb và kiến ​​trúc có thể mở rộng.

TRC-20 Sự kiện chuyển nhượng

event Transfer(address indexed from, address indexed to, uint256 value);

Chủ đề0 (băm chữ ký sự kiện):

ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef

Được lập chỉ mục fromto cho phép lọc theo người nhận — rất quan trọng đối với ví tiền gửi.

Hợp đồng USDT: TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t

TronGrid API sự kiện

Mẫu (kiểm tra tài liệu TronGrid mới nhất để biết đường dẫn chính xác):

GET /v1/contracts/{contractAddress}/events?event_name=Transfer&only_confirmed=true

Lọc phía khách hàng hoặc thông qua thông số API để tìm địa chỉ to khớp với ví tiền gửi của bạn.

Tiêu đề: TRON-PRO-API-KEY

Phân trang bằng fingerprint để đồng bộ hóa lịch sử.

Ví dụ về nhân viên bỏ phiếu

const USDT = 'TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t';
let lastTimestamp = Date.now() - 60_000;

async function pollTransfers(depositAddress) {
  const url = `https://api.trongrid.io/v1/contracts/${USDT}/events?event_name=Transfer&only_confirmed=true&min_block_timestamp=${lastTimestamp}`;
  const res = await fetch(url, {
    headers: { 'TRON-PRO-API-KEY': process.env.TRONGRID_KEY },
  });
  const { data } = await res.json();

  for (const ev of data || []) {
    const to = tronWeb.address.fromHex(ev.result.to);
    if (to !== depositAddress) continue;
    const value = Number(ev.result.value) / 1e6;
    await creditDeposit(ev.transaction_id, value, ev);
  }
  lastTimestamp = Date.now();
}

setInterval(() => pollTransfers(process.env.DEPOSIT_ADDRESS), 5000);

TronWeb sự kiện hợp đồng

const contract = await tronWeb.contract().at(USDT);
// Historical — depends on TronWeb version / node support
const events = await contract.Transfer().get({
  filters: { to: depositAddressHex },
  fromBlock: 0,
  toBlock: 'latest',
});

Hỗ trợ khác nhau - TronGrid REST đáng tin cậy hơn đối với người lập chỉ mục sản xuất.

Địa chỉ gửi tiền của mỗi người dùng

Hai mẫu:

MẫuƯu điểmNhược điểm
Ví nóng đơn + khớp số tiềnMột người ngheNguy cơ va chạm
Địa chỉ duy nhất của ví HD cho mỗi người dùngGhi công rõ ràngNhiều phím hơn để quản lý

Bộ lọc sự kiện trên trường to hoạt động tốt nhất với các địa chỉ duy nhất.

Luồng thanh toán đầy đủ: chấp nhận API thanh toán USDT.

Sự bất lực

Phím: transaction_id + event_index hoặc chỉ mục nhật ký

Trước khi ghi có:

  1. Kiểm tra DB để tìm txid hiện có
  2. Xác minh giao dịch SUCCESS
  3. Xác nhận hợp đồng chính thức USDT
  4. Người sử dụng tín dụng

Chia tỷ lệ

Âm lượng cao:

  • Chạy trình lập chỉ mục chuyên dụng tiêu thụ TronGrid hoặc plugin sự kiện tự lưu trữ
  • Xếp hàng sự kiện tới Kafka/RabbitMQ
  • Công nhân ngang có phân vùng theo dải địa chỉ
  • Lưu trữ con trỏ cũ trong Redis

Kỳ vọng về độ trễ

TRON ~3 giây thời gian chặn → khoảng thời gian thăm dò 3–5 giây hợp lý. UX nhanh hơn hiển thị "xác nhận" cho đến khi khối N được củng cố.

Lập chỉ mục sự kiện chia tỷ lệ

Ở mức âm lượng lớn, hãy chạy trình lập chỉ mục chuyên dụng lưu trữ các sự kiện trong PostgreSQL thay vì thăm dò TronGrid từ trình xử lý yêu cầu. Bị loại trừ bởi transactionId + logIndex. Xử lý việc sắp xếp lại chuỗi — hiếm gặp trên TRON nhưng chỉ mục blockNumber cho logic phát lại.

Tham chiếu chữ ký sự kiện chuyển nhượng

USDT Chủ đề sự kiện chuyển nhượng0 (keccak256): ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. Lọc topic2 để tìm địa chỉ người nhận (được đệm thành 32 byte). Giải mã trường data thành số tiền uint256. Việc đệm sai có thể khiến khoản tiền gửi bị bỏ sót — hãy sử dụng bộ giải mã TronWeb ABI thay vì cắt hình lục giác thủ công nếu có thể.

Danh sách kiểm tra khắc phục sự cố

Nếu có sự cố xảy ra trên TRON, hãy xử lý nó như một vấn đề gỡ lỗi có cấu trúc: xác nhận txid chính xác trên chuỗi, xác minh địa chỉ hợp đồng mục tiêu và chỉ sau đó mới quyết định xem liệu lỗi có thể phục hồi được hay không. Trên TRON, nhiều vấn đề “bí ẩn” chỉ đơn giản là một trong số: sai mạng (mainnet so với testnet), hợp đồng mã thông báo sai (USDT giả / mã thông báo có tên tương tự), không đủ tài nguyên (OUT_OF_ENERGY / băng thông) hoặc độ trễ giao diện người dùng/trình lập chỉ mục giữa ví và trình khám phá.

Bắt đầu với các bước kiểm tra dựa trên chuỗi sau:

  • Luôn sao chép toàn bộ txid/hash từ ví hoặc explorer của bạn.
  • Xác nhận trạng thái kết quả tx trên TronScan (SUCCESS, REVERT, OUT_OF_ENERGY hoặc vẫn đang chờ xử lý).
  • Kiểm tra xem địa chỉ người nhận/hợp đồng có khớp với nội dung bạn định gửi hay không.
  • Nếu đó là lệnh gọi hợp đồng, hãy xác nhận rằng bộ chọn chức năng và các tham số phù hợp với tiêu chuẩn mã thông báo mà bạn cho rằng mình đang sử dụng (TRC-20 so với TRC-10 so với BEP-20 trên BSC).

Sau đó áp dụng đường dẫn sửa lỗi cho danh mục của bạn:

  • Xác nhận trạng thái và thông số giao dịch.
  • Xác minh địa chỉ (hợp đồng mã thông báo, người nhận, bộ định tuyến/người chi tiêu).
  • Thêm hoặc ủy quyền tài nguyên (Năng lượng/Băng thông) khi lỗi do tài nguyên.

###Những lỗi thường gặp

Các mẫu này gây ra hầu hết các lỗi ở cấp độ người dùng:

  • Sử dụng địa chỉ mainnet trên testnet (hoặc ngược lại).
  • Sao chép ký hiệu mã thông báo thay vì địa chỉ hợp đồng TRC-20 thực tế.
  • Ký sai địa chỉ phê duyệt/chi tiêu do liên kết UI độc hại hoặc lỗi thời.
  • Thử lại mà không thay đổi đầu vào bị lỗi (ví dụ: REVERT tiếp tục hoàn nguyên cho đến khi bạn sửa được tham số).

Nếu bạn không chắc chắn, đừng “gửi lại”. Thực hiện một thay đổi có kiểm soát, xác minh trên TronScan rồi tiếp tục.

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

Làm cách nào để biết liệu giao dịch có thực sự được xác nhận hay không?

Sử dụng TronScan và kiểm tra trạng thái kết quả tx. Nhãn “đang chờ xử lý” của ví có thể bị trễ; trạng thái dây chuyền là nguồn gốc của sự thật. Sao chép txid và xác minh SUCCESS/REVERT/OUT_OF_ENERGY, không chỉ văn bản giao diện người dùng.

Tại sao giao diện người dùng khác với TronScan?Một số ví và dApp sử dụng các bộ chỉ mục hoặc lớp bộ đệm khác nhau. Độ trễ ngắn giữa phát sóng và lập chỉ mục là bình thường; so sánh txid và đợi chuỗi ổn định trước khi kết luận thất bại.

Tôi nên làm gì sau REVERT?

Dừng và giải mã cuộc gọi thất bại. Hầu hết REVERT đều do tham số không hợp lệ, địa chỉ hợp đồng sai, thiếu phê duyệt hoặc không khớp giữa tiêu chuẩn và phương thức mã thông báo. Khắc phục nguyên nhân rồi ký lại.

Ký phê duyệt không giới hạn có an toàn không?

Phê duyệt không giới hạn chỉ an toàn đối với các địa chỉ chi tiêu đáng tin cậy mà bạn đã xác minh (nguồn đã xác minh, bộ định tuyến chính xác và hợp đồng mã thông báo dự kiến). Để thử nghiệm, hãy ưu tiên phê duyệt có giới hạn và thu hồi sau khi bạn hoàn thành.

TRON yêu cầu những tài nguyên gì cho cuộc gọi hợp đồng?

Việc thực thi hợp đồng thông minh chủ yếu tiêu thụ Năng lượng, trong khi byte giao dịch tiêu thụ Băng thông. Nếu bạn nhận được OUT_OF_ENERGY, hãy thêm/đóng băng/ủy thác Năng lượng. Nếu băng thông cạn kiệt, hãy tập trung vào việc giữ đủ chất lỏng TRX để phân bổ byte và tài nguyên.

Làm cách nào để giảm phiếu hỗ trợ?

Hiển thị cho người dùng thông báo rõ ràng về “điều gì đã xảy ra” dựa trên trạng thái chuỗi và liên kết trực tiếp đến hướng dẫn có liên quan (đang chờ xử lý, không thành công, hết năng lượng hoặc xác minh). Lưu trữ txid để bạn có thể hòa giải nhanh chóng.

Hướng dẫn liên quan {#có liên quan}

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

USDT phát ra sự kiện gì khi chuyển khoản?

TRC-20 Transfer(địa chỉ được lập chỉ mục từ, địa chỉ được lập chỉ mục đến, giá trị uint256) — topic0 là hàm băm chữ ký sự kiện keccak256.

TronWeb có thể đăng ký như WebSocket trên Ethereum không?

Công cụ TRON thường sử dụng các điểm cuối sự kiện bỏ phiếu TronGrid hoặc chạy plugin sự kiện của riêng bạn — không giống với eth_subscribe.

Tôi có thể truy vấn các sự kiện cách đây bao xa?

TronGrid giữ lại các sự kiện được lập chỉ mục - sử dụng phân trang để đồng bộ hóa toàn bộ lịch sử khi triển khai mới.

Giao dịch nội bộ có phát ra Transfer không?

USDT transfer là lệnh gọi TRC-20 tiêu chuẩn — xuất hiện trong nhật ký thành công. Phân tích nhật ký tx gốc.

Sự kiện USDT giả mạo?

Lọc contract_address một cách nghiêm ngặt — mã thông báo lừa đảo phát ra các sự kiện có tên tương tự từ các hợp đồng sai.