getMultipleAccounts RPC 메서드는 Solana 계정 목록 정보를 동시에 가져오는 매우 효율적인 방법입니다. 각 계정에 대해 개별적으로 getAccountInfo 요청을 사용하는 대신, getMultipleAccounts를 사용하여 이러한 요청을 배치하여 네트워크 오버헤드를 줄이고 애플리케이션의 응답성을 향상시킬 수 있습니다.
일반 사용 사례
- 계정 데이터 배치 로딩: 애플리케이션이 여러 개의 알려진 계정에서 데이터를 표시하거나 처리해야 할 때 (예: 사용자의 토큰 계정, 온체인 프로그램 구성 목록).
- 포트폴리오 추적기: 사용자가 소유한 여러 토큰 계정의 잔액 및 상태를 가져오기.
- 마켓플레이스 UI: 여러 NFT 또는 등록된 항목의 세부 정보를 한 번에 가져와서 표시하기.
- dApp 성능 개선: RPC 호출 수를 크게 줄여 더 빠른 로드 시간과 향상된 사용자 경험을 제공, 특히 많은 계정을 다룰 때.
요청 매개변수
-
pubkeys(array의string, 필수):- 쿼리할 계정의 base-58로 인코딩된 공개 키 문자열 배열입니다.
- 요청당 최대 100개의 공개 키.
- 예:
["So11111111111111111111111111111111111111112", "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"]
-
options(object, 선택 사항): 다음 필드 중 하나 이상을 포함하는 구성 객체:commitment(string): 쿼리의 커밋 수준을 지정합니다 (예:"finalized","confirmed","processed").encoding(string): 계정 데이터의 인코딩. 옵션은 다음과 같습니다:"base64"(기본값): 표준 base64 인코딩."base58": 느리지만 특정 상황에서 유용할 수 있음."base64+zstd": Base64로 인코딩된 zstd 압축 데이터."jsonParsed": 계정이 RPC 노드에 파서가 있는 프로그램(SPL 토큰 프로그램, 스테이크 프로그램 등)에 의해 소유되는 경우,data필드는 JSON 객체가 됩니다. 이는 구조화된 데이터에 매우 유용합니다.
dataSlice(object): 계정 데이터의 특정 부분만 가져올 수 있게 해줍니다. 이는 큰 계정에서 필요한 정보만 가져오는 데 유용합니다.offset(usize): 계정 데이터 시작 지점부터의 바이트 오프셋.length(usize): 오프셋에서 반환할 바이트 수.- 참고:
dataSlice는base58,base64또는base64+zstd인코딩에만 사용할 수 있습니다.
minContextSlot(u64): 요청을 평가할 수 있는 최소 슬롯입니다.
응답 구조
JSON-RPC 응답 객체에는 다음을 포함하는result 필드가 있습니다:
context(object):slot(u64): 정보가 검색된 슬롯.apiVersion(string, 선택 사항): 노드의 API 버전.
value(array):- 각 요소가 요청의
pubkeys배열에서 동일 인덱스의 공개 키에 해당하는 배열. - 각 요소는 다음 중 하나가 됩니다:
null: 특정 공개 키에서 계정이 존재하지 않거나 특정 계정에 오류가 발생한 경우.- 다음 필드가 있는 계정 객체:
lamports(u64): 계정이 보유한 Lamport 수.owner(string): 계정을 소유한 프로그램의 base-58로 인코딩된 공개 키.data(array또는object): 계정 데이터.encoding이jsonParsed이고 파서가 존재하는 경우, 이는 JSON 객체입니다. 그렇지 않으면 일반적으로 배열["encoded_string", "encoding_format"](예:["SGVsbG8=", "base64"])입니다.executable(boolean): 계정에 프로그램이 포함되어 있는지 여부(실행 가능 여부).rentEpoch(u64): 이 계정이 다음에 임대료를 지불해야 할 에폭.space(u64): 계정의 데이터 길이(바이트).
- 각 요소가 요청의
예시
1. 두 계정에 대한 기본 정보 가져오기
이 예제에서는 SOL Llama(NFT)와 Serum Dex 프로그램 v3에 대한 데이터를 가져옵니다.2. 파싱된 토큰 계정 데이터 가져오기
이 예제에서는 두 개의 SPL 토큰 계정에 대해 데이터를 가져오고jsonParsed 인코딩을 요청하여 구조화된 데이터를 얻습니다.
개발자 팁
- 최대 100개 계정: 호출당 최대 100개의 계정을 요청할 수 있습니다.
- 원자성: 요청은 원자적이지 않아 한 계정 조회가 실패해도 다른 계정은 성공할 수 있습니다.
value배열의 각 요소를 체크하여null를 확인하세요. jsonParsed편리함: 일반 계정 유형(SPL 토큰 계정 등)을 다룰 때jsonParsed인코딩을 사용하는 것이 manual 역직렬화 없이 매우 권장됩니다.dataSlice를 큰 계정에 사용: 매우 큰 계정(예: 일부 프로그램 상태 계정)의 경우 필요한 바이트만 가져와 과도한 데이터 전송을 방지하세요.- 오류 처리: 계정이 발견되지 않았거나 가져올 수 없음을 나타내는
null항목을 응답value배열에서 처리할 준비를 하세요.
getMultipleAccounts를 활용하여 보다 성능이 뛰어나고 확장 가능한 Solana 애플리케이션을 구축할 수 있습니다.
관련 메서드
getAccountInfo
단일 계정에 대한 자세한 정보 검색
getProgramAccounts
특정 프로그램이 소유한 모든 계정 가져오기