getAccountInfo là một công cụ cơ bản để truy vấn blockchain Solana. Phương thức này cho phép bạn truy xuất toàn bộ thông tin được lưu trữ liên kết với một khóa công khai cụ thể của tài khoản. Thông tin này bao gồm số dư lamport của tài khoản, chương trình sở hữu tài khoản, tài khoản có thể thực thi hay không và dữ liệu được lưu trữ trong tài khoản.
Các trường hợp sử dụng phổ biến
- Kiểm tra số dư SOL: Xác định số dư SOL gốc của bất kỳ tài khoản nào.
- Xác minh sự tồn tại của tài khoản: Kiểm tra xem tài khoản có khóa công khai đã cho đã được khởi tạo hay chưa (tức là có lamport hoặc dữ liệu).
- Kiểm tra tài khoản chương trình: Truy xuất dữ liệu được lưu trữ trong tài khoản do một chương trình sở hữu. Điều này rất quan trọng để hiểu trạng thái của chương trình.
- Xác định chủ sở hữu tài khoản: Tìm chương trình sở hữu một tài khoản. Điều này giúp xác định cách diễn giải dữ liệu của tài khoản hoặc liệu tài khoản có thuộc sở hữu của hệ thống hay không.
- Kiểm tra tài khoản có thể thực thi hay không: Xác định xem tài khoản có chứa một chương trình đã triển khai hay không.
Tham số
-
publicKey(chuỗi, bắt buộc): Khóa công khai được mã hóa base-58 của tài khoản cần truy vấn. -
config(đối tượng, không bắt buộc): Một đối tượng cấu hình có các trường sau:commitment(chuỗi, không bắt buộc): Chỉ định mức cam kết dùng cho truy vấn. Giá trị mặc định làfinalized.finalized: Nút sẽ truy vấn khối gần đây nhất được đại đa số cụm xác nhận là đã đạt mức khóa tối đa.confirmed: Nút sẽ truy vấn khối gần đây nhất đã được đại đa số cụm bỏ phiếu.processed: Nút sẽ truy vấn khối gần đây nhất của nút đó. Lưu ý rằng khối có thể chưa hoàn chỉnh.
encoding(chuỗi, không bắt buộc): Kiểu mã hóa cho dữ liệu tài khoản. Giá trị mặc định làbase64.base58(chậm)base64base64+zstd(nếu dữ liệu được nén)jsonParsed: Nếu dữ liệu tài khoản là trạng thái của một chương trình đã biết (ví dụ: tài khoản token, tài khoản stake), nút sẽ cố gắng phân tích dữ liệu đó thành cấu trúc JSON. Đối với tài khoản chương trình thông thường, định dạng thường được chuyển về dạng nhị phân (base64).
dataSlice(đối tượng, không bắt buộc): Giới hạn dữ liệu tài khoản được trả về thành một phần cụ thể. Chỉ khả dụng với các kiểu mã hóabase58,base64hoặcbase64+zstd.offset(số): Số byte tính từ đầu dữ liệu tài khoản để bắt đầu phần cắt.length(số): Số byte cần trả về.
minContextSlot(số, không bắt buộc): Slot tối thiểu mà tại đó yêu cầu có thể được đánh giá.
Phản hồi
Nếu tìm thấy tài khoản, trườngresult sẽ chứa một đối tượng có hai thuộc tính chính:
-
context(đối tượng): Chứa siêu dữ liệu về yêu cầu.slot(số): Slot nơi thông tin được truy xuất.apiVersion(chuỗi, không bắt buộc): Phiên bản API RPC.
-
value(đối tượng | null): Nếu tài khoản không tồn tại, giá trị này sẽ lànull. Nếu không, đây là một đối tượng chứa:lamports(số): Số lamport (1 SOL = 1.000.000.000 lamport) thuộc sở hữu của tài khoản.owner(chuỗi): Khóa công khai được mã hóa base-58 của chương trình sở hữu tài khoản này.data(mảng | đối tượng | chuỗi): Dữ liệu được lưu trữ trong tài khoản. Định dạng phụ thuộc vào tham sốencodingđược dùng trong yêu cầu.- Đối với
base64(mặc định),base58,base64+zstd: Đây thường là một mảng[encoded_string, encoding_format], ví dụ:["string_data", "base64"]. - Đối với
jsonParsed: Đây có thể là một đối tượng JSON nếu nút RPC có thể phân tích dữ liệu (ví dụ: đối với tài khoản SPL Token). Nếu không, giá trị có thể mặc định là["", "base64"]hoặc tương tự nếu dữ liệu không được nhận dạng là một bố cục tiêu chuẩn.
- Đối với
executable(boolean):truenếu tài khoản chứa một chương trình, nếu không sẽ làfalse.rentEpoch(số): Epoch tiếp theo mà tài khoản này sẽ phải trả phí thuê.space(số, không bắt buộc): Độ dài dữ liệu tính bằng byte. (Lưu ý: Tài liệu Solana chính thức liệt kêspacevà một số nhà cung cấp RPC có thể cung cấp trường này. Trường này biểu thị tổng dung lượng được phân bổ cho dữ liệu của tài khoản). Để biết thêm thông tin về dữ liệu tài khoản và quá trình giải tuần tự hóa, hãy tham khảo hướng dẫn chi tiết của chúng tôi.
value trong kết quả sẽ là null.
Ví dụ: Truy xuất thông tin tài khoản
Hãy truy xuất thông tin về ID Serum Program V3 (9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin) trên mainnet.
Lưu ý: Thay YOUR_API_KEY bằng khóa API Helius thực tế của bạn trong các ví dụ dưới đây.
Mẹo dành cho nhà phát triển
- Hiệu suất: Đối với các ứng dụng cần thường xuyên kiểm tra nhiều tài khoản, hãy cân nhắc sử dụng
getMultipleAccountsđể xử lý yêu cầu theo lô và giảm số lượt trao đổi. - Giải tuần tự hóa dữ liệu: Trường
datathường cần được giải tuần tự hóa dựa trên cấu trúc dữ liệu của chương trình sở hữu. Bạn thường cần các công cụ và thư viện dành riêng cho chương trình đó (ví dụ: thư viện SPL Token cho tài khoản token). Bài viết blog của chúng tôi về giải tuần tự hóa dữ liệu tài khoản cung cấp các kỹ thuật và ví dụ hữu ích. - Giới hạn tốc độ: Hãy lưu ý giới hạn tốc độ của nút RPC, đặc biệt khi truy vấn số lượng lớn tài khoản hoặc gửi yêu cầu thường xuyên.
- Quản lý chi phí:
getAccountInfothường là một truy vấn có chi phí thấp, nhưng việc thăm dò thường xuyên có thể làm chi phí tăng lên. Hãy tối ưu hóa mẫu truy vấn của bạn. - Sử dụng
jsonParsedmột cách hợp lý: Mặc dùjsonParsedcó thể tiện lợi, nhưng tùy chọn này có thể không hỗ trợ tất cả loại tài khoản và đầu ra có thể thay đổi nếu chương trình cập nhật cấu trúc dữ liệu. Đối với các ứng dụng quan trọng, việc phân tích dữ liệu nhị phân theo một bố cục đã biết sẽ ổn định hơn. - Cân nhắc
dataSlice: Nếu bạn chỉ cần một phần nhỏ dữ liệu của tài khoản, hãy sử dụngdataSliceđể giảm lượng dữ liệu được truyền và có thể giảm chi phí truy vấn.
Các phương thức liên quan
getMultipleAccounts
Truy xuất hàng loạt nhiều tài khoản trong một yêu cầu để cải thiện hiệu suất
getBalance
Chỉ lấy số dư SOL mà không cần đầy đủ thông tin chi tiết về tài khoản