Skip to main content
getMultipleAccounts RPC 메서드는 Solana 계정 목록 정보를 동시에 가져오는 매우 효율적인 방법입니다. 각 계정에 대해 개별적으로 getAccountInfo 요청을 사용하는 대신, getMultipleAccounts를 사용하여 이러한 요청을 배치하여 네트워크 오버헤드를 줄이고 애플리케이션의 응답성을 향상시킬 수 있습니다.

일반 사용 사례

  • 계정 데이터 배치 로딩: 애플리케이션이 여러 개의 알려진 계정에서 데이터를 표시하거나 처리해야 할 때 (예: 사용자의 토큰 계정, 온체인 프로그램 구성 목록).
  • 포트폴리오 추적기: 사용자가 소유한 여러 토큰 계정의 잔액 및 상태를 가져오기.
  • 마켓플레이스 UI: 여러 NFT 또는 등록된 항목의 세부 정보를 한 번에 가져와서 표시하기.
  • dApp 성능 개선: RPC 호출 수를 크게 줄여 더 빠른 로드 시간과 향상된 사용자 경험을 제공, 특히 많은 계정을 다룰 때.

요청 매개변수

  1. pubkeys (arraystring, 필수):
    • 쿼리할 계정의 base-58로 인코딩된 공개 키 문자열 배열입니다.
    • 요청당 최대 100개의 공개 키.
    • 예: ["So11111111111111111111111111111111111111112", "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"]
  2. 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): 오프셋에서 반환할 바이트 수.
      • 참고: dataSlicebase58, 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): 계정 데이터. encodingjsonParsed이고 파서가 존재하는 경우, 이는 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

특정 프로그램이 소유한 모든 계정 가져오기