Phương thức RPC getTransaction cho phép bạn truy xuất thông tin chi tiết về một giao dịch đã được xác nhận bằng cách cung cấp chữ ký của giao dịch đó. Thông tin này bao gồm slot, thời gian khối, siêu dữ liệu (như phí, trạng thái và thay đổi số dư) cùng với chính cấu trúc của giao dịch.
Tránh xử lý theo lô để có hiệu suất tốt hơnXử lý các phương thức lưu trữ theo lô làm tăng đáng kể độ trễ. Không cho phép các lô có hơn 100 yêu cầu.
Các trường hợp sử dụng phổ biến
- Xác minh giao dịch: Xác nhận rằng một giao dịch đã được xử lý và kiểm tra kết quả của giao dịch (thành công hoặc thất bại).
- Hiển thị lịch sử giao dịch: Hiển thị cho người dùng thông tin chi tiết về các giao dịch trước đây của họ trong ví hoặc trình khám phá.
- Kiểm tra và phân tích: Xem xét chi tiết của một giao dịch, bao gồm các lệnh đã thực thi, phí đã trả và các tài khoản liên quan.
- Gỡ lỗi giao dịch thất bại: Kiểm tra các trường
logMessages và err trong siêu dữ liệu để tìm hiểu nguyên nhân giao dịch thất bại.
- Lập chỉ mục dữ liệu: Trích xuất thông tin cụ thể từ các giao dịch để lưu trữ và phân tích ngoài chuỗi.
Tham số yêu cầu
-
transactionSignature (chuỗi, bắt buộc): Chữ ký giao dịch được mã hóa base-58 mà bạn muốn truy vấn.
-
options (đối tượng, không bắt buộc): Một đối tượng cấu hình không bắt buộc có thể bao gồm:
commitment (chuỗi, không bắt buộc): Chỉ định mức cam kết (ví dụ: "finalized", "confirmed"). Nếu không được cung cấp, mức cam kết mặc định của nút sẽ được sử dụng (thường là "finalized").
encoding (chuỗi, không bắt buộc): Kiểu mã hóa cho dữ liệu transaction. Các giá trị phổ biến:
"json": Trả về dữ liệu giao dịch ở định dạng JSON có cấu trúc (nhưng các lệnh vẫn có thể được mã hóa base64).
"jsonParsed": Trả về dữ liệu giao dịch với các lệnh dành riêng cho chương trình được phân tích thành cấu trúc JSON mà con người có thể đọc được khi có thể. Đây thường là kiểu mã hóa hữu ích nhất để phân tích.
"base58": Trả về dữ liệu giao dịch dưới dạng chuỗi được mã hóa base-58.
"base64": Trả về dữ liệu giao dịch dưới dạng chuỗi được mã hóa base-64.
- Mặc định là
"json" nếu Helius không chỉ định, nhưng giá trị mặc định của Solana có thể khác. Tốt nhất là nên chỉ định giá trị này.
maxSupportedTransactionVersion (số, không bắt buộc): Phiên bản giao dịch tối đa mà endpoint RPC sẽ xử lý.
- Đặt thành
1 để bao gồm các giao dịch cũ, v0 và v1.
- Nếu bỏ qua hoặc đặt thấp hơn phiên bản của giao dịch, yêu cầu sẽ thất bại với lỗi JSON-RPC
-32015 (Transaction version (1) is not supported by the requesting client). Luôn đặt giá trị này thành 1. Xem Hỗ trợ giao dịch v1.
Cấu trúc phản hồi
Phương thức trả về null nếu không tìm thấy giao dịch (ví dụ: giao dịch chưa được xử lý hoặc chữ ký không chính xác) hay chưa được xác nhận ở mức cam kết đã chỉ định. Nếu không, phương thức trả về một đối tượng có các trường sau:
slot (u64): Số slot chứa khối mà giao dịch được đưa vào.
blockTime (i64 | null): Dấu thời gian Unix ước tính (số giây kể từ epoch) khi khối chứa giao dịch được tạo. Có thể là null nếu không có sẵn.
meta (đối tượng | null): Đối tượng chứa siêu dữ liệu về quá trình thực thi giao dịch. Có thể là null nếu giao dịch thất bại trước khi được xử lý hoặc nếu không có siêu dữ liệu.
err (đối tượng | null): Đối tượng lỗi nếu giao dịch thất bại; nếu không thì là null.
fee (u64): Phí giao dịch đã trả, tính bằng lamport.
preBalances (mảng u64): Số dư lamport của các tài khoản liên quan trước khi giao dịch được xử lý.
postBalances (mảng u64): Số dư lamport của các tài khoản liên quan sau khi giao dịch được xử lý.
preTokenBalances (mảng đối tượng | null): Số dư token của các tài khoản token liên quan trước giao dịch.
postTokenBalances (mảng đối tượng | null): Số dư token của các tài khoản token liên quan sau giao dịch.
innerInstructions (mảng đối tượng | null): Mảng các lệnh được thực thi trong khuôn khổ CPI (lệnh gọi liên chương trình) trong giao dịch này.
logMessages (mảng chuỗi | null): Mảng thông báo nhật ký do các lệnh của giao dịch và mọi lệnh nội bộ phát ra.
loadedAddresses (đối tượng, không bắt buộc): Chỉ định các tài khoản được tải từ bảng tra cứu địa chỉ cho giao dịch này. Chứa các mảng khóa công khai writable và readonly.
returnData (đối tượng, không bắt buộc): Dữ liệu được giao dịch trả về qua sol_set_return_data và sol_get_return_data. Chứa programId (chuỗi) và data (mảng: [string, encoding]).
computeUnitsConsumed (u64, không bắt buộc): Số đơn vị tính toán mà giao dịch này đã tiêu thụ.
transaction (đối tượng | mảng): Chính cấu trúc giao dịch. Định dạng phụ thuộc vào tham số encoding:
- Nếu
encoding là "jsonParsed" hoặc "json": Một đối tượng có message (chứa accountKeys, instructions, recentBlockhash, v.v.) và signatures (mảng chuỗi).
- Nếu
encoding là "base58", "base64": Một mảng [encoded_string, encoding_format_string].
version (“legacy” | số | undefined): Phiên bản của giao dịch. Có thể là "legacy" đối với các giao dịch cũ hoặc một số (0 hoặc 1) đối với các giao dịch có phiên bản. Là undefined nếu maxSupportedTransactionVersion chưa được đặt và giao dịch có phiên bản. Giao dịch v1 cũng chứa một đối tượng transactionConfig trong message với ngân sách tính toán (computeUnitLimit, heapSize, loadedAccountsDataSizeLimit, priorityFee), thay thế các lệnh của chương trình ComputeBudget. priorityFee của giao dịch là tổng phí tính bằng lamport, không phải micro-lamport trên mỗi đơn vị tính toán.
Ví dụ về phản hồi (kiểu mã hóa jsonParsed):
Ví dụ mã
Mẹo dành cho nhà phát triển
- Tính hoàn tất của giao dịch: Đảm bảo truy vấn bằng mức
commitment phù hợp. Việc yêu cầu một giao dịch chưa đạt mức cam kết đã chỉ định sẽ trả về null.
- Khối lượng dữ liệu: Đối tượng phản hồi có thể rất lớn, đặc biệt đối với các giao dịch phức tạp có nhiều lệnh hoặc nhật ký chi tiết. Hãy lưu ý điều này khi xử lý dữ liệu.
jsonParsed so với json: Mặc dù jsonParsed rất tiện lợi, khả năng hỗ trợ phân tích cú pháp phụ thuộc vào khả năng của nút RPC đối với từng chương trình cụ thể. Nếu một chương trình không được nhận dạng, các lệnh của chương trình đó có thể dùng định dạng ít được phân tích hơn ngay cả khi sử dụng jsonParsed.
- Giao dịch có phiên bản: Luôn đặt
maxSupportedTransactionVersion: 1 trong các tùy chọn yêu cầu để đảm bảo ứng dụng có thể xử lý cả giao dịch cũ lẫn giao dịch có phiên bản. Nếu không, bạn có thể bỏ sót dữ liệu hoặc gặp lỗi với các định dạng giao dịch mới hơn.
- Khác biệt giữa các nhà cung cấp RPC: Mặc dù API cốt lõi là tiêu chuẩn, một số nhà cung cấp RPC có thể cung cấp khả năng phân tích cú pháp nâng cao hoặc các trường bổ sung. Ví dụ, Helius cung cấp khả năng phân tích giao dịch phong phú.
Hướng dẫn này cung cấp thông tin tổng quan toàn diện về phương thức RPC getTransaction, giúp bạn truy xuất và hiểu dữ liệu chi tiết về giao dịch Solana.