accountSubscribe 및 programSubscribe WebSocket 메서드의 notifyOn 옵션을 사용하면 쓰기 잠금이 되었지만 기록되지 않은 계정의 업데이트를 구독에서 건너뛸 수 있습니다. 동일한 필터가 gRPC에서도 제공됩니다 — gRPC 버전은 notifyOn 필터링을 참조하세요.
문제: 쓰기 잠금이 중복 업데이트를 생성합니다
Solana에서 검증자는 거래가 계정을 쓰기 잠근 경우마다 계정 업데이트를 발생시킵니다 — 명령어가 실제로 계정에 기록되지 않아 그 램포트와 데이터가 변하지 않은 경우에도 그렇습니다. 바쁜 계정의 경우, 이는 새로운 정보를 전달하지 않고 대역폭을 소비하는 중복 “변경 사항 없음” 알림의 지속적인 스트림을 의미합니다.필터 모드
notifyOn는 두 가지 문자열 값 중 하나를 가질 수 있습니다:
알아두면 좋은 두 가지 세부 사항:
- 동일한 데이터를 기록해도 기록으로 간주되며 전달됩니다.
write는 잠금만 발생하는 접촉을 필터링하며, 동일한 바이트를 남기는 기록을 필터링하지 않습니다. 실제로 이러한 동일한 데이터 기록은 드물게 발생합니다 — 대부분의 경우 업데이트 중 5% 미만입니다. write가 제거하는 업데이트는 이미 받은 상태의 정확한 복제본입니다. 알림을 “이 계정이 거래에 의해 잠금되었습니다” 신호로 사용하는 경우 (예: 활동 추적),lock를 유지하십시오.
accountSubscribe에서 사용하기
구성 객체에 notifyOn를 추가합니다:
programSubscribe에서 사용하기
동일한 키가 programSubscribe 구성 객체에서 작동하여 프로그램이 소유하는 모든 계정에서 no-op 업데이트를 필터링합니다:
"write" (대소문자 구분 없음)만 옵트인합니다. 그 외의 경우 — 누락, 오타, 알 수 없는 토큰은 lock로 해결되므로, 실수가 발생해도 오류 없이 또는 데이터를 묵묵히 삭제하지 않고 모든 업데이트 경로를 유지합니다.
관련 항목
accountSubscribe
notifyOn를 포함한 전체 accountSubscribe 메서드 참조.programSubscribe
notifyOn를 포함한 전체 programSubscribe 메서드 참조.notifyOn 필터링 (gRPC)
LaserStream gRPC 계정 필터에 동일한 필터 적용.
How to Use accountSubscribe
WebSocket을 통한 계정 업데이트 스트리밍 가이드.