## miden::core::sys::vm::public_inputs
| Procedure | Description |
| ----------- | ------------- |
| process_public_inputs | Processes the public inputs.<br /><br />This involves:<br /><br />1. Loading from the advice stack the fixed-length public inputs and storing them in memory<br />starting from the address pointed to by `public_inputs_address_ptr`.<br />2. Loading kernel procedure digests from the advice stack into memory at<br />`variable_length_public_inputs_address_ptr`.<br />3. Absorbing the statement-owned public inputs into the Fiat-Shamir transcript, matching<br />`MultiAir::observe`: the element stream<br />[ len(FLPI), FLPI..., MAX_AUX_INPUTS, len(kernel_felts), kernel_felts... ]<br />is absorbed in 8-element blocks, with the trailing partial block buffered via<br />`random_coin::observe_felt`.<br />4. Loading the auxiliary randomness from the advice stack and reducing the kernel digests; the<br />reduced result overwrites the start of the kernel-digest region (in the ACE READ section).<br /><br />Note that the fixed length public inputs are stored as extension field elements, while the<br />kernel digests are stored as base field elements (each padded to 8 felts and reversed for the<br />reduction). Absorption reads back the natural-order elements from memory so it is decoupled<br />from those storage layouts.<br /><br />POSTCONDITION: the transcript input buffer holds the unflushed tail of the absorbed stream;<br />the generic verifier observes the instance shape and main-trace commitment next (continuing the<br />same buffered duplex) and flushes before the first sample.<br /><br />Input:<br />- Operand stack: [...]<br />- Advice stack: [fixed_len_PI..., num_kernel_proc_digests,<br />kernel_digest_elements..., beta0, beta1, alpha0, alpha1, ...]<br />Output: [...]<br /> |