From 5e9fab208d90248935b172f3fbb226e28fec96b1 Mon Sep 17 00:00:00 2001 From: Tomas Fabrizio Orsi Date: Wed, 15 Apr 2026 15:43:48 -0300 Subject: [PATCH 1/6] feat: TransactionScript::from_package --- CHANGELOG.md | 2 ++ crates/miden-protocol/src/errors/mod.rs | 2 ++ .../miden-protocol/src/transaction/tx_args.rs | 17 +++++++++++++++++ 3 files changed, 21 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e2a772a595..6062550504 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,8 @@ ### Fixes - Made deserialization of `AccountCode` more robust ([#2788](https://github.com/0xMiden/protocol/pull/2788)). +- Added `TransactionScript::from_package()` method to create `TransactionScript` from `miden-mast-package::Package` ([#2779](https://github.com/0xMiden/protocol/pull/2779)). + ## 0.14.3 (2026-04-07) diff --git a/crates/miden-protocol/src/errors/mod.rs b/crates/miden-protocol/src/errors/mod.rs index b13ec8d068..d5e5e06c65 100644 --- a/crates/miden-protocol/src/errors/mod.rs +++ b/crates/miden-protocol/src/errors/mod.rs @@ -762,6 +762,8 @@ impl PartialBlockchainError { pub enum TransactionScriptError { #[error("failed to assemble transaction script:\n{}", PrintDiagnostic::new(.0))] AssemblyError(Report), + #[error("failed to convert package to transaction script:\n{}", PrintDiagnostic::new(.0))] + TransactionScriptNotProgram(Report), } // TRANSACTION INPUT ERROR diff --git a/crates/miden-protocol/src/transaction/tx_args.rs b/crates/miden-protocol/src/transaction/tx_args.rs index 1e6657bfaf..fab5c95aa1 100644 --- a/crates/miden-protocol/src/transaction/tx_args.rs +++ b/crates/miden-protocol/src/transaction/tx_args.rs @@ -4,9 +4,11 @@ use alloc::vec::Vec; use miden_core::mast::MastNodeExt; use miden_crypto::merkle::InnerNodeInfo; +use miden_mast_package::Package; use super::{Felt, Hasher, Word}; use crate::account::auth::{PublicKeyCommitment, Signature}; +use crate::errors::TransactionScriptError; use crate::note::{NoteId, NoteRecipient}; use crate::utils::serde::{ ByteReader, @@ -308,6 +310,21 @@ impl TransactionScript { Self { mast, entrypoint } } + /// Creates a [TransactionScript] from a [`Package`]. + /// + /// The package must be an executable (i.e., its target type must be + /// [`TargetType::Executable`](miden_mast_package::TargetType::Executable)). + /// + /// # Errors + /// Returns an error if the package cannot be converted to an executable program. + pub fn from_package(package: &Package) -> Result { + let program = package + .try_into_program() + .map_err(TransactionScriptError::TransactionScriptNotProgram)?; + + Ok(TransactionScript::new(program)) + } + // PUBLIC ACCESSORS // -------------------------------------------------------------------------------------------- From 7ad5e2c1f9a858546f13342712c1a81588f399b2 Mon Sep 17 00:00:00 2001 From: Tomas Fabrizio Orsi Date: Thu, 16 Apr 2026 11:18:28 -0300 Subject: [PATCH 2/6] review: rename TransactionScriptNotProgram -> PackageNotProgram Suggested-by: Ignacio Amigo --- crates/miden-protocol/src/errors/mod.rs | 2 +- crates/miden-protocol/src/transaction/tx_args.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/miden-protocol/src/errors/mod.rs b/crates/miden-protocol/src/errors/mod.rs index d5e5e06c65..d4c8cfa68c 100644 --- a/crates/miden-protocol/src/errors/mod.rs +++ b/crates/miden-protocol/src/errors/mod.rs @@ -763,7 +763,7 @@ pub enum TransactionScriptError { #[error("failed to assemble transaction script:\n{}", PrintDiagnostic::new(.0))] AssemblyError(Report), #[error("failed to convert package to transaction script:\n{}", PrintDiagnostic::new(.0))] - TransactionScriptNotProgram(Report), + PackageNotProgram(Report), } // TRANSACTION INPUT ERROR diff --git a/crates/miden-protocol/src/transaction/tx_args.rs b/crates/miden-protocol/src/transaction/tx_args.rs index fab5c95aa1..fea29f91b6 100644 --- a/crates/miden-protocol/src/transaction/tx_args.rs +++ b/crates/miden-protocol/src/transaction/tx_args.rs @@ -320,7 +320,7 @@ impl TransactionScript { pub fn from_package(package: &Package) -> Result { let program = package .try_into_program() - .map_err(TransactionScriptError::TransactionScriptNotProgram)?; + .map_err(TransactionScriptError::PackageNotProgram)?; Ok(TransactionScript::new(program)) } From ea9ef3822a3d23508a8341ed7eb260e2cb064829 Mon Sep 17 00:00:00 2001 From: Tomas Fabrizio Orsi Date: Thu, 16 Apr 2026 11:38:23 -0300 Subject: [PATCH 3/6] review: check for PackageKind::TransactionScript instead --- crates/miden-protocol/src/errors/mod.rs | 2 ++ .../miden-protocol/src/transaction/tx_args.rs | 19 ++++++++++++++----- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/crates/miden-protocol/src/errors/mod.rs b/crates/miden-protocol/src/errors/mod.rs index d4c8cfa68c..7f0bbaedfd 100644 --- a/crates/miden-protocol/src/errors/mod.rs +++ b/crates/miden-protocol/src/errors/mod.rs @@ -764,6 +764,8 @@ pub enum TransactionScriptError { AssemblyError(Report), #[error("failed to convert package to transaction script:\n{}", PrintDiagnostic::new(.0))] PackageNotProgram(Report), + #[error("failed to convert package to transaction script:\n{}", PrintDiagnostic::new(.0))] + PackageNotTransactionScript(Report), } // TRANSACTION INPUT ERROR diff --git a/crates/miden-protocol/src/transaction/tx_args.rs b/crates/miden-protocol/src/transaction/tx_args.rs index fea29f91b6..1457b7b746 100644 --- a/crates/miden-protocol/src/transaction/tx_args.rs +++ b/crates/miden-protocol/src/transaction/tx_args.rs @@ -2,9 +2,10 @@ use alloc::collections::BTreeMap; use alloc::sync::Arc; use alloc::vec::Vec; +use miden_assembly::Report; use miden_core::mast::MastNodeExt; use miden_crypto::merkle::InnerNodeInfo; -use miden_mast_package::Package; +use miden_mast_package::{Package, TargetType}; use super::{Felt, Hasher, Word}; use crate::account::auth::{PublicKeyCommitment, Signature}; @@ -313,14 +314,22 @@ impl TransactionScript { /// Creates a [TransactionScript] from a [`Package`]. /// /// The package must be an executable (i.e., its target type must be - /// [`TargetType::Executable`](miden_mast_package::TargetType::Executable)). + /// [`TargetType::TransactionScript`](miden_mast_package::TargetType::TransactionScript)). /// /// # Errors /// Returns an error if the package cannot be converted to an executable program. pub fn from_package(package: &Package) -> Result { - let program = package - .try_into_program() - .map_err(TransactionScriptError::PackageNotProgram)?; + let package_kind = package.kind; + if !matches!(package_kind, TargetType::TransactionScript) { + let err_report = Report::msg(format!( + "package's kind is {}, expected TransactionScript", + package_kind + )); + return Err(TransactionScriptError::PackageNotTransactionScript(err_report)); + }; + + let program = + package.try_into_program().map_err(TransactionScriptError::PackageNotProgram)?; Ok(TransactionScript::new(program)) } From 1b0a3ae75daf3e16f7ca1ab49f6cc74a4d8c73a0 Mon Sep 17 00:00:00 2001 From: Tomas Fabrizio Orsi Date: Wed, 22 Apr 2026 11:21:49 -0300 Subject: [PATCH 4/6] Revert "review: check for PackageKind::TransactionScript instead" This reverts commit 8513085b1ea047df149ab3588d42dea2a07e3156. --- crates/miden-protocol/src/errors/mod.rs | 2 -- .../miden-protocol/src/transaction/tx_args.rs | 19 +++++-------------- 2 files changed, 5 insertions(+), 16 deletions(-) diff --git a/crates/miden-protocol/src/errors/mod.rs b/crates/miden-protocol/src/errors/mod.rs index 7f0bbaedfd..d4c8cfa68c 100644 --- a/crates/miden-protocol/src/errors/mod.rs +++ b/crates/miden-protocol/src/errors/mod.rs @@ -764,8 +764,6 @@ pub enum TransactionScriptError { AssemblyError(Report), #[error("failed to convert package to transaction script:\n{}", PrintDiagnostic::new(.0))] PackageNotProgram(Report), - #[error("failed to convert package to transaction script:\n{}", PrintDiagnostic::new(.0))] - PackageNotTransactionScript(Report), } // TRANSACTION INPUT ERROR diff --git a/crates/miden-protocol/src/transaction/tx_args.rs b/crates/miden-protocol/src/transaction/tx_args.rs index 1457b7b746..fea29f91b6 100644 --- a/crates/miden-protocol/src/transaction/tx_args.rs +++ b/crates/miden-protocol/src/transaction/tx_args.rs @@ -2,10 +2,9 @@ use alloc::collections::BTreeMap; use alloc::sync::Arc; use alloc::vec::Vec; -use miden_assembly::Report; use miden_core::mast::MastNodeExt; use miden_crypto::merkle::InnerNodeInfo; -use miden_mast_package::{Package, TargetType}; +use miden_mast_package::Package; use super::{Felt, Hasher, Word}; use crate::account::auth::{PublicKeyCommitment, Signature}; @@ -314,22 +313,14 @@ impl TransactionScript { /// Creates a [TransactionScript] from a [`Package`]. /// /// The package must be an executable (i.e., its target type must be - /// [`TargetType::TransactionScript`](miden_mast_package::TargetType::TransactionScript)). + /// [`TargetType::Executable`](miden_mast_package::TargetType::Executable)). /// /// # Errors /// Returns an error if the package cannot be converted to an executable program. pub fn from_package(package: &Package) -> Result { - let package_kind = package.kind; - if !matches!(package_kind, TargetType::TransactionScript) { - let err_report = Report::msg(format!( - "package's kind is {}, expected TransactionScript", - package_kind - )); - return Err(TransactionScriptError::PackageNotTransactionScript(err_report)); - }; - - let program = - package.try_into_program().map_err(TransactionScriptError::PackageNotProgram)?; + let program = package + .try_into_program() + .map_err(TransactionScriptError::PackageNotProgram)?; Ok(TransactionScript::new(program)) } From 478f8a0a10e85a6e58b50578e8ae5d80cec4342b Mon Sep 17 00:00:00 2001 From: Tomas Fabrizio Orsi Date: Wed, 22 Apr 2026 11:33:00 -0300 Subject: [PATCH 5/6] nit: move CHANGELOG entry to Features list --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6062550504..b2cb52457e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,11 +21,11 @@ - [BREAKING] Added cycle counts to notes returned by `NoteConsumptionInfo` and removed public fields from related types ([#2772](https://github.com/0xMiden/miden-base/issues/2772)). - [BREAKING] Removed unused `payback_attachment` from `SwapNoteStorage` and `attachment` from `MintNoteStorage` ([#2789](https://github.com/0xMiden/protocol/pull/2789)). - Automatically enable `concurrent` feature in `miden-tx` for `std` context ([#2791](https://github.com/0xMiden/protocol/pull/2791)). +- Added `TransactionScript::from_package()` method to create `TransactionScript` from `miden-mast-package::Package` ([#2779](https://github.com/0xMiden/protocol/pull/2779)). ### Fixes - Made deserialization of `AccountCode` more robust ([#2788](https://github.com/0xMiden/protocol/pull/2788)). -- Added `TransactionScript::from_package()` method to create `TransactionScript` from `miden-mast-package::Package` ([#2779](https://github.com/0xMiden/protocol/pull/2779)). ## 0.14.3 (2026-04-07) From 178466accb1952295a300e327dc27ebbb132c9f4 Mon Sep 17 00:00:00 2001 From: Tomas Fabrizio Orsi Date: Wed, 22 Apr 2026 11:37:24 -0300 Subject: [PATCH 6/6] chore: make format --- crates/miden-protocol/src/transaction/tx_args.rs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/crates/miden-protocol/src/transaction/tx_args.rs b/crates/miden-protocol/src/transaction/tx_args.rs index fea29f91b6..a92c9019b7 100644 --- a/crates/miden-protocol/src/transaction/tx_args.rs +++ b/crates/miden-protocol/src/transaction/tx_args.rs @@ -318,9 +318,8 @@ impl TransactionScript { /// # Errors /// Returns an error if the package cannot be converted to an executable program. pub fn from_package(package: &Package) -> Result { - let program = package - .try_into_program() - .map_err(TransactionScriptError::PackageNotProgram)?; + let program = + package.try_into_program().map_err(TransactionScriptError::PackageNotProgram)?; Ok(TransactionScript::new(program)) }