0xMiden / 0xMiden/rust-sdk

Handling reference block on transaction execution

Offen
#2,139 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
Vorherrschende Sprache
Rust
Sterne
78
Forks
129
Ø Merge
4 T. 14 Std.
Gemergte PRs (30 T.)
52

Beschreibung

After https://github.com/0xMiden/miden-client/pull/2100, the client only tracks the MMR peaks for the current sync height.

As mentioned [here](https://github.com/0xMiden/miden-client/pull/2100#discussion_r3157271113), I think there could be a problem with how we handle the `ref_block` on transaction execution.

`Client::execute_transaction` uses the current sync height as `ref_block` and passes it to the executor. The executor then builds the partial MMR through the data store. Since the client only stores peaks at the latest sync height, the MMR could not be consistent with the `ref_block`. If a concurrent `sync_state` advanced the chain between the caller capturing `ref_block` and the data store reading the peaks, the execution would fail.

I think there are two options here:

1. Assume a sync never runs during transaction execution. This would allow us to simplify the existing code by assuming the sync height is always the same during execution. It need to be documented (and ideally enforced).

2. Track historical peaks on the store. Allow `blockchain_checkpoint` to hold one row per chain tip we've seen, and look up peaks by `ref_block`. Since the client only accesses sync heigh, we only need to store the peaks for blocks that were added as chain tip, not for all intermediate blocks.

I think option 2 makes more sense and is probably the safest.

Beitragsleitfaden

Beitragsleitfaden öffnen

Rechercherichtung

Betrachten Sie die Methode `Client::execute_transaction` und wie sie die aktuelle Synchronisationshöhe als `ref_block` verwendet. Untersuchen Sie die MMR-Erstellungslogik des Executors über den Datenspeicher. Überprüfen Sie den `blockchain_checkpoint`-Speicher, um zu verstehen, wie Peaks verfolgt werden. Das Ziel ist, die MMR-Konsistenz mit dem `ref_block` während gleichzeitiger State-Syncs sicherzustellen.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
rust
Bereich
backend, blockchain
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.