pub struct AuthNetworkAccount { /* private fields */ }Expand description
An AccountComponent implementing an authentication scheme that restricts what notes an
account can consume to a fixed allowlist of note script roots, and what transaction scripts may
run against the account to a fixed allowlist of tx script roots.
This is intended for network-owned accounts (e.g. the AggLayer bridge or a network faucet) whose only legitimate inputs are a known, finite set of system-issued notes and scripts.
The component exports a single auth procedure, auth_network_transaction, that rejects the
transaction unless:
- the transaction script root, if any, is present in the component’s tx-script allowlist, and
- every consumed input note has a script root present in the component’s note-script allowlist.
Because a network account has no signature gate by default, a transaction script is an unconstrained code path that could call the account’s procedures directly. The tx-script allowlist constrains this to a fixed set of owner-approved scripts; an empty tx-script allowlist permits no transaction scripts at all.
IMPORTANT: an allowlisted root pins a script’s code (its MAST root), not the inputs it runs
on. A tx script still receives caller-controlled TX_SCRIPT_ARGS and advice-provider inputs,
and a note script receives caller-controlled NOTE_ARGS; on an open network account anyone can
supply those. A root should therefore only be allowlisted when the script’s effect is safe for
every possible input. The canonical example is a tx script that sets the transaction
expiration delta to a hardcoded constant: its effect is fixed regardless of caller or inputs,
and the kernel only ever lets a script tighten the current transaction’s expiration window
(never extend it), so the worst a caller can do is make their own transaction expire sooner.
Allowlisting a script whose effect depends on its inputs re-opens the very code path the
allowlist exists to constrain.
The note allowlist is stored in the standardized NetworkAccountNoteAllowlist slot so
off-chain services can identify a network account by checking for this slot.
Both allowlists are fixed at account creation: this component intentionally exports no procedure to mutate them after deployment. That is a limitation of this component rather than a safety requirement, and a user who needs a mutable allowlist can write their own component today. Note that the node would likely not yet respect updates made to the list after deployment, but there is in principle nothing preventing us from supporting mutation in the future.
Implementations§
Source§impl AuthNetworkAccount
impl AuthNetworkAccount
Sourcepub const NAME: &'static str = "miden::standards::auth::network_account"
pub const NAME: &'static str = "miden::standards::auth::network_account"
The name of the component.
Sourcepub const fn name() -> AccountComponentName
pub const fn name() -> AccountComponentName
Returns the canonical AccountComponentName of this component.
Sourcepub fn code() -> &'static AccountComponentCode
pub fn code() -> &'static AccountComponentCode
Returns the AccountComponentCode of this component.
Sourcepub fn with_allowed_notes(
allowed_script_roots: BTreeSet<NoteScriptRoot>,
) -> Result<AuthNetworkAccount, NetworkAccountNoteAllowlistError>
pub fn with_allowed_notes( allowed_script_roots: BTreeSet<NoteScriptRoot>, ) -> Result<AuthNetworkAccount, NetworkAccountNoteAllowlistError>
Creates a new AuthNetworkAccount component with the provided list of allowed
input-note script roots.
§Errors
Returns an error if allowed_script_roots is empty since the account could not consume any
notes.
Sourcepub fn with_allowed_tx_scripts(
self,
allowed_tx_script_roots: BTreeSet<TransactionScriptRoot>,
) -> AuthNetworkAccount
pub fn with_allowed_tx_scripts( self, allowed_tx_script_roots: BTreeSet<TransactionScriptRoot>, ) -> AuthNetworkAccount
Sets the allowlist of transaction script roots this account will execute, replacing any previously configured tx-script allowlist.
An empty set (the default) means the account permits no transaction scripts.
Only scripts whose effect is safe for every possible input should be allowlisted: a root
pins the script’s code but not its TX_SCRIPT_ARGS or advice inputs, which the
(arbitrary) transaction submitter controls. See the AuthNetworkAccount type docs for
the full rationale.
Sourcepub fn allowed_note_scripts_slot() -> &'static StorageSlotName
pub fn allowed_note_scripts_slot() -> &'static StorageSlotName
Returns the storage slot holding the allowlist of allowed input-note script roots.
Sourcepub fn allowed_note_scripts_slot_schema() -> (StorageSlotName, StorageSlotSchema)
pub fn allowed_note_scripts_slot_schema() -> (StorageSlotName, StorageSlotSchema)
Returns the storage slot schema for the note-script allowlist slot.
Sourcepub fn allowed_tx_scripts_slot() -> &'static StorageSlotName
pub fn allowed_tx_scripts_slot() -> &'static StorageSlotName
Returns the storage slot holding the allowlist of allowed transaction script roots.
Sourcepub fn allowed_tx_scripts_slot_schema() -> (StorageSlotName, StorageSlotSchema)
pub fn allowed_tx_scripts_slot_schema() -> (StorageSlotName, StorageSlotSchema)
Returns the storage slot schema for the tx-script allowlist slot.
Sourcepub fn component_metadata() -> AccountComponentMetadata
pub fn component_metadata() -> AccountComponentMetadata
Returns the AccountComponentMetadata for this component.
Trait Implementations§
Source§impl From<AuthNetworkAccount> for AccountComponent
impl From<AuthNetworkAccount> for AccountComponent
Source§fn from(component: AuthNetworkAccount) -> AccountComponent
fn from(component: AuthNetworkAccount) -> AccountComponent
Auto Trait Implementations§
impl Freeze for AuthNetworkAccount
impl RefUnwindSafe for AuthNetworkAccount
impl Send for AuthNetworkAccount
impl Sync for AuthNetworkAccount
impl Unpin for AuthNetworkAccount
impl UnsafeUnpin for AuthNetworkAccount
impl UnwindSafe for AuthNetworkAccount
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> 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