Skip to main content

Midnight Indexer v4.3.3 release notes

For the complete documentation index, see llms.txt
  • Version: v4.3.3
  • Date: June 4, 2026
  • Paired node: 1.0.0
  • Paired ledger: 8.1.0

주요 변경 사항 요약

Midnight Indexer 4.3.3은 4.3.x 개발 라인의 patch 릴리스로, Midnight 1.1 번들에 포함되어 배포됩니다. GraphQL WebSocket subscription 쿼터를 추가하고, 진행 중인 API 필드를 표시하는 @beta directive를 도입하며, Block에 tree별 end index를 노출하고, nullifier 이벤트 타입에 lazy transaction 참조를 추가합니다. 또한 shielded nullifier 입력 검증을 강화하고, 새로 연결된 subscription에 dtime 업데이트를 전달하도록 dustGenerations subscription을 수정합니다.

이 릴리스는 노드 1.0.0, Ledger 8.1.0과 페어링됩니다. 노드 0.22.x를 운영 중이라면 이 릴리스가 아니라 4.0.x 유지보수 라인을 따라가세요.

4.0.x에서 업그레이드

4.0.x 라인에서 4.3.3으로 업그레이드하려면 indexer를 리셋하고 genesis부터 다시 인덱싱해야 합니다. mainnet/preprod 규모 기준 약 3~4일을 잡아 두세요. 4.3.x 라인 내부 업그레이드(4.3.2 → 4.3.3)는 바로 적용됩니다. 이미지 태그만 올리고 rolling-restart 하면 됩니다. additive migration 하나(003_block_tree_end_indexes / 004_block_tree_end_indexes)가 체인 리셋 없이 자동으로 실행됩니다.


대상 독자

이 릴리스 노트는 다음과 같은 경우에 유용합니다:

  • 노드 1.0.0 이상을 대상으로 Midnight Indexer를 운영하는 operator
  • Indexer GraphQL API를 대상으로 연동하는 DApp·지갑 개발자
  • dust subscription(dustGenerations, dustNullifierTransactions)을 사용하는 지갑 연동 개발자
  • indexer-api에 kubernetes probe를 구성하는 SRE

노드 0.22.x를 운영 중인 operator는 이 릴리스가 아니라 4.0.x 유지보수 라인을 따라가야 합니다.


업데이트 요약

  • GraphQL WebSocket에 connection별·client별 subscription 쿼터 추가 (#1104)
  • shielded nullifier transactions 입력 검증 강화 (#1126)
  • 진행 중인 API 필드를 위한 @beta GraphQL directive 도입 (#1186)
  • Block에 tree별 end index(zswapEndIndex, dustCommitmentEndIndex, dustGenerationEndIndex) 추가 (#1197)
  • dust nullifier byte 필드명에 LeBytes 접미사 추가, breaking change는 @beta 필드에 국한 (#1199)
  • DustNullifierTransactionShieldedNullifierTransaction에 lazy transaction 참조 추가 (#1208)
  • 새 subscription에 DustGenerationDtimeUpdate 항목을 전달하도록 dustGenerations subscription 수정 (#1166)

신규 기능

이번 릴리스에 도입된 새로운 기능의 상세 내용입니다.

GraphQL WebSocket subscription 쿼터

GraphQL WebSocket에 connection별·client별 subscription 한도를 추가합니다. 이제 하나의 connection이나 client가 동시 subscription을 무제한으로 열 수 없습니다. 무제한 subscription 관련 pen-test 발견 사항(HAL-02)에 대한 indexer 측 가드레일로, 단일 client가 유발할 수 있는 데이터베이스 부하를 제한합니다.

진행 중인 API 필드용 @beta GraphQL directive

아직 진행 중이며 안정성을 보장하지 않는 API 영역을 표시하는 @beta schema directive(FIELD_DEFINITIONOBJECT에 적용 가능)를 도입합니다. 이번 릴리스는 여러 dust·nullifier 필드에 @beta를 표기합니다. 사용자는 이런 필드가 major 버전 변경 없이도 바뀔 수 있다고 보아야 합니다.

Block의 tree별 end index

BlockzswapEndIndex@beta 필드인 dustCommitmentEndIndex, dustGenerationEndIndex를 추가합니다. 각 값은 해당 블록 시점에서 그 tree의 체인 first_free(exclusive)이며, 체인이 모든 트랜잭션을 적용한 뒤 기록됩니다. 값은 체인 전체에 걸쳐 단조 비감소(monotonic non-decreasing)입니다. 이를 통해 client는 별도 쿼리 없이 블록에서 직접 tree별 증가를 추적할 수 있습니다.

nullifier 이벤트 타입의 transaction 참조

DustNullifierTransactionShieldedNullifierTransactiontransaction: Transaction! 필드(@beta)를 추가하며, 기존 transaction DataLoader를 통해 lazy하게 resolve됩니다. DataLoader는 해당 필드가 선택될 때만 가져오므로, 요청하지 않는 사용자에게는 payload 비용이 없습니다. 이를 통해 wallet sync는 해시를 따로 모아 질의하는 대신 nullifier 매치에서 전체 트랜잭션을 인라인으로 가져올 수 있습니다. 기존 transactionIdtransactionHash 필드도 그대로 사용할 수 있습니다.

shielded nullifier transactions 입력 검증 강화

shielded nullifier transactions 영역의 입력 검증을 강화합니다. 이제 API 경계에서 형식이 잘못되었거나 범위를 벗어난 인자를 query 실행으로 전파하지 않고 거부합니다.


호환성 주의 사항 (Breaking changes)

dust nullifier byte 필드 LeBytes 접미사로 이름 변경

@beta(진행 중) 필드에 국한되므로, 안정 API 사용자에게는 영향이 없습니다. 4.0.x 운영 라인(노드 0.22.x 페어링)을 사용 중이라면 이 변경은 영향을 주지 않습니다. 해당 필드는 4.0.x API 영역에 존재하지 않습니다. 4.3.x 라인의 beta dust nullifier API를 사용하는 경우에만 필드명과 인자명을 갱신하면 됩니다:

  • DustNullifierTransaction.nullifiernullifierLeBytes
  • DustNullifierTransaction.commitmentcommitmentLeBytes
  • dustNullifierTransactions(...) subscription 인자 nullifierPrefixesnullifierLeBytesPrefixes

shielded nullifier 타입은 그대로입니다. 이번 이름 변경은 little-endian byte 인코딩을 필드명에 명시적으로 드러냅니다.


버그 수정 및 품질 개선

dustGenerations subscription dtime 업데이트 수정

새로 시작한 dustGenerations subscription(index 0에서 시작하고 이전 cutoff가 없는 경우)은 이전에는 dtime drain을 단락(short-circuit)시켜 DustGenerationDtimeUpdate 항목을 건너뛰었습니다. 이제 subscription이 이 항목을 올바르게 전달하므로, 갓 연결된 지갑은 전체 과거 구간에 대한 dtime 업데이트를 받습니다. (#1166)


링크 및 참고 자료