pub struct AuthGuardedMultisig { /* private fields */ }Expand description
An AccountComponent implementing multisig authentication integrated with a state guardian.
It enforces a threshold of approver signatures for every transaction, with optional per-procedure threshold overrides. When a guardian is configured, multisig authorization is combined with guardian authorization, so operations require both multisig approval and a valid guardian signature. This substantially mitigates low-threshold state-withholding scenarios since the guardian is expected to forward state updates to other approvers.
§Fees
Before authenticating, auth_tx_guarded_multisig pays the transaction fee: it creates a public
TX_FEE note (see TxFeeNote) funded from the account’s vault, so on
fee-charging chains the account must hold a sufficient balance of the native fee asset. The
conversion info is committed to via the transaction’s auth args (see
FeeConversionInfo and
commit_fee_conversion_info). On chains with a zero
verification base fee no note is created. The fee note is created before the transaction
summary, so it is covered by the approver and guardian signatures; the auth args word continues
to serve as the summary salt, and the uniqueness replay protection relies on originates from
the caller-chosen salt.
The conversion rate is host-supplied, and guardian key rotation authenticates without a
guardian signature and can be thresholded below the account’s spending quorum. The component
therefore bounds the payment: it must be in the native fee asset and at most twice the computed
fee (fee::assert_fee_bound), so a rotation authorized below that quorum can at most overpay
the fee, not move arbitrary value out of the account.
Rotation requires that the transaction create no notes beyond the fee note, so it works on a fee-charging chain — but it does require the vault to fund the fee. Rotation also forbids input notes, and assets can only enter a vault through an input note, so the funding transaction must be a separate one, and being a separate one it takes the ordinary path and needs a guardian signature. A guarded account on a fee-charging chain must therefore keep a standing balance of the native fee asset while its guardian key still works: a lost guardian key combined with an unfunded vault cannot be recovered.
§Privacy
Approvers and the guardian using AuthScheme::EcdsaK256Keccak disclose their public
key and signature at proving time and therefore do not get public-key privacy; those using
Falcon512Poseidon2 do. See Approver for details.
Implementations§
Source§impl AuthGuardedMultisig
impl AuthGuardedMultisig
Sourcepub const NAME: &'static str = "miden::standards::auth::guarded_multisig"
pub const NAME: &'static str = "miden::standards::auth::guarded_multisig"
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 new(
config: AuthGuardedMultisigConfig,
) -> Result<AuthGuardedMultisig, AccountError>
pub fn new( config: AuthGuardedMultisigConfig, ) -> Result<AuthGuardedMultisig, AccountError>
Creates a new AuthGuardedMultisig component from the provided configuration.
Sourcepub fn threshold_config_slot() -> &'static StorageSlotName
pub fn threshold_config_slot() -> &'static StorageSlotName
Returns the StorageSlotName where the threshold configuration is stored.
Sourcepub fn approver_public_keys_slot() -> &'static StorageSlotName
pub fn approver_public_keys_slot() -> &'static StorageSlotName
Returns the StorageSlotName where the approver public keys are stored.
pub fn approver_scheme_ids_slot() -> &'static StorageSlotName
Sourcepub fn executed_transactions_slot() -> &'static StorageSlotName
pub fn executed_transactions_slot() -> &'static StorageSlotName
Returns the StorageSlotName where the executed transactions are stored.
Sourcepub fn procedure_thresholds_slot() -> &'static StorageSlotName
pub fn procedure_thresholds_slot() -> &'static StorageSlotName
Returns the StorageSlotName where the procedure thresholds are stored.
Sourcepub fn guardian_public_key_slot() -> &'static StorageSlotName
pub fn guardian_public_key_slot() -> &'static StorageSlotName
Returns the StorageSlotName where the guardian public key is stored.
Sourcepub fn guardian_scheme_id_slot() -> &'static StorageSlotName
pub fn guardian_scheme_id_slot() -> &'static StorageSlotName
Returns the StorageSlotName where the guardian scheme IDs are stored.
Sourcepub fn threshold_config_slot_schema() -> (StorageSlotName, StorageSlotSchema)
pub fn threshold_config_slot_schema() -> (StorageSlotName, StorageSlotSchema)
Returns the storage slot schema for the threshold configuration slot.
Sourcepub fn approver_public_keys_slot_schema() -> (StorageSlotName, StorageSlotSchema)
pub fn approver_public_keys_slot_schema() -> (StorageSlotName, StorageSlotSchema)
Returns the storage slot schema for the approver public keys slot.
pub fn approver_auth_scheme_slot_schema() -> (StorageSlotName, StorageSlotSchema)
Sourcepub fn executed_transactions_slot_schema() -> (StorageSlotName, StorageSlotSchema)
pub fn executed_transactions_slot_schema() -> (StorageSlotName, StorageSlotSchema)
Returns the storage slot schema for the executed transactions slot.
Sourcepub fn procedure_thresholds_slot_schema() -> (StorageSlotName, StorageSlotSchema)
pub fn procedure_thresholds_slot_schema() -> (StorageSlotName, StorageSlotSchema)
Returns the storage slot schema for the procedure thresholds slot.
Sourcepub fn guardian_public_key_slot_schema() -> (StorageSlotName, StorageSlotSchema)
pub fn guardian_public_key_slot_schema() -> (StorageSlotName, StorageSlotSchema)
Returns the storage slot schema for the guardian public key slot.
Sourcepub fn guardian_auth_scheme_slot_schema() -> (StorageSlotName, StorageSlotSchema)
pub fn guardian_auth_scheme_slot_schema() -> (StorageSlotName, StorageSlotSchema)
Returns the storage slot schema for the guardian scheme IDs slot.
Sourcepub fn component_metadata() -> AccountComponentMetadata
pub fn component_metadata() -> AccountComponentMetadata
Returns the AccountComponentMetadata for this component.
Trait Implementations§
Source§impl Debug for AuthGuardedMultisig
impl Debug for AuthGuardedMultisig
Source§impl From<AuthGuardedMultisig> for AccountComponent
impl From<AuthGuardedMultisig> for AccountComponent
Source§fn from(multisig: AuthGuardedMultisig) -> AccountComponent
fn from(multisig: AuthGuardedMultisig) -> AccountComponent
Auto Trait Implementations§
impl Freeze for AuthGuardedMultisig
impl RefUnwindSafe for AuthGuardedMultisig
impl Send for AuthGuardedMultisig
impl Sync for AuthGuardedMultisig
impl Unpin for AuthGuardedMultisig
impl UnsafeUnpin for AuthGuardedMultisig
impl UnwindSafe for AuthGuardedMultisig
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