Skip to content
Snippets Groups Projects
Commit b25d8960 authored by Éloïs's avatar Éloïs
Browse files

[feat] kv_typed: create type U32BE

parent 3a4bcc05
Branches
No related tags found
1 merge request!1335Gva proto 2
Showing with 68 additions and 30 deletions
...@@ -32,8 +32,8 @@ use dubp::documents::transaction::TransactionDocumentV10; ...@@ -32,8 +32,8 @@ use dubp::documents::transaction::TransactionDocumentV10;
use dubp::{common::prelude::BlockNumber, wallet::prelude::SourceAmount}; use dubp::{common::prelude::BlockNumber, wallet::prelude::SourceAmount};
use duniter_dbs::bc_v2::BcV2DbReadable; use duniter_dbs::bc_v2::BcV2DbReadable;
use duniter_dbs::{ use duniter_dbs::{
kv_typed::prelude::*, BlockMetaV2, BlockNumberKeyV2, GvaV1DbReadable, HashKeyV2, PubKeyKeyV2, kv_typed::prelude::*, BlockMetaV2, GvaV1DbReadable, HashKeyV2, PubKeyKeyV2, TxDbV2,
TxDbV2, TxsMpV2DbReadable, TxsMpV2DbReadable,
}; };
use resiter::map::Map; use resiter::map::Map;
use std::ops::{Bound, RangeBounds}; use std::ops::{Bound, RangeBounds};
......
...@@ -44,7 +44,7 @@ pub fn uds_of_pubkey<DB: BcV2DbReadable, R: 'static + RangeBounds<BlockNumber>>( ...@@ -44,7 +44,7 @@ pub fn uds_of_pubkey<DB: BcV2DbReadable, R: 'static + RangeBounds<BlockNumber>>(
Ok((vec![], SourceAmount::ZERO)) Ok((vec![], SourceAmount::ZERO))
} else { } else {
let first_reval = uds_reval let first_reval = uds_reval
.iter(..=BlockNumberKeyV2(blocks_numbers[0]), |it| { .iter(..=U32BE(blocks_numbers[0].0), |it| {
it.reverse().keys().next_res() it.reverse().keys().next_res()
})? })?
.expect("corrupted db"); .expect("corrupted db");
...@@ -65,7 +65,7 @@ pub fn uds_of_pubkey<DB: BcV2DbReadable, R: 'static + RangeBounds<BlockNumber>>( ...@@ -65,7 +65,7 @@ pub fn uds_of_pubkey<DB: BcV2DbReadable, R: 'static + RangeBounds<BlockNumber>>(
fn collect_uds<BC: BackendCol, I: ExactSizeIterator<Item = BlockNumber>>( fn collect_uds<BC: BackendCol, I: ExactSizeIterator<Item = BlockNumber>>(
mut blocks_numbers: I, mut blocks_numbers: I,
first_reval: BlockNumberKeyV2, first_reval: U32BE,
uds_reval: TxColRo<BC, UdsRevalEvent>, uds_reval: TxColRo<BC, UdsRevalEvent>,
amount_opt: Option<SourceAmount>, amount_opt: Option<SourceAmount>,
) -> KvResult<(Vec<(BlockNumber, SourceAmount)>, SourceAmount)> { ) -> KvResult<(Vec<(BlockNumber, SourceAmount)>, SourceAmount)> {
...@@ -81,7 +81,7 @@ fn collect_uds<BC: BackendCol, I: ExactSizeIterator<Item = BlockNumber>>( ...@@ -81,7 +81,7 @@ fn collect_uds<BC: BackendCol, I: ExactSizeIterator<Item = BlockNumber>>(
// Uds before last reval // Uds before last reval
for (block_reval, amount_reval) in &uds_revals[1..] { for (block_reval, amount_reval) in &uds_revals[1..] {
'blocks_numbers: while let Some(block_number) = blocks_numbers.next() { 'blocks_numbers: while let Some(block_number) = blocks_numbers.next() {
if block_number >= block_reval.0 { if block_number.0 >= block_reval.0 {
current_ud = amount_reval.0; current_ud = amount_reval.0;
uds.push((block_number, current_ud)); uds.push((block_number, current_ud));
sum = sum + current_ud; sum = sum + current_ud;
......
...@@ -20,9 +20,6 @@ mod uds; ...@@ -20,9 +20,6 @@ mod uds;
use crate::*; use crate::*;
use duniter_dbs::bc_v2::BcV2DbWritable; use duniter_dbs::bc_v2::BcV2DbWritable;
// ["blocks_meta", blocks_meta, BlockNumberKeyV2, BlockMetaV2,],
// ["identities", identities, PubKeyKeyV2, IdtyDbV2,],
pub fn revert_block<B: Backend>( pub fn revert_block<B: Backend>(
bc_db: &duniter_dbs::bc_v2::BcV2Db<B>, bc_db: &duniter_dbs::bc_v2::BcV2Db<B>,
block: DubpBlockV10, block: DubpBlockV10,
...@@ -45,11 +42,11 @@ pub fn revert_block<B: Backend>( ...@@ -45,11 +42,11 @@ pub fn revert_block<B: Backend>(
)?; )?;
} }
identities::revert_identities::<B>(&block, &mut identities)?; identities::revert_identities::<B>(&block, &mut identities)?;
blocks_meta.remove(BlockNumberKeyV2(block.number())); blocks_meta.remove(U32BE(block.number().0));
Ok(if block.number() == BlockNumber(0) { Ok(if block.number() == BlockNumber(0) {
None None
} else { } else {
blocks_meta.get(&BlockNumberKeyV2(BlockNumber(block.number().0 - 1)))? blocks_meta.get(&U32BE(block.number().0 - 1))?
}) })
}, },
) )
...@@ -84,7 +81,7 @@ pub fn apply_block<B: Backend>( ...@@ -84,7 +81,7 @@ pub fn apply_block<B: Backend>(
) )
.write( .write(
|(mut blocks_meta, mut identities, mut uds, mut uds_reval)| { |(mut blocks_meta, mut identities, mut uds, mut uds_reval)| {
blocks_meta.upsert(BlockNumberKeyV2(block.number()), block_meta); blocks_meta.upsert(U32BE(block.number().0), block_meta);
identities::update_identities::<B>(&block, &mut identities)?; identities::update_identities::<B>(&block, &mut identities)?;
if let Some(dividend) = block.dividend() { if let Some(dividend) = block.dividend() {
uds::create_uds::<B>( uds::create_uds::<B>(
......
...@@ -19,9 +19,6 @@ use duniter_dbs::{ ...@@ -19,9 +19,6 @@ use duniter_dbs::{
UdIdV2, UdIdV2,
}; };
// ["uds_reval", uds_reval, BlockNumberKeyV2, SourceAmountValV2,],
// ["uds", uds, UdIdV2, (),],
pub(crate) fn create_uds<B: Backend>( pub(crate) fn create_uds<B: Backend>(
block_number: BlockNumber, block_number: BlockNumber,
dividend: SourceAmount, dividend: SourceAmount,
...@@ -33,7 +30,7 @@ pub(crate) fn create_uds<B: Backend>( ...@@ -33,7 +30,7 @@ pub(crate) fn create_uds<B: Backend>(
.iter(.., |it| it.reverse().values().next_res())? .iter(.., |it| it.reverse().values().next_res())?
.unwrap_or_else(|| SourceAmountValV2(SourceAmount::ZERO)); .unwrap_or_else(|| SourceAmountValV2(SourceAmount::ZERO));
if dividend > previous_ud_amount.0 { if dividend > previous_ud_amount.0 {
uds_reval.upsert(BlockNumberKeyV2(block_number), SourceAmountValV2(dividend)); uds_reval.upsert(U32BE(block_number.0), SourceAmountValV2(dividend));
} }
let members = identities.iter(.., |it| { let members = identities.iter(.., |it| {
...@@ -56,8 +53,8 @@ pub(crate) fn revert_uds<B: Backend>( ...@@ -56,8 +53,8 @@ pub(crate) fn revert_uds<B: Backend>(
.iter(.., |it| it.reverse().keys().next_res())? .iter(.., |it| it.reverse().keys().next_res())?
.expect("corrupted db") .expect("corrupted db")
.0; .0;
if block_number == previous_reval_block_number { if block_number.0 == previous_reval_block_number {
uds_reval.remove(BlockNumberKeyV2(block_number)); uds_reval.remove(U32BE(block_number.0));
} }
let members = identities.iter(.., |it| { let members = identities.iter(.., |it| {
......
...@@ -39,9 +39,9 @@ use dubp::documents::{ ...@@ -39,9 +39,9 @@ use dubp::documents::{
use dubp::wallet::prelude::*; use dubp::wallet::prelude::*;
use duniter_dbs::gva_v1::{TxsByIssuerEvent, TxsByRecipientEvent, TxsEvent}; use duniter_dbs::gva_v1::{TxsByIssuerEvent, TxsByRecipientEvent, TxsEvent};
use duniter_dbs::{ use duniter_dbs::{
kv_typed::prelude::*, BlockMetaV2, BlockNumberKeyV2, DuniterDbs, GvaV1Db, GvaV1DbReadable, kv_typed::prelude::*, BlockMetaV2, DuniterDbs, GvaV1Db, GvaV1DbReadable, GvaV1DbWritable,
GvaV1DbWritable, HashKeyV2, PendingTxDbV2, PubKeyKeyV2, PubKeyValV2, SourceAmountValV2, TxDbV2, HashKeyV2, PendingTxDbV2, PubKeyKeyV2, PubKeyValV2, SourceAmountValV2, TxDbV2, TxsMpV2Db,
TxsMpV2Db, TxsMpV2DbReadable, TxsMpV2DbWritable, WalletConditionsV2, TxsMpV2DbReadable, TxsMpV2DbWritable, WalletConditionsV2,
}; };
use resiter::filter_map::FilterMap; use resiter::filter_map::FilterMap;
use resiter::flatten::Flatten; use resiter::flatten::Flatten;
......
...@@ -18,8 +18,8 @@ use crate::*; ...@@ -18,8 +18,8 @@ use crate::*;
db_schema!( db_schema!(
BcV2, BcV2,
[ [
["blocks_meta", BlocksMeta, BlockNumberKeyV2, BlockMetaV2], ["blocks_meta", BlocksMeta, U32BE, BlockMetaV2],
["uds_reval", UdsReval, BlockNumberKeyV2, SourceAmountValV2], ["uds_reval", UdsReval, U32BE, SourceAmountValV2],
["identities", Identities, PubKeyKeyV2, IdtyDbV2], ["identities", Identities, PubKeyKeyV2, IdtyDbV2],
["uds", Uds, UdIdV2, ()], ["uds", Uds, UdIdV2, ()],
] ]
......
...@@ -61,7 +61,7 @@ pub use crate::open_dbs::open_dbs; ...@@ -61,7 +61,7 @@ pub use crate::open_dbs::open_dbs;
pub use bc_v1::{BcV1Db, BcV1DbReadable, BcV1DbRo, BcV1DbWritable, MainBlocksEvent, UidsEvent}; pub use bc_v1::{BcV1Db, BcV1DbReadable, BcV1DbRo, BcV1DbWritable, MainBlocksEvent, UidsEvent};
pub use gva_v1::{GvaV1Db, GvaV1DbReadable, GvaV1DbRo, GvaV1DbWritable}; pub use gva_v1::{GvaV1Db, GvaV1DbReadable, GvaV1DbRo, GvaV1DbWritable};
pub use keys::all::AllKeyV1; pub use keys::all::AllKeyV1;
pub use keys::block_number::{BlockNumberKeyV1, BlockNumberKeyV2}; pub use keys::block_number::BlockNumberKeyV1;
pub use keys::blockstamp::BlockstampKeyV1; pub use keys::blockstamp::BlockstampKeyV1;
pub use keys::hash::{HashKeyV1, HashKeyV2}; pub use keys::hash::{HashKeyV1, HashKeyV2};
pub use keys::pubkey::{PubKeyKeyV1, PubKeyKeyV2}; pub use keys::pubkey::{PubKeyKeyV1, PubKeyKeyV2};
......
...@@ -83,7 +83,7 @@ impl UdsQuery { ...@@ -83,7 +83,7 @@ impl UdsQuery {
it.map_ok(|(block_number, sa)| RevalUdGva { it.map_ok(|(block_number, sa)| RevalUdGva {
amount: sa.0.amount(), amount: sa.0.amount(),
base: sa.0.base(), base: sa.0.base(),
block_number: (block_number.0).0, block_number: block_number.0,
}) })
.collect::<KvResult<Vec<_>>>() .collect::<KvResult<Vec<_>>>()
}) })
......
...@@ -118,7 +118,7 @@ where ...@@ -118,7 +118,7 @@ where
} }
} }
macro_rules! impl_as_bytes_for_numbers { macro_rules! impl_as_bytes_for_le_numbers {
($($T:ty),*) => {$( ($($T:ty),*) => {$(
impl KeyAsBytes for $T { impl KeyAsBytes for $T {
fn as_bytes<T, F: FnMut(&[u8]) -> T>(&self, mut f: F) -> T { fn as_bytes<T, F: FnMut(&[u8]) -> T>(&self, mut f: F) -> T {
...@@ -132,7 +132,22 @@ macro_rules! impl_as_bytes_for_numbers { ...@@ -132,7 +132,22 @@ macro_rules! impl_as_bytes_for_numbers {
} }
)*}; )*};
} }
impl_as_bytes_for_le_numbers!(
impl_as_bytes_for_numbers!(
usize, u8, u16, u32, u64, u128, isize, i8, i16, i32, i64, i128, f32, f64 usize, u8, u16, u32, u64, u128, isize, i8, i16, i32, i64, i128, f32, f64
); );
macro_rules! impl_as_bytes_for_be_numbers {
($($T:ty),*) => {$(
impl KeyAsBytes for $T {
fn as_bytes<T, F: FnMut(&[u8]) -> T>(&self, mut f: F) -> T {
f(&self.0.to_be_bytes()[..])
}
}
impl ValueAsBytes for $T {
fn as_bytes<T, F: FnMut(&[u8]) -> Result<T, KvError>>(&self, mut f: F) -> Result<T, KvError> {
f(&self.0.to_be_bytes()[..])
}
}
)*};
}
impl_as_bytes_for_be_numbers!(U32BE);
...@@ -50,9 +50,23 @@ macro_rules! impl_explorable_key_for_numbers { ...@@ -50,9 +50,23 @@ macro_rules! impl_explorable_key_for_numbers {
} }
)*}; )*};
} }
impl_explorable_key_for_numbers!(usize, u8, u16, u32, u64, u128, i8, i16, i32, i64, i128, f32, f64); impl_explorable_key_for_numbers!(usize, u8, u16, u32, u64, u128, i8, i16, i32, i64, i128, f32, f64);
macro_rules! impl_explorable_key_for_be_numbers {
($($T:ty),*) => {$(
impl ExplorableKey for $T {
fn from_explorer_str(source: &str) -> Result<Self, StringErr> {
Ok(Self(source.parse().map_err(|e| StringErr(format!("{}", e)))?))
}
fn to_explorer_string(&self) -> KvResult<String> {
Ok(format!("{}", self.0))
}
}
)*};
}
impl_explorable_key_for_be_numbers!(U32BE);
pub trait ExplorableValue: Sized { pub trait ExplorableValue: Sized {
fn from_explorer_str(source: &str) -> Result<Self, StringErr>; fn from_explorer_str(source: &str) -> Result<Self, StringErr>;
fn to_explorer_json(&self) -> KvResult<serde_json::Value>; fn to_explorer_json(&self) -> KvResult<serde_json::Value>;
......
...@@ -26,11 +26,23 @@ macro_rules! impl_from_bytes_for_numbers { ...@@ -26,11 +26,23 @@ macro_rules! impl_from_bytes_for_numbers {
} }
)*}; )*};
} }
impl_from_bytes_for_numbers!( impl_from_bytes_for_numbers!(
usize, u8, u16, u32, u64, u128, isize, i8, i16, i32, i64, i128, f32, f64 usize, u8, u16, u32, u64, u128, isize, i8, i16, i32, i64, i128, f32, f64
); );
macro_rules! impl_from_bytes_for_be_numbers {
($(($T:ty, $INT:ty)),*) => {$(
impl FromBytes for $T {
type Err = std::array::TryFromSliceError;
fn from_bytes(bytes: &[u8]) -> Result<Self, Self::Err> {
Ok(Self(<$INT>::from_be_bytes(bytes.try_into()?)))
}
}
)*};
}
impl_from_bytes_for_be_numbers!((U32BE, u32));
impl FromBytes for String { impl FromBytes for String {
type Err = std::str::Utf8Error; type Err = std::str::Utf8Error;
......
...@@ -60,3 +60,6 @@ impl<T> Key for T where ...@@ -60,3 +60,6 @@ impl<T> Key for T where
+ Sized + Sized
{ {
} }
#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
pub struct U32BE(pub u32);
...@@ -82,7 +82,7 @@ pub mod prelude { ...@@ -82,7 +82,7 @@ pub mod prelude {
pub use crate::iter::{ pub use crate::iter::{
keys::KvIterKeys, values::KvIterValues, EntryIter, KvIter, ResultIter, ReversableIterator, keys::KvIterKeys, values::KvIterValues, EntryIter, KvIter, ResultIter, ReversableIterator,
}; };
pub use crate::key::Key; pub use crate::key::{Key, U32BE};
pub use crate::subscription::{NewSubscribers, Subscriber, Subscribers}; pub use crate::subscription::{NewSubscribers, Subscriber, Subscribers};
pub use crate::transactional_read::{TransactionalRead, TxColRo}; pub use crate::transactional_read::{TransactionalRead, TxColRo};
pub use crate::transactional_write::{DbTxCollectionRw, TransactionalWrite, TxColRw}; pub use crate::transactional_write::{DbTxCollectionRw, TransactionalWrite, TxColRw};
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment