0xMiden / 0xMiden/air-script

feat: Export Rust structs representing the trace layout

オープン
#384 コメント 1 件 リアクション 1 件 担当者 0 名 GitHub で見る
主要言語
Rust
スター
96
フォーク
39
PR マージ指標
30日以内にマージされた PR はありません

説明

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

コントリビューションガイド

コントリビューションガイドを開く

評価

この issue はまだ評価されていません。

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。