MockChainBuilder

Struct MockChainBuilder 

Source
pub struct MockChainBuilder { /* private fields */ }
Expand description

A builder for a MockChain’s genesis block.

§Example

let mut builder = MockChain::builder();
let existing_wallet =
    builder.add_existing_wallet_with_assets(Auth::IncrNonce, [FungibleAsset::mock(500)])?;
let new_wallet = builder.create_new_wallet(Auth::IncrNonce)?;

let existing_note = builder.add_p2id_note(
    existing_wallet.id(),
    new_wallet.id(),
    &[FungibleAsset::mock(100)],
    NoteType::Private,
)?;
let chain = builder.build()?;

// The existing wallet and note should be part of the chain state.
assert!(chain.committed_account(existing_wallet.id()).is_ok());
assert!(chain.committed_notes().get(&existing_note.id()).is_some());

// The new wallet should *not* be part of the chain state - it must be created in
// a transaction first.
assert!(chain.committed_account(new_wallet.id()).is_err());

Note the distinction between add_ and create_ APIs. Any add_ APIs will add something to the genesis chain state while create_ APIs do not mutate the genesis state. The latter are simply convenient for creating accounts or notes that will be created by transactions.

See also the MockChain docs for examples on using the mock chain.

Implementations§

Source§

impl MockChainBuilder

Source

pub fn new() -> Self

Initializes a new mock chain builder with an empty state.

By default, the native_asset_id is set to ACCOUNT_ID_NATIVE_ASSET_FAUCET and can be overwritten using Self::native_asset_id.

The verification_base_fee is initialized to 0 which means no fees are required by default.

Source

pub fn with_accounts( accounts: impl IntoIterator<Item = Account>, ) -> Result<Self>

Initializes a new mock chain builder with the provided accounts.

This method only adds the accounts and cannot not register any authenticators for them. Calling MockChain::build_tx_context on accounts added in this way will not work if the account needs an authenticator.

Due to these limitations, prefer using other methods to add accounts to the chain, e.g. MockChainBuilder::add_account_from_builder.

Source

pub fn native_asset_id(self, native_asset_id: AccountId) -> Self

Sets the native asset ID of the chain.

This must be a fungible faucet AccountId and is the asset in which fees will be accepted by the transaction kernel.

Source

pub fn verification_base_fee(self, verification_base_fee: u32) -> Self

Sets the verification_base_fee of the chain.

See FeeParameters for more details.

Source

pub fn build(self) -> Result<MockChain>

Consumes the builder, creates the genesis block of the chain and returns the MockChain.

Source

pub fn create_new_wallet(&mut self, auth_method: Auth) -> Result<Account>

Creates a new public BasicWallet account and registers the authenticator (if any) for it.

This does not add the account to the chain state, but it can still be used to call MockChain::build_tx_context to automatically add the authenticator.

Source

pub fn add_existing_wallet(&mut self, auth_method: Auth) -> Result<Account>

Adds an existing public BasicWallet account to the initial chain state and registers the authenticator (if any).

Source

pub fn add_existing_wallet_with_assets( &mut self, auth_method: Auth, assets: impl IntoIterator<Item = Asset>, ) -> Result<Account>

Adds an existing public BasicWallet account to the initial chain state and registers the authenticator (if any).

Source

pub fn create_new_faucet( &mut self, auth_method: Auth, token_symbol: &str, max_supply: u64, ) -> Result<Account>

Creates a new public BasicFungibleFaucet account and registers the authenticator (if any) for it.

This does not add the account to the chain state, but it can still be used to call MockChain::build_tx_context to automatically add the authenticator.

Source

pub fn add_existing_basic_faucet( &mut self, auth_method: Auth, token_symbol: &str, max_supply: u64, total_issuance: Option<u64>, ) -> Result<Account>

Adds an existing BasicFungibleFaucet account to the initial chain state and registers the authenticator.

Basic fungible faucets always use AccountStorageMode::Public and require authentication.

Source

pub fn add_existing_network_faucet( &mut self, token_symbol: &str, max_supply: u64, owner_account_id: AccountId, total_issuance: Option<u64>, ) -> Result<Account>

Adds an existing NetworkFungibleFaucet account to the initial chain state.

Network fungible faucets always use AccountStorageMode::Network and Auth::NoAuth.

Source

pub fn create_new_mock_account(&mut self, auth_method: Auth) -> Result<Account>

Creates a new public account with an MockAccountComponent and registers the authenticator (if any).

Source

pub fn add_existing_mock_account( &mut self, auth_method: Auth, ) -> Result<Account>

Adds an existing public account with an MockAccountComponent to the initial chain state and registers the authenticator (if any).

Source

pub fn add_existing_mock_account_with_storage( &mut self, auth_method: Auth, slots: impl IntoIterator<Item = StorageSlot>, ) -> Result<Account>

Adds an existing public account with an MockAccountComponent to the initial chain state and registers the authenticator (if any).

Source

pub fn add_existing_mock_account_with_assets( &mut self, auth_method: Auth, assets: impl IntoIterator<Item = Asset>, ) -> Result<Account>

Adds an existing public account with an MockAccountComponent to the initial chain state and registers the authenticator (if any).

Source

pub fn add_existing_mock_account_with_storage_and_assets( &mut self, auth_method: Auth, slots: impl IntoIterator<Item = StorageSlot>, assets: impl IntoIterator<Item = Asset>, ) -> Result<Account>

Adds an existing public account with an MockAccountComponent to the initial chain state and registers the authenticator (if any).

Source

pub fn add_account_from_builder( &mut self, auth_method: Auth, account_builder: AccountBuilder, account_state: AccountState, ) -> Result<Account>

Builds the provided AccountBuilder with the provided auth method and registers the authenticator (if any).

  • If AccountState::Exists is given the account is built as an existing account and added to the initial chain state. It can then be used in a transaction without having to validate its seed.
  • If AccountState::New is given the account is built as a new account and is not added to the chain. Its authenticator is registered (if present). Its first transaction will be its creation transaction. MockChain::build_tx_context can be called with the account to automatically add the authenticator.
Source

pub fn add_account(&mut self, account: Account) -> Result<()>

Adds the provided account to the list of genesis accounts.

This method only adds the account and does not store its account authenticator for it. Calling MockChain::build_tx_context on accounts added in this way will not work if the account needs an authenticator.

Due to these limitations, prefer using other methods to add accounts to the chain, e.g. MockChainBuilder::add_account_from_builder.

Source

pub fn add_output_note(&mut self, note: impl Into<OutputNote>)

Adds the provided note to the initial chain state.

Source

pub fn add_p2any_note( &mut self, sender_account_id: AccountId, note_type: NoteType, assets: impl IntoIterator<Item = Asset>, ) -> Result<Note>

Creates a new P2ANY note from the provided parameters and adds it to the list of genesis notes.

This note is similar to a P2ID note but can be consumed by any account.

Source

pub fn add_p2id_note( &mut self, sender_account_id: AccountId, target_account_id: AccountId, asset: &[Asset], note_type: NoteType, ) -> Result<Note, NoteError>

Creates a new P2ID note from the provided parameters and adds it to the list of genesis notes.

In the created MockChain, the note will be immediately spendable by target_account_id and carries no additional reclaim or timelock conditions.

Source

pub fn add_p2ide_note( &mut self, sender_account_id: AccountId, target_account_id: AccountId, asset: &[Asset], note_type: NoteType, reclaim_height: Option<BlockNumber>, timelock_height: Option<BlockNumber>, ) -> Result<Note, NoteError>

Adds a P2IDE OutputNote (pay‑to‑ID‑extended) to the list of genesis notes.

A P2IDE note can include an optional timelock_height and/or an optional reclaim_height after which the sender_account_id may reclaim the funds.

Source

pub fn add_swap_note( &mut self, sender: AccountId, offered_asset: Asset, requested_asset: Asset, payback_note_type: NoteType, ) -> Result<(Note, NoteDetails)>

Adds a public SWAP OutputNote to the list of genesis notes.

Source

pub fn add_spawn_note<'note, I>( &mut self, output_notes: impl IntoIterator<Item = &'note Note, IntoIter = I>, ) -> Result<Note>
where I: ExactSizeIterator<Item = &'note Note>,

Adds a public SPAWN note to the list of genesis notes.

A SPAWN note contains a note script that creates all output_notes that get passed as a parameter.

§Errors

Returns an error if:

  • the sender account ID of the provided output notes is not consistent or does not match the transaction’s sender.
Source

pub fn add_p2id_note_with_fee( &mut self, target_account_id: AccountId, amount: u64, ) -> Result<Note>

Creates a new P2ID note with the provided amount of the native fee asset of the chain.

The native asset ID of the asset can be set using Self::native_asset_id. By default it is ACCOUNT_ID_NATIVE_ASSET_FAUCET.

In the created MockChain, the note will be immediately spendable by target_account_id.

Source

pub fn rng_mut(&mut self) -> &mut RpoRandomCoin

Returns a mutable reference to the builder’s RNG.

This can be used when creating accounts or notes and randomness is required.

Trait Implementations§

Source§

impl Clone for MockChainBuilder

Source§

fn clone(&self) -> MockChainBuilder

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for MockChainBuilder

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for MockChainBuilder

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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 more
Source§

impl<D> OwoColorize for D

Source§

fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>
where C: Color,

Set the foreground color generically Read more
Source§

fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>
where C: Color,

Set the background color generically. Read more
Source§

fn black(&self) -> FgColorDisplay<'_, Black, Self>

Change the foreground color to black
Source§

fn on_black(&self) -> BgColorDisplay<'_, Black, Self>

Change the background color to black
Source§

fn red(&self) -> FgColorDisplay<'_, Red, Self>

Change the foreground color to red
Source§

fn on_red(&self) -> BgColorDisplay<'_, Red, Self>

Change the background color to red
Source§

fn green(&self) -> FgColorDisplay<'_, Green, Self>

Change the foreground color to green
Source§

fn on_green(&self) -> BgColorDisplay<'_, Green, Self>

Change the background color to green
Source§

fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>

Change the foreground color to yellow
Source§

fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>

Change the background color to yellow
Source§

fn blue(&self) -> FgColorDisplay<'_, Blue, Self>

Change the foreground color to blue
Source§

fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>

Change the background color to blue
Source§

fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>

Change the foreground color to magenta
Source§

fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>

Change the background color to magenta
Source§

fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>

Change the foreground color to purple
Source§

fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>

Change the background color to purple
Source§

fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>

Change the foreground color to cyan
Source§

fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>

Change the background color to cyan
Source§

fn white(&self) -> FgColorDisplay<'_, White, Self>

Change the foreground color to white
Source§

fn on_white(&self) -> BgColorDisplay<'_, White, Self>

Change the background color to white
Source§

fn default_color(&self) -> FgColorDisplay<'_, Default, Self>

Change the foreground color to the terminal default
Source§

fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>

Change the background color to the terminal default
Source§

fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>

Change the foreground color to bright black
Source§

fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>

Change the background color to bright black
Source§

fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>

Change the foreground color to bright red
Source§

fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>

Change the background color to bright red
Source§

fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>

Change the foreground color to bright green
Source§

fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>

Change the background color to bright green
Source§

fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>

Change the foreground color to bright yellow
Source§

fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>

Change the background color to bright yellow
Source§

fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>

Change the foreground color to bright blue
Source§

fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>

Change the background color to bright blue
Source§

fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>

Change the foreground color to bright magenta
Source§

fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>

Change the background color to bright magenta
Source§

fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>

Change the foreground color to bright purple
Source§

fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>

Change the background color to bright purple
Source§

fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>

Change the foreground color to bright cyan
Source§

fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>

Change the background color to bright cyan
Source§

fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>

Change the foreground color to bright white
Source§

fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>

Change the background color to bright white
Source§

fn bold(&self) -> BoldDisplay<'_, Self>

Make the text bold
Source§

fn dimmed(&self) -> DimDisplay<'_, Self>

Make the text dim
Source§

fn italic(&self) -> ItalicDisplay<'_, Self>

Make the text italicized
Source§

fn underline(&self) -> UnderlineDisplay<'_, Self>

Make the text underlined
Make the text blink
Make the text blink (but fast!)
Source§

fn reversed(&self) -> ReversedDisplay<'_, Self>

Swap the foreground and background colors
Source§

fn hidden(&self) -> HiddenDisplay<'_, Self>

Hide the text
Source§

fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>

Cross out the text
Source§

fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>
where Color: DynColor,

Set the foreground color at runtime. Only use if you do not know which color will be used at compile-time. If the color is constant, use either OwoColorize::fg or a color-specific method, such as OwoColorize::green, Read more
Source§

fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>
where Color: DynColor,

Set the background color at runtime. Only use if you do not know what color to use at compile-time. If the color is constant, use either OwoColorize::bg or a color-specific method, such as OwoColorize::on_yellow, Read more
Source§

fn fg_rgb<const R: u8, const G: u8, const B: u8>( &self, ) -> FgColorDisplay<'_, CustomColor<R, G, B>, Self>

Set the foreground color to a specific RGB value.
Source§

fn bg_rgb<const R: u8, const G: u8, const B: u8>( &self, ) -> BgColorDisplay<'_, CustomColor<R, G, B>, Self>

Set the background color to a specific RGB value.
Source§

fn truecolor(&self, r: u8, g: u8, b: u8) -> FgDynColorDisplay<'_, Rgb, Self>

Sets the foreground color to an RGB value.
Source§

fn on_truecolor(&self, r: u8, g: u8, b: u8) -> BgDynColorDisplay<'_, Rgb, Self>

Sets the background color to an RGB value.
Source§

fn style(&self, style: Style) -> Styled<&Self>

Apply a runtime-determined style
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more