0xMiden / 0xMiden/air-script

feat: Export Rust structs representing the trace layout

Ouverte
#384 1 commentaire 1 réaction 0 personnes assignées Voir sur GitHub
Langage dominant
Rust
Étoiles
96
Forks
39
Métriques de merge des PR
Aucune PR mergée en 30 j

Description

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)).

Guide de contribution

Ouvrir le guide de contribution

Évaluation

Cette issue n'a pas encore été évaluée.

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.