Skip to content

Backend Adapter Contract v1

Status: frozen for TKT-P3-39
Goal: keep wallet/covenant callers stable while allowing a real prover backend to replace the mock backend.

Scope

The adapter contract defines typed prove/verify requests and deterministic serialization surfaces.

Normative implementation:

  • packages/zk-backend/src/adapter.ts
  • packages/zk-backend/src/fixture_builder_v1.ts

Compatibility implementation:

  • packages/zk-backend-mock/src/mock_backend_v1.ts

Typed contract

Public inputs:

  • encoding = piv1_bytes
  • piv1Bytes is the canonical PIv1 byte payload

Witness payload (optional):

  • encoding = opaque_bytes_v1
  • witnessBytes is backend-private and transport-neutral

Prove request:

  • publicInputs
  • optional proofSections (encryptedPayloadBytes, hintsBytes)
  • optional witness
  • optional determinism

Verify request:

  • publicInputs
  • pbv1Bytes
  • optional witness

Benchmark report:

  • optional proveMs, verifyMs, witnessBytes, proofBytes, proofBlobBytes, notes

Deterministic serialization

The adapter exports deterministic serializers for:

  • prove request
  • verify request
  • benchmark report

These serializers are used for fixtures and regression checks so backend swaps do not silently drift byte-level request encoding.

Compatibility

  • Legacy flat args remain accepted via normalizers.
  • mockBackendV1 consumes both legacy and typed requests through the same adapter methods.
  • Existing wallet/covenant call sites do not require API changes for this ticket.