import { pushTestData } from '@aztec/foundation/testing'; import { type PrivateKernelResetCircuitPrivateInputs, type PrivateKernelResetDimensions, privateKernelResetDimensionNames, } from '@aztec/stdlib/kernel'; import { mapPaddedSideEffectsToNoir, mapPrivateKernelCircuitPublicInputsToNoir, mapPrivateKernelDataToNoir, mapPrivateKernelResetHintsToNoir, } from '../conversion/client.js'; import { PrivateKernelResetArtifactFileNames, PrivateKernelResetTailArtifactFileNames, PrivateKernelResetTailToPublicArtifactFileNames, type PrivateResetArtifact, type PrivateResetTailArtifact, type PrivateResetTailToPublicArtifact, } from '../private_kernel_reset_types.js'; export function createPrivateKernelResetTag(dimensions: PrivateKernelResetDimensions) { return privateKernelResetDimensionNames.map(name => dimensions[name]).join('_'); } export function getPrivateKernelResetArtifactName(dimensions: PrivateKernelResetDimensions) { const tag = createPrivateKernelResetTag(dimensions); const name = `PrivateKernelResetArtifact_${tag}` as PrivateResetArtifact; if (!PrivateKernelResetArtifactFileNames[name]) { throw new Error(`Unknown private reset artifact: ${name}`); } return name; } /** * Picks the artifact name for the terminal reset families: `isForPublic` selects the * rollup-bound (`reset_tail`) or public-bound (`reset_tail_to_public`) family; `dimensions` * selects the variant within it. */ export function getPrivateKernelResetTailArtifactName( dimensions: PrivateKernelResetDimensions, isForPublic: boolean, ): PrivateResetTailArtifact | PrivateResetTailToPublicArtifact { const tag = createPrivateKernelResetTag(dimensions); if (isForPublic) { const name = `PrivateKernelResetTailToPublicArtifact_${tag}` as PrivateResetTailToPublicArtifact; if (!PrivateKernelResetTailToPublicArtifactFileNames[name]) { throw new Error(`Unknown private reset_tail_to_public artifact: ${name}`); } return name; } const name = `PrivateKernelResetTailArtifact_${tag}` as PrivateResetTailArtifact; if (!PrivateKernelResetTailArtifactFileNames[name]) { throw new Error(`Unknown private reset_tail artifact: ${name}`); } return name; } /** * TODO: This is a hack so we can write full reset inputs to a Prover.toml. * Ideally we remove it in favour of adding a test that runs a full reset. */ export function updateResetCircuitSampleInputs( privateKernelResetCircuitPrivateInputs: PrivateKernelResetCircuitPrivateInputs, ) { /* eslint-disable camelcase */ const inputs = { previous_kernel: mapPrivateKernelDataToNoir(privateKernelResetCircuitPrivateInputs.previousKernel), previous_kernel_public_inputs: mapPrivateKernelCircuitPublicInputsToNoir( privateKernelResetCircuitPrivateInputs.previousKernel.publicInputs, ), padded_side_effects: mapPaddedSideEffectsToNoir(privateKernelResetCircuitPrivateInputs.paddedSideEffects), hints: mapPrivateKernelResetHintsToNoir(privateKernelResetCircuitPrivateInputs.hints), }; pushTestData('private-kernel-reset', inputs); }