miden_objects/decoded/transaction/
args.rs1use miden_protobuf::unwrap_infallible;
2pub use proto::transaction::DecodedTransactionScript as TransactionScript;
3
4use crate::decoded::VerificationError;
5use crate::{Verify, proto};
6
7#[cfg(test)]
8mod tests;
9
10impl Verify for TransactionScript {
11 type Verified = miden_protocol::transaction::TransactionScript;
12 type Error = VerificationError;
13 fn verify(self) -> Result<Self::Verified, Self::Error> {
14 let mast = self.mast.verify()?;
15 let entrypoint = miden_protocol::MastNodeId::from_u32_safe(self.entrypoint, &mast)?;
16 Self::Verified::from_parts(alloc::sync::Arc::new(mast), entrypoint)
17 .map_err(VerificationError::new)
18 }
19}
20
21pub use proto::transaction::DecodedNoteArgument as NoteArgument;
22
23impl Verify for NoteArgument {
24 type Verified = (miden_protocol::note::NoteId, miden_protocol::Word);
25 type Error = core::convert::Infallible;
26 fn verify(self) -> Result<Self::Verified, Self::Error> {
27 Ok((self.note_id.verify()?, self.args))
28 }
29}
30
31pub use proto::transaction::DecodedTransactionArgs as TransactionArgs;
32
33impl Verify for TransactionArgs {
34 type Verified = miden_protocol::transaction::TransactionArgs;
35 type Error = VerificationError;
36 fn verify(self) -> Result<Self::Verified, Self::Error> {
37 let tx_script = self.tx_script.verify()?;
38 let mut note_args = alloc::collections::BTreeMap::new();
39 for argument in self.note_args.into_inner() {
40 let (id, args) = unwrap_infallible(argument.verify());
41 if note_args.insert(id, args).is_some() {
42 return Err(TransactionArgsError::DuplicateNoteArgument(id).into());
43 }
44 }
45 Ok(Self::Verified::from_parts(
46 tx_script,
47 self.tx_script_args,
48 note_args,
49 self.advice_inputs.verify()?,
50 self.auth_args,
51 ))
52 }
53}
54
55#[derive(Debug, thiserror::Error)]
56pub enum TransactionArgsError {
57 #[error("duplicate note argument {0}")]
58 DuplicateNoteArgument(miden_protocol::note::NoteId),
59}