Explorar o código

fix: commit redb update state

thesimplekid hai 9 meses
pai
achega
c880a623cb
Modificáronse 1 ficheiros con 35 adicións e 18 borrados
  1. 35 18
      crates/cdk-redb/src/mint/mod.rs

+ 35 - 18
crates/cdk-redb/src/mint/mod.rs

@@ -90,6 +90,16 @@ impl MintRedbDatabase {
                                 );
                                 return Err(Error::UnknownDatabaseVersion);
                             }
+
+                            let write_txn = db.begin_write()?;
+                            {
+                                let mut table = write_txn.open_table(CONFIG_TABLE)?;
+
+                                table
+                                    .insert("db_version", DATABASE_VERSION.to_string().as_str())?;
+                            }
+
+                            write_txn.commit()?;
                         }
                         Ordering::Equal => {
                             tracing::info!("Database is at current version {}", DATABASE_VERSION);
@@ -507,12 +517,14 @@ impl MintDatabase for MintRedbDatabase {
             let mut table = write_txn.open_table(PROOFS_TABLE).map_err(Error::from)?;
             for proof in proofs {
                 let y: PublicKey = hash_to_curve(&proof.secret.to_bytes()).map_err(Error::from)?;
-                table
-                    .insert(
-                        y.to_bytes(),
-                        serde_json::to_string(&proof).map_err(Error::from)?.as_str(),
-                    )
-                    .map_err(Error::from)?;
+                if table.get(y.to_bytes()).map_err(Error::from)?.is_none() {
+                    table
+                        .insert(
+                            y.to_bytes(),
+                            serde_json::to_string(&proof).map_err(Error::from)?.as_str(),
+                        )
+                        .map_err(Error::from)?;
+                }
             }
         }
         write_txn.commit().map_err(Error::from)?;
@@ -567,26 +579,31 @@ impl MintDatabase for MintRedbDatabase {
     ) -> Result<Vec<Option<State>>, Self::Err> {
         let db = self.db.lock().await;
         let write_txn = db.begin_write().map_err(Error::from)?;
-        let mut table = write_txn
-            .open_table(PROOFS_STATE_TABLE)
-            .map_err(Error::from)?;
 
         let mut states = Vec::with_capacity(ys.len());
 
         let state_str = serde_json::to_string(&proofs_state).map_err(Error::from)?;
 
-        for y in ys {
-            match table
-                .insert(y.to_bytes(), state_str.as_str())
-                .map_err(Error::from)?
-            {
-                Some(state) => states.push(Some(
-                    serde_json::from_str(state.value()).map_err(Error::from)?,
-                )),
-                None => states.push(None),
+        {
+            let mut table = write_txn
+                .open_table(PROOFS_STATE_TABLE)
+                .map_err(Error::from)?;
+
+            for y in ys {
+                match table
+                    .insert(y.to_bytes(), state_str.as_str())
+                    .map_err(Error::from)?
+                {
+                    Some(state) => states.push(Some(
+                        serde_json::from_str(state.value()).map_err(Error::from)?,
+                    )),
+                    None => states.push(None),
+                }
             }
         }
 
+        write_txn.commit().map_err(Error::from)?;
+
         Ok(states)
     }