
getTransactionsForAddress와 최대 10배 빨라진 아카이브 데이터
목차
getTransactionsForAddress(gTFA)는 과거 데이터를 조회하는 새로운 Solana RPC 메서드입니다. getSignaturesForAddress와 getTransaction를 단일 호출로 통합하고, 역방향 검색, 시간·상태·슬롯 기반 필터링, 페이지네이션 등 강력한 새 기능을 제공합니다.
지금까지 Solana에서 과거 데이터를 백필하고 조회하려면 getBlock처럼 느리고 비용이 많이 드는 메서드를 사용하거나, getSignaturesForAddress와 getTransaction를 사용해 서명 배치를 반복 처리해야 했습니다.
이제 개발자는 강력한 필터링 및 정렬 옵션을 갖춘 단일 호출로 전체 트랜잭션 세부 정보가 포함된 레코드를 최대 100개까지, 서명만 포함된 레코드를 최대 1,000개까지 조회할 수 있습니다.
Solana 과거 데이터 조회의 어려움
Solana 원장에는 지금까지 온체인으로 전송된 모든 트랜잭션이 저장됩니다. 이 과거 데이터에는 제네시스 이후 발생한 모든 민팅, 전송, 스왑, 프로그램 상호작용이 포함됩니다.
현재까지 Solana는 3억 7,500만 개가 넘는 블록을 생성했으며, 제네시스 블록부터 현재까지 프루닝되지 않은 전체 트랜잭션 기록의 크기는 수백 테라바이트에 달합니다.
이 데이터에 빠르고 안정적으로 접근하는 것은 현재 Solana에서 개발하는 거의 모든 팀에 필수적입니다. Solana의 아카이브 메서드는 즐겨 사용하는 지갑의 트랜잭션 기록 탭부터 블록 탐색기와 포트폴리오 대시보드까지 다양한 서비스를 지원합니다.
지금까지 개발자가 아카이브 데이터를 조회할 수 있는 방법은 두 가지뿐이었으며, 둘 다 번거로웠습니다.
getBlockgetSignaturesForAddress와getTransaction조합
getBlock은 너무 느립니다
먼저 개발자는 데이터를 백필하기 위해 getBlock를 조회할 수 있습니다. 가능은 하지만 불필요하게 많은 시간과 비용, 리소스가 드는 방식입니다.
getBlocks를 호출해 슬롯 범위 내에서 확정된 블록을 찾습니다- 각 블록에서
getBlock를 호출해 전체 트랜잭션 세부 정보, 서명 또는 계정을 가져옵니다 - 블록에서 필요한 모든 데이터를 파싱해 데이터베이스에 저장합니다
- 모든 블록의 처리가 끝날 때까지 반복합니다
getBlock 메서드는 활동이 많은 프로그램에 적합합니다. 예를 들어 USDC 같은 인기 토큰이나 Pump.fun 같은 Solana 프로그램을 인덱싱할 때 유용합니다. 하지만 작고 구체적인 데이터세트에 사용하기에는 비효율적입니다.
getSignaturesForAddress와 getTransaction 반복 호출
getSignaturesForAddress(gSFA)를 getTransaction와 함께 사용하는 것도 데이터를 백필하는 일반적인 방법입니다.
이러한 “N+1 루프” 방식은 일반적으로 한 번에 1,000개의 트랜잭션 서명을 반복해서 가져온 다음, 각 트랜잭션의 세부 정보를 가져오기 위해 RPC 배치 호출을 실행합니다.
RPC 요청 수가 매우 많기 때문에 개발자는 속도 제한에 도달하거나 데이터가 누락되는 것을 방지하도록 지수 백오프와 재시도 로직을 구현해야 합니다.
gSFA와 getTransaction를 함께 사용하면 getBlock보다 유연하지만, 대규모 환경에서는 여전히 비용이 많이 들고 복잡하며 오류가 발생하기 쉽습니다.
getTransactionForAddress의 이점
새로운 getTransactionsForAddress RPC 메서드는 getSignaturesForAddress와 getTransaction를 단일 호출로 통합합니다. 강력한 기능을 통해 인덱스를 더 쉽게 구축하고 과거 데이터를 더 빠르게 조회할 수 있습니다.
주요 기능은 다음과 같습니다.
1. 역방향 검색
gSFA와 같은 기존 아카이브 RPC 메서드를 사용할 때는 가장 최근 트랜잭션부터 시작해 과거 방향으로 조회해야 했습니다.
이제 개발자는 getTransactionForAddress를 사용해 오름차순(시간순, 오래된 항목부터) 또는 내림차순(최신 항목부터) 정렬을 선택할 수 있습니다.
시간 기반 필터와 함께 getTransactionForAddress를 사용하면 어떤 시점에서든 원하는 순서로 Solana 기록의 모든 구간을 조회할 수 있습니다.
예를 들어 새로운 Solana 블록 탐색기 Orb는 getTransactionsForAddress RPC 메서드를 사용해 “오래된 항목부터 표시” 필터를 제공합니다.
getSignaturesForAddress와 getTransaction를 사용해 동일한 데이터를 조회하려면 다음 과정이 필요합니다.
- 첫 번째 트랜잭션에 해당하는 정확한 타임스탬프를 찾습니다
- 시작 날짜에 해당하는 트랜잭션 서명을 찾습니다
before: lastSignature를 사용해 해당 서명부터 과거 방향으로 반복 조회합니다- 반환된 서명의
blockTime가 종료 날짜에 도달할 때까지 반복합니다 - 속도 제한에 도달하거나 데이터가 누락되는 것을 방지하도록 백오프 및 재시도 로직을 작성합니다
이 과정은 조회 속도가 느릴 뿐 아니라 설정하기도 번거롭고 오류가 발생하기 쉽습니다.
2. 고급 필터링
새로운 getTransactionsForAddress 메서드를 사용하면 시간 범위(Unix 타임스탬프), 슬롯, 상태(예: 성공 또는 실패)를 기준으로 필터링할 수 있습니다. 이러한 필터를 통해 필요한 데이터를 더 정밀하고 세부적으로 조회할 수 있습니다.
예를 들어 다음 시간 기반 필터는 Unix 타임스탬프를 사용해 2025년 1월 1일 오전 12시(GMT)부터 2025년 10월 1일 오전 12시(GMT) 사이에 발생한 모든 성공한 트랜잭션을 가져옵니다.
// Time range with successful transactions only
"filters": {
"blockTime": {
"gte": 1767225600,
"lte": 1759363200
},
"status": "succeeded"
}3. 커서 기반 페이지네이션
gTFA의 기본 한도(서명 1,000개 또는 전체 트랜잭션 세부 정보가 포함된 레코드 100개)보다 많은 트랜잭션을 조회해야 한다면 응답의 paginationToken를 사용해 다음 페이지를 가져올 수 있습니다. paginationToken는 API가 조회를 재개할 위치를 알려주는 "slot:position" 형식의 간단한 문자열입니다.
예를 들어 다음 쿼리는 paginationToken(커서)를 사용해 주소 기록을 100개씩 스캔합니다.
// First request
let paginationToken = null;
let allTransactions = [];
const getNextPage = async (paginationToken = null) => {
const params = [
'ADDRESS',
{
transactionDetails: 'signatures',
limit: 100,
...(paginationToken && { paginationToken })
}
];
const response = await fetch(rpcUrl, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
jsonrpc: '2.0',
id: 1,
method: 'getTransactionsForAddress',
params
})
});
const data = await response.json();
return data.result;
};
// Paginate through all results
do {
const result = await getNextPage(paginationToken);
allTransactions.push(...result.data);
paginationToken = result.paginationToken;
console.log(`Fetched ${result.data.length} transactions, total: ${allTransactions.length}`);
} while (paginationToken);
새로운 Solana 아카이브 시스템
새로운 getTransactionsForAddress 메서드와 함께, 아카이브 라우터와 스토리지 경로를 최적화하기 위해 처음부터 다시 구축한 완전히 새로운 아카이브 시스템도 출시했습니다.
새 시스템은 모든 Solana 아카이브 RPC 메서드(예: getTransaction, getBlock, getInflationReward)에 적용되며, 모든 무료 및 유료 플랜에서 사용할 수 있습니다.
이제 모든 플랜의 모든 아카이브 메서드가 2~10배 빨라졌습니다. 지연 시간은 낮아지고 성능은 향상됐으며, 코드를 변경할 필요가 없습니다.
시작하기
getTransactionsForAddress RPC 메서드는 오늘부터 모든 유료 플랜에서 공개적으로 사용할 수 있으며, 기존 Helius RPC URL과 함께 사용할 수 있습니다. gTFA 메서드는 호출당 100크레딧이 부과되며, RPC 속도 제한 그룹에 포함됩니다.
메서드의 작동 방식을 알아보고 시작하려면 API 레퍼런스를 읽고 getTransactionsForAddress 빠른 시작 가이드를 따라 하세요.
관련 아티클
Helius 구독하기
최신 Solana 개발 소식을 확인하고 새 게시물 알림을 받아보세요


