miden_standards/account/components/
mod.rs1use alloc::collections::BTreeSet;
2use alloc::vec::Vec;
3
4use miden_protocol::account::AccountProcedureRoot;
5
6use crate::account::access::{Authority, Ownable2Step, RoleBasedAccessControl};
7use crate::account::auth::{
8 AuthGuardedMultisig,
9 AuthMultisig,
10 AuthMultisigSmart,
11 AuthNetworkAccount,
12 AuthSingleSig,
13 AuthSingleSigAcl,
14 NoAuth,
15};
16use crate::account::faucets::FungibleFaucet;
17use crate::account::interface::AccountComponentInterface;
18use crate::account::wallets::BasicWallet;
19
20pub enum StandardAccountComponent {
26 BasicWallet,
27 FungibleFaucet,
28 Authority,
29 Ownable2Step,
30 RoleBasedAccessControl,
31 AuthSingleSig,
32 AuthSingleSigAcl,
33 AuthMultisig,
34 AuthMultisigSmart,
35 AuthGuardedMultisig,
36 AuthNoAuth,
37 AuthNetworkAccount,
38}
39
40impl StandardAccountComponent {
41 pub fn procedure_roots(&self) -> impl Iterator<Item = AccountProcedureRoot> {
44 let code = match self {
45 Self::BasicWallet => BasicWallet::code(),
46 Self::FungibleFaucet => FungibleFaucet::code(),
47 Self::Authority => Authority::code(),
48 Self::Ownable2Step => Ownable2Step::code(),
49 Self::RoleBasedAccessControl => RoleBasedAccessControl::code(),
50 Self::AuthSingleSig => AuthSingleSig::code(),
51 Self::AuthSingleSigAcl => AuthSingleSigAcl::code(),
52 Self::AuthMultisig => AuthMultisig::code(),
53 Self::AuthMultisigSmart => AuthMultisigSmart::code(),
54 Self::AuthGuardedMultisig => AuthGuardedMultisig::code(),
55 Self::AuthNoAuth => NoAuth::code(),
56 Self::AuthNetworkAccount => AuthNetworkAccount::code(),
57 };
58
59 code.procedure_roots()
60 }
61
62 fn extract_component(
66 &self,
67 procedures_set: &mut BTreeSet<AccountProcedureRoot>,
68 component_interface_vec: &mut Vec<AccountComponentInterface>,
69 ) {
70 if self.procedure_roots().all(|proc_root| procedures_set.contains(&proc_root)) {
72 self.procedure_roots().for_each(|component_procedure| {
74 procedures_set.remove(&component_procedure);
75 });
76
77 match self {
79 Self::BasicWallet => {
80 component_interface_vec.push(AccountComponentInterface::BasicWallet)
81 },
82 Self::FungibleFaucet => {
83 component_interface_vec.push(AccountComponentInterface::FungibleFaucet)
84 },
85 Self::Authority => {
86 component_interface_vec.push(AccountComponentInterface::Authority)
87 },
88 Self::Ownable2Step => {
89 component_interface_vec.push(AccountComponentInterface::Ownable2Step)
90 },
91 Self::RoleBasedAccessControl => {
92 component_interface_vec.push(AccountComponentInterface::RoleBasedAccessControl)
93 },
94 Self::AuthSingleSig => {
95 component_interface_vec.push(AccountComponentInterface::AuthSingleSig)
96 },
97 Self::AuthSingleSigAcl => {
98 component_interface_vec.push(AccountComponentInterface::AuthSingleSigAcl)
99 },
100 Self::AuthMultisig => {
101 component_interface_vec.push(AccountComponentInterface::AuthMultisig)
102 },
103 Self::AuthMultisigSmart => {
104 component_interface_vec.push(AccountComponentInterface::AuthMultisigSmart)
105 },
106 Self::AuthGuardedMultisig => {
107 component_interface_vec.push(AccountComponentInterface::AuthGuardedMultisig)
108 },
109 Self::AuthNoAuth => {
110 component_interface_vec.push(AccountComponentInterface::AuthNoAuth)
111 },
112 Self::AuthNetworkAccount => {
113 component_interface_vec.push(AccountComponentInterface::AuthNetworkAccount)
114 },
115 }
116 }
117 }
118
119 pub fn extract_standard_components(
122 procedures_set: &mut BTreeSet<AccountProcedureRoot>,
123 component_interface_vec: &mut Vec<AccountComponentInterface>,
124 ) {
125 Self::BasicWallet.extract_component(procedures_set, component_interface_vec);
126 Self::FungibleFaucet.extract_component(procedures_set, component_interface_vec);
127 Self::Authority.extract_component(procedures_set, component_interface_vec);
128 Self::RoleBasedAccessControl.extract_component(procedures_set, component_interface_vec);
129 Self::Ownable2Step.extract_component(procedures_set, component_interface_vec);
130 Self::AuthSingleSig.extract_component(procedures_set, component_interface_vec);
131 Self::AuthSingleSigAcl.extract_component(procedures_set, component_interface_vec);
132 Self::AuthGuardedMultisig.extract_component(procedures_set, component_interface_vec);
133 Self::AuthMultisig.extract_component(procedures_set, component_interface_vec);
134 Self::AuthMultisigSmart.extract_component(procedures_set, component_interface_vec);
135 Self::AuthNoAuth.extract_component(procedures_set, component_interface_vec);
136 Self::AuthNetworkAccount.extract_component(procedures_set, component_interface_vec);
137 }
138}