0xMiden / 0xMiden/rust-sdk

Handling reference block on transaction execution

オープン
#2,139 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る
主要言語
Rust
スター
78
フォーク
129
平均マージ
4日 14時間
マージ済み PR(30日)
52

説明

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.

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

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

調査の方向性

Look at the `Client::execute_transaction` method and how it uses the current sync height as `ref_block`. Examine the executor's MMR building logic via the data store. Review the `blockchain_checkpoint` storage to understand how peaks are tracked. The goal is to ensure MMR consistency with the `ref_block` during concurrent state syncs.

索引モデルが issue の本文から書いたものです。

評価

技術スタック
rust
領域
backend, blockchain
issue の種類
バグ
難易度
4/5
見積もり時間
3〜5日
活発さ
停滞
明瞭さ
おおむね明確
初心者へのやさしさ
35/100

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

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