신규: Helius가 Light Protocol을 인수했습니다
getTransactionsForAddress용 tokenAccount 필터 소개
블로그/업데이트

gTFA용 토큰 계정 필터 소개

공동 창업자X의 Nick PennieLinkedIn의 Nick Pennie
읽는 데 3분

지난 10월, 과거 데이터를 조회할 수 있는 새로운 Solana RPC 호출인 getTransactionsForAddress를 출시했습니다. getSignaturesForAddress와 getTransaction를 하나의 메서드로 통합했습니다.

이제 getTransactionsForAddress(gTFA)는 단 한 번의 RPC 호출로 지갑의 토큰 전송 내역을 조회할 수 있습니다. 

새로운 tokenAccounts 기능을 사용하면 지갑의 연결 토큰 계정에 대한 트랜잭션을 포함할 수 있습니다. 이전에는 gTFA와 그 전신인 getSignaturesForAddress에서 이 트랜잭션이 누락되었습니다.

이전에는 개발자가 getTokenAccountsByOwner를 조회한 다음, 모든 토큰 계정에 대해 getSignaturesForAddress를 호출해야 했습니다. 

이 방식은 느리고 비용이 많이 들었으며, 추가 RPC 호출이 수백 번씩 필요한 경우도 많았습니다.

이제 tokenAccounts를 사용해 getTransactionsForAddress를 한 번만 호출하면 됩니다.

문제점

Solana에서 지갑은 실제로 토큰을 직접 보관하지 않습니다.

대신 지갑이 연결 토큰 계정(ATA)을 소유하고, 이 토큰 계정이 토큰을 보관합니다. 

예를 들어 누군가 USDC를 보내면 기본 지갑 주소가 아닌 USDC 토큰 계정으로 전송됩니다.

이 구조 때문에 지갑의 트랜잭션 내역을 조회하기가 매우 까다롭습니다.

지갑에서 getSignaturesForAddress를 호출하면 해당 지갑 주소를 직접 참조하는 트랜잭션만 가져옵니다.

토큰 계정과 상호작용하지만 지갑을 참조하지 않는 토큰 전송은 표시되지 않습니다.

기존 해결 방법

지금까지 개발자는 다음과 같은 번거로운 우회 방법을 구현해야 했습니다.

  1. getTokenAccountsByOwner를 호출해 지갑의 토큰 계정 가져오기
  2. 지갑 자체에 대해 getSignaturesForAddress 호출하기
  3. 모든 개별 토큰 계정에 대해 getSignaturesForAddress 호출하기
  4. 모든 결과 병합하기
  5. 중복 제거하기(많은 트랜잭션이 여러 계정에 영향을 줌)
  6. 시간순으로 정렬하기

이 접근 방식에는 몇 가지 문제가 있습니다.

1. 성능이 느립니다

토큰 계정이 50개인 지갑의 전체 내역을 구성하려면 RPC를 51회 이상 호출해야 합니다. 전문 트레이더, DeFi 헤비 유저, 취미로 밈코인을 거래하는 사용자는 토큰 계정이 수백 개일 수 있습니다.

2. 페이지네이션이 비효율적입니다

가장 최근 트랜잭션 20개가 필요하신가요? 각 소스에서 20개씩 가져와 병합하는 것만으로는 충분하지 않습니다. 모든 항목을 가져와 중복을 제거하고 정렬한 후에야 처음 20개를 선택할 수 있습니다. 

필요 이상의 데이터를 가져오지 않고 효율적으로 페이지네이션할 방법이 없습니다.

3. RPC 비용이 누적됩니다

각 RPC 호출에는 오버헤드가 발생합니다. 사용자 요청마다 100회 이상 호출하면 비용이 빠르게 늘어나며, 규모가 커질수록 부담도 커집니다.

해결책

새로운 tokenAccounts 필터를 사용하면 단 한 번의 RPC 요청으로 지갑의 전체 내역을 가져올 수 있습니다.

코드
{
    "jsonrpc": "2.0",
    "id": "helius-example",
    "method": "getTransactionsForAddress",
    "params": [
        "86xCnPeV69n6t3DnyGvkKobf9FdN2H9oiVDdaMpo2MMY",
        {
            "filters": {
                "tokenAccounts": "all"
            },
            "sortOrder": "asc",
            "limit": 100
        }
    ]
}

이게 전부입니다. 한 번의 호출로 전체 내역을 가져옵니다.

필터 옵션

tokenAccounts 필터는 none, balanceChanged, all의 세 가지 옵션을 제공합니다.

none (기본값)

tokenAccounts 필터를 none로 설정하면 트랜잭션이 지갑 주소를 참조해야 합니다.

balanceChanged (권장)

balanceChanged를 적용하면 트랜잭션이 지갑 주소를 참조하거나 지갑이 소유한 토큰 계정의 잔액을 변경해야 합니다.

all

tokenAccounts를 all로 설정하면 트랜잭션이 지갑 주소 또는 지갑이 소유한 토큰 계정의 주소를 참조해야 합니다.

사용 사례

이 새로운 기능은 다음과 같은 서비스에 꼭 필요합니다.

  • 전체 트랜잭션 내역을 보여주는 지갑
  • 모든 토큰 이동을 추적해야 하는 포트폴리오 추적기
  • 모든 토큰의 손익을 계산하는 세금 소프트웨어
  • 사용자 활동을 표시하는 분석 대시보드

시작하기

tokenAccounts 기능을 지금 사용할 수 있습니다.

필터 객체에 tokenAccounts: balanceChanged 또는 all를 추가하기만 하면 됩니다.

아직 getTransactionsForAddress를 사용하지 않으시나요?

자세한 내용과 시작 방법은 문서와 SDK에서 확인하세요.

Helius 구독하기

최신 Solana 개발 소식을 확인하고 새 게시물 알림을 받아보세요