Add a dedicated db crate with a basic DB trait

It's needed by the processor and tributary (coordinator).
This commit is contained in:
Luke Parker
2023-04-14 11:41:01 -04:00
parent 04e7863dbd
commit 6f6c9f7cdf
20 changed files with 200 additions and 181 deletions

View File

@@ -7,11 +7,13 @@ use frost::{Participant, ThresholdKeys};
use tokio::time::timeout;
use serai_db::MemDb;
use crate::{
Plan, Db,
coins::{OutputType, Output, Block, Coin},
scanner::{ScannerEvent, Scanner, ScannerHandle},
tests::{util::db::MemDb, sign},
tests::sign,
};
async fn spend<C: Coin, D: Db>(

View File

@@ -7,6 +7,8 @@ use rand_core::{RngCore, OsRng};
use group::GroupEncoding;
use frost::{Participant, ThresholdParams, tests::clone_without};
use serai_db::MemDb;
use serai_client::{
primitives::{MONERO_NET_ID, BlockHash},
validator_sets::primitives::{Session, ValidatorSet},
@@ -16,7 +18,6 @@ use messages::{SubstrateContext, key_gen::*};
use crate::{
coins::Coin,
key_gen::{KeyGenEvent, KeyGen},
tests::util::db::MemDb,
};
const ID: KeyGenId =

View File

@@ -1,5 +1,3 @@
pub(crate) mod util;
mod key_gen;
pub(crate) use key_gen::test_key_gen;

View File

@@ -7,10 +7,11 @@ use frost::Participant;
use tokio::time::timeout;
use serai_db::MemDb;
use crate::{
coins::{OutputType, Output, Block, Coin},
scanner::{ScannerEvent, Scanner, ScannerHandle},
tests::util::db::MemDb,
};
pub async fn test_scanner<C: Coin>(coin: C) {

View File

@@ -13,12 +13,13 @@ use frost::{
use tokio::time::timeout;
use serai_db::MemDb;
use messages::sign::*;
use crate::{
Payment, Plan,
coins::{Output, Transaction, Coin},
signer::{SignerEvent, Signer},
tests::util::db::MemDb,
};
#[allow(clippy::type_complexity)]

View File

@@ -17,13 +17,12 @@ use tokio::time::timeout;
use scale::Encode;
use sp_application_crypto::{RuntimePublic, sr25519::Public};
use serai_db::MemDb;
use serai_client::{primitives::*, in_instructions::primitives::*};
use messages::{sign::SignId, coordinator::*};
use crate::{
substrate_signer::{SubstrateSignerEvent, SubstrateSigner},
tests::util::db::MemDb,
};
use crate::substrate_signer::{SubstrateSignerEvent, SubstrateSigner};
#[tokio::test]
async fn test_substrate_signer() {

View File

@@ -1,42 +0,0 @@
use std::{
sync::{Arc, RwLock},
collections::HashMap,
};
use crate::{DbTxn, Db};
#[derive(Clone, Debug)]
pub struct MemDb(Arc<RwLock<HashMap<Vec<u8>, Vec<u8>>>>);
impl MemDb {
pub(crate) fn new() -> MemDb {
MemDb(Arc::new(RwLock::new(HashMap::new())))
}
}
impl Default for MemDb {
fn default() -> MemDb {
MemDb::new()
}
}
impl DbTxn for MemDb {
fn put(&mut self, key: impl AsRef<[u8]>, value: impl AsRef<[u8]>) {
self.0.write().unwrap().insert(key.as_ref().to_vec(), value.as_ref().to_vec());
}
fn get(&self, key: impl AsRef<[u8]>) -> Option<Vec<u8>> {
self.0.read().unwrap().get(key.as_ref()).cloned()
}
fn del(&mut self, key: impl AsRef<[u8]>) {
self.0.write().unwrap().remove(key.as_ref());
}
fn commit(self) {}
}
impl Db for MemDb {
type Transaction = MemDb;
fn txn(&mut self) -> MemDb {
Self(self.0.clone())
}
fn get(&self, key: impl AsRef<[u8]>) -> Option<Vec<u8>> {
self.0.read().unwrap().get(key.as_ref()).cloned()
}
}

View File

@@ -1 +0,0 @@
pub(crate) mod db;

View File

@@ -6,12 +6,14 @@ use frost::{Participant, dkg::tests::key_gen};
use tokio::time::timeout;
use serai_db::MemDb;
use crate::{
Payment, Plan,
coins::{Output, Transaction, Block, Coin},
scanner::{ScannerEvent, Scanner},
scheduler::Scheduler,
tests::{util::db::MemDb, sign},
tests::sign,
};
// Tests the Scanner, Scheduler, and Signer together