Skip to main content
LaserStream의 tokenAccounts 필터는 gRPC 트랜잭션 구독이 지갑 소유의 연결된 토큰 계정(ATA) 에서 발생하는 활동을 매칭하도록 하며, 단순히 지갑의 공개 키가 직접 나타나는 트랜잭션만이 아닙니다. 동일한 필터는 WebSocket을 통해서도 사용할 수 있습니다 — 토큰 계정(ATA) 필터링 (WebSocket)을 참조하세요.

문제점: 단순 계정 필터는 들어오는 토큰 전송을 놓칩니다

accountInclude: [wallet]으로 지갑을 감시할 때, 해당 지갑의 퍼브키가 트랜잭션의 계정 키에 나타나는 트랜잭션만 매칭됩니다. 일반적인 사례는 놓치기 쉽습니다: 누군가 지갑에 SPL 토큰(예: USDC)을 전송할 때, 전송은 지갑의 연관된 토큰 계정(ATA) — 별도의 프로그램 파생 주소 — 을 터치하지만 지갑의 퍼브키 자체는 아닙니다. 따라서 단순 accountInclude: [wallet] 구독은 들어오는 토큰 전송을 절대 보지 못합니다. 사전에 지갑이 소유한 모든 ATA를 열거하고 각각을 필터에 추가해야 합니다 — 그러나 ATAs는 필요에 따라 생성되므로(하나의 민트당 하나씩), 사전에 전체 세트를 알 수 없습니다.

tokenAccounts 확장 작동 방식

트랜잭션 필터에 tokenAccounts를 설정하여 매칭을 확장하면 accountInclude 지갑이 소유한 토큰 계정을 터치하는 트랜잭션도 매칭됩니다. 매칭은 소유자 기반입니다: LaserStream은 매칭 시점에 accountInclude 주소가 소유한 토큰 계정을 해결하므로 지갑이 소유한 모든 토큰 계정을 포착합니다 — 비정형도 포함하여, 파생된 ATA 주소만이 아닙니다. 직접 ATA를 나열할 필요가 없습니다. tokenAccounts를 생략한 구독은 정확히 이전과 동일하게 작동하므로, 기존 필터에 안전하게 추가할 수 있습니다. 지갑이 아닌 토큰을 기준으로 일치시키려면 토큰 민트 필터링을 참조하세요. 두 플래그를 함께 사용할 수 있으므로 하나의 필터로 단일 토큰에 대한 특정 지갑의 활동을 모니터링할 수 있습니다.

확장 모드

tokenAccounts에는 다음 세 가지 문자열 값 중 하나를 사용합니다. "balanceChanged"부터 사용하세요. "all"보다 훨씬 적은 볼륨으로 실제 자금 이동을 포착합니다.

LaserStream gRPC에서 사용하기

SubscribeRequest의 트랜잭션 필터에 tokenAccounts를 추가하세요. Helius LaserStream SDK는 이 문자열을 전송 계층의 TokenAccountExpansionControlFlag 열거형으로 자동 변환합니다(yellowstone-grpc-proto 12.5.0+에 포함).
사전 잔액과 사후 잔액의 차이를 계산하는 더 자세한 예시는 트랜잭션 모니터링 가이드를 참조하고, 모든 트랜잭션 필터 필드는 구독 요청 레퍼런스를 참조하세요.

일치 결과 확인하기

ATA 확장을 통해 트랜잭션이 일치하면 지갑의 토큰 이동 내역은 트랜잭션의 meta.postTokenBalancesmeta.preTokenBalances에 있습니다. 지갑이 실제로 소유한 잔액만 분리하려면 해당 항목을 owner 기준으로 필터링한 다음, 동일한 accountIndex에서 preTokenBalancespostTokenBalances의 차이를 계산하여 각 민트가 얼마나 이동했는지 확인하세요. 위 예시는 필터링 단계를 보여 주며, 트랜잭션 모니터링 가이드에서는 전체 차이 계산 과정을 설명합니다.

관련 문서

Transaction Monitoring

전체 필터링 전략과 gRPC에서 실행 가능한 지갑 모니터링 예제입니다.

Token Account Filtering (WebSocket)

WebSocket transactionSubscribe 메서드에서 사용하는 동일한 tokenAccounts 필드입니다.

Subscribe Request Reference

tokenAccounts를 포함한 모든 트랜잭션 필터 필드입니다.

Compressed Filters

하나의 스트림에서 수십만 개의 계정을 추적합니다.

Token Mint Filtering

matchMints를 사용하여 토큰 민트의 모든 트랜잭션을 구독합니다.