Zinder: 자체 프로토콜 기반 인덱서
lightwalletd 호환 런타임을 제공하면서 ingest·wallet·explorer 컴포넌트를 따로 배포할 수 있는 Zcash 인덱서 Zinder를 공개했습니다.
Zinder는 자체 쿼리 프로토콜을 갖춘 Zcash 인덱서로, lightwalletd 호환 런타임을 모듈로 제공하고 수집, 지갑, 탐색기 구성 요소를 따로 배포할 수 있다. 작성자는 Zcash 제품을 끝에서 끝까지 동작시키는 과정에서 기존 인덱서가 걸림돌이 되어 이를 만들게 되었다고 설명한다. 기존 인덱서가 lightwalletd를 모방하거나 특정 지갑 SDK 구조에 맞춰져 소비자 쪽 프로토콜이 내부 아키텍처가 된다는 점이 문제였다는 것이다.
설계의 중심은 자체 gRPC 계약인 WalletQuery와 이를 제공하는 zinder-query 런타임, 그 위의 Rust SDK zinder-client다. 안정적인 이유 코드를 가진 타입 오류, 명시적 기능 탐색, 재개 가능한 체인 이벤트를 제공하며, 읽기는 단일 ChainEpoch에 고정되어 서로 다른 팁의 결과가 한 응답에 섞이지 않는다. lightwalletd 호환은 별도 런타임 zinder-compat-lightwalletd가 맡고, CI에서 참조 구현인 Go lightwalletd와 응답을 비교한다.
구성 요소는 쓰기 주체가 분리된다. zinder-ingest만 정본 체인 상태를 쓰고, zinder-projector만 지갑 투영 상태를 쓰며, 서빙 런타임은 저장소에 쓰지 않는다. 선택적 탐색기 계층에는 CipherScan 호환 REST 어댑터가 있다. 각 저장소에는 주 쓰기 프로세스가 하나뿐이고 읽기 프로세스는 RocksDB secondary를 따로 열기 때문에, 부하가 큰 읽기가 쓰기를 막지 못한다. 현재 지원 토폴로지는 단일 호스트 rocksdb-single-host다.
Zinder는 Zebra에서 JSON-RPC와 가능하면 인덱서 gRPC 스트림으로 데이터를 읽으며, Ironwood(NU6.3) 디코딩과 Zebra 6.2.2 대상 regtest 및 lightwalletd 호환성을 검증했다. 테스트넷에서 Zallet은 네이티브 WalletQuery로, ZODL은 호환 엔드포인트로 같은 배포에 연결해 복원, 동기화, 전송, 멤풀 등을 확인했다. 네이티브 Zallet 백엔드는 zcash/zallet#701 PR로 진행 중이며, 실제 지갑 연동 중 발견된 버그는 librustzcash와 incrementalmerkletree에 병합되었다.
운영 면에서는 환경 변수 설정, 헬스·레디니스·메트릭 엔드포인트, RocksDB 메모리 상한, amd64·arm64 컨테이너 이미지, SLSA 출처 증명과 SBOM을 제공한다. 단일 호스트 한계를 넘기 위해 PostgreSQL 토폴로지를 목표로 하지만 아직 배포 가능한 백엔드는 없다. 작성자는 지갑 팀과 운영자, 탐색기 개발자의 의견을 구하고 있으며, 알파 단계라 프로덕션 사용에는 주의가 필요하다고 경고한다. 현재 Zcash Foundation이 개발을 후원한다.
한국어 요약은 원문을 바탕으로 정리한 것으로, 정확한 내용은 원문을 확인하세요.