pub struct TokenPolicyManager { /* private fields */ }Expand description
An AccountComponent that owns the policy-manager storage slots and the manager
procedures for the four policy kinds (mint, burn, send, receive).
The component exposes set_*_policy, get_*_policy, and execute_*_policy procedures for
each kind, plus the protocol-level on_before_asset_added_to_* asset callbacks (which
dispatch to the active send / receive policy). Authorization for switching the active policies
is delegated to the account-wide Authority component,
which must be installed alongside this manager.
Construct via Self::new and chain the per-kind builders
(Self::with_mint_policy / Self::with_burn_policy / Self::with_send_policy /
Self::with_receive_policy). Each accepts a typed config plus a PolicyRegistration
flag to register the policy as either the active one or as a reserved alternative for
runtime switching via the matching set_*_policy procedure. Each builder returns
Result<Self, TokenPolicyManagerError> — registering more than one
PolicyRegistration::Active entry per kind returns
TokenPolicyManagerError::DuplicateActivePolicy.
Pass the manager directly to miden_protocol::account::AccountBuilder::with_components
(the type implements IntoIterator<Item = AccountComponent>). Iteration yields the
manager itself plus the companion components contributed by every registered policy
(deduplicated by procedure root — a policy installed under both send and receive only
contributes its companion components once). Custom variants on any kind contribute no
built-in components — the caller installs the matching components on the account
separately.
§Storage layout
Self::active_mint_policy_slot: procedure root of the active mint policy.Self::active_burn_policy_slot: procedure root of the active burn policy.Self::allowed_mint_policies_slot: map of allowed mint policy roots.Self::allowed_burn_policies_slot: map of allowed burn policy roots.Self::allowed_send_policies_slot: map of allowed send policy roots.Self::allowed_receive_policies_slot: map of allowed receive policy roots.- Asset-callback storage slots (registered via
AssetCallbacks) hold the active send and receive policy procedure roots directly so the kernel dispatches to them viacall. They are installed whenever any transfer policy is registered with this manager — includingAllowAll— so that every minted asset carriesAssetCallbackFlag::Enableduniformly and future policy switches viaset_send_policy/set_receive_policyapply to the entire circulating supply rather than only to assets minted after the switch.
Implementations§
Source§impl TokenPolicyManager
impl TokenPolicyManager
Sourcepub const NAME: &'static str = "miden::standards::faucets::policies::policy_manager"
pub const NAME: &'static str = "miden::standards::faucets::policies::policy_manager"
The name of the component (used in metadata).
Sourcepub const DESCRIPTION: &'static str = "Token policy manager for fungible faucets"
pub const DESCRIPTION: &'static str = "Token policy manager for fungible faucets"
Component description used in AccountComponentMetadata.
Sourcepub const fn name() -> AccountComponentName
pub const fn name() -> AccountComponentName
Returns the canonical AccountComponentName of this component.
Sourcepub fn new() -> TokenPolicyManager
pub fn new() -> TokenPolicyManager
Creates an empty token policy manager. Use the per-kind builders (with_mint_policy,
with_burn_policy, with_send_policy, with_receive_policy) to register policies.
Every kind should end up with exactly one PolicyRegistration::Active entry by the
time the manager is converted into account components. Missing active entries leave the
corresponding active_*_policy_proc_root storage slot at the zero word.
Sourcepub fn with_mint_policy(
self,
policy: MintPolicyConfig,
registration: PolicyRegistration,
) -> Result<TokenPolicyManager, TokenPolicyManagerError>
pub fn with_mint_policy( self, policy: MintPolicyConfig, registration: PolicyRegistration, ) -> Result<TokenPolicyManager, TokenPolicyManagerError>
Registers a mint policy. The registration flag decides whether the policy becomes the
active one (written to active_mint_policy_proc_root) or a reserved alternative (added
to the allowed_mint_policy_proc_roots map for runtime switching via set_mint_policy).
§Errors
Returns TokenPolicyManagerError::DuplicateActivePolicy if registration is
PolicyRegistration::Active and an active mint policy is already registered.
Sourcepub fn with_burn_policy(
self,
policy: BurnPolicyConfig,
registration: PolicyRegistration,
) -> Result<TokenPolicyManager, TokenPolicyManagerError>
pub fn with_burn_policy( self, policy: BurnPolicyConfig, registration: PolicyRegistration, ) -> Result<TokenPolicyManager, TokenPolicyManagerError>
Registers a burn policy. See Self::with_mint_policy for registration semantics.
§Errors
Returns TokenPolicyManagerError::DuplicateActivePolicy if registration is
PolicyRegistration::Active and an active burn policy is already registered.
Sourcepub fn with_send_policy(
self,
policy: TransferPolicy,
registration: PolicyRegistration,
) -> Result<TokenPolicyManager, TokenPolicyManagerError>
pub fn with_send_policy( self, policy: TransferPolicy, registration: PolicyRegistration, ) -> Result<TokenPolicyManager, TokenPolicyManagerError>
Registers a send policy (fired by the on_before_asset_added_to_note callback). See
Self::with_mint_policy for registration semantics.
§Errors
Returns TokenPolicyManagerError::DuplicateActivePolicy if registration is
PolicyRegistration::Active and an active send policy is already registered.
Sourcepub fn with_receive_policy(
self,
policy: TransferPolicy,
registration: PolicyRegistration,
) -> Result<TokenPolicyManager, TokenPolicyManagerError>
pub fn with_receive_policy( self, policy: TransferPolicy, registration: PolicyRegistration, ) -> Result<TokenPolicyManager, TokenPolicyManagerError>
Registers a receive policy (fired by the on_before_asset_added_to_account callback).
See Self::with_mint_policy for registration semantics.
§Errors
Returns TokenPolicyManagerError::DuplicateActivePolicy if registration is
PolicyRegistration::Active and an active receive policy is already registered.
Sourcepub fn active_mint_policy(&self) -> Option<AccountProcedureRoot>
pub fn active_mint_policy(&self) -> Option<AccountProcedureRoot>
Returns the active mint policy procedure root, or None if no active mint policy has
been registered.
Sourcepub fn active_burn_policy(&self) -> Option<AccountProcedureRoot>
pub fn active_burn_policy(&self) -> Option<AccountProcedureRoot>
Returns the active burn policy procedure root, or None if no active burn policy has
been registered.
Sourcepub fn active_send_policy(&self) -> Option<AccountProcedureRoot>
pub fn active_send_policy(&self) -> Option<AccountProcedureRoot>
Returns the active send policy procedure root, or None if no active send policy has
been registered.
Sourcepub fn active_receive_policy(&self) -> Option<AccountProcedureRoot>
pub fn active_receive_policy(&self) -> Option<AccountProcedureRoot>
Returns the active receive policy procedure root, or None if no active receive
policy has been registered.
Sourcepub fn allowed_mint_policies(&self) -> Vec<AccountProcedureRoot>
pub fn allowed_mint_policies(&self) -> Vec<AccountProcedureRoot>
Returns all allowed mint policy procedure roots (active + reserved).
Sourcepub fn allowed_burn_policies(&self) -> Vec<AccountProcedureRoot>
pub fn allowed_burn_policies(&self) -> Vec<AccountProcedureRoot>
Returns all allowed burn policy procedure roots (active + reserved).
Sourcepub fn allowed_send_policies(&self) -> Vec<AccountProcedureRoot>
pub fn allowed_send_policies(&self) -> Vec<AccountProcedureRoot>
Returns all allowed send policy procedure roots (active + reserved).
Sourcepub fn allowed_receive_policies(&self) -> Vec<AccountProcedureRoot>
pub fn allowed_receive_policies(&self) -> Vec<AccountProcedureRoot>
Returns all allowed receive policy procedure roots (active + reserved).
Sourcepub fn set_mint_policy_root() -> AccountProcedureRoot
pub fn set_mint_policy_root() -> AccountProcedureRoot
Returns the procedure root of the set_mint_policy account procedure.
Sourcepub fn set_burn_policy_root() -> AccountProcedureRoot
pub fn set_burn_policy_root() -> AccountProcedureRoot
Returns the procedure root of the set_burn_policy account procedure.
Sourcepub fn set_send_policy_root() -> AccountProcedureRoot
pub fn set_send_policy_root() -> AccountProcedureRoot
Returns the procedure root of the set_send_policy account procedure.
Sourcepub fn set_receive_policy_root() -> AccountProcedureRoot
pub fn set_receive_policy_root() -> AccountProcedureRoot
Returns the procedure root of the set_receive_policy account procedure.
Sourcepub fn active_mint_policy_slot() -> &'static StorageSlotName
pub fn active_mint_policy_slot() -> &'static StorageSlotName
Returns the StorageSlotName where the active mint policy procedure root is stored.
Sourcepub fn active_burn_policy_slot() -> &'static StorageSlotName
pub fn active_burn_policy_slot() -> &'static StorageSlotName
Returns the StorageSlotName where the active burn policy procedure root is stored.
Sourcepub fn allowed_mint_policies_slot() -> &'static StorageSlotName
pub fn allowed_mint_policies_slot() -> &'static StorageSlotName
Returns the StorageSlotName where allowed mint policy roots are stored.
Sourcepub fn allowed_burn_policies_slot() -> &'static StorageSlotName
pub fn allowed_burn_policies_slot() -> &'static StorageSlotName
Returns the StorageSlotName where allowed burn policy roots are stored.
Sourcepub fn allowed_send_policies_slot() -> &'static StorageSlotName
pub fn allowed_send_policies_slot() -> &'static StorageSlotName
Returns the StorageSlotName where allowed send policy roots are stored.
Sourcepub fn allowed_receive_policies_slot() -> &'static StorageSlotName
pub fn allowed_receive_policies_slot() -> &'static StorageSlotName
Returns the StorageSlotName where allowed receive policy roots are stored.
Sourcepub fn code() -> &'static AccountComponentCode
pub fn code() -> &'static AccountComponentCode
Returns the AccountComponentCode of this component.
Sourcepub fn component_metadata() -> AccountComponentMetadata
pub fn component_metadata() -> AccountComponentMetadata
Returns the AccountComponentMetadata for this component.
Trait Implementations§
Source§impl Clone for TokenPolicyManager
impl Clone for TokenPolicyManager
Source§fn clone(&self) -> TokenPolicyManager
fn clone(&self) -> TokenPolicyManager
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 TokenPolicyManager
impl Debug for TokenPolicyManager
Source§impl Default for TokenPolicyManager
impl Default for TokenPolicyManager
Source§fn default() -> TokenPolicyManager
fn default() -> TokenPolicyManager
Source§impl IntoIterator for TokenPolicyManager
impl IntoIterator for TokenPolicyManager
Source§fn into_iter(self) -> <TokenPolicyManager as IntoIterator>::IntoIter
fn into_iter(self) -> <TokenPolicyManager as IntoIterator>::IntoIter
Yields the AccountComponents implementing this token policy configuration: the
manager itself first, then the companion components contributed by every registered
policy. Deduplication by procedure root is implicit (the manager’s internal policies
map is keyed by root), so a policy installed under both send and receive only
contributes its companion components once. Custom variants on any kind contribute no
built-in components — the caller installs the matching components on the account
separately.
Source§type Item = AccountComponent
type Item = AccountComponent
Source§type IntoIter = IntoIter<AccountComponent>
type IntoIter = IntoIter<AccountComponent>
Auto Trait Implementations§
impl Freeze for TokenPolicyManager
impl RefUnwindSafe for TokenPolicyManager
impl Send for TokenPolicyManager
impl Sync for TokenPolicyManager
impl Unpin for TokenPolicyManager
impl UnsafeUnpin for TokenPolicyManager
impl UnwindSafe for TokenPolicyManager
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