Refactor `MockChainNote` to always hold the full note details
- 主要语言
- 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 还没有评估数据。