getTokenAccountsByDelegate truy xuất tất cả tài khoản SPL Token đã phê duyệt một khóa công khai cụ thể làm bên được ủy quyền. Bên được ủy quyền có quyền thực hiện một số hành động nhất định trên tài khoản token, chẳng hạn như chuyển hoặc đốt token, trong phạm vi số lượng được ủy quyền.
Phương thức này hữu ích cho các dịch vụ quản lý quyền được ủy quyền hoặc cần xác định những tài khoản token mà một khóa cụ thể có thể thay mặt thực hiện hành động.
Các trường hợp sử dụng phổ biến
- Liệt kê tài sản được ủy quyền: Hiển thị tất cả tài khoản token mà một ví hoặc chương trình cụ thể đã được cấp quyền ủy quyền.
- Quản lý token tự động: Các dịch vụ thực hiện hành động thay mặt người dùng (ví dụ: nhà tạo lập thị trường tự động, giao thức staking quản lý phần thưởng được token hóa) có thể dùng phương thức này để tìm các tài khoản mà chúng được phép tương tác.
- Kiểm tra việc ủy quyền: Xem xét những tài khoản nào đã ủy quyền cho một địa chỉ cụ thể.
- Thu hồi quyền ủy quyền: Xác định các tài khoản token cần thu hồi quyền ủy quyền (mặc dù bản thân việc thu hồi là một giao dịch riêng biệt).
Tham số yêu cầu
-
delegatePubkey(chuỗi, bắt buộc): Khóa công khai được mã hóa base-58 của tài khoản được ủy quyền có các tài khoản token liên kết mà bạn muốn tìm. -
filter(đối tượng, bắt buộc): Một đối tượng JSON phải chỉ địnhminthoặcprogramIdđể lọc các tài khoản:mint(chuỗi): Khóa công khai được mã hóa base-58 của một token mint cụ thể. Nếu được cung cấp, truy vấn sẽ chỉ trả về các tài khoản thuộc loại token cụ thể này đã ủy quyền chodelegatePubkey.programId(chuỗi): Khóa công khai được mã hóa base-58 của Token Program sở hữu các tài khoản. Đây thường là SPL Token Program tiêu chuẩn (TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA) hoặc Token-2022 Program (TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb).
-
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 với các trường phổ biến sau:commitment(chuỗi, không bắt buộc): Chỉ định mức độ cam kết.encoding(chuỗi, không bắt buộc): Kiểu mã hóa cho dữ liệu tài khoản. Bạn nên dùng"jsonParsed"vì tùy chọn này trả về thông tin tài khoản mà con người có thể đọc được. Các tùy chọn khác gồm"base64","base64+zstd". Giá trị mặc định là"base64"nếu không được chỉ định.dataSlice(đối tượng, không bắt buộc): Cho phép bạn chỉ truy xuất một phần cụ thể của dữ liệu tài khoản. Chứa các trườngoffset(usize) vàlength(usize). Chỉ áp dụng cho các kiểu mã hóabase58,base64hoặcbase64+zstd.minContextSlot(u64, không bắt buộc): 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
Trườngresult.value trong phản hồi JSON-RPC là một mảng đối tượng. Mỗi đối tượng đại diện cho một tài khoản token có delegatePubkey làm bên được ủy quyền và khớp với tiêu chí filter. Mỗi đối tượng trong mảng có hai trường:
pubkey(chuỗi): Khóa công khai được mã hóa base-58 của chính tài khoản token.account(đối tượng): Một đối tượng chứa thông tin chi tiết về tài khoản token:lamports(u64): Số dư lamport của tài khoản token (để được miễn phí thuê).owner(chuỗi): Khóa công khai của chương trình sở hữu tài khoản này (ví dụ: Token Program).data: Dữ liệu tài khoản. Nếu dùng kiểu mã hóa"jsonParsed", đây sẽ là một đối tượng có trườngprogram(ví dụ:"spl-token") và trườngparsedchứa thông tin có cấu trúc:parsed.info: Một đối tượng có các thông tin chi tiết như:mint(chuỗi): Địa chỉ mint của token.owner(chuỗi): Chủ sở hữu tài khoản token (không phải bên được ủy quyền).tokenAmount(đối tượng): Tổng số dư token trong tài khoản này (amount,decimals,uiAmount,uiAmountString).delegate(chuỗi): Khóa công khai của bên được ủy quyền (phải khớp vớidelegatePubkeytrong yêu cầu).delegatedAmount(đối tượng): Số lượng token mà bên được ủy quyền có quyền quản lý (amount,decimals,uiAmount,uiAmountString).isNative(boolean): Cho biết tài khoản có giữ SOL được bọc hay không.state(chuỗi): Trạng thái của tài khoản token (ví dụ:"initialized").
parsed.type(chuỗi): Loại tài khoản (ví dụ:"account").
executable(boolean): Tài khoản có thể thực thi hay không.rentEpoch(u64): Epoch mà tại đó tài khoản này sẽ phải trả phí thuê tiếp theo.space(u64, nếu không dùngjsonParsed): Độ dài của dữ liệu tài khoản thô tính bằng byte.
jsonParsed):
Ví dụ mã
Mẹo dành cho nhà phát triển
- Yêu cầu về bộ lọc: Bạn phải cung cấp
minthoặcprogramIdtrong tham số bộ lọc. Bạn không thể truy vấn tất cả tài khoản được ủy quyền trên mọi loại token nếu không có một trong các bộ lọc này. - Mã hóa: Bạn nên dùng
"jsonParsed"cho tùy chọnencodingđể xử lý dữ liệu dễ dàng hơn, vì tùy chọn này giải mã dữ liệu tài khoản nhị phân thành định dạng JSON có cấu trúc. - Hiệu suất: Truy vấn bằng
programIdcó thể tốn nhiều tài nguyên hơn so với truy vấn bằngmint, đặc biệt nếu bên được ủy quyền có quyền đối với nhiều loại token khác nhau. Một số nhà cung cấp RPC có thể áp dụng giới hạn tốc độ nghiêm ngặt hơn cho phương thức này. - Số lượng được ủy quyền:
delegatedAmounttrong phản hồi cho biết số lượng token tối đa mà bên được ủy quyền hiện có quyền sử dụng. Số lượng này có thể nhỏ hơn tổngtokenAmounttrong tài khoản. - Thu hồi quyền ủy quyền: Phương thức này chỉ truy xuất thông tin. Để thu hồi quyền ủy quyền, chủ sở hữu tài khoản token phải gửi một lệnh
Revokeđến SPL Token Program.
getTokenAccountsByDelegate để tìm các tài khoản SPL Token dựa trên bên được ủy quyền đã được phê duyệt của chúng.