getTokenAccountsByDelegate RPCメソッドは、特定の公開鍵をデリゲートとして承認しているすべてのSPLトークンアカウントを取得します。デリゲートは、トークンアカウントでのトークンの転送やバーンといった特定のアクションを、委任された額まで実行する権限を持ちます。
このメソッドは、委任された権限を管理するサービスや、特定の鍵が代わりに操作できるトークンアカウントを発見する必要がある場合に便利です。
一般的な使用例
- 委任資産のリスト: 特定のウォレットやプログラムがデリゲート権限を持つすべてのトークンアカウントを表示します。
- 自動トークン管理: ユーザーの代わりにアクションを実行するサービス(例:自動マーケットメーカー、トークン化された報酬を管理するステーキングプロトコル)は、許可されたアカウントを見つけるために使用できます。
- 委任の監査: 特定のアドレスにどのアカウントが委任権を持っているかを確認します。
- 委任の取り消し: 委任権限を取り消す必要があるトークンアカウントを特定します(ただし、実際の取り消しは別のトランザクションです)。
リクエストパラメータ
-
delegatePubkey(string, required): 関連するトークンアカウントを見つけたいデリゲートアカウントのベース58でエンコードされた公開鍵です。 -
filter(object, required): アカウントをフィルタリングするためにmintまたはprogramIdのいずれかを必ず指定する必要があるJSONオブジェクト:mint(string): 特定のトークンミントのベース58でエンコードされた公開鍵です。指定した場合、この特定のトークンタイプのトークンアカウントのみがdelegatePubkeyに委任されているアカウントとして返されます。programId(string): アカウントを所有するトークンプログラムのベース58でエンコードされた公開鍵です。通常は標準のSPLトークンプログラム(TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA)またはトークン2022プログラム(TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb)です。
-
options(object, optional): 次の一般的なフィールドを含むオプションの設定オブジェクト:commitment(string, optional): コミットメントレベルを指定します。encoding(string, optional): アカウントデータのエンコーディングです。"jsonParsed"が非常に推奨され、人間が読めるアカウント情報を返します。他のオプションには"base64"、"base64+zstd"があります。指定されない場合はデフォルトで"base64"になります。dataSlice(object, optional): アカウントデータの特定のスライスのみを取得できます。次のフィールドを含みます:offset(usize) とlength(usize)。このオプションはbase58、base64、またはbase64+zstdエンコーディングに対してのみ適用されます。minContextSlot(u64, optional): リクエストが評価される最小スロットです。
レスポンス構造
JSON-RPCレスポンスのresult.valueフィールドはオブジェクトの配列です。各オブジェクトは、delegatePubkeyをデリゲートとして持ち、filterの基準に一致するトークンアカウントを表します。配列内の各オブジェクトには、次の2つのフィールドがあります:
pubkey(string): トークンアカウント自体のベース58でエンコードされた公開鍵。account(object): トークンアカウントの詳細情報を含むオブジェクト:lamports(u64): トークンアカウントのランプートバランス(家賃免除用)。owner(string): このアカウントを所有するプログラムの公開鍵(例:トークンプログラム)。data: アカウントデータ。"jsonParsed"エンコーディングが使用されている場合、これはprogramフィールド(例:"spl-token")とparsedフィールドを含む構造化情報を持つオブジェクトとなります:parsed.info: 詳細情報を含むオブジェクト:mint(string): トークンのミントアドレス。owner(string): トークンアカウントの所有者(デリゲートではありません)。tokenAmount(object): このアカウント内のトークンの総残高(amount、decimals、uiAmount、uiAmountString)。delegate(string): デリゲートの公開鍵(リクエストのdelegatePubkeyと一致する必要があります)。delegatedAmount(object): デリゲートが管理する権限を持つトークンの量(amount、decimals、uiAmount、uiAmountString)。isNative(boolean): アカウントがラップドSOLを保持しているかどうかを示します。state(string): トークンアカウントの状態 (例:"initialized")。
parsed.type(string): アカウントの種類 (例:"account")。
executable(boolean): アカウントが実行可能かどうか。rentEpoch(u64): このアカウントが次に家賃を要するエポック。space(u64, ifjsonParsedis not used): バイト単位での未加工のアカウントデータの長さ。
jsonParsedエンコーディングを使用した場合):
コード例
開発者向けヒント
- フィルタ要件: フィルターパラメータに
mintまたはprogramIdのいずれかを必ず指定してください。これらのフィルターなしでは、すべてのトークンタイプの委任アカウントを照会することはできません。 - エンコーディング:
encodingオプションに"jsonParsed"を使用することを強くお勧めします。バイナリアカウントデータを構造化されたJSONフォーマットにデコードするため、データ処理が容易になります。 - パフォーマンス:
programIdを使用してクエリを実行すると、特にデリゲートが多くの異なるトークンタイプに権限を持つ場合、リソースがより集中的になる可能性があります。一部のRPCプロバイダーは、このメソッドに対してより厳しいレート制限を設けている場合があります。 - 委任量: レスポンス内の
delegatedAmountは、デリゲートが現在使用を許可されているトークンの最大数を示します。これは、アカウント内の総tokenAmountより少なくなる場合があります。 - 委任の取り消し: このメソッドは情報を取得するだけです。委任を取り消すには、トークンアカウントの所有者がSPLトークンプログラムに
Revoke命令を送信する必要があります。
getTokenAccountsByDelegateを使用する方法を包括的に解説しています。