triton_vm::aet

Struct AlgebraicExecutionTrace

Source
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: Program

The 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

  1. ties a Proof to the program it was produced from, and
  2. 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

Source

pub fn new(program: Program) -> Self

Source

pub fn padded_height(&self) -> usize

The height of the AET after padding.

Guaranteed to be a power of two.

Source

pub fn height(&self) -> TableHeight

The height of the AET before padding. Corresponds to the height of the longest table.

Source

pub fn height_of_table(&self, table: TableId) -> usize

Trait Implementations§

Source§

impl Clone for AlgebraicExecutionTrace

Source§

fn clone(&self) -> AlgebraicExecutionTrace

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for AlgebraicExecutionTrace

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dst: *mut T)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize = _

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V