getMultipleAccounts là một cách rất hiệu quả để truy xuất đồng thời thông tin của một danh sách tài khoản Solana. Thay vì tạo từng yêu cầu getAccountInfo riêng lẻ cho mỗi tài khoản, getMultipleAccounts cho phép bạn gộp các yêu cầu này thành một lô, nhờ đó giảm chi phí mạng và cải thiện tốc độ phản hồi của ứng dụng.
Các trường hợp sử dụng phổ biến
- Tải dữ liệu tài khoản theo lô: Khi ứng dụng cần hiển thị hoặc xử lý dữ liệu từ nhiều tài khoản đã biết (ví dụ: các tài khoản token của người dùng, danh sách cấu hình chương trình trên chuỗi).
- Công cụ theo dõi danh mục đầu tư: Truy xuất số dư và trạng thái của nhiều tài khoản token thuộc sở hữu của một người dùng.
- Giao diện người dùng của thị trường: Hiển thị thông tin chi tiết của nhiều NFT hoặc mục đang được niêm yết bằng cách truy xuất dữ liệu tài khoản của chúng trong một lần.
- Cải thiện hiệu năng dApp: Giảm đáng kể số lượng lệnh gọi RPC, giúp rút ngắn thời gian tải và mang lại trải nghiệm người dùng tốt hơn, đặc biệt khi làm việc với nhiều tài khoản.
Tham số yêu cầu
-
pubkeys(arraygồm cácstring, bắt buộc):- Một mảng gồm các chuỗi khóa công khai được mã hóa base-58 của những tài khoản bạn muốn truy vấn.
- Tối đa 100 khóa công khai cho mỗi yêu cầu.
- Ví dụ:
["So11111111111111111111111111111111111111112", "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"]
-
options(object, tùy chọn): Một đối tượng cấu hình chứa một hoặc nhiều trường sau:commitment(string): Chỉ định mức cam kết cho truy vấn (ví dụ:"finalized","confirmed","processed").encoding(string): Kiểu mã hóa cho dữ liệu tài khoản. Các tùy chọn gồm:"base64"(mặc định): Kiểu mã hóa base64 tiêu chuẩn."base58": Chậm hơn nhưng có thể hữu ích trong một số trường hợp."base64+zstd": Dữ liệu nén zstd được mã hóa base64."jsonParsed": Nếu tài khoản thuộc sở hữu của một chương trình mà nút RPC có trình phân tích cú pháp tương ứng (ví dụ: SPL Token Program, Stake Program), trườngdatasẽ là một đối tượng JSON. Tùy chọn này rất hữu ích cho dữ liệu có cấu trúc.
dataSlice(object): Cho phép bạn chỉ truy xuất một phần cụ thể của dữ liệu tài khoản. Tùy chọn này hữu ích với các tài khoản lớn khi bạn chỉ cần một phần thông tin nhỏ.offset(usize): Độ lệch tính bằng byte từ đầu dữ liệu tài khoản.length(usize): Số byte cần trả về kể từ vị trí độ lệch.- Lưu ý:
dataSlicechỉ dùng được với các kiểu mã hóabase58,base64hoặcbase64+zstd.
minContextSlot(u64): Slot tối thiểu mà tại đó yêu cầu có thể được đánh giá.
Cấu trúc phản hồi
Đối tượng phản hồi JSON-RPC sẽ có trườngresult chứa:
context(object):slot(u64): Slot mà tại đó thông tin được truy xuất.apiVersion(string, tùy chọn): Phiên bản API của nút.
value(array):- Một mảng trong đó mỗi phần tử tương ứng với khóa công khai tại cùng chỉ mục trong mảng
pubkeyscủa yêu cầu. - Mỗi phần tử sẽ là một trong hai dạng:
null: Nếu tài khoản tại khóa công khai được chỉ định không tồn tại hoặc đã xảy ra lỗi với tài khoản cụ thể đó.- Một Đối tượng tài khoản có các trường sau:
lamports(u64): Số lamport thuộc sở hữu của tài khoản.owner(string): Khóa công khai được mã hóa base-58 của chương trình sở hữu tài khoản.data(arrayhoặcobject): Dữ liệu tài khoản. NếuencodinglàjsonParsedvà có trình phân tích cú pháp, giá trị này sẽ là một đối tượng JSON. Nếu không, đây thường là một mảng["encoded_string", "encoding_format"](ví dụ:["SGVsbG8=", "base64"]).executable(boolean): Tài khoản có chứa một chương trình hay không (có thể thực thi hay không).rentEpoch(u64): Epoch tiếp theo mà tài khoản này phải trả phí thuê.space(u64): Độ dài dữ liệu của tài khoản tính bằng byte.
- Một mảng trong đó mỗi phần tử tương ứng với khóa công khai tại cùng chỉ mục trong mảng
Ví dụ
1. Truy xuất thông tin cơ bản của hai tài khoản
Ví dụ này truy xuất dữ liệu của hai tài khoản: SOL Llama (một NFT) và Serum Dex Program v3.2. Truy xuất dữ liệu tài khoản token đã được phân tích cú pháp
Ví dụ này truy xuất dữ liệu của hai tài khoản SPL Token và yêu cầu kiểu mã hóajsonParsed để nhận dữ liệu có cấu trúc.
Mẹo dành cho nhà phát triển
- Tối đa 100 tài khoản: Bạn có thể yêu cầu tối đa 100 tài khoản cho mỗi lệnh gọi.
- Tính nguyên tử: Yêu cầu không có tính nguyên tử theo nghĩa là nếu việc tra cứu một tài khoản thất bại, các tài khoản khác vẫn có thể thành công. Hãy kiểm tra từng phần tử trong mảng
valueđể tìmnull. - Sự tiện lợi của
jsonParsed: Bạn nên sử dụng kiểu mã hóajsonParsedkhi làm việc với các loại tài khoản phổ biến như tài khoản SPL Token vì không cần tự giải tuần tự hóa dữ liệu. dataSlicecho tài khoản lớn: Với các tài khoản rất lớn (ví dụ: một số tài khoản trạng thái chương trình), hãy sử dụngdataSliceđể chỉ truy xuất các byte cần thiết, tránh truyền quá nhiều dữ liệu.- Xử lý lỗi: Hãy chuẩn bị xử lý các mục
nulltrong mảngvaluecủa phản hồi. Các mục này cho biết không tìm thấy hoặc không thể truy xuất tài khoản.
getMultipleAccounts, bạn có thể xây dựng các ứng dụng Solana có hiệu năng và khả năng mở rộng tốt hơn.
Các phương thức liên quan
getAccountInfo
Truy xuất thông tin chi tiết của một tài khoản
getProgramAccounts
Lấy tất cả tài khoản thuộc sở hữu của một chương trình cụ thể