pub struct ScriptBuilder { /* private fields */ }
Expand description
A builder for compiling note scripts and transaction scripts with optional library dependencies.
The ScriptBuilder simplifies the process of creating transaction scripts by providing:
- A clean API for adding multiple libraries with static or dynamic linking
- Automatic assembler configuration with all added libraries
- Debug mode support
- Builder pattern support for method chaining
§Static vs Dynamic Linking
Static Linking (link_static_library()
/ with_statically_linked_library()
):
- Use when you control and know the library code
- The library code is copied into the script code
- Best for most user-written libraries and dependencies
- Results in larger script size but ensures the code is always available
Dynamic Linking (link_dynamic_library()
/ with_dynamically_linked_library()
):
- Use when making Foreign Procedure Invocation (FPI) calls
- The library code is available on-chain and referenced, not copied
- Results in smaller script size but requires the code to be available on-chain
§Typical Workflow
- Create a new ScriptBuilder with debug mode preference
- Add any required modules using
link_module()
orwith_linked_module()
- Add libraries using
link_static_library()
/link_dynamic_library()
as appropriate - Compile your script with
compile_note_script()
orcompile_tx_script()
Note that the compilation methods consume the ScriptBuilder, so if you need to compile multiple scripts with the same configuration, you should clone the builder first.
§Builder Pattern Example
let script = ScriptBuilder::default()
.with_linked_module("my::module", module_code).context("failed to link module")?
.with_statically_linked_library(&my_lib).context("failed to link static library")?
.with_dynamically_linked_library(&fpi_lib).context("failed to link dynamic library")? // For FPI calls
.compile_tx_script(script_code).context("failed to compile tx script")?;
§Note
The ScriptBuilder automatically includes the miden
and std
libraries, which
provide access to transaction kernel procedures. Due to being available on-chain
these libraries are linked dynamically and do not add to the size of built script.
Implementations§
Source§impl ScriptBuilder
impl ScriptBuilder
Sourcepub fn new(in_debug_mode: bool) -> ScriptBuilder
pub fn new(in_debug_mode: bool) -> ScriptBuilder
Creates a new ScriptBuilder with the specified debug mode.
§Arguments
in_debug_mode
- Whether to enable debug mode in the assembler
Sourcepub fn with_source_manager(
source_manager: Arc<dyn SourceManagerSync>,
) -> ScriptBuilder
pub fn with_source_manager( source_manager: Arc<dyn SourceManagerSync>, ) -> ScriptBuilder
Creates a new ScriptBuilder with the specified source manager.
The returned builder is instantiated with debug mode enabled.
§Arguments
source_manager
- The source manager to use with the internalAssembler
Sourcepub fn link_module(
&mut self,
module_path: impl AsRef<str>,
module_code: impl AsRef<str>,
) -> Result<(), ScriptBuilderError>
pub fn link_module( &mut self, module_path: impl AsRef<str>, module_code: impl AsRef<str>, ) -> Result<(), ScriptBuilderError>
Compiles and links a module to the script builder.
This method compiles the provided module code and adds it directly to the assembler for use in script compilation.
§Arguments
module_path
- The path identifier for the module (e.g., “my_lib::my_module”)module_code
- The source code of the module to compile and link
§Errors
Returns an error if:
- The module path is invalid
- The module code cannot be parsed
- The module cannot be assembled
Sourcepub fn link_static_library(
&mut self,
library: &Library,
) -> Result<(), ScriptBuilderError>
pub fn link_static_library( &mut self, library: &Library, ) -> Result<(), ScriptBuilderError>
Sourcepub fn link_dynamic_library(
&mut self,
library: &Library,
) -> Result<(), ScriptBuilderError>
pub fn link_dynamic_library( &mut self, library: &Library, ) -> Result<(), ScriptBuilderError>
Dynamically links a library.
This is useful to dynamically link the Library
of a foreign account
that is invoked using foreign procedure invocation (FPI). Its code is available
on-chain and so it does not have to be copied into the script code.
For all other use cases not involving FPI, link the library statically.
§Arguments
library
- The compiled library to dynamically link
§Errors
Returns an error if the library cannot be added to the assembler
Sourcepub fn with_statically_linked_library(
self,
library: &Library,
) -> Result<ScriptBuilder, ScriptBuilderError>
pub fn with_statically_linked_library( self, library: &Library, ) -> Result<ScriptBuilder, ScriptBuilderError>
Sourcepub fn with_dynamically_linked_library(
self,
library: &Library,
) -> Result<ScriptBuilder, ScriptBuilderError>
pub fn with_dynamically_linked_library( self, library: &Library, ) -> Result<ScriptBuilder, ScriptBuilderError>
Sourcepub fn with_linked_module(
self,
module_path: impl AsRef<str>,
module_code: impl AsRef<str>,
) -> Result<ScriptBuilder, ScriptBuilderError>
pub fn with_linked_module( self, module_path: impl AsRef<str>, module_code: impl AsRef<str>, ) -> Result<ScriptBuilder, ScriptBuilderError>
Builder-style method to link a module and return the modified builder.
This enables method chaining for convenient builder patterns.
§Arguments
module_path
- The path identifier for the module (e.g., “my_lib::my_module”)module_code
- The source code of the module to compile and link
§Errors
Returns an error if the module cannot be compiled or added to the assembler
Sourcepub fn compile_tx_script(
self,
tx_script: impl AsRef<str>,
) -> Result<TransactionScript, ScriptBuilderError>
pub fn compile_tx_script( self, tx_script: impl AsRef<str>, ) -> Result<TransactionScript, ScriptBuilderError>
Sourcepub fn compile_note_script(
self,
program: impl AsRef<str>,
) -> Result<NoteScript, ScriptBuilderError>
pub fn compile_note_script( self, program: impl AsRef<str>, ) -> Result<NoteScript, ScriptBuilderError>
Sourcepub fn source_manager(&self) -> Arc<dyn SourceManagerSync>
pub fn source_manager(&self) -> Arc<dyn SourceManagerSync>
Access the Assembler
’s SourceManagerSync
.
Trait Implementations§
Source§impl Clone for ScriptBuilder
impl Clone for ScriptBuilder
Source§fn clone(&self) -> ScriptBuilder
fn clone(&self) -> ScriptBuilder
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl Default for ScriptBuilder
impl Default for ScriptBuilder
Source§fn default() -> ScriptBuilder
fn default() -> ScriptBuilder
Auto Trait Implementations§
impl Freeze for ScriptBuilder
impl !RefUnwindSafe for ScriptBuilder
impl !Send for ScriptBuilder
impl !Sync for ScriptBuilder
impl Unpin for ScriptBuilder
impl !UnwindSafe for ScriptBuilder
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T
in a tonic::Request
Source§impl<D> OwoColorize for D
impl<D> OwoColorize for D
Source§fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
Source§fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
Source§fn black(&self) -> FgColorDisplay<'_, Black, Self>
fn black(&self) -> FgColorDisplay<'_, Black, Self>
Source§fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
Source§fn red(&self) -> FgColorDisplay<'_, Red, Self>
fn red(&self) -> FgColorDisplay<'_, Red, Self>
Source§fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
Source§fn green(&self) -> FgColorDisplay<'_, Green, Self>
fn green(&self) -> FgColorDisplay<'_, Green, Self>
Source§fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
Source§fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
Source§fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
Source§fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
Source§fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
Source§fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
Source§fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
Source§fn white(&self) -> FgColorDisplay<'_, White, Self>
fn white(&self) -> FgColorDisplay<'_, White, Self>
Source§fn on_white(&self) -> BgColorDisplay<'_, White, Self>
fn on_white(&self) -> BgColorDisplay<'_, White, Self>
Source§fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
Source§fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
Source§fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
Source§fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
Source§fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
Source§fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
Source§fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
Source§fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
Source§fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
Source§fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
Source§fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
Source§fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
Source§fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
Source§fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
Source§fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
Source§fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
Source§fn bold(&self) -> BoldDisplay<'_, Self>
fn bold(&self) -> BoldDisplay<'_, Self>
Source§fn dimmed(&self) -> DimDisplay<'_, Self>
fn dimmed(&self) -> DimDisplay<'_, Self>
Source§fn italic(&self) -> ItalicDisplay<'_, Self>
fn italic(&self) -> ItalicDisplay<'_, Self>
Source§fn underline(&self) -> UnderlineDisplay<'_, Self>
fn underline(&self) -> UnderlineDisplay<'_, Self>
Source§fn blink(&self) -> BlinkDisplay<'_, Self>
fn blink(&self) -> BlinkDisplay<'_, Self>
Source§fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
Source§fn reversed(&self) -> ReversedDisplay<'_, Self>
fn reversed(&self) -> ReversedDisplay<'_, Self>
Source§fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
Source§fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::fg
or
a color-specific method, such as OwoColorize::green
, Read moreSource§fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::bg
or
a color-specific method, such as OwoColorize::on_yellow
, Read more