mirror of
https://github.com/serai-dex/serai.git
synced 2024-12-28 22:49:42 +00:00
e772b8a5f7
Some checks failed
coins/ Tests / test-coins (push) Waiting to run
Coordinator Tests / build (push) Waiting to run
Full Stack Tests / build (push) Waiting to run
Lint / clippy (macos-13) (push) Waiting to run
Lint / clippy (macos-14) (push) Waiting to run
Lint / clippy (ubuntu-latest) (push) Waiting to run
Lint / clippy (windows-latest) (push) Waiting to run
Lint / deny (push) Waiting to run
Lint / fmt (push) Waiting to run
Lint / machete (push) Waiting to run
no-std build / build (push) Waiting to run
Processor Tests / build (push) Waiting to run
Reproducible Runtime / build (push) Waiting to run
Tests / test-infra (push) Waiting to run
Tests / test-substrate (push) Waiting to run
Tests / test-serai-client (push) Waiting to run
Message Queue Tests / build (push) Has been cancelled
common/ Tests / test-common (push) Has been cancelled
crypto/ Tests / test-crypto (push) Has been cancelled
* Clear upons upon round, not block * Cache the proposal for a round * Rebase onto develop, which reverted this PR, and re-apply this PR * Set participation upon participation instead of constantly recalculating * Cache message instances * Add missing txn commit Identified by @akildemir. * Correct clippy lint identified upon rebase * Fix tendermint chain sync (#581) * fix p2p Reqres protocol * stabilize tributary chain sync * fix pr comments --------- Co-authored-by: akildemir <34187742+akildemir@users.noreply.github.com>
47 lines
1.2 KiB
Rust
47 lines
1.2 KiB
Rust
use std::sync::Arc;
|
|
|
|
pub use ::parity_db::{Options, Db as ParityDb};
|
|
|
|
use crate::*;
|
|
|
|
#[must_use]
|
|
pub struct Transaction<'a>(&'a Arc<ParityDb>, Vec<(u8, Vec<u8>, Option<Vec<u8>>)>);
|
|
|
|
impl Get for Transaction<'_> {
|
|
fn get(&self, key: impl AsRef<[u8]>) -> Option<Vec<u8>> {
|
|
let mut res = self.0.get(&key);
|
|
for change in &self.1 {
|
|
if change.1 == key.as_ref() {
|
|
res.clone_from(&change.2);
|
|
}
|
|
}
|
|
res
|
|
}
|
|
}
|
|
impl DbTxn for Transaction<'_> {
|
|
fn put(&mut self, key: impl AsRef<[u8]>, value: impl AsRef<[u8]>) {
|
|
self.1.push((0, key.as_ref().to_vec(), Some(value.as_ref().to_vec())))
|
|
}
|
|
fn del(&mut self, key: impl AsRef<[u8]>) {
|
|
self.1.push((0, key.as_ref().to_vec(), None))
|
|
}
|
|
fn commit(self) {
|
|
self.0.commit(self.1).unwrap()
|
|
}
|
|
}
|
|
|
|
impl Get for Arc<ParityDb> {
|
|
fn get(&self, key: impl AsRef<[u8]>) -> Option<Vec<u8>> {
|
|
ParityDb::get(self, 0, key.as_ref()).unwrap()
|
|
}
|
|
}
|
|
impl Db for Arc<ParityDb> {
|
|
type Transaction<'a> = Transaction<'a>;
|
|
fn txn(&mut self) -> Self::Transaction<'_> {
|
|
Transaction(self, vec![])
|
|
}
|
|
}
|
|
|
|
pub fn new_parity_db(path: &str) -> Arc<ParityDb> {
|
|
Arc::new(ParityDb::open_or_create(&Options::with_columns(std::path::Path::new(path), 1)).unwrap())
|
|
}
|