Parsed Streams란 무엇인가요?
Parsed Streams는 확인된 모든 Solana 트랜잭션(투표 트랜잭션 제외)을 감시하고 디코딩한 다음, 사용자가 정의한 필터와 일치하는 트랜잭션을 푸시하는 WebSocket 서비스입니다. “Jupiter 경로 명령어가 중요합니다” 또는 “이 계정과 관련된 모든 항목이 중요합니다”라고 지정하면 서버가 대신 감시하고 디코딩하여 일치 항목을 찾습니다. 이미 디코딩된 전체 트랜잭션을 받습니다. 여기에는 이름이 지정된 인수와 계정이 포함된 모든 명령어, 수수료, 전체 계정 키 목록, 발생한 상황에 대한 트랜잭션 수준의summary, SOL 및 토큰 전송 내역, 필터와 일치한 정확한 명령어를 가리키는 포인터가 포함됩니다. 모든 데이터는 confirmed 커밋먼트로 전송됩니다.
핵심 개념
이미 Solana 내부 구조를 알고 있다면 다음으로 넘어가세요. 그렇지 않다면 전체 API의 기반이 되는 다음 모델을 이해하세요. 트랜잭션은 서명된 메시지입니다. 수수료 지불자를 지정하고, 접근할 모든 계정을 나열하며, 명령어 목록을 포함합니다. 트랜잭션에서는 서명(고유 ID), 포함된 슬롯, 지불된 수수료, 계정 키, 성공 또는 실패 여부, 명령어를 확인할 수 있습니다. 명령어는 하나의 작업입니다. 지정된 계정을 사용해 이 입력으로 이 프로그램을 실행합니다. 예를 들면 Jupiter 스왑, 토큰 전송, 메모가 있습니다. 일반적으로 트랜잭션에는 여러 명령어가 포함되며 순서대로 실행됩니다. 프로그램은 다른 프로그램을 호출할 수 있습니다. Jupiter가 스왑을 실행할 때 토큰을 직접 이동하지 않습니다. 경로 명령어가 토큰 이동을 위해 토큰 프로그램을 호출하고 유동성을 보유한 거래소 프로그램도 호출합니다. 이렇게 중첩된 호출도 명령어이며, 내부 명령어(또는 CPI, 교차 프로그램 호출)라고 합니다. 필터를 작성할 때 이 점이 중요합니다. 스왑 내 실제 토큰 이동과 같은 실질적인 활동은 대부분 내부 명령어에서 발생하므로 필터는 기본적으로 내부 명령어도 일치시킵니다. 사용자가 서명한 명령어만 원한다면includeCpi를 false로 설정하세요.
계정은 명령어가 처리하는 온체인 요소로, 지갑, 토큰 잔액, 풀, 민트 등이 있습니다. 각 명령어는 계정을 정렬된 주소 목록으로 포함하며, 그 순서가 계약 역할을 합니다. 프로그램은 각 위치의 의미를 정의합니다. 예를 들어 토큰 프로그램은 먼저 토큰을 가져올 계정, 그다음 토큰을 받을 계정, 마지막으로 전송을 승인하는 소유자 계정을 요구합니다.
역할은 이러한 위치에 이름을 부여합니다. 널리 알려진 프로그램은 대부분 IDL이라는, 인터페이스용 기계 판독 가능 설명서를 게시합니다. 이 설명서에는 프로그램의 모든 명령어, 데이터 필드의 의미, 각 계정 위치의 용도가 나열됩니다. Helius는 수천 개 프로그램의 설명서 카탈로그를 유지합니다. 이를 사용하면 단순한 주소 목록이 이름이 지정된 계정으로 바뀝니다. 토큰 전송의 경우 위치 0은 source, 위치 1은 destination, 위치 2는 authority가 됩니다. 세 번째 주소의 의미를 추측하는 대신 {"name": "authority", "pubkey": "9xQe...", "isSigner": true}를 읽으면 됩니다. 이러한 이름이 필터링할 수 있는 역할입니다.
디코딩은 명령어의 입력 데이터에 같은 개념을 적용하는 것입니다. 전송 중인 데이터는 불투명한 바이트입니다. 프로그램 설명서를 사용하면 바이트가 이름이 지정된 값인 {"in_amount": "1000000", "slippage_bps": 50}로 변환됩니다. 모든 명령어를 디코딩할 수 있는 것은 아니므로 각 명령어는 필드에서 직접 확인할 수 있는 다음 세 가지 상태 중 하나가 됩니다.
- 디코딩됨: 명령어에 이름이 지정된
args와 이름이 지정된accounts가 포함된decoded객체가 있습니다. - 인식됨: 명령어에는
decoded외에도type(예:swap), 사람이 읽을 수 있는description, 금액과 민트가 포함된 스왑 메타데이터 같은 구조화된parsedData페이로드를 포함하는summary가 있습니다. - 디코딩되지 않음: 프로그램 또는 명령어가 카탈로그에 없고
decoded가null이며, 대신 명령어에 원시 바이트(rawData)와 일반 주소 목록(rawAccounts)이 포함되므로 항상 활용할 수 있는 데이터가 제공됩니다.
programs: 명령어가 호출하는 프로그램instructionNames: 프로그램 설명서에서 해당 작업을 부르는 이름accounts.include: 접근하는 주소accounts.roles: 어떤 이름이 지정된 위치에 어떤 주소가 있어야 하는지includeCpi및includeFailed: 내부 명령어와 실패한 트랜잭션을 포함할지 여부
다른 서비스와 비교
vs Enhanced WebSockets
Enhanced WebSockets는 디코딩하지 않고 전체 트랜잭션 또는 계정 업데이트를 스트리밍합니다. Parsed Streams는 명령어 수준에서 일치 항목을 찾고 모든 데이터를 디코딩합니다.
vs LaserStream gRPC
LaserStream은 클라이언트에서 필터링하고 디코딩하는 고처리량 gRPC 파이어호스입니다. Parsed Streams는 서버에서 필터링하고 디코딩하는 WebSocket API입니다.
vs Parsed Events
Parsed Events는 동일한 디코딩을 과거 트랜잭션에 적용합니다. 서명을 파싱하거나 REST를 통해 필요할 때 주소 기록을 페이지 단위로 조회합니다. Parsed Streams는 새 트랜잭션이 도착하는 즉시 푸시합니다.
지원 프로그램
Parsed Streams는 온체인 IDL을 사용해 3,600개 이상의 프로그램을 디코딩하며, 내장 디코더를 통해 SPL Token, Token-2022, System Program 같은 핵심 프로그램도 디코딩합니다. 모든 프로그램 주소로 필터링할 수 있습니다. 서비스가 디코딩할 수 없는 명령어는 대신 원시 명령어 데이터로 스트리밍됩니다. 가장 많이 사용되는 디코딩 프로그램 중 일부는 다음과 같습니다.DEXs & AMMs
DEXs & AMMs
Launchpads
Launchpads
Lending & Perps
Lending & Perps
NFTs & Compression
NFTs & Compression
액세스 및 요금
Parsed Streams는 Free를 포함한 모든 플랜에서 일반적으로 사용할 수 있습니다. 실시간으로 파싱된 트랜잭션 데이터를 제공하며 Enhanced Transaction Webhooks를 대체합니다. Helius Dashboard에서 API 키를 받으세요. 전달된 이벤트 하나당 1크레딧이 부과되며, 웹훅 이벤트와 같은 요율입니다. 전체 가격 목록은 크레딧을 참조하세요. Parsed Streams는 Helius RPC 및 WebSocket 트래픽과 동일한 호스트인 Gatekeeper 엔드포인트에서 제공됩니다. 별도의 Parsed Streams 호스트는 없습니다.api-key 쿼리 매개변수(또는 x-api-key 헤더)로 전달합니다. 연결이 열릴 때 키를 확인합니다. 키가 없거나 유효하지 않으면 HTTP 401로 거부되며, 프로젝트가 연결 한도에 도달하면 HTTP 429가 반환됩니다.
시작하기
Quickstart
연결하고 첫 번째 필터를 전송한 다음 알림을 읽습니다.
Track Jupiter Swaps
프로그램 검색을 사용하여 실제 필터를 생성하고 구독합니다.
Track Pump.fun Mints
새로 배포되는 모든 Pump.fun 토큰을 기록하는 재연결 안전 리스너를 만듭니다.
Handling Reconnects
연결 끊김을 감지하고, 재시도 간격을 늘리고, 다시 구독하고, 누락된 슬롯을 백필합니다.