pub struct AlgebraicExecutionTrace {
pub program: Program,
pub instruction_multiplicities: Vec<u32>,
pub processor_trace: Array2<BFieldElement>,
pub op_stack_underflow_trace: Array2<BFieldElement>,
pub ram_trace: Array2<BFieldElement>,
pub program_hash_trace: Array2<BFieldElement>,
pub hash_trace: Array2<BFieldElement>,
pub sponge_trace: Array2<BFieldElement>,
pub u32_entries: IndexMap<U32TableEntry, u64>,
pub cascade_table_lookup_multiplicities: IndexMap<u16, u64>,
pub lookup_table_lookup_multiplicities: [u64; 256],
}Expand description
An Algebraic Execution Trace (AET) is the primary witness required for proof generation. It holds every intermediate state of the processor and all co-processors, alongside additional witness information, such as the number of times each instruction has been looked up (equivalently, how often each instruction has been executed).
Fields§
§program: ProgramThe program that was executed in order to generate the trace.
instruction_multiplicities: Vec<u32>The number of times each instruction has been executed.
Each instruction in the program has one associated entry in
instruction_multiplicities, counting the number of times this
specific instruction at that location in the program memory has been
executed.
processor_trace: Array2<BFieldElement>Records the state of the processor after each instruction.
op_stack_underflow_trace: Array2<BFieldElement>§ram_trace: Array2<BFieldElement>§program_hash_trace: Array2<BFieldElement>The trace of hashing the program whose execution generated this
AlgebraicExecutionTrace. The resulting digest
- ties a
Proofto the program it was produced from, and - is accessible to the program being executed.
hash_trace: Array2<BFieldElement>For the hash instruction, the hash trace records the internal state of
the Tip5 permutation for each round.
sponge_trace: Array2<BFieldElement>For the Sponge instructions, i.e., sponge_init, sponge_absorb,
sponge_absorb_mem, and sponge_squeeze, the Sponge trace records the
internal state of the Tip5 permutation for each round.
u32_entries: IndexMap<U32TableEntry, u64>The u32 entries hold all pairs of BFieldElements that were written to the U32 Table, alongside the u32 instruction that was executed at the time. Additionally, it records how often the instruction was executed with these arguments.
cascade_table_lookup_multiplicities: IndexMap<u16, u64>Records how often each entry in the cascade table was looked up.
lookup_table_lookup_multiplicities: [u64; 256]Records how often each entry in the lookup table was looked up.
Implementations§
Source§impl AlgebraicExecutionTrace
impl AlgebraicExecutionTrace
pub fn new(program: Program) -> Self
Sourcepub fn padded_height(&self) -> usize
pub fn padded_height(&self) -> usize
Sourcepub fn height(&self) -> TableHeight
pub fn height(&self) -> TableHeight
pub fn height_of_table(&self, table: TableId) -> usize
Trait Implementations§
Source§impl Clone for AlgebraicExecutionTrace
impl Clone for AlgebraicExecutionTrace
Source§fn clone(&self) -> AlgebraicExecutionTrace
fn clone(&self) -> AlgebraicExecutionTrace
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl Freeze for AlgebraicExecutionTrace
impl RefUnwindSafe for AlgebraicExecutionTrace
impl Send for AlgebraicExecutionTrace
impl Sync for AlgebraicExecutionTrace
impl Unpin for AlgebraicExecutionTrace
impl UnwindSafe for AlgebraicExecutionTrace
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more