import type { CHONK_PROOF_LENGTH, RECURSIVE_PROOF_LENGTH, RECURSIVE_ROLLUP_HONK_PROOF_LENGTH } from '@aztec/constants'; import { BufferReader, type Bufferable, serializeToBuffer } from '@aztec/foundation/serialize'; import { RecursiveProof } from '../proofs/recursive_proof.js'; import { VkData } from '../vks/index.js'; /** * Represents the data of a recursive proof. */ export class ProofData { constructor( public publicInputs: T, public proof: RecursiveProof, public vkData: VkData, ) {} public toBuffer(): Buffer { return serializeToBuffer(this.publicInputs, this.proof, this.vkData); } public static fromBuffer( buffer: Buffer | BufferReader, publicInputs: { fromBuffer: (reader: BufferReader) => T; }, ): ProofData { const reader = BufferReader.asReader(buffer); return new ProofData(reader.readObject(publicInputs), RecursiveProof.fromBuffer(reader), reader.readObject(VkData)); } } /** * Represents the data of a recursive proof for a circuit with a fixed verification key. */ export class ProofDataForFixedVk { constructor( public publicInputs: T, public proof: RecursiveProof, ) {} public toBuffer(): Buffer { return serializeToBuffer(this.publicInputs, this.proof); } public static fromBuffer( buffer: Buffer | BufferReader, publicInputs: { fromBuffer: (reader: BufferReader) => T; }, ): ProofDataForFixedVk { const reader = BufferReader.asReader(buffer); return new ProofDataForFixedVk(reader.readObject(publicInputs), RecursiveProof.fromBuffer(reader)); } } export type ChonkProofData = ProofData; export type UltraHonkProofData = ProofData; export type RollupHonkProofData = ProofData;