Skip to content

Allow private notes as inputs to MockChain::build_tx_context #1607

@PhilippGackstatter

Description

@PhilippGackstatter

Even though we did #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:

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

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

Then build_tx_context's signature can be changed to:

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

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    testsImprovements to testing

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions