Aller au contenu

PD-56-DECOMPOSITION

Implementation complete. Here's the summary:

PD-56 — Implementation Complete

Components implemented (12/12)

# Component File Status
C1 ProofAvailabilityState enum src/modules/merkle/enums/proof-availability-state.enum.ts Done
C2 MerkleLeaf extension src/modules/merkle/entities/merkle-leaf.entity.ts (edited) Done
C3 MerkleProofService src/modules/merkle/services/merkle-proof.service.ts Done
C4 EventResolverService src/modules/merkle/services/event-resolver.service.ts Done
C5 ProofAvailabilityStateMachine src/modules/merkle/services/proof-availability-state-machine.service.ts Done
C6 MerkleProofAuditService src/modules/merkle/services/merkle-proof-audit.service.ts Done
C7 MerkleProofResult DTO src/modules/merkle/dto/merkle-proof-result.dto.ts Done
C8 MerkleProofException src/modules/merkle/exceptions/merkle-proof.exception.ts Done
C9 ETACalculatorService src/modules/merkle/services/eta-calculator.service.ts Done
C10 Migration DDL src/database/migrations/1742200000000-PD56-AddProofAvailabilityState.ts Done
C11 Tests (6 files) src/modules/merkle/__tests__/merkle-proof*.spec.ts + others Done
C12 Off-chain verifier scripts/verify-merkle-proof-offchain.ts Done

Quality checks

  • TypeScript: 0 errors (npx tsc --noEmit)
  • Tests: 93/93 passing across 6 test suites
  • Coverage: TC-NOM-01..12, TC-ERR-01..11, TC-INV-06..08, TC-NEG-01..14

Key design decisions

  • MerkleProofException extends Error (not HttpException) — PD-56 is an internal service, no REST endpoint
  • Migration uses VARCHAR + CHECK constraint (not PG ENUM) per REX PD-282
  • Anti-flood: UPDATE WHERE state != 'CORRUPTED' — rowCount=0 means already corrupted, no alert
  • Anti-enumeration: uniform ERR-56-01 for both invalid and non-existent eventId
  • Off-chain script is standalone with zero backend imports (only node:crypto)