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¶
MerkleProofExceptionextendsError(notHttpException) — PD-56 is an internal service, no REST endpoint- Migration uses
VARCHAR + CHECKconstraint (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-01for both invalid and non-existent eventId - Off-chain script is standalone with zero backend imports (only
node:crypto)