공개 베타.
preprocessedSubscribe는 모든 유료 요금제에서 이용 가능하며, 메시지당 0.1 크레디트(전송된 트랜잭션당 한 메시지)로 측정됩니다.preprocessedSubscribe란 무엇인가요?
preprocessedSubscribe는 사전 처리된 트랜잭션을 스트리밍하는 Helius WebSocket 메서드로, processed 커밋 수준에 도달하기 전에 전달되는 사전 실행 Solana 트랜잭션입니다. Helius는 여러 사전 실행 소스를 집계합니다 — 주로 검증자에 도달할 때 직접 디코딩된 슈레드와, 사전 확인 신호가 보완되어 — 한 번의 중복 제거된 간소화된 이진 메시지 스트림으로 제공합니다. 귀하의 측에서 슈레드를 재구성하는 인프라가 필요 없습니다.
사전확인 신호에서 소싱된 트랜잭션은 전용 Preconfirmations 제품에서보다 늦게 이 피드에 도착하며, 이 제품이 가장 빠른 접근을 제공합니다.
이것은 이전의 사전 처리된 LaserStream (gRPC) 제품의 후속 제품입니다. 현재 gRPC를 통해 사전 처리된 트랜잭션을 사용 중이라면 이 방법으로 전환하십시오. 동일한 클래스의 데이터를 더 낮은 지연 시간으로 일반 WebSocket 연결을 통해 전달하며, gRPC 전달은 더 이상 지원되지 않을 것입니다.
엔드포인트
preprocessedSubscribe는 Helius Gatekeeper 엔드포인트인 wss://beta.helius-rpc.com에서 제공됩니다. API 키를 쿼리 매개변수로 인증하세요:
구독
preprocessedSubscribe 메서드를 사용하여 JSON-RPC 요청을 전송하세요. params는 계정 필터를 포함하며 필수적입니다 — accountInclude와 accountRequired는 그 사이에 최소한 하나의 계정을 지정해야 합니다 (참고: Filtering):
필터링
모든 구독은params의 계정 필터에 의해 범위가 지정됩니다. 필터링은 서버 측에서 이루어지며, 이를 통해 원하시는 트랜잭션만을 수신합니다:
필터 규칙:
- 세 가지 필터는 AND 로직으로 결합됩니다.
accountInclude와accountRequired는 그 사이에 최소한 하나의 계정을 지정해야 합니다 — 비필터링 전체 스트림은 없습니다.- 계정은 base58로 인코딩된 공개 키입니다. 각 목록은 최대 5,000개의 주소를 허용합니다.
주소 조회 테이블 (ALT) 해석
계정 필터는 트랜잭션의 정적인 계정 키를 넘어 매칭됩니다 — Helius는 서버 측에서 주소 조회 테이블을 해석하므로accountInclude, accountExclude, accountRequired도 ALT를 통해 로드되는 계정을 매칭합니다. 계정의 공개 키만 전달하면 되며, ALT 매핑을 유지하거나 테이블을 직접 해석할 필요는 없습니다.
알림 페이로드
알림은 바이너리 WebSocket 프레임으로 전달됩니다 (JSON 아님). 각 프레임은 압축된 바이트 레이아웃의 단일 트랜잭션을 포함합니다:
고정된 73바이트 접두사를 순서대로 읽은 다음, 나머지 바이트를 디코딩하여 명령어, 계정 및 주소 테이블 조회를 읽습니다. 서명은 접두사에 포함되어 있어 전체 거래 본문을 디코딩하지 않고 거래를 식별하고 중복 제거할 수 있습니다.
항상
version 바이트를 먼저 읽고 확인하세요. Helius가 페이로드 형식을 업데이트해야 하는 경우 버전이 증가합니다 — 이를 통해 스키마 변경이 있어도 디코더가 계속해서 작동하도록 브랜치를 나누세요.
거래 디코딩
거래 바이트는 네트워크에서 관찰된 대로 정확히 전달되며, 거래 버전에 대한 표준 와이어 인코딩 방식으로 전달됩니다. 레거시 및 v0 거래는bincode가 생성하는 서명 우선 레이아웃을 사용합니다. 거래 v1 (SIMD-0385)는 메시지 우선 레이아웃으로 서명이 끝에 있어 bincode가 v1 페이로드에서 실패합니다. 모든 버전을 처리하는 디코더를 사용하십시오:
- Rust:
agave-transaction-view는 중간 복사 없이 레거시, v0 및 v1 트랜잭션을 직접 파싱합니다. 이 옵션이 권장됩니다. 현재 Solana SDK에서 사용하는 bincode 호환 직렬화 도구인wincode도 v1을VersionedTransaction로 디코드합니다. - JavaScript / TypeScript: 라이브러리 버전이 트랜잭션 v1을 지원하는지 확인하십시오. 구버전의
VersionedTransaction.deserialize구현은 레거시와 v0만 처리합니다.@solana/kit8.0+ 또는@solana/web3.jsv3을 사용하세요. 트랜잭션 v1 지원을 참조하세요.
예시
어떤 데이터가 제공됩니까?
각 알림에는 서명된 거래, 첫 번째 서명, 슬롯이 포함됩니다. 전달은 실행 전에 이루어지므로 스트림에는 포함되지 않습니다:- 실행 상태 또는 오류
- 전후 잔액 또는 토큰 잔액 변경
- 로그 메시지 또는 내부 명령어
- 소모된 계산 단위
processed 커밋에서 사용하십시오.
역압
스트림은 느린 소비자에 대해 무기한 버퍼링하지 않습니다. 클라이언트가 너무 느리게 읽고 서버 쪽에서 4,000 메시지 이상이 백업될 경우, Helius는 연결을 종료합니다 — 깨끗한 WebSocket 종료 프레임을 받게 됩니다. 프레임이 도착하는 것보다 빠르게 소모하세요: 거래 디코딩 및 전략 로직과 같은 무거운 작업을 수신 루프에서 제거하고, 연결이 끊어진 후 다시 연결하고 구독을 취소하십시오.전달 보장
전달은 최선의 노력을 다하지만, 보장되지 않으며, 역사적 재생은 없습니다. 클라이언트는 다음을 수행해야 합니다:- 연결이 끊어진 후 다시 연결하고 구독하십시오.
- 거래 서명으로 중복 제거하십시오.
- 슬롯을 관찰로 처리하고, 확정성이 아니라 관찰로 처리하십시오.
- 실행 결과가 중요한 경우 처리되거나 확인된 스트림과 조정하십시오.
가격
preprocessedSubscribe는 모든 유료 플랜에서 사용할 수 있으며 0.1 크레딧으로 메시지당 측정됩니다 — 전달된 거래당 하나의 메시지로 플랜에서 청구됩니다. 자세한 내용은 크레딧을 참조하십시오.
관련 항목
Preconfirmations
트랜잭션이 슈레드가 되기 전에 스트리밍되는 가장 초기의 트랜잭션 신호입니다.
Raw Shreds (UDP)
UDP를 통한 처리되지 않은 슈레드 패킷입니다. 귀하가 슈레드 해제를 구현합니다.
transactionSubscribe
풍부한 필터링 및 실행 메타데이터를 포함한 포스트 실행 트랜잭션입니다.