0xMiden / 0xMiden/air-script

feat: Export Rust structs representing the trace layout

Abierto
#384 1 comentario 1 reacción 0 asignados Ver en GitHub
Lenguaje dominante
Rust
Estrellas
96
Forks
39
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

While AirScript provides a simple interface for defining constraints that can be reused in various contexts, it lacks the ability to define a witness generator for filling the trace. This often usually required a hand-made implementation since the trace Is derived from structured data (e.g. a processor trace), and can be optimized for better performance.

In parallel, we are exploring in the VM the benefits of treating the trace as a row-major matrix for better memory access patterns when filling each row (either followed by a transposition for use with Winterfell, but also aligned with plonky3's architecture).

Concretely, it would be practical for AirScript to generate the following type of trace description
```rust
struct Trace {
col_name_0: T,
col_name_1: T,
// ...
}
```
This would ensure consistency between witness generation and trace layout, but can also be enhanced by implementing the `Borrow{Mut}` that allow casting from a slice to the trace structure
```rust
let trace_row: &[T] = ...;
let trace: &mut Trace = trace_row.borrow_mut();
// Fill witness for the row by modifying `trace`
```

The implementation of this trait can be found in many plonky3 chips (e.g. [keccak-air](https://github.com/Plonky3/Plonky3/blob/f77e399ebec3791e8a2c314bfef2734b9b3898df/keccak-air/src/columns.rs#L128-L148)).

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.