Skip to main content
LaserStream은 Geyser 노드와 동일한 전송 보장을 제공합니다. 이 가이드는 LaserStream 스트림의 메시지 전송 동작에서 기대할 수 있는 내용을 다룹니다.
이 보장은 표준 구독 (트랜잭션, 계정, 슬롯, 블록)에 적용됩니다. 전처리된 트랜잭션 (Shred Delivery의 일부)은 별도의 최선의 노력 기반 전송 보장을 따릅니다.

정확히 한 번만 전송

LaserStream은 정확히 한 번만 전송을 보장합니다. 각 메시지는 스트림에 정확히 한 번씩 전달되며, 중복 메시지를 받거나 메시지가 누락되지 않습니다. LaserStream은 여러 Solana 노드에 동시에 연결하고, 들어오는 데이터를 중복 제거한 후 스트림으로 전달하여 이를 구현합니다. 이 다중 노드 아키텍처는 단일 실패 지점을 제거하여 전송 정확도를 희생하지 않고 최대 가동 시간을 보장합니다.

커밋 수준에 따른 메시지 순서

전송 순서는 메시지의 커밋 수준에 따라 달라집니다.

확인됨 및 확정됨

모든 확인된확정된 메시지는 순서대로 전달됩니다. 이러한 커밋 수준은 온체인 상태의 일관되고 순차적인 보기를 제공합니다.

처리됨

모든 처리된 메시지는 포크가 없는 경우 오름차순 슬롯 순서로 전송됩니다. 포크가 발생하면, 네트워크가 기준 체인으로 재조직되는 동안 슬롯 순서가 일시적으로 변동될 수 있습니다. 포크가 해결되면, 오름차순 순서가 재개됩니다.
처리된 커밋 수준에서는 나중에 처리된 슬롯이 건너뛰어지거나 포크될 가능성이 있습니다. Geyser는 포크된 업데이트에 대한 명시적인 롤백 알림을 전송하지 않습니다. 애플리케이션이 처리된 수준의 데이터를 소비하는 경우, 일부 업데이트가 최종적으로 포기된 슬롯에 속할 가능성을 고려해야 합니다. 확실성이 필요한 애플리케이션은 확인됨 또는 확정됨 커밋 수준을 사용하세요.

슬롯 내에서의 순서

단일 슬롯 내에서 LaserStream은 계정 업데이트 및 트랜잭션을 다음의 보장으로 제공합니다.

트랜잭션 전 계정 업데이트

각 트랜잭션에 대해 야기된 계정 업데이터는 해당 트랜잭션 자체 전에 전달됩니다.

트랜잭션 간 순서

LaserStream은 Agave의 Geyser 플러그인과 동일한 순서를 유지합니다. 다른 트랜잭션의 업데이트가 결정론적 순서로 도착하는지는 쓰기 잠금에 따라 달라집니다.
  • 동일한 쓰기 잠금 (예: 동일한 Raydium 풀에서의 세 가지 거래): 항상 결정적입니다. Agave는 동일한 계정에 쓰는 경우 이들을 순차적으로 실행합니다.
  • 다른 쓰기 잠금 (예: 두 개의 관련 없는 트랜잭션): 반드시 결정적이지는 않습니다. Agave는 이를 병렬로 실행할 수 있으며, 스트림 내에서의 업데이트가 섞일 수 있습니다.
완전한 결정적 순서를 재구성하려면, 트랜잭션 데이터의 블록/트랜잭션 인덱스를 사용하세요.

쓰기 버전 표준화

LaserStream은 다중 노드 아키텍처 전반에서 쓰기 버전을 표준화합니다. 로컬 노드마다 쓰기 버전이 다를 수 있는 원시 Geyser나 Yellowstone과 달리, LaserStream은 처리 수준의 계정 업데이트에 대한 순서를 제공하는 일관된 쓰기 버전을 제공합니다.
일시적 예외: 크기가 512KB를 초과하는 계정은 성능상의 이유로 Geyser 플러그인에서 현재 버퍼링되어 있으며, 해당 계정의 결정적 순서에 영향을 미칠 수 있습니다. 이 제한은 곧 제거될 예정입니다.

슬롯 알림

처리된 슬롯 알림은 해당 슬롯의 모든 메시지가 전달된 후 도착합니다. 즉, 처리된 슬롯 알림을 받았을 때 해당 슬롯과 관련된 모든 트랜잭션 및 계정 업데이트 데이터가 이미 스트림으로 전송되었음을 확신할 수 있습니다. 슬롯 알림을 슬롯에 대한 버퍼링된 데이터를 플러시하거나 해제하는 신호로 사용할 수 있습니다.

연결 해제 시 데이터 연속성

LaserStream은 최근 슬롯 데이터의 버퍼를 유지하여 최대 24시간 (~216,000 슬롯)의 과거 데이터를 역사적 재생할 수 있습니다. 애플리케이션이 연결을 끊으면 마지막으로 처리된 슬롯에서 다시 연결하여 데이터를 놓치지 않고 재개할 수 있습니다. LaserStream SDK 클라이언트를 사용하는 경우, 이 복구는 자동으로 처리됩니다. 클라이언트는 슬롯 번호로 스트리밍 위치를 추적하고, 원활하게 다시 연결됩니다. 수동 재연결 로직은 필요하지 않습니다.

커밋 수준 참조