preconfSubscribe란 무엇인가요?
preconfSubscribe는 사전 확인을 스트리밍하는 Helius WebSocket 메서드입니다 — 트랜잭션이 항목으로 수집되고 잘게 나뉘기 전에 전달됩니다. 이는 Helius에서 제공하는 가장 낮은 대기 시간의 트랜잭션 신호입니다. 하나의 구독은 리더가 트랜잭션을 실행할 때 즉시 방출되어 실행 상태를 전달하는 Helius 사전 확인과, 트랜잭션 실행을 약속할 때 검증자가 방출하는 Jito의 블록 어셈블리 마켓플레이스 클라이언트를 실행하는 검증자에게서 나오는 BAM 사전 확인을 모두 제공합니다. 접근하려면 Professional 요금제 이상이 필요합니다 — 가격을 참조하세요.
스트림은 연속적이지 않습니다. 커버리지는 Helius로 전달되거나 BAM을 실행하는 지분의 비율에 따라 확장되므로 메시지가 없는 슬롯이 있을 수 있습니다 — 이러한 간격을 우아하게 처리하세요. Coverage를 참조하세요.
preconfSubscribe는 mainnet.helius-rpc.com 대신 Helius Gatekeeper 엔드포인트인 wss://beta.helius-rpc.com에서 제공됩니다. API 키로 쿼리 매개변수를 통해 인증하십시오.
beta 호스트명은 Gatekeeper 롤아웃을 언급하며,
사전 확인의 성숙도를 나타내지 않습니다. 사전 확인은 Gatekeeper 엔드포인트에서 처음
시작됩니다; Helius가 트래픽을 Gatekeeper로 마이그레이션하면서 표준 엔드포인트가 될 것입니다.구독
preconfSubscribe 메서드로 JSON-RPC 요청을 보냅니다. 서버는 구독 ID로 응답한 후 각 트랜잭션에 대한 알림을 스트리밍합니다. 일치하는 트랜잭션만 받으려면 선택적 필터를 첫 번째 params 요소로 전달하세요; params를 생략하면 Helius와 BAM의 전체 스트림을 수신합니다.
구독 응답
result를 저장하십시오 — 이는 구독 취소에 사용되는 구독 ID입니다. 이 확인 후, 알림은 바이너리 프레임으로 스트리밍됩니다 (아래 참조).
필터링
기본적으로preconfSubscribe는 두 소스의 모든 트랜잭션을 스트리밍합니다. 스트림을 좁히려면 필터 객체를 params의 첫 번째 요소로 전달하세요. 필터링은 서버 측에서 이루어지므로 관심 있는 트랜잭션에 대해서만 비용을 지불하고 수신하게 됩니다.
params가 없는 경우)는 두 소스의 모든 거래와 일치합니다.
필터 규칙:
- 모든 조건자는 AND로 결합되며
includeBam→failed→regionInclude→accountExclude→accountRequired→accountInclude순서로 평가됩니다. - 상태를 알 수 없는 사전 확인은
failed상태 필터를 무시하며, 소스, 리전 및 계정 필터와 일치하면 계속 전송됩니다. - 계정은 base58로 인코딩된 공개 키입니다. 잘못된 값을 사용하면 JSON-RPC 오류
-32602(잘못된 매개변수)가 반환됩니다. - 각 계정 목록은 최대 500개 항목으로 제한됩니다.
주소 조회 테이블 (ALT) 해결
계정 필터링은 거래의 정적 계정 키 이상을 일치시킵니다 — Helius는 서버 측에서 v0 주소 조회 테이블을 해결하여accountInclude, accountExclude, 및 accountRequired도 ALT를 통해 로드하는 계정을 일치시킵니다.
이는 거래가 터치하는 모든 계정에서, 해당 계정이 조회 테이블 뒤에만 나타날 때도 필터링할 수 있음을 의미합니다 — ALT 매핑을 유지하거나 테이블을 직접 해결할 필요가 없습니다. 계정의 공개 키를 전달하면 Helius가 필터가 적용되기 전에 해결을 처리합니다.
위치 필터링
특정 지역에서 시작된 거래만 수신하려면regionInclude를 사용하십시오. 하나 이상의 지역 코드를 전달하십시오; 거래의 원산 지역이 그 중 하나와 일치하면 거래가 통과합니다.
sgp 및 dal와 대응됩니다.
유효한 지역 코드:
regionInclude가 설정되면 지역 정보를 담지 않은 거래는 삭제됩니다. 인식되지 않는 지역 코드는 JSON-RPC 오류 -32602(잘못된 매개변수)를 반환합니다.알림 페이로드
알림은 바이너리 WebSocket 프레임으로 전달됩니다 (JSON 아님). Helius와 BAM 사전 확인은 동일한 레이아웃을 공유합니다. 각 프레임은 단일 트랜잭션을 포함하는 압축 바이트 레이아웃입니다:
페이로드에는 소스 필드가 없습니다. Helius 사전 확인에도 동일한 값이 포함될 수 있으므로
tx_index = 0에서 BAM을 출처로 추론하지 마세요.
두 소스를 구별하는 방법
소스 필드가 없기 때문에 임의의 메시지를 Helius 또는 BAM으로 라벨 할 수 없습니다.status 바이트는 일방적인 분류자를 제공합니다:
status가0또는1인 경우 — 메시지는 Helius 사전 확인이며 트랜잭션이 실행되었습니다. BAM은 이러한 값을 절대 보고하지 않습니다.status가2인 경우 — 소스가 모호합니다: BAM 사전 확인이거나, 실행 상태가 사용할 수 없는 Helius 사전 확인일 수 있습니다.
regionInclude는 페이로드 필드가 아닌 구독 필터이므로 메시지당 읽을 수 없습니다.
스트림의 모든 메시지가 동일한 종류의 증거를 포함하도록 하려면 includeBam: false를 설정하세요 — 그러면 리더 실행 시 방출되는 Helius 사전 확인만 남습니다. BAM 전용 필터는 없습니다.
사전 확인은 초기 신호일 뿐 보장하는 것은 아닙니다. 트랜잭션은 아직
온체인에 기록되지 않았으므로 제외될 수 있습니다. 또한 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 지원을 참조하세요.
중복 알림
Helius와 BAM 사전 확인은 소스별로 중복 제거되며, 소스 간에는 중복 제거되지 않습니다. 일부 트랜잭션은 두 경로를 통해 Helius에 도달하므로 동일한 서명을 두 번 수신할 수 있으며, 두 사본이 서로 다른 슬롯을 보고할 수도 있습니다. 클라이언트에서 서명을 기준으로 중복을 제거하고 트랜잭션에 의해 트리거되는 작업을 멱등성 있게 구현하여, 두 번째 알림이 동일한 작업을 다시 실행하지 않도록 하세요. 표준 커밋먼트 검사를 통해 실행 및 기록 여부를 확인하세요.예시
구독 취소
알림 수신을 중지하려면preconfSubscribe에서 반환된 구독 ID를 사용하여 preconfUnsubscribe를 호출하세요.
요금
Preconfirmations를 사용하려면 Professional 플랜 이상이 필요하며, 스트리밍된 트랜잭션당 메시지 하나를 기준으로 메시지당 10크레딧이 플랜에서 청구됩니다. 자세한 내용은 크레딧을 참조하세요. 고유한 서명이 아니라 메시지별로 요금이 청구됩니다. Helius와 BAM을 통해 모두 전달된 트랜잭션은 두 번 계산됩니다. Helius 사전 확인만 받으려면includeBam: false를 설정하세요.
Preconfirmations는 새로운 제품이며 요금은 변경될 수 있습니다.
관련 문서
Preconfirmations Overview
Preconfirmations의 정의와 검증자 파이프라인에서의 위치를 설명합니다.
transactionSubscribe
다양한 필터링을 사용하여 confirmed 커밋먼트 트랜잭션을 스트리밍합니다.
preconfSubscribe API reference
요청 매개변수, 필터 필드 및 바이너리 알림 레이아웃을 설명합니다.