pub struct AggLayerBridge { /* private fields */ }Expand description
An AccountComponent implementing the AggLayer Bridge.
It reexports the procedures from agglayer::bridge. When linking against this
component, the agglayer library must be available to the assembler.
The procedures of this component are:
register_faucet, which registers a faucet in the bridge.update_ger, which injects a new GER into the storage map.bridge_out, which bridges an asset out of Miden to the destination network.claim, which validates a claim against the AggLayer bridge and creates a MINT note for the AggLayer Faucet.
§Storage Layout
Self::bridge_admin_id_slot_name: Stores the bridge admin account ID.Self::ger_manager_id_slot_name: Stores the GER manager account ID.Self::ger_map_slot_name: Stores the GERs.Self::faucet_registry_map_slot_name: Stores the faucet registry map.Self::token_registry_map_slot_name: Stores the token address → faucet ID map.Self::faucet_metadata_map_slot_name: Stores conversion metadata (origin address, origin network, scale, metadata hash) for all registered faucets, keyed by sub-key scheme based on faucet ID.Self::network_id_slot_name: Stores the bridge’s AggLayer network ID.Self::claim_nullifiers_slot_name: Stores the CLAIM note nullifiers map (RPO(leaf_index, source_bridge_network) → [1, 0, 0, 0]).Self::cgi_chain_hash_lo_slot_name: Stores the lower 128 bits of the CGI chain hash.Self::cgi_chain_hash_hi_slot_name: Stores the upper 128 bits of the CGI chain hash.Self::let_frontier_slot_name: Stores the Local Exit Tree (LET) frontier.Self::let_root_lo_slot_name: Stores the lower 128 bits of the LET root.Self::let_root_hi_slot_name: Stores the upper 128 bits of the LET root.Self::let_num_leaves_slot_name: Stores the number of leaves in the LET frontier.
The bridge starts with an empty faucet registry; faucets are registered at runtime via CONFIG_AGG_BRIDGE notes.
Claim validation compares the leaf’s destination_network to the bridge’s own network ID,
which is stored in Self::network_id_slot_name at account creation and read at runtime by
the bridge MASM. The network ID is set once and never mutated, so different deployments (e.g.
testnet vs mainnet) can use different IDs.
Implementations§
Source§impl AggLayerBridge
impl AggLayerBridge
Sourcepub fn new(
bridge_admin_id: AccountId,
ger_manager_id: AccountId,
network_id: u32,
) -> AggLayerBridge
pub fn new( bridge_admin_id: AccountId, ger_manager_id: AccountId, network_id: u32, ) -> AggLayerBridge
Creates a new AggLayer bridge component with the standard configuration.
network_id is the AggLayer network ID assigned to the Miden chain.
Sourcepub fn bridge_admin_id_slot_name() -> &'static StorageSlotName
pub fn bridge_admin_id_slot_name() -> &'static StorageSlotName
Storage slot name for the bridge admin account ID.
Sourcepub fn ger_manager_id_slot_name() -> &'static StorageSlotName
pub fn ger_manager_id_slot_name() -> &'static StorageSlotName
Storage slot name for the GER manager account ID.
Sourcepub fn ger_map_slot_name() -> &'static StorageSlotName
pub fn ger_map_slot_name() -> &'static StorageSlotName
Storage slot name for the GERs map.
Sourcepub fn faucet_registry_map_slot_name() -> &'static StorageSlotName
pub fn faucet_registry_map_slot_name() -> &'static StorageSlotName
Storage slot name for the faucet registry map.
Sourcepub fn token_registry_map_slot_name() -> &'static StorageSlotName
pub fn token_registry_map_slot_name() -> &'static StorageSlotName
Storage slot name for the token registry map.
Sourcepub fn faucet_metadata_map_slot_name() -> &'static StorageSlotName
pub fn faucet_metadata_map_slot_name() -> &'static StorageSlotName
Storage slot name for the faucet metadata map.
This map stores conversion metadata (origin address, origin network, scale, metadata hash) for all registered faucets, keyed by sub-key scheme based on faucet ID.
Sourcepub fn network_id_slot_name() -> &'static StorageSlotName
pub fn network_id_slot_name() -> &'static StorageSlotName
Storage slot name for the bridge’s AggLayer network ID.
Holds the network ID assigned to this bridge as a single felt in the first word element. It is set at account creation and never mutated by any bridge procedure.
Sourcepub fn claim_nullifiers_slot_name() -> &'static StorageSlotName
pub fn claim_nullifiers_slot_name() -> &'static StorageSlotName
Storage slot name for the CLAIM note nullifiers map.
Sourcepub fn cgi_chain_hash_lo_slot_name() -> &'static StorageSlotName
pub fn cgi_chain_hash_lo_slot_name() -> &'static StorageSlotName
Storage slot name for the lower 128 bits of the CGI chain hash.
Sourcepub fn cgi_chain_hash_hi_slot_name() -> &'static StorageSlotName
pub fn cgi_chain_hash_hi_slot_name() -> &'static StorageSlotName
Storage slot name for the upper 128 bits of the CGI chain hash.
Sourcepub fn let_frontier_slot_name() -> &'static StorageSlotName
pub fn let_frontier_slot_name() -> &'static StorageSlotName
Storage slot name for the Local Exit Tree (LET) frontier.
Sourcepub fn let_root_lo_slot_name() -> &'static StorageSlotName
pub fn let_root_lo_slot_name() -> &'static StorageSlotName
Storage slot name for the lower 32 bits of the LET root.
Sourcepub fn let_root_hi_slot_name() -> &'static StorageSlotName
pub fn let_root_hi_slot_name() -> &'static StorageSlotName
Storage slot name for the upper 32 bits of the LET root.
Sourcepub fn let_num_leaves_slot_name() -> &'static StorageSlotName
pub fn let_num_leaves_slot_name() -> &'static StorageSlotName
Storage slot name for the number of leaves in the LET frontier.
Sourcepub fn allowed_notes() -> BTreeSet<NoteScriptRoot>
pub fn allowed_notes() -> BTreeSet<NoteScriptRoot>
Returns the set of input-note script roots that AggLayer bridge accounts accept.
The bridge’s AuthNetworkAccount component is initialized with this allowlist, which
means any transaction consuming a note outside this set is rejected before reaching
output_note::create.
Sourcepub fn is_ger_registered(
ger: Keccak256Output,
bridge_account: &Account,
) -> Result<bool, AgglayerBridgeError>
pub fn is_ger_registered( ger: Keccak256Output, bridge_account: &Account, ) -> Result<bool, AgglayerBridgeError>
Returns a boolean indicating whether the provided GER is present in storage of the provided bridge account.
§Errors
Returns an error if:
- the provided account is not an
AggLayerBridgeaccount.
Sourcepub fn read_local_exit_root(
account: &Account,
) -> Result<Vec<Felt>, AgglayerBridgeError>
pub fn read_local_exit_root( account: &Account, ) -> Result<Vec<Felt>, AgglayerBridgeError>
Reads the Local Exit Root (double-word) from the bridge account’s storage.
The Local Exit Root is stored in two dedicated value slots:
AggLayerBridge::let_root_lo_slot_name— low word of the rootAggLayerBridge::let_root_hi_slot_name— high word of the root
Returns the 256-bit root as 8 Felts: first the 4 elements of root_lo, followed by the 4
elements of root_hi. For an empty/uninitialized tree, all elements are zeros.
§Errors
Returns an error if:
- the provided account is not an
AggLayerBridgeaccount.
Sourcepub fn network_id(account: &Account) -> Result<u32, AgglayerBridgeError>
pub fn network_id(account: &Account) -> Result<u32, AgglayerBridgeError>
Returns the AggLayer network ID stored in the bridge account.
§Errors
Returns an error if:
- the provided account is not an
AggLayerBridgeaccount.
Sourcepub fn read_let_num_leaves(account: &Account) -> u64
pub fn read_let_num_leaves(account: &Account) -> u64
Returns the number of leaves in the Local Exit Tree (LET) frontier.
Sourcepub fn cgi_chain_hash(
bridge_account: &Account,
) -> Result<Keccak256Output, AgglayerBridgeError>
pub fn cgi_chain_hash( bridge_account: &Account, ) -> Result<Keccak256Output, AgglayerBridgeError>
Returns the claimed global index (CGI) chain hash from the corresponding storage slot.
§Errors
Returns an error if:
- the provided account is not an
AggLayerBridgeaccount.
Trait Implementations§
Source§impl Clone for AggLayerBridge
impl Clone for AggLayerBridge
Source§fn clone(&self) -> AggLayerBridge
fn clone(&self) -> AggLayerBridge
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for AggLayerBridge
impl Debug for AggLayerBridge
Source§impl From<AggLayerBridge> for AccountComponent
impl From<AggLayerBridge> for AccountComponent
Source§fn from(bridge: AggLayerBridge) -> AccountComponent
fn from(bridge: AggLayerBridge) -> AccountComponent
Auto Trait Implementations§
impl Freeze for AggLayerBridge
impl RefUnwindSafe for AggLayerBridge
impl Send for AggLayerBridge
impl Sync for AggLayerBridge
impl Unpin for AggLayerBridge
impl UnsafeUnpin for AggLayerBridge
impl UnwindSafe for AggLayerBridge
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
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::RequestSource§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