pub struct CodeBuilder { /* private fields */ }Expand description
A builder for compiling account components, note scripts, and transaction scripts with optional library dependencies.
The CodeBuilder 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 CodeBuilder 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 compiling methods consume the CodeBuilder, so if you need to compile multiple scripts with the same configuration, you should clone the builder first.
§Builder Pattern Example
let script = CodeBuilder::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 parse tx script")?;§Note
The CodeBuilder 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 CodeBuilder
impl CodeBuilder
Sourcepub fn with_source_manager(source_manager: Arc<dyn SourceManagerSync>) -> Self
pub fn with_source_manager(source_manager: Arc<dyn SourceManagerSync>) -> Self
Creates a new CodeBuilder with the specified source manager.
§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 Parse,
) -> Result<(), CodeBuilderError>
pub fn link_module( &mut self, module_path: impl AsRef<str>, module_code: impl Parse, ) -> Result<(), CodeBuilderError>
Parses and links a module to the code 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<(), CodeBuilderError>
pub fn link_static_library( &mut self, library: &Library, ) -> Result<(), CodeBuilderError>
Sourcepub fn link_dynamic_library(
&mut self,
library: &Library,
) -> Result<(), CodeBuilderError>
pub fn link_dynamic_library( &mut self, library: &Library, ) -> Result<(), CodeBuilderError>
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<Self, CodeBuilderError>
pub fn with_statically_linked_library( self, library: &Library, ) -> Result<Self, CodeBuilderError>
Sourcepub fn with_dynamically_linked_library(
self,
library: impl AsRef<Library>,
) -> Result<Self, CodeBuilderError>
pub fn with_dynamically_linked_library( self, library: impl AsRef<Library>, ) -> Result<Self, CodeBuilderError>
Sourcepub fn with_linked_module(
self,
module_path: impl AsRef<str>,
module_code: impl Parse,
) -> Result<Self, CodeBuilderError>
pub fn with_linked_module( self, module_path: impl AsRef<str>, module_code: impl Parse, ) -> Result<Self, CodeBuilderError>
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_component_code(
self,
component_path: impl AsRef<str>,
component_code: impl Parse,
) -> Result<AccountComponentCode, CodeBuilderError>
pub fn compile_component_code( self, component_path: impl AsRef<str>, component_code: impl Parse, ) -> Result<AccountComponentCode, CodeBuilderError>
Compiles the provided module path and MASM code into an AccountComponentCode.
The resulting code can be used to create account components.
§Arguments
component_path- The path to the account code module (e.g.,my_account::my_module)component_code- The account component source code
§Errors
Returns an error if:
- Compiling the account component code fails
Sourcepub fn compile_tx_script(
self,
tx_script: impl Parse,
) -> Result<TransactionScript, CodeBuilderError>
pub fn compile_tx_script( self, tx_script: impl Parse, ) -> Result<TransactionScript, CodeBuilderError>
Compiles the provided MASM code into a TransactionScript.
The parsed script will have access to all modules that have been added to this builder.
§Arguments
tx_script- The transaction script source code
§Errors
Returns an error if:
- The transaction script compiling fails
Sourcepub fn compile_note_script(
self,
program: impl Parse,
) -> Result<NoteScript, CodeBuilderError>
pub fn compile_note_script( self, program: impl Parse, ) -> Result<NoteScript, CodeBuilderError>
Compiles the provided MASM code into a NoteScript.
The parsed script will have access to all modules that have been added to this builder.
§Arguments
program- The note script source code
§Errors
Returns an error if:
- The note script compiling fails
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 CodeBuilder
impl Clone for CodeBuilder
Source§fn clone(&self) -> CodeBuilder
fn clone(&self) -> CodeBuilder
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Default for CodeBuilder
impl Default for CodeBuilder
Source§impl From<CodeBuilder> for Assembler
impl From<CodeBuilder> for Assembler
Source§fn from(builder: CodeBuilder) -> Self
fn from(builder: CodeBuilder) -> Self
Auto Trait Implementations§
impl Freeze for CodeBuilder
impl !RefUnwindSafe for CodeBuilder
impl !Send for CodeBuilder
impl !Sync for CodeBuilder
impl Unpin for CodeBuilder
impl !UnwindSafe for CodeBuilder
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<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