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 摘要。