0xMiden / 0xMiden/protocol

Refactor `MockChainNote` to always hold the full note details

未关闭
#2,307 4 条评论 0 个 reaction 已指派 1 人 已被 @bigeez 认领 在 GitHub 查看
good first issue tests
主要语言
Rust
星标
132
派生
167
平均合并
1 天 23 小时
30 天内合并 PR
110

描述

In tests, when we want to add a `Private` note at genesis, we do:
```rust
let input_note = builder.add_p2id_note(
account.id(),
account.id(),
&[FungibleAsset::mock(0)],
NoteType::Private,
)?;
```
and then inside of `add_p2id_note`, we add the note as [`self.add_output_note(OutputNote::Full(note.clone()));`](https://github.com/0xMiden/miden-base/blob/eb0c396d48506c30c3fdc859ddaabbb8bfaf6b00/crates/miden-testing/src/mock_chain/chain_builder.rs#L559) to the `MockChainBuilder`.

This is fine, but it causes [`MockChain::apply_block`](https://github.com/0xMiden/miden-base/blob/eb0c396d48506c30c3fdc859ddaabbb8bfaf6b00/crates/miden-testing/src/mock_chain/chain.rs#L902-L903) to later treat these notes always as `Public`:
```rust
if let OutputNote::Full(note) = created_note {
self.committed_notes
.insert(note.id(), MockChainNote::Public(note.clone(), note_inclusion_proof));
} else {
```

---

The current implementation (and as an extension, this PR) doesn't seem to cause issues, I think because even the `MockChainNote::public` but wrapping a **private note** contains the correct underlying note details (i.e. `note.metadata().is_private() will still be correct).

But this makes me realize that maybe the `MockChainNote` struct doesn't really serve its purpose and should be refactored (e.g. to always hold the full note details).

_Originally posted by @mmagician in https://github.com/0xMiden/miden-base/pull/2205#discussion_r2672135301_

贡献指南

打开贡献指南

评估

这个 Issue 还没有评估数据。

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。