/ fedimint-client / src / sm / dbtx.rs
dbtx.rs
 1  use fedimint_core::core::ModuleInstanceId;
 2  use fedimint_core::db::DatabaseTransaction;
 3  
 4  /// A transaction that acts as isolated for module code but can be accessed as a
 5  /// normal transaction in this crate.
 6  pub struct ClientSMDatabaseTransaction<'inner, 'parent> {
 7      dbtx: &'inner mut DatabaseTransaction<'parent>,
 8      module_instance: ModuleInstanceId,
 9  }
10  
11  impl<'inner, 'parent> ClientSMDatabaseTransaction<'inner, 'parent> {
12      pub fn new(
13          dbtx: &'inner mut DatabaseTransaction<'parent>,
14          module_instance: ModuleInstanceId,
15      ) -> Self {
16          Self {
17              dbtx,
18              module_instance,
19          }
20      }
21  
22      /// Returns the isolated database transaction for the module.
23      pub fn module_tx(&mut self) -> DatabaseTransaction<'_> {
24          self.dbtx
25              .to_ref_with_prefix_module_id(self.module_instance)
26              .into_nc()
27      }
28  
29      /// Returns the non-isolated database transaction only accessible to the
30      /// client internal code. This is useful for submitting Fedimint
31      /// transactions from within state transitions.
32      #[allow(dead_code)]
33      pub(crate) fn global_tx(&mut self) -> &mut DatabaseTransaction<'parent> {
34          self.dbtx
35      }
36  }