-
Notifications
You must be signed in to change notification settings - Fork 121
Description
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:
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.