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 }