0xMiden / 0xMiden/protocol

Allow private notes as inputs to `MockChain::build_tx_context`

未关闭
#1,607 1 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
tests
主要语言
Rust
星标
132
派生
167
平均合并
1 天 23 小时
30 天内合并 PR
110

描述

Even though we did https://github.com/0xMiden/miden-base/pull/1310, we currently can't easily build a transaction with private input notes, since the `MockChainNote` doesn't track enough information to create an `InputNote`:

https://github.com/0xMiden/miden-base/blob/8e88dc6b04429f67c685ce577f2afce6f8df757a/crates/miden-testing/src/mock_chain/note.rs#L13-L19

This is by design to mirror the privacy aspect of the notes. However, it would be great if we could pass a full private note into `build_tx_context` to be able to easily build a transaction with a private note. Currently, we use public notes exclusively, I think.

One way to do this would be similar to how we allow both a full `Account` and just an `AccountId` to be provided as input using `TxContextInput`. Analogously we could do:

```rust
pub TxContextNoteInput {
Private(Note),
Public(NoteId),
}

impl From for TxContextNoteInput {
// Depending on the note type return either
// TxContextNoteInput::Public(..) / TxContextNoteInput::Private(..)
}
impl From for TxContextNoteInput {
// Return TxContextNoteInput::Public(..)
}
```

Then `build_tx_context`'s signature can be changed to:

```rust
pub fn build_tx_context(
&self,
input: impl Into,
note_ids: &[impl Into],
unauthenticated_notes: &[Note],
) -> anyhow::Result { ... }
```

We should also rename `TxContextInput` to `TxContextAccountInput` for clarity.

As part of this we should rewrite at least one test to use private notes as inputs. One candidate is `settle_coincidence_of_wants`.

cc @tomyrd in case I've missed how the above is already possible.

贡献指南

打开贡献指南

评估

这个 Issue 还没有评估数据。

把新 issue 发到你的邮箱

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