공개 베타. 사전 처리된 트랜잭션은 Helius의 Shred Delivery 제품군의 일부입니다. Professional 계획 또는 그 이상 구독자는 이용 가능하며 1MB 당 20 크레딧이 청구됩니다.평균적으로, 사전 처리된 트랜잭션은
processed 커밋 수준보다 약 8ms 더 빠르게 도착합니다. 실행 메타데이터의 비용이 발생합니다 (아래 절충점 참조).processed 커밋 수준보다 약 8ms 빠릅니다.
이 가이드는 언제 사전 처리된 트랜잭션을 사용할지, 어떤 데이터가 이용 가능한지, LaserStream SDK를 사용하여 어떻게 구독할지 설명합니다 (동일한 gRPC 연결을 통해 사전 처리된 트랜잭션도 제공합니다).
사전 처리된 트랜잭션의 라이프사이클 위치
Solana의 아키텍처에서, 트랜잭션은 완전히 처리되기 전에 여러 단계를 거칩니다:- 슈레드 수신 → 검증기가 트랜잭션 슈레드를 수신합니다 (데이터 조각). ← Helius의 **원본 슈레드 (UDP)**가 여기에 전달됩니다.
- 슈레드 디코딩 → 슈레드가 원본 트랜잭션으로 디코딩됩니다. ← 여기에서 사전 처리된 트랜잭션 사용 가능
- 트랜잭션 실행 → 트랜잭션이 런타임에 의해 실행됩니다.
- 메타데이터 생성 → 전/후 잔액, 로그, 오류 정보가 계산됩니다.
- 커밋 → 트랜잭션이 처리/확인/최종 상태에 도달합니다. ← LaserStream gRPC 및 **LaserStream WebSocket**이 여기에서 전달됩니다.
최선을 다한 전달 보장
사전 처리된 트랜잭션 전달은 최선을 다하며 보장되지 않습니다. 우리는 99.99% 전달률을 목표로 하지만, 다음과 같은 경우 거래가 손실될 수도 있습니다:- 인프라 업데이트 및 재배포
- 네트워크 문제나 검증기 연결 문제
- 슈레드 디코딩 또는 처리의 예외 케이스
어떤 데이터가 이용 가능한가요?
사전 처리된 트랜잭션은 완전한 트랜잭션 메시지를 포함하지만 실행 메타데이터는 포함하지 않습니다:이용 가능한 데이터
- ✅ 트랜잭션 서명 - 고유 트랜잭션 식별자
- ✅ 계정 키 - 트랜잭션에 참조된 모든 계정
- ✅ 명령어 - 완전한 명령어 데이터 및 프로그램 호출
- ✅ 최근 블록해시 - 트랜잭션 만료 참조
- ✅ 서명 - 모든 트랜잭션 서명
- ✅ 투표 트랜잭션 여부 - 이것이 투표 트랜잭션인지 여부
- ✅ 슬롯 번호 - 이 트랜잭션이 포함된 슬롯
누락된 데이터
- ❌ 트랜잭션 메타데이터 - 토큰 잔액 변경, 전/후 잔액, 트랜잭션 상태
- ❌ 트랜잭션 오류 - 트랜잭션 실패 여부를 알 수 없습니다
- ❌ 내부 명령어 - 크로스 프로그램 호출(CPI)은 포함되지 않음
- ❌ 로그 메시지 - 실행 중 생성된 프로그램 로그
- ❌ 소비된 컴퓨팅 유닛 - 실행 메트릭은 이용 불가
SDK 지원 및 버전 요구사항
사전 처리된 트랜잭션 구독은 모든 LaserStream SDK에서 지원됩니다:JavaScript/TypeScript
버전 0.2.8 이상
Rust
버전 0.1.5 이상
Go
버전 0.1.0 이상
구현 예제
JavaScript/TypeScript
JavaScript SDK는 자동 재연결 기능이 있는 전용subscribePreprocessed 함수를 제공합니다:
Rust
Rust SDK는 네이티브 성능을 제공합니다:Go
Go SDK는 관용적인 Go 인터페이스를 제공합니다:구독 구조 및 필터링
요청 구조
사전 처리된 구독 요청은 표준 구독과 유사한 구조를 따르지만, 세분화된 필터 집합을 가지고 있습니다:응답 구조
업데이트는 완전한 트랜잭션 메시지와 기본 메타데이터와 함께 도착합니다:transaction.transaction 필드는 다음을 포함한 완전한 Solana 트랜잭션 구조를 담고 있습니다:
- 메시지 - 계정 키, 명령어, 최근 블록해시
- 서명 - 모든 트랜잭션 서명
- 주소 테이블 조회 - 버전 트랜잭션용