⚡ 신작: 엘리시움 Testnet QuicknodeTestnet HyperEVM 상의 Kinetiq EVM 체인 엔드포인트
[받기] endpointSOC 2 Type II 인증 · ISO 27001
shredTransactionSubscribe 소개: 실행 전 Solana 의 트랜잭션 가시성
Blazar의 shredTransactionSubscribe는 WebSocket JSON-RPC 구독 형태로, 실행 전 Solana 의 트랜잭션 가시성을 제공합니다. 필터, 알림 형식 및 예제 요청에 대해 알아보세요.

2026년 6월 30일 — 읽는 데 9분 소요

Solana 블록이 네트워크를 통해 하나의 거대한 객체로 전송되지 않기 때문에 속도가 빠른 편입니다. 검증자들은 블록 데이터를 ‘슈레드(shreds)’라고 하는 작은 조각들로 분할하여, 블록이 완전히 재재생되기 전에 이를 전송합니다. 이는 일반적인 RPC 구독이 어떤 실행 데이터도 표시하기 전에 이루어집니다.
Quicknode 의 블라자르(Blazar) Solana 웹소켓 엔진에는 이제 다음이 포함됩니다. shredTransactionSubscribe. 이 기능은 해당 초기 신호를 개발자가 사용할 수 있는 WebSocket 메서드로 변환합니다. 또한 실행 전에, 샤드 및 엔트리 수집 과정에서 감지된 트랜잭션을 구독합니다.
shredTransactionSubscribe는 베타 버전이며, 이 게시물에 설명된 내용은 변경될 수 있습니다.
‘슈레드(shred)’는 ‘ Solana ’ 블록의 고정된 크기의 일부로, 블록이 생성되는 동안 네트워크를 통해 전송됩니다. 슈레드를 읽으면, 실행 후 RPC 메서드를 통해 완성된 블록을 조회하기 전에, 네트워크를 통과하는 거래 데이터를 확인할 수 있습니다.
조각들은 항목으로 재구성될 수 있습니다. 항목에는 다음이 포함됩니다. Solana 버전 관리된 트랜잭션 값: 서명, 메시지, 정적 계정 키, 지시문, 최근 블록 해시, 그리고 v0 트랜잭션에 대한 주소 조회 테이블 참조.
핵심적인 차이점은 시기입니다:
파일 조각화/입력 데이터 가져오기는 재실행/실행 단계보다 먼저 이루어집니다.
일반 트랜잭션 메타데이터는 실행이 완료된 후에만 확인할 수 있습니다.
Shred-time 데이터는 실행 데이터보다 먼저 도착할 수 있습니다. 하지만 이 데이터에는 메타, 오류, 로그, 토큰 잔액, 연산 단위 또는 내부 명령어와 같은 실행 결과는 포함될 수 없습니다.
원시 분할 데이터를 다룰 때 대부분의 개발자가 쉽게 메울 수 없는 두 가지 한계가 있습니다.
먼저, 도구 관련 사항입니다. 원시 SubscribeEntries 스트림은 gRPC, bincode 디코딩, 트랜잭션 파싱, 주소 조회 테이블(Address Lookup Table) 해결 과정을 거쳐야 합니다. 또한 실행 전에 어떤 정보가 알려져 있고 어떤 정보가 알려지지 않았는지 정확히 파악해야 합니다. 대부분의 앱 개발자는 단순히 WebSocket JSON-RPC 구독 기능만 원합니다.
둘째, 계정 필터링에는 조회 테이블이 필요합니다. 대부분의 Solana v0 트랜잭션은 주소 조회 테이블(ALT)을 사용합니다. ALT를 로컬에서 해결하지 않으면, 계정 필터가 조회 테이블을 통해서만 해당 계정에 접근하는 트랜잭션을 놓칠 수 있습니다. Blazar는 계정을 기준으로 필터링할 때 정적 키와 로드된 ALT 주소를 모두 해결합니다.
Blazar는 shred-streaming 인프라를 통해 Solana 의 트랜잭션 피드를 조기에 수신합니다. Blazar는 이 저수준 네트워크 신호를 표준 WebSocket JSON-RPC 구독으로 변환합니다. Blazar는 일반적인 실행 후 RPC 메서드보다 먼저 트랜잭션을 감지할 수 있습니다. 그런 다음 구조화된 shredTransactionNotification 거래 본문, 슬롯, 서명, 버전 및 확인된 로드된 주소(사용 가능한 경우)를 포함합니다.
스트림을 초기 단계의 ‘최선 노력(best-effort)’ 신호로 간주하십시오. 알림은 대략 업스트림 순서대로 도착하지만, 엄격한 순서 보장은 없습니다. 동일한 트랜잭션이 가끔 두 번 이상 나타날 수 있으므로, 정확히 한 번만 전달되어야 하는 경우 서명을 기준으로 중복 제거를 수행하십시오.
Blazar는 또한 데이터를 전송하기 전에 Shred에서 파생된 데이터를 보강합니다. 원시 신호를 그대로 전달하여 모든 클라이언트가 동일한 작업을 수행하게 하는 대신, 트랜잭션 형식을 표준화하고 가능한 경우 조회 테이블 주소를 해결합니다. 이를 통해 구독자는 특수한 Solana 네트워킹 인프라를 운영하거나 자체 Shred 파서를 구축하지 않고도 실행 전 계정에 대한 보다 포괄적인 정보를 확인할 수 있습니다.
‘Shred-time’ 가시성 기능은 ‘ Solana ’ 데이터 타임라인에 새로운, 더 이른 시점을 추가합니다:
트랜잭션 브로드캐스트 -> 샤드 감지 -> 항목 디코딩 -> 재실행/실행 -> 처리/확인/최종 확정된 RPC 데이터
대부분의 Solana 웹소켓 메서드는 실행 후 또는 유효성 검사기 상태가 변경된 시점에 작동합니다. shredTransactionSubscribe 항목이 디코딩되는 초기 단계를 보여줍니다.
그것은 ~을 대체하지 않습니다 transactionSubscribe. 이는 트랜잭션 의도를 가능한 한 빨리 파악해야 하는 워크플로우를 위해, 실행 전에 사용되는 초기 단계의 보조 도구입니다.
shredTransactionSubscribe는 실행 후 메서드로는 처리할 수 없는 사용 사례를 지원하며, 실행 전에 데이터를 제공함으로써 다른 사용 사례의 성능을 향상시킵니다.
트레이딩 시스템, DEX 분석 도구, 라우팅 엔진 및 시장 인프라는 거래가 실행되기 전에 이를 파악할 수 있습니다. 이를 통해 계좌의 압박 상황, 프로그램 거래 활동 및 유입 주문 flow 을 기존의 거래 후 분석 streams 보다 더 빨리 파악할 수 있습니다.
클라이언트는 주소 조회 테이블을 통해 등록된 계정을 포함하여 특정 계정과 관련된 트랜잭션을 구독할 수 있습니다. 이 기능을 활용하여 주목받는 계정, 풀, 토큰 계정, 볼트 또는 프로토콜 상태 계정을 모니터링할 수 있습니다.
다음과 함께 즐겨보세요 서명 및 구독 그리고 enableReceivedNotification: true 실행 전에 서명이 처음 확인된 시점을 확인하고, 이후 해당 서명이 성공했는지 실패했는지를 파악하기 위함입니다.
지원 및 인프라 팀은 다음과 같은 질문에 답변할 수 있습니다. “트랜잭션이 실행되기 전에 감지되었는가?”, “나중에 처리되었는가?”, “전혀 감지되지 않았는가?”, “룩업 테이블 주소를 사용했는가?” 등입니다. 이를 통해 트랜잭션 수명 주기 관련 문제를 더 쉽게 진단할 수 있습니다.
Blazar는 실행 전 투표 알림과 새 슬롯 신호에 대해 동일한 shred 및 entry 수집 경로를 사용합니다. shredTransactionSubscribe는 동일한 초기 데이터 소스를 기반으로 구축된 트랜잭션별 메서드입니다.
shredTransactionSubscribe는 shred 및 엔트리 수집 단계에서 발생하는 트랜잭션 실행 전 알림을 수신합니다. 이는 의도적으로 transactionSubscribe의 구성 옵션으로 제공되지 않습니다. 데이터가 서로 다른 단계에서 제공되므로 페이로드도 다릅니다.
이 함수는 첫 번째이자 유일한 매개변수로 하나의 선택적 필터 객체를 받아들입니다.
{
"jsonrpc": "2.0",
"id": 1,
"method": "shredTransactionSubscribe",
"params": [
{
"vote": false,
"signature": "optional-signature",
"accounts": {
"include": ["optional-pubkey"],
"exclude": ["optional-pubkey"],
"required": ["optional-pubkey"]
}
}
]
}모든 항목은 선택 사항입니다. 각 계정 목록(포함, 제외, 필수)에는 최대 50,000개의 항목을 입력할 수 있습니다.
투표true: 단순 투표 거래만 허용.
false: 단순 투표 거래를 제외합니다.
생략: 투표 거래와 비투표 거래를 모두 포함합니다.
투표 필터는 Agave의 “단순 투표” 트랜잭션 분류 방식을 사용합니다. 이는 “Vote 프로그램 명령어가 포함된 모든 트랜잭션”을 의미하는 것은 아닙니다. 투표 명령어가 포함된 혼합 트랜잭션은 단순 투표로 분류되지 않습니다. voteSubscribe는 별도의 메서드로, 자체적인 가십 투표(gossip-vote) 구문 분석 기능을 갖추고 있습니다.
서명지정된 서명이 있는 트랜잭션만 반환합니다.
accounts.include상장된 계정 중 적어도 하나와 관련된 거래를 처리합니다.
정적 계정 키와 해결된 ALT 로드 주소를 매칭합니다.
accounts.exclude나열된 계좌 중 하나라도 관련된 트랜잭션을 삭제합니다.
정적 계정 키와 해결된 ALT 로드 주소를 매칭합니다.
필수 계정나열된 모든 계좌와 관련된 거래만 반환합니다.
정적 계정 키와 해결된 ALT 로드 주소를 매칭합니다.
commitment, encoding, transactionDetails, showRewards, maxSupportedTransactionVersion 및 failed는 지원되지 않습니다. Shred에서 파생된 트랜잭션은 실행 전 JSON 페이로드이므로, 실행 결과나 커밋 수준이 없습니다.
{
"jsonrpc": "2.0",
"id": 11,
"method": "shredTransactionSubscribe",
"params": [
{ "vote": false }
]
}{
"jsonrpc": "2.0",
"id": 12,
"method": "shredTransactionSubscribe",
"params": [
{
"signature": "5VERv8NMvzbJMEkV8xnqLkEaWRtSz9CosKDYjCJjBRnbJLgp8uirBgmQpjKhoR4tjF3ZpRzrFmBV6UjKdiSZkQUW"
}
]
}{
"jsonrpc": "2.0",
"id": 13,
"method": "shredTransactionSubscribe",
"params": [
{
"accounts": {
"include": ["TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"]
}
}
]
}{
"jsonrpc": "2.0",
"id": 14,
"method": "shredTransactionSubscribe",
"params": [
{
"accounts": {
"required": [
"AccountA11111111111111111111111111111111111",
"AccountB22222222222222222222222222222222222"
],
"exclude": [
"AccountC33333333333333333333333333333333333"
]
}
}
]
}성공 시, 서버는 구독 ID를 반환합니다. 이 ID를 사용하여 구독을 취소하십시오.
{
"jsonrpc": "2.0",
"result": 123,
"id": 14
}{
"jsonrpc": "2.0",
"id": 15,
"method": "shredTransactionUnsubscribe",
"params": [123]
}알림은 표준 JSON-RPC PubSub 엔벨로프를 사용하지만, 내부 트랜잭션 값은 실행 전 데이터입니다.
{
"jsonrpc": "2.0",
"method": "shredTransactionNotification",
"params": {
"result": {
"context": { "slot": 418437508 },
"value": {
"slot": 418437508,
"signature": "5VERv8NMvzbJMEkV8xnqLkEaWRtSz9CosKDYjCJjBRnbJLgp8uirBgmQpjKhoR4tjF3ZpRzrFmBV6UjKdiSZkQUW",
"transaction": {
"signatures": [
"5VERv8NMvzbJMEkV8xnqLkEaWRtSz9CosKDYjCJjBRnbJLgp8uirBgmQpjKhoR4tjF3ZpRzrFmBV6UjKdiSZkQUW"
],
"message": {
"header": {
"numRequiredSignatures": 1,
"numReadonlySignedAccounts": 0,
"numReadonlyUnsignedAccounts": 2
},
"accountKeys": [
"FeePayer11111111111111111111111111111111111",
"Program111111111111111111111111111111111111"
],
"recentBlockhash": "Eit7...",
"instructions": [
{
"programIdIndex": 1,
"accounts": [0],
"data": "3Bxs4NN8M2Yn4TLb",
"stackHeight": 1
}
]
}
},
"version": "legacy"
}
},
"subscription": 123
}
}v0 트랜잭션의 경우, `transaction.message.addressTableLookups`는 조회 테이블 참조를 보존하고, `value.loadedAddresses`는 해결된 공개 키를 포함합니다.
{
"jsonrpc": "2.0",
"method": "shredTransactionNotification",
"params": {
"result": {
"context": { "slot": 418437509 },
"value": {
"slot": 418437509,
"signature": "7rYg...",
"transaction": {
"signatures": ["7rYg..."],
"message": {
"header": {
"numRequiredSignatures": 1,
"numReadonlySignedAccounts": 0,
"numReadonlyUnsignedAccounts": 1
},
"accountKeys": [
"FeePayer11111111111111111111111111111111111",
"Program111111111111111111111111111111111111"
],
"recentBlockhash": "AbCd...",
"instructions": [
{
"programIdIndex": 1,
"accounts": [0, 2, 3],
"data": "3Bxs4NN8M2Yn4TLb",
"stackHeight": 1
}
],
"addressTableLookups": [
{
"accountKey": "LookupTab1e11111111111111111111111111111111",
"writableIndexes": [12],
"readonlyIndexes": [3]
}
]
}
},
"version": 0,
"loadedAddresses": {
"writable": ["Writab1eLoaded11111111111111111111111111111"],
"readonly": ["Readon1yLoaded11111111111111111111111111111"]
}
}
},
"subscription": 124
}
}Blazar가 캐시에서 하나 이상의 조회 테이블을 찾아낼 수 없는 경우, v0 알림이 설정됩니다:
"loadedAddresses": null
시작 시 워밍업 및 라이브 Solana gRPC 업데이트가 이루어지더라도, 방금 확장된 테이블은 캐시와 경합을 일으킬 수 있습니다. 이 경우 Blazar는 로드된 주소가 불완전한 v0 트랜잭션에 대해 loadedAddresses: null을 설정하여 알림이 정확하게 유지되도록 합니다.
기존 트랜잭션에서는 loadedAddresses가 생략됩니다.
이는 실행 전 데이터이므로, 알림에는 다음 내용이 포함되지 않습니다:
메타
err
로그
내부 지침
개시 잔액/마감 잔액
토큰 잔액 (처리 전/처리 후)
소모된 연산 유닛
데이터 반환
보상
블록 내의 최종 트랜잭션 인덱스
shredTransactionSubscribe는 실행 결과 메서드가 아닌 초기 관찰 메서드입니다.
Quicknode 대시보드에 로그인하세요.
다음 중 하나를 선택하세요 Solana endpoint.
WSS endpoint URL(wss://your-endpoint-name.solana-mainnet.quiknode.pro/abc123)을 복사한 다음, 기존 WebSocket 클라이언트 코드를 사용하여 연결하세요.
선택적 필터를 사용하여 shredTransactionSubscribe 요청을 보내려면 위의 ‘요청 예시’를 참조하십시오.
shredTransactionNotification 메시지가 도착하는 대로 처리합니다.
Solana 의 WebSockets를 처음 사용하시나요? ‘ Solana 에서 WebSocket 구독 생성 방법 ’ 가이드에서 필요한 모든 내용을 확인할 수 있습니다.
WebSockets를 넘어 더 낮은 지연 시간을 가진 Solana 스트리밍이 필요한 팀을 위해, Quicknode 의 Solana gRPC 제품은 동일한 endpoint 생태계 내에서 Yellowstone 와 호환되는 실시간 streams 기능을 제공합니다.
transactionSubscribe는 실행 후 단계이며 트랜잭션 상태 메타데이터를 포함합니다. 반면 shredTransactionSubscribe는 실행 전 단계이며 로그, 메타데이터, 오류, 잔액 또는 컴퓨트 유닛을 포함하지 않습니다.
네. 조각(shreds)을 통해 관찰된 트랜잭션은 나중에 실행에 실패하거나, 만료되거나, 최종 원장에 반영되지 않을 수 있습니다. 이 방법은 최종성 신호가 아닌 초기 관찰 신호입니다.
네. 계정 필터는 정적 계정 키와 Blazar의 로컬 조회 테이블 캐시에서 해결된 ALT 로드 주소를 모두 일치시킵니다.
비활성화된 ALT는 SlotHashes 재사용 대기 시간 동안에도 계속 사용할 수 있습니다. Blazar는 해당 재사용 대기 시간 동안 비활성화된 테이블을 해결하며, 명백히 만료된 테이블은 해결되지 않은 것으로 처리합니다.
거래 실행 결과보다 초기 거래 의도가 더 중요한 경우에 사용하십시오: 저지연 분석, 계좌 활동 모니터링, 거래 라이프사이클 진단, 거래 인프라, 실행 전 가시성 확보 등.
최종 거래 상태, 로그, 잔액, 토큰 잔액 변동, 컴퓨트 유닛, 보상 또는 확정된 블록 구성 정보를 확인해야 하는 경우에는 이 기능을 사용하지 마십시오. 해당 정보는 실행 후 RPC/WebSocket 메서드를 사용하여 확인하십시오.
지금까지는 실행 전 트랜잭션 데이터를 처리하기 위해 맞춤형 Solana 네트워킹 인프라( gRPC 클라이언트, bincode 디코딩, shred 파싱 파이프라인 등)가 필요했습니다. Blazar의 shredTransactionSubscribe는 이러한 필요성을 없애줍니다. 이 기능은 실행 전 트랜잭션 의도를 표준 WebSocket JSON-RPC 구독 형태로 전달합니다.
이 기능은 현재 모든 Quicknode Blazar WebSocket endpoint 에서 이용 가능합니다. 시작하려면 Quicknode 대시보드에 로그인하거나, 아직 계정이 없다면 Quicknode 에서 계정을 생성하세요.
shredTransactionSubscribe는 현재 베타 버전으로 운영 중이므로, 여러분의 피드백이나 제안 사항을 보내주시기 바랍니다. solana@quicknode.com으로 이메일을 보내주시거나 Discord를 통해 연락해 주시기 바랍니다.
2017년에 설립된 Quicknode 은 개발자와 기업을 위해 엔터프라이즈급 블록체인 인프라를 제공합니다. 99.99%의 가동률과 76개 이상의 체인을 지원함으로써, 팀들은 타협 없이 온체인 애플리케이션을 구축하고 확장할 수 있습니다.
최신 엔지니어링 인사이트, 제품 업데이트, 웹3 뉴스를 여러분의 이메일로 바로 받아보세요.