getTokenAccountsByDelegate RPC 메서드는 특정 공개 키를 위임자로 승인한 모든 SPL 토큰 계정을 검색합니다. 위임자는 지정된 양에 따라 토큰 계정에서 토큰 전송 또는 소각과 같은 특정 작업을 수행할 수 있는 권한을 가지고 있습니다.
이 메서드는 위임된 권한을 관리하거나 특정 키가 대신 조치를 취할 수 있는 토큰 계정을 발견해야 하는 서비스에 유용합니다.
일반적인 사용 사례
- 위임된 자산 나열: 특정 지갑이나 프로그램이 위임자 권한을 부여받은 모든 토큰 계정을 표시합니다.
- 자동화된 토큰 관리: 사용자를 대신하여 작업을 수행하는 서비스(예: 자동 마켓 메이커, 토큰화된 보상을 관리하는 스테이킹 프로토콜)는 이를 사용하여 상호작용할 수 있는 계정을 찾을 수 있습니다.
- 위임 감사: 특정 주소에 위임된 권한이 있는 계정을 검토합니다.
- 위임 취소: 위임자 권한을 취소해야 하는 토큰 계정을 식별(단, 취소 자체는 별도의 거래임)합니다.
요청 매개변수
-
delegatePubkey(string, 필수): 관련된 토큰 계정을 찾으려는 위임자 계정의 base-58로 인코딩된 공개 키입니다. -
filter(object, 필수): 계정을 필터링하기 위해mint또는programId중 하나를 반드시 지정해야 하는 JSON 객체:mint(string): 특정 토큰 민트의 base-58로 인코딩된 공개 키입니다. 제공할 경우, 쿼리는 이 특정 토큰 유형의 토큰 계정만 반환하며, 이는delegatePubkey에 위임됩니다.programId(string): 계정을 소유한 토큰 프로그램의 base-58로 인코딩된 공개 키입니다. 일반적으로 표준 SPL 토큰 프로그램(TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA) 또는 토큰-2022 프로그램(TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb)일 것입니다.
-
options(object, 선택적): 다음과 같은 공통 필드를 포함하는 선택적 구성 객체:commitment(string, 선택적): 커밋 수준을 지정합니다.encoding(string, 선택적): 계정 데이터의 인코딩."jsonParsed"을 강력히 추천하며 이는 사람이 읽을 수 있는 계정 정보를 반환합니다. 기타 옵션은"base64","base64+zstd"등이 있습니다. 지정되지 않으면 기본값은"base64"입니다.dataSlice(object, 선택적): 계정 데이터의 특정 슬라이스만 검색할 수 있습니다.offset(usize) 및length(usize) 필드가 포함됩니다. 이는base58,base64또는base64+zstd인코딩에만 적용됩니다.minContextSlot(u64, 선택적): 요청이 평가될 수 있는 최소 슬롯입니다.
응답 구조
JSON-RPC 응답의result.value 필드는 객체의 배열입니다. 각 객체는 filter 기준과 일치하며 delegatePubkey를 위임자로 가진 토큰 계정을 나타냅니다. 배열의 각 객체는 다음 두 필드를 가집니다:
pubkey(string): 토큰 계정 자체의 base-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,jsonParsed이 사용되지 않은 경우): 원시 계정 데이터 길이(바이트 단위).
jsonParsed 인코딩 사용):
코드 예제
개발자 팁
- 필터 요구사항: 필터 매개변수에
mint또는programId중 하나를 반드시 제공해야 합니다. 이러한 필터 없이 모든 토큰 유형의 위임된 계정을 쿼리할 수 없습니다. - 인코딩:
"jsonParsed"를encoding옵션으로 사용하는 것은 데이터를 더 쉽게 처리할 수 있도록 강력히 추천됩니다. 이는 이진 계정 데이터를 구조화된 JSON 형식으로 디코딩합니다. - 성능:
programId를 사용하여 쿼리하는 것은mint를 사용하여 쿼리하는 것보다 리소스를 더 많이 소모할 수 있으며, 특히 위임자가 여러 다른 토큰 유형에 대해 권한을 갖고 있는 경우 그렇습니다. 일부 RPC 제공자는 이 메서드에 대해 더 엄격한 속도 제한을 가질 수 있습니다. - 위임된 양: 응답의
delegatedAmount는 현재 위임자가 사용할 수 있도록 승인된 최대 토큰 수를 나타냅니다. 이는 계정의 총tokenAmount보다 적을 수 있습니다. - 위임 취소: 이 메서드는 정보만 검색합니다. 위임을 취소하려면 토큰 계정의 소유자가 SPL 토큰 프로그램에
Revoke명령을 보내야 합니다.
getTokenAccountsByDelegate 사용에 대한 포괄적인 개요를 제공합니다.