@@ -177,33 +177,6 @@ impl<
177177 // Extract chip metadata before consuming witnesses.
178178 // We reuse this for both transcript appends and task construction.
179179 let name_and_instances = witnesses. get_witnesses_name_instance ( ) ;
180- let transcript_instances = name_and_instances. iter ( ) . try_fold (
181- Vec :: new ( ) ,
182- |mut acc, ( name, num_instances) | -> Result < _ , ZKVMError > {
183- let pk = self . pk . circuit_pks . get ( name) . ok_or ( ZKVMError :: VKNotFound (
184- format ! ( "proving key for circuit {} not found" , name) . into ( ) ,
185- ) ) ?;
186-
187- // Skip OMC-init-only circuits in non-first shards.
188- if !shard_ctx. is_first_shard ( ) && pk. get_cs ( ) . with_omc_init_only ( ) {
189- return Ok ( acc) ;
190- }
191-
192- if num_instances. iter ( ) . sum :: < usize > ( ) == 0 {
193- return Ok ( acc) ;
194- }
195-
196- let circuit_idx = self . pk . circuit_name_to_index . get ( name) . copied ( ) . ok_or (
197- ZKVMError :: VKNotFound (
198- format ! ( "circuit index for {} not found" , name) . into ( ) ,
199- ) ,
200- ) ?;
201-
202- acc. push ( ( circuit_idx, * num_instances) ) ;
203- Ok ( acc)
204- } ,
205- ) ?;
206-
207180 let mut structural_rmms = Vec :: with_capacity ( name_and_instances. len ( ) ) ;
208181 // commit to opcode circuits first and then commit to table circuits, sorted by name
209182 for ( i, chip_input) in witnesses. into_iter_sorted ( ) . enumerate ( ) {
@@ -248,15 +221,6 @@ impl<
248221 PCS :: write_commitment ( & witin_commit, & mut transcript) . map_err ( ZKVMError :: PCSError ) ?;
249222 exit_span ! ( commit_to_traces_span) ;
250223
251- // Write (circuit_idx, num_instances) after all commitments are absorbed.
252- for ( circuit_idx, num_instances) in & transcript_instances {
253- transcript. append_field_element ( & E :: BaseField :: from_canonical_usize ( * circuit_idx) ) ;
254- for num_instance in num_instances {
255- transcript
256- . append_field_element ( & E :: BaseField :: from_canonical_usize ( * num_instance) ) ;
257- }
258- }
259-
260224 // Use pre-loaded fixed_mles (extracted before in_scope to avoid lifetime issues)
261225 let fixed_mles = fixed_mles_preload;
262226
@@ -360,6 +324,10 @@ impl<
360324 transcript. append_field_element ( & E :: BaseField :: from_canonical_u64 (
361325 task. circuit_idx as u64 ,
362326 ) ) ;
327+ for num_instance in task. input . num_instances {
328+ transcript
329+ . append_field_element ( & E :: BaseField :: from_canonical_usize ( num_instance) ) ;
330+ }
363331
364332 // SAFETY: TypeId check above (before closure) guarantees PB = GpuBackend<E, PCS>.
365333 let gpu_input: ProofInput < ' static , gkr_iop:: gpu:: GpuBackend < E , PCS > > =
@@ -396,6 +364,9 @@ impl<
396364 // Append circuit_idx to per-task forked transcript (matching verifier)
397365 transcript
398366 . append_field_element ( & E :: BaseField :: from_canonical_u64 ( task. circuit_idx as u64 ) ) ;
367+ for num_instance in task. input . num_instances {
368+ transcript. append_field_element ( & E :: BaseField :: from_canonical_usize ( num_instance) ) ;
369+ }
399370
400371 // Prepare: deferred extraction for GPU, no-op for CPU
401372 self . device . prepare_chip_input ( & mut task, witness_data) ;
0 commit comments