Skip to content
Snippets Groups Projects
Commit a28fa5b6 authored by Millicent Billette's avatar Millicent Billette
Browse files

wip comments

parent babbd135
No related branches found
No related tags found
No related merge requests found
...@@ -25,6 +25,9 @@ pub static DEFAULT_PAGE_SIZE: &usize = &50; ...@@ -25,6 +25,9 @@ pub static DEFAULT_PAGE_SIZE: &usize = &50;
/// Current meta datas (CurrentMetaDataKey, ?) /// Current meta datas (CurrentMetaDataKey, ?)
pub static CURRENT_METAS_DATAS: &str = "cmd"; pub static CURRENT_METAS_DATAS: &str = "cmd";
/// Current frame members datas (MemberFrameInfo {last_personal_block_number: BlockNumber,nb_personal_blocks_in_frame: usize,personal_difficulty: PersonalDifficulty,})
pub static CURRENT_FRAME_MEMBERS: &str = "cfm";
/// Fork blocks referenced in tree or in orphan blockstamps (Blockstamp, DbBlock) /// Fork blocks referenced in tree or in orphan blockstamps (Blockstamp, DbBlock)
pub static FORK_BLOCKS: &str = "fb"; pub static FORK_BLOCKS: &str = "fb";
......
...@@ -17,11 +17,14 @@ ...@@ -17,11 +17,14 @@
//use crate::constants::*; //use crate::constants::*;
use crate::*; use crate::*;
extern crate num; extern crate num;
use dubp_common_doc::BlockNumber; use dubp_common_doc::BlockNumber;
use durs_dbs_tools::DbError; use durs_dbs_tools::DbError;
use durs_wot::WotId; use durs_wot::WotId;
use num::Float; use num::Float;
use serde::{Deserialize, Serialize};
#[derive(Clone, Copy, Debug, Eq, PartialEq)] #[derive(Clone, Copy, Debug, Eq, PartialEq)]
/// Describe a member in current frame /// Describe a member in current frame
...@@ -32,7 +35,7 @@ pub struct MemberInCurrentFrame { ...@@ -32,7 +35,7 @@ pub struct MemberInCurrentFrame {
pub difficulty: PersonalDifficulty, pub difficulty: PersonalDifficulty,
} }
#[derive(Clone, Copy, Debug, Eq, PartialEq)] #[derive(Clone, Copy, Debug, Eq, PartialEq, Serialize, Deserialize)]
/// Personal difficulty of a member. /// Personal difficulty of a member.
pub struct PersonalDifficulty { pub struct PersonalDifficulty {
/// Exclusion factor /// Exclusion factor
...@@ -40,6 +43,23 @@ pub struct PersonalDifficulty { ...@@ -40,6 +43,23 @@ pub struct PersonalDifficulty {
/// handicap /// handicap
pub handicap: usize, pub handicap: usize,
} }
// FIXME: à tester
impl Default for PersonalDifficulty {
fn default() -> Self {
PersonalDifficulty {
exclusion_factor: 1,
handicap: 0,
}
}
}
#[derive(Debug, Copy, Clone, Serialize, Deserialize)]
/// in frame member info data store
pub struct MemberFrameInfo {
last_personal_block_number: BlockNumber,
nb_personal_blocks_in_frame: usize,
personal_difficulty: PersonalDifficulty,
}
/// Get current frame datas /// Get current frame datas
pub fn get_current_frame<DB: DbReadable>( pub fn get_current_frame<DB: DbReadable>(
...@@ -55,10 +75,12 @@ pub fn get_member_diffi<DB: DbReadable, R: DbReader>( ...@@ -55,10 +75,12 @@ pub fn get_member_diffi<DB: DbReadable, R: DbReader>(
_r: &R, _r: &R,
_wot_id: WotId, _wot_id: WotId,
) -> Result<PersonalDifficulty, DbError> { ) -> Result<PersonalDifficulty, DbError> {
unimplemented!(); Ok(PersonalDifficulty {
exclusion_factor: 1,
handicap: 0,
})
} }
/// calcule la difficulté personnalisée à partir des données prêtes à l'emploi /// calcule la difficulté personnalisée à partir des données prêtes à l'emploi
/// reference dans le protocol : https://github.com/duniter/duniter/blob/master/doc/Protocol.md#br_g18---headpowzeros-and-headpowremainder /// reference dans le protocol : https://github.com/duniter/duniter/blob/master/doc/Protocol.md#br_g18---headpowzeros-and-headpowremainder
pub fn compute_personal_difficulty( pub fn compute_personal_difficulty(
...@@ -114,6 +136,11 @@ pub fn handicap(nb_personal_blocks_in_frame: usize, median_of_blocks_in_frame: u ...@@ -114,6 +136,11 @@ pub fn handicap(nb_personal_blocks_in_frame: usize, median_of_blocks_in_frame: u
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use super::*; use super::*;
use durs_dbs_tools::kv_db::KvFileDbHandler;
//use durs_bc_db_reader::DbValue;
//use durs_bc_db_reader::Db;
//use Db::db_value;
//use log::kv::Value;
//TODO: déplacer la fonction métier dans blockchain ou bc-db-writer //TODO: déplacer la fonction métier dans blockchain ou bc-db-writer
#[test] #[test]
...@@ -133,7 +160,7 @@ mod tests { ...@@ -133,7 +160,7 @@ mod tests {
assert_eq!( assert_eq!(
PersonalDifficulty { PersonalDifficulty {
exclusion_factor: 1, exclusion_factor: 1,
handicap: 0 handicap: 0,
}, },
compute_personal_difficulty(100, BlockNumber(1000), BlockNumber(1100), 2, 5) compute_personal_difficulty(100, BlockNumber(1000), BlockNumber(1100), 2, 5)
); );
...@@ -144,30 +171,67 @@ mod tests { ...@@ -144,30 +171,67 @@ mod tests {
assert_eq!( assert_eq!(
PersonalDifficulty { PersonalDifficulty {
exclusion_factor: 3, exclusion_factor: 3,
handicap: 10 handicap: 10,
}, },
compute_personal_difficulty(50, BlockNumber(1000), BlockNumber(1010), 5, 1) compute_personal_difficulty(50, BlockNumber(1000), BlockNumber(1010), 5, 1)
); );
assert_eq!(
PersonalDifficulty {
exclusion_factor: 2,
handicap: 13,
},
compute_personal_difficulty(6, BlockNumber(99), BlockNumber(100), 19, 2)
);
} }
// test avec db mockée // test avec db mockée
// fn factory_member_frame_info(last: u32, nbr:usize) -> Result<DbValue, DbError> {
// Db::db_value(&durs_dbs_tools::to_bytes(&MemberFrameInfo {
// last_personal_block_number: BlockNumber(last),
// nb_personal_blocks_in_frame: nbr,
// ..Default::default()
// })?)
// }
fn init_mocked_db() -> Result<KvFileDbHandler, DbError> {
let db = crate::tests::open_tmp_db()?;
db.write(|mut w| {
//db.get_int_store(CURRENT_FRAME_MEMBERS).put(w.as_mut(), 1, &factory_member_frame_info(99,15)?);
// créer une hashmap avec comme
// |- clef les wot_id des membres de la fenêtre courante
// |- valeurs :
// |- le block_number du dernier block de ce membre
// |- le nombre de block de ce membre dans la fenêtre courante
// {1:{99,15},3:{80,5},4:{97,3},5:{98,1},6:{90,1},8:{71,1}}
//common::insert_wot_index_entry(&db, &mut w, WotId(0), issuer_a)?;
Ok(w)
})?;
Ok(db)
}
#[test]
fn test_personal_difficulty_member_not_in_frame() -> Result<(), DbError> {
let db = init_mocked_db()?;
assert_eq!(
PersonalDifficulty {
exclusion_factor: 1,
handicap: 0,
},
db.read(|r| get_member_diffi(&db, r, WotId(0)))?
);
Ok(())
}
// #[test] // #[test]
// fn test_personal_difficulty_member_not_in_frame() -> Result<(), DbError> { // fn test_personal_difficulty_member_supercalculator() -> Result<(), DbError> {
// let db = crate::tests::open_tmp_db()?; // let db = init_mocked_db()?;
// db.write(|mut w| {
// //common::insert_wot_index_entry(&db, &mut w, WotId(0), issuer_a)?;
// Ok(w)
// })?;
// db.read(|r| {
// //common::insert_wot_index_entry(&db, &mut w, WotId(0), issuer_a)?;
// assert_eq!( // assert_eq!(
// PersonalDifficulty { // PersonalDifficulty {
// exclusion_factor: 1, // exclusion_factor: 2,
// handicap: 0 // handicap: 13,
// }, // },
// get_member_diffi(db,r, WotId(0)) // db.read(|r| get_member_diffi(&db, r, WotId(1)))?
// ); // );
// })?; // Ok(())
// } // }
} }
...@@ -52,6 +52,7 @@ pub fn bc_db_schema() -> KvFileDbSchema { ...@@ -52,6 +52,7 @@ pub fn bc_db_schema() -> KvFileDbSchema {
KvFileDbSchema { KvFileDbSchema {
stores: hashmap![ stores: hashmap![
CURRENT_METAS_DATAS.to_owned() => KvFileDbStoreType::SingleIntKey, CURRENT_METAS_DATAS.to_owned() => KvFileDbStoreType::SingleIntKey,
CURRENT_FRAME_MEMBERS.to_owned() => KvFileDbStoreType::SingleIntKey,
MAIN_BLOCKS.to_owned() => KvFileDbStoreType::SingleIntKey, MAIN_BLOCKS.to_owned() => KvFileDbStoreType::SingleIntKey,
FORK_BLOCKS.to_owned() => KvFileDbStoreType::Single, FORK_BLOCKS.to_owned() => KvFileDbStoreType::Single,
ORPHAN_BLOCKSTAMP.to_owned() => KvFileDbStoreType::Single, ORPHAN_BLOCKSTAMP.to_owned() => KvFileDbStoreType::Single,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment