Skip to main content
Parsed Streams는 폐쇄 베타 상태입니다. 현재는 화이트리스트에 등록된 프로젝트 ID로만 접근이 제한되며, 일반 제공 이전에 API가 변경될 수 있습니다. 폐쇄 베타에 참여하시려면, 여기에서 신청하세요.

파싱된 스트림이란?

Parsed Streams는 모든 확인된 Solana 트랜잭션(투표 트랜잭션 제외)을 감시하고 디코딩하여, 사용자가 정의한 필터와 일치하는 트랜잭션을 전송하는 WebSocket 서비스입니다. “Jupiter 경로 명령어가 궁금합니다” 또는 “이 계정에 관련된 모든 것이 궁금합니다”라고 하시면, 서버가 감시하고 디코딩하며 매칭을 수행합니다. 사용자는 이미 디코딩된 전체 트랜잭션을 받습니다: 명명된 인수 및 명명된 계정과 함께 각 명령어, 수수료, 모든 계정 키 목록, 발생한 일을 설명하는 트랜잭션 수준의 summary, SOL 및 토큰 전송, 그리고 필터와 일치하는 정확한 명령어의 포인터까지. 모든 데이터는 확인된 커밋 수준으로 제공됩니다.

정신 모델

Solana 내부를 이미 알고 계시다면, 앞으로 넘어가세요. 그렇지 않다면, 이 API가 구축된 모델입니다. 트랜잭션은 서명된 메시지입니다. 이것은 수수료 지급자를 명시하고, 영향을 미칠 모든 계정을 나열하며, 명령어 목록을 포함합니다. 이를 보면: 서명(고유 ID), 포함된 슬롯, 지불된 수수료, 계정 키, 성공 여부 또는 실패 여부, 명령어가 있습니다. 명령어는 하나의 작업입니다: 이 프로그램을 실행하고, 이 입력을 사용하며, 이 계정을 사용합니다. Jupiter에서의 스왑, 토큰 전송, 메모 등이 있습니다. 일반적으로 하나의 트랜잭션은 여러 명령어를 포함하며, 순차적으로 실행됩니다. 프로그램은 다른 프로그램을 호출할 수 있습니다. Jupiter가 스왑을 실행할 때, 직접 토큰을 이동시키지 않습니다. 경로 명령어는 토큰 프로그램을 호출하여 토큰을 이동시키고 유동성을 보유한 교환 프로그램을 호출합니다. 이러한 중첩된 호출도 명령어이며, 내부 명령어(또는 CPIs, 교차 프로그램 호출)라고 합니다. 필터를 작성할 때 중요합니다: 스왑 내 실제 토큰 이동과 같은 대부분의 실제 활동이 내부 명령어에서 발생하므로 기본적으로 필터와 일치합니다. 사용자가 서명한 명령어만 필요하다면, 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 외에도, 명령어는 사람 읽기 가능한 description 및 스왑 메타데이터와 같은 구조화된 parsedData 페이로드와 같은 type를 포함하는 summary를 포함합니다.
  • 비디코딩됨: 프로그램 또는 명령어가 목록에 없으며, decodednull이고, 명령어는 대신 처리해야 할 원시 바이트(rawData) 및 평범한 주소 목록(rawAccounts)을 포함합니다.
이것이 전체 모델이며, 필터는 직접적으로 이 모델에서 생성됩니다:
  • programs: 명령어가 호출하는 프로그램
  • instructionNames: 프로그램의 매뉴얼이 그 행동을 부르는 명칭
  • accounts.include: 영향을 미칠 주소
  • accounts.roles: 명명된 위치가 특정 주소를 보유해야 하는 경우
  • includeCpiincludeFailed: 내부 명령어 및 실패한 트랜잭션이 포함되는지 여부
필터는 명령어를 선택하고; 알림은 전체 트랜잭션을 제공합니다.

어떻게 비교되는가

vs Enhanced WebSockets

Enhanced WebSockets는 디코딩 없이 전체 트랜잭션이나 계정 업데이트를 스트리밍합니다. Parsed Streams는 명령어 수준에서 매칭하고 모든 것을 디코딩해 줍니다.

vs LaserStream gRPC

LaserStream은 클라이언트에서 필터링하고 디코딩하는 고처리량 gRPC firehose입니다. Parsed Streams는 서버에서 필터링하고 디코딩하는 WebSocket API입니다.

vs Parsed Events

Parsed Events는 역사적인 트랜잭션에 동일한 디코딩을 적용합니다: 서명을 구문 분석하거나 주소의 기록을 요청 시 REST와 GraphQL을 통해 페이지로 넘깁니다. Parsed Streams는 새 트랜잭션이 도착할 때 전송합니다.

지원되는 프로그램

Parsed Streams는 온체인 IDL의 3,600개 이상의 프로그램을 디코딩하며, SPL 토큰, 토큰-2022, 시스템 프로그램과 같은 코어 프로그램을 내장 디코더를 통해 지원합니다. 모든 프로그램 주소로 필터링할 수 있습니다. 서비스가 디코딩할 수 없는 명령어는 대신 원시 명령어 데이터로 스트리밍됩니다. 가장 많이 사용되는 몇 가지 디코딩된 프로그램:
프로그램이 보이지 않나요? 아마도 목록에 여전히 있을 수 있습니다. describeProgram 호출하여 해당 주소로 명령어, 이벤트 및 계정 역할을 확인하세요.

접근

화이트리스트에 등록된 프로젝트 ID만 폐쇄 베타 동안 연결할 수 있습니다. Helius 팀은 프로젝트가 화이트리스트에 등록되면 연결 엔드포인트를 공유합니다. 프로젝트의 API 키로 인증하며, 이는 api-key 쿼리 매개변수(또는 x-api-key 헤더)로 전달됩니다. 연결이 열릴 때 키가 확인됩니다: 누락되거나 유효하지 않거나 화이트리스트에 등록되지 않은 키는 HTTP 401로 거부되며, 연결 제한을 초과한 프로젝트는 HTTP 429를 받습니다.

시작하기

빠른 시작

연결하고, 첫 번째 필터를 전송하고, 알림을 읽습니다.

Jupiter 스왑 추적

프로그램 탐색을 사용하여 실시간 필터를 구축하고 구독합니다.

Pump.fun 민트 추적

모든 새 Pump.fun 토큰 배포를 기록하는 재연결 안전 리스너.

재연결 처리

연결 끊김을 감지하고, 백오프하고, 재구독하고, 누락된 슬롯을 백필합니다.