diff --git a/Cargo.lock b/Cargo.lock
index 5309957961c6bb11b5651d8959ba806a9b6c10e3..0ddb50e21734877a2a67c213663fc460b5107ec7 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -740,6 +740,7 @@ dependencies = [
  "dubp-user-docs-tests-tools 0.1.0",
  "dup-crypto 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "dup-crypto-tests-tools 0.1.0",
+ "durs-common-tools 0.2.0",
  "failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "json-pest-parser 0.2.0",
 ]
@@ -966,6 +967,8 @@ name = "durs-common-tools"
 version = "0.2.0"
 dependencies = [
  "pretty_assertions 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)",
+ "shrinkwraprs 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
diff --git a/lib/dubp/block-doc/src/block.rs b/lib/dubp/block-doc/src/block.rs
index 22ae22a0f745a3cb867c8a7f3ca285eabc8c907b..136f8ada96cd7ee5dd5c023fc966c41b77e659e4 100644
--- a/lib/dubp/block-doc/src/block.rs
+++ b/lib/dubp/block-doc/src/block.rs
@@ -22,6 +22,7 @@ use dubp_common_doc::traits::{Document, ToStringObject};
 use dubp_common_doc::{BlockHash, BlockNumber};
 use dup_crypto::hashs::Hash;
 use dup_crypto::keys::{PubKey, PublicKey, SignatorEnum};
+use durs_common_tools::UsizeSer32;
 
 pub use v10::{BlockDocumentV10, BlockDocumentV10Stringified};
 
@@ -60,7 +61,7 @@ pub trait BlockDocumentTrait {
     /// Compute the character string that will be signed
     fn compute_will_signed_string(&self) -> String;
     /// Get current frame size (in blocks)
-    fn current_frame_size(&self) -> usize;
+    fn current_frame_size(&self) -> UsizeSer32;
     /// Generate compact inner text (for compute inner_hash)
     fn generate_compact_inner_text(&self) -> String;
     /// Compute hash and save it in document
@@ -74,13 +75,13 @@ pub trait BlockDocumentTrait {
     /// Get block inner hash
     fn inner_hash(&self) -> Option<Hash>;
     /// Get number of compute members in the current frame
-    fn issuers_count(&self) -> usize;
+    fn issuers_count(&self) -> UsizeSer32;
     /// Get number of members in wot
-    fn members_count(&self) -> usize;
+    fn members_count(&self) -> UsizeSer32;
     /// Get block number
     fn number(&self) -> BlockNumber;
     /// Get common difficulty (PoW)
-    fn pow_min(&self) -> usize;
+    fn pow_min(&self) -> UsizeSer32;
     /// Get previous hash
     fn previous_hash(&self) -> Option<Hash>;
     /// Get previous blockstamp
@@ -115,7 +116,7 @@ impl BlockDocumentTrait for BlockDocument {
         }
     }
     #[inline]
-    fn current_frame_size(&self) -> usize {
+    fn current_frame_size(&self) -> UsizeSer32 {
         match self {
             BlockDocument::V10(block) => block.current_frame_size(),
         }
@@ -157,13 +158,13 @@ impl BlockDocumentTrait for BlockDocument {
         }
     }
     #[inline]
-    fn issuers_count(&self) -> usize {
+    fn issuers_count(&self) -> UsizeSer32 {
         match self {
             BlockDocument::V10(block) => block.issuers_count(),
         }
     }
     #[inline]
-    fn members_count(&self) -> usize {
+    fn members_count(&self) -> UsizeSer32 {
         match self {
             BlockDocument::V10(block) => block.members_count(),
         }
@@ -181,7 +182,7 @@ impl BlockDocumentTrait for BlockDocument {
         }
     }
     #[inline]
-    fn pow_min(&self) -> usize {
+    fn pow_min(&self) -> UsizeSer32 {
         match self {
             BlockDocument::V10(block) => block.pow_min(),
         }
@@ -227,7 +228,7 @@ impl BlockDocumentTrait for BlockDocument {
 impl Document for BlockDocument {
     type PublicKey = PubKey;
 
-    fn version(&self) -> usize {
+    fn version(&self) -> UsizeSer32 {
         match self {
             BlockDocument::V10(block_v10_12) => block_v10_12.version(),
         }
diff --git a/lib/dubp/block-doc/src/block/v10.rs b/lib/dubp/block-doc/src/block/v10.rs
index 44f4472ff1977a3e7d8cee6f7ad408d8915ae2c5..024f1df2360663be2df37a130a38d2b59d5edd4b 100644
--- a/lib/dubp/block-doc/src/block/v10.rs
+++ b/lib/dubp/block-doc/src/block/v10.rs
@@ -36,7 +36,7 @@ use dubp_user_docs::documents::transaction::v10::{
 };
 use dup_crypto::hashs::Hash;
 use dup_crypto::keys::*;
-use durs_common_tools::fatal_error;
+use durs_common_tools::{fatal_error, UsizeSer32};
 use unwrap::unwrap;
 
 /// Wrap a Block document.
@@ -45,27 +45,27 @@ use unwrap::unwrap;
 #[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq)]
 pub struct BlockDocumentV10 {
     /// Version
-    pub version: u32,
+    pub version: UsizeSer32,
     /// Nonce
     pub nonce: u64,
     /// number
     pub number: BlockNumber,
     /// Minimal proof of work difficulty
-    pub pow_min: usize,
+    pub pow_min: UsizeSer32,
     /// Local time of the block issuer
     pub time: u64,
     /// Average time
     pub median_time: u64,
     /// Members count
-    pub members_count: usize,
+    pub members_count: UsizeSer32,
     /// Monetary mass
-    pub monetary_mass: usize,
+    pub monetary_mass: u64,
     /// Unit base (power of ten)
-    pub unit_base: usize,
+    pub unit_base: UsizeSer32,
     /// Number of compute members in the current frame
-    pub issuers_count: usize,
+    pub issuers_count: UsizeSer32,
     /// Current frame size (in blocks)
-    pub issuers_frame: usize,
+    pub issuers_frame: UsizeSer32,
     /// Current frame variation buffer
     pub issuers_frame_var: isize,
     /// Currency.
@@ -86,7 +86,7 @@ pub struct BlockDocumentV10 {
     /// Hash of the deterministic content of the block
     pub inner_hash: Option<Hash>,
     /// Amount of new dividend created at this block, None if no dividend is created at this block
-    pub dividend: Option<usize>,
+    pub dividend: Option<UsizeSer32>,
     /// Identities
     pub identities: Vec<IdentityDocumentV10>,
     /// joiners
@@ -128,7 +128,7 @@ impl BlockDocumentTrait for BlockDocumentV10 {
             self.nonce
         )
     }
-    fn current_frame_size(&self) -> usize {
+    fn current_frame_size(&self) -> UsizeSer32 {
         self.issuers_frame
     }
     fn generate_compact_inner_text(&self) -> String {
@@ -178,7 +178,7 @@ impl BlockDocumentTrait for BlockDocumentV10 {
             transactions_str.push_str(&transaction.generate_compact_text());
         }
         let mut dividend_str = String::from("");
-        if let Some(dividend) = self.dividend {
+        if let Some(UsizeSer32(dividend)) = self.dividend {
             if dividend > 0 {
                 dividend_str.push_str("UniversalDividend: ");
                 dividend_str.push_str(&dividend.to_string());
@@ -272,16 +272,16 @@ Transactions:{transactions}
     fn inner_hash(&self) -> Option<Hash> {
         self.inner_hash
     }
-    fn issuers_count(&self) -> usize {
+    fn issuers_count(&self) -> UsizeSer32 {
         self.issuers_count
     }
-    fn members_count(&self) -> usize {
+    fn members_count(&self) -> UsizeSer32 {
         self.members_count
     }
     fn number(&self) -> BlockNumber {
         self.number
     }
-    fn pow_min(&self) -> usize {
+    fn pow_min(&self) -> UsizeSer32 {
         self.pow_min
     }
     fn previous_blockstamp(&self) -> Blockstamp {
@@ -370,8 +370,8 @@ impl Document for BlockDocumentV10 {
     type PublicKey = PubKey;
 
     #[inline]
-    fn version(&self) -> usize {
-        self.version as usize
+    fn version(&self) -> UsizeSer32 {
+        self.version
     }
 
     #[inline]
@@ -467,7 +467,7 @@ pub struct BlockDocumentV10Stringified {
     /// Number of compute members in the current frame
     pub issuers_count: u64,
     /// Current frame size (in blocks)
-    pub issuers_frame: i64,
+    pub issuers_frame: u64,
     /// Current frame variation buffer
     pub issuers_frame_var: i64,
     /// Currency.
@@ -512,17 +512,17 @@ impl ToStringObject for BlockDocumentV10 {
     /// Transforms an object into a json object
     fn to_string_object(&self) -> BlockDocumentV10Stringified {
         BlockDocumentV10Stringified {
-            version: u64::from(self.version),
+            version: self.version.into(),
             nonce: self.nonce,
             number: u64::from(self.number.0),
-            pow_min: self.pow_min as u64,
+            pow_min: self.pow_min.into(),
             time: self.time,
             median_time: self.median_time,
-            members_count: self.members_count as u64,
-            monetary_mass: self.monetary_mass as u64,
-            unit_base: self.unit_base as u64,
-            issuers_count: self.issuers_count as u64,
-            issuers_frame: self.issuers_frame as i64,
+            members_count: self.members_count.into(),
+            monetary_mass: self.monetary_mass,
+            unit_base: self.unit_base.into(),
+            issuers_count: self.issuers_count.into(),
+            issuers_frame: self.issuers_frame.into(),
             issuers_frame_var: self.issuers_frame_var as i64,
             currency: self.currency.to_string(),
             issuers: self.issuers.iter().map(ToString::to_string).collect(),
@@ -532,7 +532,7 @@ impl ToStringObject for BlockDocumentV10 {
             previous_hash: self.previous_hash.map(|hash| hash.to_string()),
             previous_issuer: self.previous_issuer.map(|p| p.to_string()),
             inner_hash: self.inner_hash.map(|hash| hash.to_string()),
-            dividend: self.dividend.map(|dividend| dividend as u64),
+            dividend: self.dividend.map(Into::into),
             identities: self
                 .identities
                 .iter()
@@ -603,16 +603,16 @@ mod tests {
     fn generate_and_verify_empty_block() {
         let mut block = BlockDocumentV10 {
             nonce: 100_010_200_000_006_940,
-            version: 10,
+            version: UsizeSer32(10),
             number: BlockNumber(174_260),
-            pow_min: 68,
+            pow_min: UsizeSer32(68),
             time: 1_525_296_873,
             median_time: 1_525_292_577,
-            members_count: 33,
+            members_count: UsizeSer32(33),
             monetary_mass: 15_633_687,
-            unit_base: 0,
-            issuers_count: 8,
-            issuers_frame: 41,
+            unit_base: UsizeSer32(0),
+            issuers_count: UsizeSer32(8),
+            issuers_frame: UsizeSer32(41),
             issuers_frame_var: 0,
             currency: CurrencyName(String::from("g1-test")),
             issuers: vec![PubKey::Ed25519(unwrap!(ed25519::PublicKey::from_base58("39Fnossy1GrndwCnAXGDw3K5UYXhNXAFQe7yhYZp8ELP"), "Fail to build PublicKey from base58"))],
@@ -704,16 +704,16 @@ a9PHPuSfw7jW8FRQHXFsGi/bnLjbtDnTYvEVgUC9u0WlR7GVofa+Xb+l5iy6NwuEXiwvueAkf08wPVY8
 
         let mut block = BlockDocumentV10 {
             nonce: 10_300_000_018_323,
-            version: 10,
+            version: UsizeSer32(10),
             number: BlockNumber(107_984),
-            pow_min: 88,
+            pow_min: UsizeSer32(88),
             time: 1_522_685_861,
             median_time: 1_522_683_184,
-            members_count: 896,
+            members_count: UsizeSer32(896),
             monetary_mass: 140_469_765,
-            unit_base: 0,
-            issuers_count: 42,
-            issuers_frame: 211,
+            unit_base: UsizeSer32(0),
+            issuers_count: UsizeSer32(42),
+            issuers_frame: UsizeSer32(211),
             issuers_frame_var: 0,
             currency: CurrencyName(String::from("g1")),
             issuers: vec![PubKey::Ed25519(unwrap!(ed25519::PublicKey::from_base58("DA4PYtXdvQqk1nCaprXH52iMsK5Ahxs1nRWbWKLhpVkQ"), "Fail to build PublicKey from base58"))],
@@ -884,16 +884,16 @@ nxr4exGrt16jteN9ZX3XZPP9l+X0OUbZ1o/QjE1hbWQNtVU3HhH9SJoEvNj2iVl3gCRr9u2OA9uj9vCy
 
         let mut block = BlockDocumentV10 {
             nonce: 10_300_000_090_296,
-            version: 10,
+            version: UsizeSer32(10),
             number: BlockNumber(165_647),
-            pow_min: 90,
+            pow_min: UsizeSer32(90),
             time: 1_540_633_175,
             median_time: 1_540_627_811,
-            members_count: 1402,
+            members_count: UsizeSer32(1402),
             monetary_mass: 386_008_811,
-            unit_base: 0,
-            issuers_count: 37,
-            issuers_frame: 186,
+            unit_base: UsizeSer32(0),
+            issuers_count: UsizeSer32(37),
+            issuers_frame: UsizeSer32(186),
             issuers_frame_var: 0,
             currency: CurrencyName(String::from("g1")),
             issuers: vec![PubKey::Ed25519(unwrap!(ed25519::PublicKey::from_base58("A4pc9Uuk4NXkWG8CibicjjPpEPdiup1mhjMoRWUZsonq"), "Fail to build PublicKey from base58"))],
diff --git a/lib/dubp/block-doc/src/parser.rs b/lib/dubp/block-doc/src/parser.rs
index ae4ef334ef620990f12615b5c2f60fab2399a3ae..7fb52d9a77f22313e949a80a5de1b1b000553b26 100644
--- a/lib/dubp/block-doc/src/parser.rs
+++ b/lib/dubp/block-doc/src/parser.rs
@@ -24,8 +24,10 @@ use dubp_user_docs::parsers::{serde_json_value_to_pest_json_value, DefaultHasher
 use dup_crypto::bases::BaseConvertionError;
 use dup_crypto::hashs::Hash;
 use dup_crypto::keys::*;
+use durs_common_tools::UsizeSer32;
 use failure::Error;
 use json_pest_parser::*;
+use std::convert::TryFrom;
 use std::str::FromStr;
 
 pub fn parse_json_block_from_serde_value(
@@ -46,22 +48,20 @@ pub fn parse_json_block(json_block: &JSONValue<DefaultHasher>) -> Result<BlockDo
 
     let currency = get_str(json_block, "currency")?;
 
-    let block_number = get_number(json_block, "number")?.trunc() as u32;
+    let block_number = u32::try_from(get_u64(json_block, "number")?)?;
 
     Ok(BlockDocument::V10(BlockDocumentV10 {
-        version: get_number(json_block, "version")?.trunc() as u32,
+        version: UsizeSer32(get_u64(json_block, "version")? as usize),
         nonce: get_u64(json_block, "nonce")?,
         number: BlockNumber(block_number),
-        pow_min: get_number(json_block, "powMin")?.trunc() as usize,
-        time: get_number(json_block, "time")?.trunc() as u64,
-        median_time: get_number(json_block, "medianTime")?.trunc() as u64,
-        members_count: get_number(json_block, "membersCount")?.trunc() as usize,
-        monetary_mass: get_number(json_block, "monetaryMass")
-            .unwrap_or(0f64)
-            .trunc() as usize,
-        unit_base: get_number(json_block, "unitbase")?.trunc() as usize,
-        issuers_count: get_number(json_block, "issuersCount")?.trunc() as usize,
-        issuers_frame: get_number(json_block, "issuersFrame")?.trunc() as usize,
+        pow_min: UsizeSer32(get_u64(json_block, "powMin")? as usize),
+        time: get_u64(json_block, "time")?,
+        median_time: get_u64(json_block, "medianTime")?,
+        members_count: UsizeSer32(get_u64(json_block, "membersCount")? as usize),
+        monetary_mass: get_u64(json_block, "monetaryMass").unwrap_or(0),
+        unit_base: UsizeSer32(get_u64(json_block, "unitbase")? as usize),
+        issuers_count: UsizeSer32(get_u64(json_block, "issuersCount")? as usize),
+        issuers_frame: UsizeSer32(get_u64(json_block, "issuersFrame")? as usize),
         issuers_frame_var: get_number(json_block, "issuersFrameVar")?.trunc() as isize,
         currency: CurrencyName(currency.to_owned()),
         issuers: vec![PubKey::Ed25519(ed25519::PublicKey::from_base58(get_str(
@@ -89,7 +89,7 @@ pub fn parse_json_block(json_block: &JSONValue<DefaultHasher>) -> Result<BlockDo
             )?)?))
         },
         inner_hash: Some(Hash::from_hex(get_str(json_block, "inner_hash")?)?),
-        dividend: get_optional_usize(json_block, "dividend")?,
+        dividend: get_optional_usize(json_block, "dividend")?.map(UsizeSer32),
         identities: dubp_user_docs::parsers::identities::parse_compact_identities(
             currency,
             get_str_array(json_block, "identities")?,
@@ -172,17 +172,17 @@ mod tests {
             .expect("Fail to parse json block !");
         assert_eq!(
             BlockDocument::V10(BlockDocumentV10 {
-                version: 10,
+                version: UsizeSer32(10),
                 nonce: 10_200_000_037_108,
                 number: BlockNumber(7),
-                pow_min: 70,
+                pow_min: UsizeSer32(70),
                 time: 1_488_987_677,
                 median_time: 1_488_987_394,
-                members_count: 59,
+                members_count: UsizeSer32(59),
                 monetary_mass: 59000,
-                unit_base: 0,
-                issuers_count: 1,
-                issuers_frame: 6,
+                unit_base: UsizeSer32(0),
+                issuers_count: UsizeSer32(1),
+                issuers_frame: UsizeSer32(6),
                 issuers_frame_var: 0,
                 currency: CurrencyName("g1".to_owned()),
                 issuers: vec![PubKey::Ed25519(
@@ -293,17 +293,17 @@ mod tests {
             .expect("Fail to parse json block !");
 
         let expected_block = BlockDocument::V10(BlockDocumentV10 {
-                version: 10,
+                version: UsizeSer32(10),
                 nonce: 10_100_000_033_688,
                 number: BlockNumber(52),
-                pow_min: 74,
+                pow_min: UsizeSer32(74),
                 time: 1_488_990_898,
                 median_time: 1_488_990_117,
-                members_count: 59,
+                members_count: UsizeSer32(59),
                 monetary_mass: 59000,
-                unit_base: 0,
-                issuers_count: 1,
-                issuers_frame: 6,
+                unit_base: UsizeSer32(0),
+                issuers_count: UsizeSer32(1),
+                issuers_frame: UsizeSer32(6),
                 issuers_frame_var: 0,
                 currency: CurrencyName("g1".to_owned()),
                 issuers: vec![PubKey::Ed25519(
diff --git a/lib/dubp/common-doc/src/traits.rs b/lib/dubp/common-doc/src/traits.rs
index a033138d0aab4765a3b5fd92869d612931ad7fd1..9bbfee5812ca590465fefb2b9e66bb8d5dfd5585 100644
--- a/lib/dubp/common-doc/src/traits.rs
+++ b/lib/dubp/common-doc/src/traits.rs
@@ -20,6 +20,7 @@ pub mod text;
 use crate::blockstamp::Blockstamp;
 use crate::errors::DocumentSigsErr;
 use dup_crypto::keys::*;
+use durs_common_tools::UsizeSer32;
 use serde::Serialize;
 use std::collections::HashMap;
 use std::fmt::Debug;
@@ -109,7 +110,7 @@ pub trait Document: Debug + Clone + PartialEq + Eq {
     }
 
     /// Get document version.
-    fn version(&self) -> usize;
+    fn version(&self) -> UsizeSer32;
 }
 
 /// Trait helper for building new documents.
diff --git a/lib/dubp/user-docs/src/documents/certification.rs b/lib/dubp/user-docs/src/documents/certification.rs
index 407b8a75aa3330903c64292c437f2136c767d901..64ce3f86c87297b08b1bfd1834d3756770322cb6 100644
--- a/lib/dubp/user-docs/src/documents/certification.rs
+++ b/lib/dubp/user-docs/src/documents/certification.rs
@@ -22,7 +22,7 @@ use dubp_common_doc::blockstamp::Blockstamp;
 use dubp_common_doc::parser::{DocumentsParser, TextDocumentParseError, TextDocumentParser};
 use dubp_common_doc::traits::{Document, ToStringObject};
 use dup_crypto::keys::*;
-use durs_common_tools::fatal_error;
+use durs_common_tools::{fatal_error, UsizeSer32};
 use pest::Parser;
 
 pub use v10::{
@@ -42,9 +42,9 @@ impl Document for CertificationDocument {
     type PublicKey = PubKey;
 
     #[inline]
-    fn version(&self) -> usize {
+    fn version(&self) -> UsizeSer32 {
         match self {
-            CertificationDocument::V10(_) => 10,
+            CertificationDocument::V10(cert_v10) => cert_v10.version(),
         }
     }
 
diff --git a/lib/dubp/user-docs/src/documents/certification/v10.rs b/lib/dubp/user-docs/src/documents/certification/v10.rs
index c0dbf79a6486a319cd643742494b942d354eda56..35c964a8a1735871c9d935d796cb4aa210184d3f 100644
--- a/lib/dubp/user-docs/src/documents/certification/v10.rs
+++ b/lib/dubp/user-docs/src/documents/certification/v10.rs
@@ -23,7 +23,7 @@ use dubp_common_doc::traits::{Document, DocumentBuilder, ToStringObject};
 use dubp_common_doc::{BlockHash, BlockNumber};
 use dup_crypto::hashs::Hash;
 use dup_crypto::keys::*;
-use durs_common_tools::fatal_error;
+use durs_common_tools::{fatal_error, UsizeSer32};
 
 #[derive(Copy, Clone, Debug, Deserialize, Serialize, PartialEq, Eq)]
 /// Wrap an Compact Revocation document (in block content)
@@ -213,8 +213,8 @@ impl CertificationDocumentV10 {
 impl Document for CertificationDocumentV10 {
     type PublicKey = PubKey;
 
-    fn version(&self) -> usize {
-        10
+    fn version(&self) -> UsizeSer32 {
+        UsizeSer32(10)
     }
 
     fn currency(&self) -> &str {
diff --git a/lib/dubp/user-docs/src/documents/identity.rs b/lib/dubp/user-docs/src/documents/identity.rs
index 74ec431b0647365e764af47a06be3b3c79759b54..c4f4403afe293910db6d74e89e694579f83a81e9 100644
--- a/lib/dubp/user-docs/src/documents/identity.rs
+++ b/lib/dubp/user-docs/src/documents/identity.rs
@@ -22,6 +22,7 @@ use dubp_common_doc::blockstamp::Blockstamp;
 use dubp_common_doc::parser::{DocumentsParser, TextDocumentParseError, TextDocumentParser};
 use dubp_common_doc::traits::{Document, ToStringObject};
 use dup_crypto::keys::*;
+use durs_common_tools::UsizeSer32;
 
 pub use v10::{IdentityDocumentV10, IdentityDocumentV10Stringified};
 
@@ -36,9 +37,9 @@ impl Document for IdentityDocument {
     type PublicKey = PubKey;
 
     #[inline]
-    fn version(&self) -> usize {
+    fn version(&self) -> UsizeSer32 {
         match self {
-            IdentityDocument::V10(_) => 10,
+            IdentityDocument::V10(idty_v10) => idty_v10.version(),
         }
     }
 
diff --git a/lib/dubp/user-docs/src/documents/identity/v10.rs b/lib/dubp/user-docs/src/documents/identity/v10.rs
index 24fa6f258a7df35fa4f13ff130278934f1afe5c3..762ed89c9a8d3dbf4d2bee57dbb69dd17d991cea 100644
--- a/lib/dubp/user-docs/src/documents/identity/v10.rs
+++ b/lib/dubp/user-docs/src/documents/identity/v10.rs
@@ -25,6 +25,7 @@ use dubp_common_doc::traits::{Document, DocumentBuilder, ToStringObject};
 use dubp_common_doc::{BlockHash, BlockNumber};
 use dup_crypto::hashs::Hash;
 use dup_crypto::keys::*;
+use durs_common_tools::UsizeSer32;
 
 /// Wrap an Identity document.
 ///
@@ -135,8 +136,8 @@ impl IdentityDocumentV10 {
 impl Document for IdentityDocumentV10 {
     type PublicKey = PubKey;
 
-    fn version(&self) -> usize {
-        10
+    fn version(&self) -> UsizeSer32 {
+        UsizeSer32(10)
     }
 
     fn currency(&self) -> &str {
diff --git a/lib/dubp/user-docs/src/documents/membership.rs b/lib/dubp/user-docs/src/documents/membership.rs
index 51b5f2dc9abf22698f4e15af85efceceb1f0ec32..3f5593423a779708dc17912a21b6af75abdff1b4 100644
--- a/lib/dubp/user-docs/src/documents/membership.rs
+++ b/lib/dubp/user-docs/src/documents/membership.rs
@@ -23,6 +23,7 @@ use dubp_common_doc::parser::{DocumentsParser, TextDocumentParseError, TextDocum
 use dubp_common_doc::traits::text::*;
 use dubp_common_doc::traits::{Document, ToStringObject};
 use dup_crypto::keys::*;
+use durs_common_tools::UsizeSer32;
 
 pub use v10::{MembershipDocumentV10, MembershipDocumentV10Stringified};
 
@@ -38,9 +39,9 @@ impl Document for MembershipDocument {
     type PublicKey = PubKey;
 
     #[inline]
-    fn version(&self) -> usize {
+    fn version(&self) -> UsizeSer32 {
         match self {
-            MembershipDocument::V10(_) => 10,
+            MembershipDocument::V10(ms_v10) => ms_v10.version(),
         }
     }
 
diff --git a/lib/dubp/user-docs/src/documents/membership/v10.rs b/lib/dubp/user-docs/src/documents/membership/v10.rs
index ab20cf58a53f2947486f022a4714852fcb9ed477..75356f4632a8d38c5af2ec72f1f7774894c47891 100644
--- a/lib/dubp/user-docs/src/documents/membership/v10.rs
+++ b/lib/dubp/user-docs/src/documents/membership/v10.rs
@@ -23,7 +23,7 @@ use dubp_common_doc::traits::{Document, DocumentBuilder, ToStringObject};
 use dubp_common_doc::{BlockHash, BlockNumber};
 use dup_crypto::hashs::Hash;
 use dup_crypto::keys::*;
-use durs_common_tools::fatal_error;
+use durs_common_tools::{fatal_error, UsizeSer32};
 
 /// Type of a Membership.
 #[derive(Debug, Deserialize, Clone, Copy, Hash, Serialize, PartialEq, Eq)]
@@ -194,8 +194,8 @@ impl MembershipDocumentV10 {
 impl Document for MembershipDocumentV10 {
     type PublicKey = PubKey;
 
-    fn version(&self) -> usize {
-        10
+    fn version(&self) -> UsizeSer32 {
+        UsizeSer32(10)
     }
 
     fn currency(&self) -> &str {
diff --git a/lib/dubp/user-docs/src/documents/mod.rs b/lib/dubp/user-docs/src/documents/mod.rs
index dca2bb7a89006dba91b64e01249563819c67f80e..576a36ecac8ade0d74e734816ce87fffa73b48f3 100644
--- a/lib/dubp/user-docs/src/documents/mod.rs
+++ b/lib/dubp/user-docs/src/documents/mod.rs
@@ -165,6 +165,7 @@ mod tests {
     use dubp_common_doc::Blockstamp;
 
     use dup_crypto::keys::*;
+    use durs_common_tools::UsizeSer32;
 
     // simple text document for signature testing
     #[derive(Debug, Clone, PartialEq, Eq)]
@@ -177,7 +178,7 @@ mod tests {
     impl Document for PlainTextDocument {
         type PublicKey = PubKey;
 
-        fn version(&self) -> usize {
+        fn version(&self) -> UsizeSer32 {
             unimplemented!()
         }
 
diff --git a/lib/dubp/user-docs/src/documents/revocation.rs b/lib/dubp/user-docs/src/documents/revocation.rs
index 543b76e3aafe4032c3f9658a62f8150f42bdc377..8bb88af224c098502454ca9c1e8eb26469d40950 100644
--- a/lib/dubp/user-docs/src/documents/revocation.rs
+++ b/lib/dubp/user-docs/src/documents/revocation.rs
@@ -22,6 +22,7 @@ use dubp_common_doc::blockstamp::Blockstamp;
 use dubp_common_doc::parser::{DocumentsParser, TextDocumentParseError, TextDocumentParser};
 use dubp_common_doc::traits::{Document, ToStringObject};
 use dup_crypto::keys::*;
+use durs_common_tools::UsizeSer32;
 use pest::Parser;
 
 pub use v10::{
@@ -51,9 +52,9 @@ impl Document for RevocationDocument {
     type PublicKey = PubKey;
 
     #[inline]
-    fn version(&self) -> usize {
+    fn version(&self) -> UsizeSer32 {
         match self {
-            RevocationDocument::V10(_) => 10,
+            RevocationDocument::V10(revoc_10) => revoc_10.version(),
         }
     }
 
diff --git a/lib/dubp/user-docs/src/documents/revocation/v10.rs b/lib/dubp/user-docs/src/documents/revocation/v10.rs
index 8f5dffa4d4c4f32ac8334f3c182da1328429084e..47ca62d9745cf831f30e0effc53eac45a864ac58 100644
--- a/lib/dubp/user-docs/src/documents/revocation/v10.rs
+++ b/lib/dubp/user-docs/src/documents/revocation/v10.rs
@@ -39,6 +39,7 @@ use dubp_common_doc::traits::text::*;
 use dubp_common_doc::traits::{Document, DocumentBuilder, ToStringObject};
 use dubp_common_doc::{BlockHash, BlockNumber};
 use dup_crypto::hashs::Hash;
+use durs_common_tools::UsizeSer32;
 
 #[derive(Debug, Copy, Clone, Deserialize, Serialize, PartialEq, Eq)]
 /// Wrap an Compact Revocation document (in block content)
@@ -193,8 +194,8 @@ impl RevocationDocumentV10 {
 impl Document for RevocationDocumentV10 {
     type PublicKey = PubKey;
 
-    fn version(&self) -> usize {
-        10
+    fn version(&self) -> UsizeSer32 {
+        UsizeSer32(10)
     }
 
     fn currency(&self) -> &str {
diff --git a/lib/dubp/user-docs/src/documents/transaction.rs b/lib/dubp/user-docs/src/documents/transaction.rs
index ac5c319941b40e3fe1e088945bb969db7664119c..0606529c88b170b701fd5c4e63c2c212766642c7 100644
--- a/lib/dubp/user-docs/src/documents/transaction.rs
+++ b/lib/dubp/user-docs/src/documents/transaction.rs
@@ -24,6 +24,7 @@ use dubp_common_doc::traits::text::*;
 use dubp_common_doc::traits::{Document, DocumentBuilder, ToStringObject};
 use dup_crypto::hashs::*;
 use dup_crypto::keys::*;
+use durs_common_tools::{fatal_error, UsizeSer32};
 use std::ops::{Add, Deref, Sub};
 use unwrap::unwrap;
 
@@ -311,7 +312,7 @@ impl TransactionDocument {
 impl Document for TransactionDocument {
     type PublicKey = PubKey;
 
-    fn version(&self) -> usize {
+    fn version(&self) -> UsizeSer32 {
         match self {
             TransactionDocument::V10(tx_v10) => tx_v10.version(),
         }
diff --git a/lib/dubp/user-docs/src/documents/transaction/v10.rs b/lib/dubp/user-docs/src/documents/transaction/v10.rs
index 0f4dbabba1170870c62c916d7d197e30d80469f3..5c9081a1f146568e7619b6c87593df12fd2d136c 100644
--- a/lib/dubp/user-docs/src/documents/transaction/v10.rs
+++ b/lib/dubp/user-docs/src/documents/transaction/v10.rs
@@ -23,7 +23,7 @@ use dubp_common_doc::traits::{Document, DocumentBuilder, ToStringObject};
 use dubp_common_doc::{BlockHash, BlockNumber};
 use dup_crypto::hashs::*;
 use dup_crypto::keys::*;
-use durs_common_tools::fatal_error;
+use durs_common_tools::{fatal_error, UsizeSer32};
 use pest::iterators::Pair;
 use pest::iterators::Pairs;
 use pest::Parser;
@@ -470,8 +470,8 @@ impl TransactionDocumentV10 {
 impl Document for TransactionDocumentV10 {
     type PublicKey = PubKey;
 
-    fn version(&self) -> usize {
-        10
+    fn version(&self) -> UsizeSer32 {
+        UsizeSer32(10)
     }
 
     fn currency(&self) -> &str {
diff --git a/lib/modules-lib/bc-db-reader/src/blocks.rs b/lib/modules-lib/bc-db-reader/src/blocks.rs
index e013a39031fb739cbcc21c9c967d4e594e2a8542..58ee8f8364672d7c6603d794cf4b4ce9fa3de183 100644
--- a/lib/modules-lib/bc-db-reader/src/blocks.rs
+++ b/lib/modules-lib/bc-db-reader/src/blocks.rs
@@ -200,12 +200,12 @@ pub fn get_current_frame<DB: BcDbInReadTx>(
     current_block: &BlockDocument,
     db: &DB,
 ) -> Result<HashMap<PubKey, usize>, DbError> {
-    let frame_begin = current_block.number().0 - current_block.current_frame_size() as u32;
+    let frame_begin = current_block.number().0 - u32::from(current_block.current_frame_size());
 
     let blocks = get_blocks_in_local_blockchain(
         db,
         BlockNumber(frame_begin),
-        current_block.current_frame_size() as u32,
+        current_block.current_frame_size().into(),
     )?;
 
     let mut current_frame: HashMap<PubKey, usize> = HashMap::new();
diff --git a/lib/modules-lib/bc-db-reader/src/current_metadata/current_ud.rs b/lib/modules-lib/bc-db-reader/src/current_metadata/current_ud.rs
index 6fda114c448f9ceb8355f5c01ef9429668092d99..83417d111acce4a6e96f01c5d9eff24f1ead2376 100644
--- a/lib/modules-lib/bc-db-reader/src/current_metadata/current_ud.rs
+++ b/lib/modules-lib/bc-db-reader/src/current_metadata/current_ud.rs
@@ -17,6 +17,7 @@
 
 use dubp_block_doc::BlockDocument;
 use dubp_common_doc::BlockNumber;
+use durs_common_tools::UsizeSer32;
 use serde::{Deserialize, Serialize};
 
 #[derive(Debug, Clone, Copy, Serialize, Deserialize)]
@@ -25,7 +26,7 @@ pub struct CurrentUdDb {
     pub base: usize,
     pub block_number: BlockNumber,
     pub members_count: usize,
-    pub monetary_mass: usize,
+    pub monetary_mass: u64,
     pub common_time: u64,
 }
 
@@ -44,13 +45,13 @@ impl Into<Option<CurrentUdDb>> for CurrentUdDbInternal {
 impl CurrentUdDbInternal {
     pub fn update(&mut self, block_doc: &BlockDocument) {
         let BlockDocument::V10(ref block_doc_v10) = block_doc;
-        if let Some(dividend) = block_doc_v10.dividend {
+        if let Some(UsizeSer32(dividend)) = block_doc_v10.dividend {
             self.previous = self.current;
             self.current = Some(CurrentUdDb {
                 amount: dividend,
-                base: block_doc_v10.unit_base,
+                base: block_doc_v10.unit_base.into(),
                 block_number: block_doc_v10.number,
-                members_count: block_doc_v10.members_count,
+                members_count: block_doc_v10.members_count.into(),
                 monetary_mass: block_doc_v10.monetary_mass,
                 common_time: block_doc_v10.median_time,
             })
diff --git a/lib/modules-lib/bc-db-reader/src/tools.rs b/lib/modules-lib/bc-db-reader/src/tools.rs
index 5b1515dc80a73caa66d1791389a5863e8b864189..0fd517074b9f55818e3368b42b74094bef4f0187 100644
--- a/lib/modules-lib/bc-db-reader/src/tools.rs
+++ b/lib/modules-lib/bc-db-reader/src/tools.rs
@@ -31,12 +31,13 @@ pub fn compute_median_issuers_frame<S: std::hash::BuildHasher>(
         current_frame_vec.sort_unstable();
 
         // Calculate median
-        let mut median_index = match current_block.block.issuers_count() % 2 {
-            1 => (current_block.block.issuers_count() / 2) + 1,
-            _ => current_block.block.issuers_count() / 2,
+        let current_block_issuers_count = usize::from(current_block.block.issuers_count());
+        let mut median_index = match current_block_issuers_count % 2 {
+            1 => (current_block_issuers_count / 2) + 1,
+            _ => current_block_issuers_count / 2,
         };
-        if median_index >= current_block.block.issuers_count() {
-            median_index = current_block.block.issuers_count() - 1;
+        if median_index >= current_block_issuers_count {
+            median_index = current_block_issuers_count - 1;
         }
         current_frame_vec[median_index]
 
diff --git a/lib/modules/blockchain/blockchain/src/dubp/apply/mod.rs b/lib/modules/blockchain/blockchain/src/dubp/apply/mod.rs
index f3fdee17d56bbc6f610b0755503aaf28dbe65427..d7d384a023266f6481bf4adeb495c23902ecdf1e 100644
--- a/lib/modules/blockchain/blockchain/src/dubp/apply/mod.rs
+++ b/lib/modules/blockchain/blockchain/src/dubp/apply/mod.rs
@@ -25,7 +25,7 @@ use durs_bc_db_reader::indexes::sources::get_block_consumed_sources_;
 use durs_bc_db_reader::indexes::sources::SourceAmount;
 use durs_bc_db_writer::writers::requests::*;
 use durs_bc_db_writer::{BcDbRwWithWriter, BinFreeStructDb, Db, DbError, DbWriter};
-use durs_common_tools::fatal_error;
+use durs_common_tools::{fatal_error, UsizeSer32};
 use durs_wot::data::NewLinkResult;
 use durs_wot::{WebOfTrust, WotId};
 use std::collections::{HashMap, HashSet};
@@ -210,7 +210,7 @@ pub fn apply_valid_block_v10<W: WebOfTrust>(
                 .expect("Fail to write in WotDB");
         }
     }
-    if let Some(du_amount) = block.dividend {
+    if let Some(UsizeSer32(du_amount)) = block.dividend {
         if du_amount > 0 {
             let members_wot_ids = wot_db
                 .read(WebOfTrust::get_enabled)
@@ -222,7 +222,7 @@ pub fn apply_valid_block_v10<W: WebOfTrust>(
                 }
             }
             currency_dbs_requests.push(CurrencyDBsWriteQuery::CreateUD(
-                SourceAmount(TxAmount(du_amount as isize), TxBase(block.unit_base)),
+                SourceAmount(TxAmount(du_amount as isize), TxBase(block.unit_base.into())),
                 block.number,
                 members_pubkeys,
             ));
diff --git a/lib/modules/blockchain/blockchain/src/dubp/check.rs b/lib/modules/blockchain/blockchain/src/dubp/check.rs
index cca4bd56964368932c633ddf685451b9ac3e9103..a067542596c4410aaa80cb60475664f11a9e362b 100644
--- a/lib/modules/blockchain/blockchain/src/dubp/check.rs
+++ b/lib/modules/blockchain/blockchain/src/dubp/check.rs
@@ -67,7 +67,7 @@ pub fn check_block<DB: BcDbInReadTx>(
             // Verify proof of work
             // The case where the block has none hash is captured by check_block_hashes below
             if let Some(hash) = block_doc.hash() {
-                pow::verify_hash_pattern(hash.0, block_doc.pow_min())
+                pow::verify_hash_pattern(hash.0, block_doc.pow_min().into())
                     .map_err(CheckBlockError::Pow)?;
             }
             // Check block hashes.
diff --git a/lib/modules/blockchain/blockchain/src/dubp/check/local.rs b/lib/modules/blockchain/blockchain/src/dubp/check/local.rs
index d5925e037d41f2b0fe1b968cf5ca5cb33defa013..48ace1f9799af01d88c42f6d2ce852b32e5799a2 100644
--- a/lib/modules/blockchain/blockchain/src/dubp/check/local.rs
+++ b/lib/modules/blockchain/blockchain/src/dubp/check/local.rs
@@ -29,17 +29,19 @@ use dubp_common_doc::errors::DocumentSigsErr;
 use dubp_common_doc::traits::Document;
 use dubp_common_doc::BlockNumber;
 use dubp_currency_params::CurrencyParameters;
+use durs_common_tools::UsizeSer32;
 
 const COUNT_ALLOWED_BLOCK_VERSIONS: usize = 3;
-static ALLOWED_BLOCK_VERSIONS: [usize; COUNT_ALLOWED_BLOCK_VERSIONS] = [10, 11, 12];
+static ALLOWED_BLOCK_VERSIONS: [UsizeSer32; COUNT_ALLOWED_BLOCK_VERSIONS] =
+    [UsizeSer32(10), UsizeSer32(11), UsizeSer32(12)];
 
 #[derive(Debug, PartialEq)]
 /// Local verification of a block error
 pub enum LocalVerifyBlockError {
     /// Wrong block version
     Version {
-        expected_version: [usize; COUNT_ALLOWED_BLOCK_VERSIONS],
-        actual_version: u32,
+        expected_version: [UsizeSer32; COUNT_ALLOWED_BLOCK_VERSIONS],
+        actual_version: UsizeSer32,
     },
     /// Genesis block specific rules
     LocalVerifyGenesisBlockError(LocalVerifyGenesisBlockError),
@@ -108,7 +110,7 @@ pub fn verify_local_validity_block_v10(
     block: &BlockDocumentV10,
 ) -> Result<(), LocalVerifyBlockError> {
     // Version
-    if !ALLOWED_BLOCK_VERSIONS.contains(&(block.version as usize)) {
+    if !ALLOWED_BLOCK_VERSIONS.contains(&block.version) {
         return Err(LocalVerifyBlockError::Version {
             expected_version: ALLOWED_BLOCK_VERSIONS,
             actual_version: block.version,
@@ -126,7 +128,7 @@ pub fn verify_local_validity_block_v10(
     // As it has been checked that block.issuers.len() == 1 and as
     // block.issuers.len() == block.signatures.len() is check in block.verify_signatures()
     // there is no need to check that block.signatures.len() == 1
-    if block.version >= 12 {
+    if usize::from(block.version()) >= 12 {
         block
             .verify_signatures()
             .map_err(LocalVerifyBlockError::BlockSignatureError)?;
@@ -181,11 +183,11 @@ mod tests {
     fn test_verify_not_genesis_block_wrong_version() {
         let currency_params = gen_mock_currency_parameters();
         let mut block = gen_mock_normal_block_v10();
-        block.version = 14;
+        block.version = UsizeSer32(14);
 
         let expected = Err(LocalVerifyBlockError::Version {
             expected_version: ALLOWED_BLOCK_VERSIONS,
-            actual_version: 14,
+            actual_version: UsizeSer32(14),
         });
         let actual = verify_local_validity_block(&BlockDocument::V10(block), Some(currency_params));
         assert_eq!(expected, actual);
diff --git a/lib/modules/blockchain/blockchain/src/dubp/check/local/genesis.rs b/lib/modules/blockchain/blockchain/src/dubp/check/local/genesis.rs
index 5099de4ab854c2c985b00395a71fb66a8c2632ce..e68dffcecad2f2c17fb249e1f6e18f23ad505800 100644
--- a/lib/modules/blockchain/blockchain/src/dubp/check/local/genesis.rs
+++ b/lib/modules/blockchain/blockchain/src/dubp/check/local/genesis.rs
@@ -80,8 +80,8 @@ fn local_validation_genesis_block_v10(
         .ok_or(LocalVerifyGenesisBlockError::MissingParameters)?;
 
     // unit_base must be equal to zero
-    (block.unit_base == 0).or_err(LocalVerifyGenesisBlockError::NonZeroUnitBase {
-        unit_base: block.unit_base,
+    (usize::from(block.unit_base) == 0).or_err(LocalVerifyGenesisBlockError::NonZeroUnitBase {
+        unit_base: block.unit_base.into(),
     })?;
 
     // time must be equal to median_time
@@ -100,6 +100,7 @@ mod tests {
     use dubp_blocks_tests_tools::mocks::gen_mock_genesis_block_v10;
     use dup_crypto::hashs::Hash;
     use dup_crypto::keys::*;
+    use durs_common_tools::UsizeSer32;
 
     #[test]
     fn test_genesis_block_valid() {
@@ -125,7 +126,7 @@ mod tests {
     #[test]
     fn test_genesis_block_unexpected_dividend() {
         let mut block = gen_mock_genesis_block_v10();
-        block.dividend = Some(10);
+        block.dividend = Some(UsizeSer32(10));
 
         let expected = Err(LocalVerifyGenesisBlockError::UnexpectedDividend);
         let actual = local_validation_genesis_block(&BlockDocument::V10(block));
@@ -171,7 +172,7 @@ mod tests {
     #[test]
     fn test_genesis_block_non_zero_unit_base() {
         let mut block = gen_mock_genesis_block_v10();
-        block.unit_base = 3;
+        block.unit_base = UsizeSer32(3);
 
         let expected = Err(LocalVerifyGenesisBlockError::NonZeroUnitBase { unit_base: 3 });
         let actual = local_validation_genesis_block(&BlockDocument::V10(block));
diff --git a/lib/modules/blockchain/blockchain/src/dubp/check/local/tx_doc.rs b/lib/modules/blockchain/blockchain/src/dubp/check/local/tx_doc.rs
index ee6c0e2747eea4192622d72759ea900f6a181f3d..96c4c2d52e83ce7f9a6365b0451fd8cb9cab2ab4 100644
--- a/lib/modules/blockchain/blockchain/src/dubp/check/local/tx_doc.rs
+++ b/lib/modules/blockchain/blockchain/src/dubp/check/local/tx_doc.rs
@@ -21,6 +21,7 @@ use dubp_common_doc::traits::Document;
 use dubp_user_docs::documents::transaction::v10::TransactionDocumentV10;
 use dubp_user_docs::documents::transaction::TransactionDocumentTrait;
 use durs_common_tools::traits::bool_ext::BoolExt;
+use durs_common_tools::UsizeSer32;
 
 #[derive(Debug, PartialEq)]
 /// Transaction Document Error
@@ -38,7 +39,7 @@ pub enum TransactionDocumentError {
 
 /// Local verification of a Tx Document
 pub fn local_verify_tx_doc_v10(
-    dubp_version: usize,
+    dubp_version: UsizeSer32,
     tx_doc: &TransactionDocumentV10,
 ) -> Result<(), TransactionDocumentError> {
     // A transaction in compact format must measure less than 100 lines
@@ -56,7 +57,7 @@ pub fn local_verify_tx_doc_v10(
     // Signatures are made over the transaction's content, signatures excepted
     ////////////////////////////////////////////////////////////////////////////////////
     // Temporary disabled due to #183
-    if dubp_version >= 12 {
+    if usize::from(dubp_version) >= 12 {
         tx_doc
             .verify_signatures()
             .map_err(TransactionDocumentError::TxSignatureError)?;
@@ -158,7 +159,7 @@ mod tests {
     #[test]
     fn test_tx_valid() {
         let TransactionDocument::V10(tx) = gen_mock_tx_doc();
-        assert_eq!(Ok(()), local_verify_tx_doc_v10(10, &tx));
+        assert_eq!(Ok(()), local_verify_tx_doc_v10(UsizeSer32(10), &tx));
     }
 
     #[test]
@@ -172,7 +173,7 @@ mod tests {
         let tx = tx_builder.build_with_signature(vec![sig1()]);
 
         let expected = Err(TransactionDocumentError::MissingInput);
-        let actual = local_verify_tx_doc_v10(10, &tx);
+        let actual = local_verify_tx_doc_v10(UsizeSer32(10), &tx);
         assert_eq!(expected, actual);
     }
 
@@ -190,7 +191,7 @@ mod tests {
             expected_max_length: 100,
             actual_length: 107,
         });
-        let actual = local_verify_tx_doc_v10(10, &tx);
+        let actual = local_verify_tx_doc_v10(UsizeSer32(10), &tx);
         assert_eq!(expected, actual);
     }
 
diff --git a/lib/modules/blockchain/blockchain/src/fork/revert_block.rs b/lib/modules/blockchain/blockchain/src/fork/revert_block.rs
index 0bea8a77b6ae5ca8911a3dc88c60b9b406db7b4c..b05355d2c8a1e8ed0e88824b1764e386c82c04e0 100644
--- a/lib/modules/blockchain/blockchain/src/fork/revert_block.rs
+++ b/lib/modules/blockchain/blockchain/src/fork/revert_block.rs
@@ -24,7 +24,7 @@ use durs_bc_db_reader::blocks::BlockDb;
 use durs_bc_db_reader::indexes::sources::SourceAmount;
 use durs_bc_db_writer::writers::requests::*;
 use durs_bc_db_writer::{BinFreeStructDb, DbError};
-use durs_common_tools::fatal_error;
+use durs_common_tools::{fatal_error, UsizeSer32};
 use durs_wot::data::{NewLinkResult, RemLinkResult};
 use durs_wot::{WebOfTrust, WotId};
 use std::collections::HashMap;
@@ -87,7 +87,7 @@ pub fn revert_block_v10<W: WebOfTrust>(
         )));
     }
     // Revert UD
-    if let Some(du_amount) = block.dividend {
+    if let Some(UsizeSer32(du_amount)) = block.dividend {
         if du_amount > 0 {
             let members_wot_ids = wot_db
                 .read(WebOfTrust::get_enabled)
@@ -99,7 +99,7 @@ pub fn revert_block_v10<W: WebOfTrust>(
                 }
             }
             currency_dbs_requests.push(CurrencyDBsWriteQuery::RevertUD(
-                SourceAmount(TxAmount(du_amount as isize), TxBase(block.unit_base)),
+                SourceAmount(TxAmount(du_amount as isize), TxBase(block.unit_base.into())),
                 block.number,
                 members_pubkeys,
             ));
diff --git a/lib/modules/gva/src/schema/entities/block.rs b/lib/modules/gva/src/schema/entities/block.rs
index a0e3aeed47129ee01d50f37eaf92ad0e06f9ba1e..71c40e8d65d6417fa943926d8661ae47fe4ef957 100644
--- a/lib/modules/gva/src/schema/entities/block.rs
+++ b/lib/modules/gva/src/schema/entities/block.rs
@@ -51,7 +51,7 @@ impl Block {
         ask_issuer_name: bool,
     ) -> Result<Block, DbError> {
         Ok(Block {
-            version: block_db.block.version() as i32,
+            version: block_db.block.version().into(),
             currency: block_db.block.currency().to_string(),
             issuer: block_db.block.issuers()[0].to_string(),
             issuer_name: if ask_issuer_name {
@@ -59,8 +59,8 @@ impl Block {
             } else {
                 None
             },
-            issuers_count: block_db.block.issuers_count() as i32,
-            members_count: block_db.block.members_count() as i32,
+            issuers_count: block_db.block.issuers_count().into(),
+            members_count: block_db.block.members_count().into(),
             number: block_db.block.number().0 as i32,
             hash: block_db
                 .block
@@ -68,7 +68,7 @@ impl Block {
                 .unwrap_or_else(|| fatal_error!("BlockDb without hash."))
                 .to_string(),
             blockchain_time: NaiveDateTime::from_timestamp(block_db.block.common_time() as i64, 0),
-            pow_min: block_db.block.pow_min() as i32,
+            pow_min: block_db.block.pow_min().into(),
         })
     }
 }
diff --git a/lib/modules/gva/src/schema/queries/block.rs b/lib/modules/gva/src/schema/queries/block.rs
index 48278ce323200fcbca51f315e02e6f5f5bb0209d..3a85d335f9044b748ad420d03e8f3485d160b6d3 100644
--- a/lib/modules/gva/src/schema/queries/block.rs
+++ b/lib/modules/gva/src/schema/queries/block.rs
@@ -47,6 +47,7 @@ mod tests {
     use dup_crypto::hashs::Hash;
     use dup_crypto_tests_tools::mocks::{hash, pubkey};
     use durs_bc_db_reader::blocks::BlockDb;
+    use durs_common_tools::UsizeSer32;
     use mockall::predicate::eq;
     use serde_json::json;
 
@@ -69,8 +70,8 @@ mod tests {
                     Hash::default(),
                 );
                 block.issuers = vec![pubkey('B')];
-                block.issuers_count = 3;
-                block.pow_min = 70;
+                block.issuers_count = UsizeSer32(3);
+                block.pow_min = UsizeSer32(70);
                 Ok(Some(BlockDb {
                     block: BlockDocument::V10(block),
                     expire_certs: None,
diff --git a/lib/modules/gva/src/schema/queries/current.rs b/lib/modules/gva/src/schema/queries/current.rs
index 02757c23b9d0bd294106c8b4b7158b5618e2ea75..c14f06a35034a4b4586d70d42dc81962b20eb715 100644
--- a/lib/modules/gva/src/schema/queries/current.rs
+++ b/lib/modules/gva/src/schema/queries/current.rs
@@ -39,6 +39,7 @@ mod tests {
     use dup_crypto::hashs::Hash;
     use dup_crypto_tests_tools::mocks::{hash, pubkey};
     use durs_bc_db_reader::blocks::BlockDb;
+    use durs_common_tools::UsizeSer32;
     use mockall::predicate::eq;
     use serde_json::json;
 
@@ -57,8 +58,8 @@ mod tests {
                 Hash::default(),
             );
             current_block.issuers = vec![pubkey('B')];
-            current_block.pow_min = 70;
-            current_block.members_count = 59;
+            current_block.pow_min = UsizeSer32(70);
+            current_block.members_count = UsizeSer32(59);
             Ok(Some(BlockDb {
                 block: BlockDocument::V10(current_block),
                 expire_certs: None,
diff --git a/lib/tests-tools/blocks-tests-tools/Cargo.toml b/lib/tests-tools/blocks-tests-tools/Cargo.toml
index d83b72da301bd5235e3a1e95650a79b8b7e6f501..d8394eaeeb9cdf9b4d0185e23816d1848dec0ae3 100644
--- a/lib/tests-tools/blocks-tests-tools/Cargo.toml
+++ b/lib/tests-tools/blocks-tests-tools/Cargo.toml
@@ -20,6 +20,7 @@ dubp-user-docs = { path = "../../dubp/user-docs" }
 dup-crypto = "0.8.1"
 dup-crypto-tests-tools = { path = "../crypto-tests-tools" }
 dubp-user-docs-tests-tools = { path = "../user-docs-tests-tools" }
+durs-common-tools = { path = "../../tools/common-tools" }
 json-pest-parser = { path = "../../tools/json-pest-parser" }
 failure = "0.1.5"
 
diff --git a/lib/tests-tools/blocks-tests-tools/src/mocks.rs b/lib/tests-tools/blocks-tests-tools/src/mocks.rs
index aa316541d4cb8a24c890c9de49897ef8d44fa081..58955ae959cbcba08b359c489bdc05067f617cca 100644
--- a/lib/tests-tools/blocks-tests-tools/src/mocks.rs
+++ b/lib/tests-tools/blocks-tests-tools/src/mocks.rs
@@ -30,6 +30,7 @@ use dubp_user_docs::documents::transaction::*;
 use dup_crypto::bases::b16::str_hex_to_32bytes;
 use dup_crypto::hashs::Hash;
 use dup_crypto::keys::{ed25519, PubKey, PublicKey, Sig, Signator, Signature};
+use durs_common_tools::UsizeSer32;
 
 /// Generate n mock blockstamps
 pub fn generate_blockstamps(n: usize) -> Vec<Blockstamp> {
@@ -110,17 +111,17 @@ pub fn gen_empty_issued_block_v10(issuer: PubKey) -> BlockDocumentV10 {
 
 fn gen_empty_block_v10(block_number: BlockNumber) -> BlockDocumentV10 {
     BlockDocumentV10 {
-        version: 10,
+        version: UsizeSer32(10),
         nonce: 0,
         number: block_number,
-        pow_min: 0,
+        pow_min: UsizeSer32(0),
         time: 0,
         median_time: 0,
-        members_count: 0,
+        members_count: UsizeSer32(0),
         monetary_mass: 0,
-        unit_base: 0,
-        issuers_count: 0,
-        issuers_frame: 0,
+        unit_base: UsizeSer32(0),
+        issuers_count: UsizeSer32(0),
+        issuers_frame: UsizeSer32(0),
         issuers_frame_var: 0,
         currency: CurrencyName("test_currency".to_owned()),
         issuers: vec![],
@@ -175,16 +176,16 @@ a9PHPuSfw7jW8FRQHXFsGi/bnLjbtDnTYvEVgUC9u0WlR7GVofa+Xb+l5iy6NwuEXiwvueAkf08wPVY8
 
     BlockDocumentV10 {
             nonce: 10_300_000_018_323,
-            version: 10,
+            version: UsizeSer32(10),
             number: BlockNumber(107_984),
-            pow_min: 88,
+            pow_min: UsizeSer32(88),
             time: 1_522_685_861,
             median_time: 1_522_683_184,
-            members_count: 896,
+            members_count: UsizeSer32(896),
             monetary_mass: 140_469_765,
-            unit_base: 0,
-            issuers_count: 42,
-            issuers_frame: 211,
+            unit_base: UsizeSer32(0),
+            issuers_count: UsizeSer32(42),
+            issuers_frame: UsizeSer32(211),
             issuers_frame_var: 0,
             currency: CurrencyName(String::from("g1")),
             issuers: vec![PubKey::Ed25519(ed25519::PublicKey::from_base58("DA4PYtXdvQqk1nCaprXH52iMsK5Ahxs1nRWbWKLhpVkQ").expect("fail to parse issuers"))],
@@ -213,16 +214,16 @@ a9PHPuSfw7jW8FRQHXFsGi/bnLjbtDnTYvEVgUC9u0WlR7GVofa+Xb+l5iy6NwuEXiwvueAkf08wPVY8
 pub fn gen_mock_genesis_block_v10() -> BlockDocumentV10 {
     BlockDocumentV10 {
             nonce: 0,
-            version: 10,
+            version: UsizeSer32(10),
             number: BlockNumber(0),
-            pow_min: 0,
+            pow_min: UsizeSer32(0),
             time: 0,
             median_time: 0,
-            members_count: 0,
+            members_count: UsizeSer32(0),
             monetary_mass: 0,
-            unit_base: 0,
-            issuers_count: 0,
-            issuers_frame: 0,
+            unit_base: UsizeSer32(0),
+            issuers_count: UsizeSer32(0),
+            issuers_frame: UsizeSer32(0),
             issuers_frame_var: 0,
             currency: CurrencyName(String::from("g1")),
             issuers: vec![PubKey::Ed25519(ed25519::PublicKey::from_base58("DA4PYtXdvQqk1nCaprXH52iMsK5Ahxs1nRWbWKLhpVkQ").expect("fail to parse issuers"))],
diff --git a/lib/tools/common-tools/Cargo.toml b/lib/tools/common-tools/Cargo.toml
index 6b9a55cf0013517e62628d8821461101abd98aad..c167b418eff5e35dc708c7217360a31f71a6b0fa 100644
--- a/lib/tools/common-tools/Cargo.toml
+++ b/lib/tools/common-tools/Cargo.toml
@@ -13,6 +13,8 @@ edition = "2018"
 path = "src/lib.rs"
 
 [dependencies]
+shrinkwraprs = "0.3.*"
+serde = { version = "1.0.*", features = ["derive"] }
 
 [dev-dependencies]
 pretty_assertions = "0.6.1"
diff --git a/lib/tools/common-tools/src/lib.rs b/lib/tools/common-tools/src/lib.rs
index 9330d531786914eed8c202327e50ec1b2d869d18..0645ee1f0583ccc5be96ec1c94bc99fab301c0e1 100644
--- a/lib/tools/common-tools/src/lib.rs
+++ b/lib/tools/common-tools/src/lib.rs
@@ -31,6 +31,9 @@
 pub mod fns;
 pub mod macros;
 pub mod traits;
+mod usizeser32;
+
+pub use usizeser32::UsizeSer32;
 
 /// Percent
 #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
diff --git a/lib/tools/common-tools/src/usizeser32.rs b/lib/tools/common-tools/src/usizeser32.rs
new file mode 100644
index 0000000000000000000000000000000000000000..21aaf0126c65cd694a7c70677f64328be7ddb909
--- /dev/null
+++ b/lib/tools/common-tools/src/usizeser32.rs
@@ -0,0 +1,110 @@
+//  Copyright (C) 2019  Éloïs SANCHEZ
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program.  If not, see <https://www.gnu.org/licenses/>.
+
+//! Common rust tools for DURS project.
+
+use serde::de::{self, Deserialize, Deserializer, Visitor};
+use serde::{Serialize, Serializer};
+use shrinkwraprs::Shrinkwrap;
+use std::fmt::{self, Debug, Display, Error, Formatter};
+
+/// Wrapper for a usize value serialized in u32.
+#[derive(Copy, Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd, Shrinkwrap)]
+#[shrinkwrap]
+pub struct UsizeSer32(pub usize);
+
+impl Display for UsizeSer32 {
+    fn fmt(&self, f: &mut Formatter) -> Result<(), Error> {
+        write!(f, "{}", self.0)
+    }
+}
+
+impl From<UsizeSer32> for i32 {
+    fn from(value: UsizeSer32) -> Self {
+        value.0 as Self
+    }
+}
+
+impl From<UsizeSer32> for u32 {
+    fn from(value: UsizeSer32) -> Self {
+        value.0 as Self
+    }
+}
+
+impl From<UsizeSer32> for u64 {
+    fn from(value: UsizeSer32) -> Self {
+        value.0 as Self
+    }
+}
+
+impl From<UsizeSer32> for usize {
+    fn from(value: UsizeSer32) -> Self {
+        value.0
+    }
+}
+
+impl Serialize for UsizeSer32 {
+    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
+    where
+        S: Serializer,
+    {
+        serializer.serialize_u32(self.0 as u32)
+    }
+}
+
+struct UsizeSer32Visitor;
+
+impl<'de> Visitor<'de> for UsizeSer32Visitor {
+    type Value = UsizeSer32;
+
+    fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
+        formatter.write_str("an unsigned integer between 0 and 2^32-1")
+    }
+
+    fn visit_u8<E>(self, value: u8) -> Result<UsizeSer32, E>
+    where
+        E: de::Error,
+    {
+        Ok(UsizeSer32(value as usize))
+    }
+
+    fn visit_u32<E>(self, value: u32) -> Result<UsizeSer32, E>
+    where
+        E: de::Error,
+    {
+        Ok(UsizeSer32(value as usize))
+    }
+
+    fn visit_u64<E>(self, value: u64) -> Result<UsizeSer32, E>
+    where
+        E: de::Error,
+    {
+        use std::usize;
+        if value >= usize::MIN as u64 && value <= usize::MAX as u64 {
+            Ok(UsizeSer32(value as usize))
+        } else {
+            Err(E::custom(format!("u32 out of range: {}", value)))
+        }
+    }
+}
+
+impl<'de> Deserialize<'de> for UsizeSer32 {
+    fn deserialize<D>(deserializer: D) -> Result<UsizeSer32, D::Error>
+    where
+        D: Deserializer<'de>,
+    {
+        deserializer.deserialize_u32(UsizeSer32Visitor)
+    }
+}