diff --git a/Cargo.lock b/Cargo.lock
index 4756079c630df1a49197085ec29daa6f3dbd1651..dd8403014a1f608541e37ec04921f7f47cf8ef0c 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -121,7 +121,7 @@ version = "0.5.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6"
 dependencies = [
- "num-traits",
+ "num-traits 0.2.15",
 ]
 
 [[package]]
@@ -707,7 +707,7 @@ dependencies = [
  "iana-time-zone",
  "js-sys",
  "num-integer",
- "num-traits",
+ "num-traits 0.2.15",
  "time",
  "wasm-bindgen",
  "winapi 0.3.9",
@@ -972,6 +972,15 @@ dependencies = [
  "memchr",
 ]
 
+[[package]]
+name = "countmap"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ef2a403c4af585607826502480ab6e453f320c230ef67255eee21f0cc72c0a6"
+dependencies = [
+ "num-traits 0.1.43",
+]
+
 [[package]]
 name = "cpp_demangle"
 version = "0.3.5"
@@ -1650,6 +1659,7 @@ name = "duniter-live-tests"
 version = "3.0.0"
 dependencies = [
  "anyhow",
+ "countmap",
  "hex-literal",
  "parity-scale-codec",
  "sp-core",
@@ -1960,7 +1970,7 @@ dependencies = [
  "futures 0.3.25",
  "futures-timer",
  "log",
- "num-traits",
+ "num-traits 0.2.15",
  "parity-scale-codec",
  "parking_lot 0.12.1",
  "scale-info",
@@ -2001,7 +2011,7 @@ version = "0.9.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4"
 dependencies = [
- "num-traits",
+ "num-traits 0.2.15",
 ]
 
 [[package]]
@@ -3319,7 +3329,7 @@ version = "0.1.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "276ec31bcb4a9ee45f58bec6f9ec700ae4cf4f4f8f2fa7e06cb406bd5ffdd770"
 dependencies = [
- "num-traits",
+ "num-traits 0.2.15",
 ]
 
 [[package]]
@@ -4565,7 +4575,7 @@ dependencies = [
  "nalgebra-macros",
  "num-complex",
  "num-rational 0.4.1",
- "num-traits",
+ "num-traits 0.2.15",
  "rand 0.8.5",
  "rand_distr",
  "simba",
@@ -4781,7 +4791,7 @@ checksum = "090c7f9998ee0ff65aa5b723e4009f7b217707f1fb5ea551329cc4d6231fb304"
 dependencies = [
  "autocfg",
  "num-integer",
- "num-traits",
+ "num-traits 0.2.15",
 ]
 
 [[package]]
@@ -4792,7 +4802,7 @@ checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f"
 dependencies = [
  "autocfg",
  "num-integer",
- "num-traits",
+ "num-traits 0.2.15",
 ]
 
 [[package]]
@@ -4801,7 +4811,7 @@ version = "0.4.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "7ae39348c8bc5fbd7f40c727a9925f03517afd2ab27d46702108b6a7e5414c19"
 dependencies = [
- "num-traits",
+ "num-traits 0.2.15",
 ]
 
 [[package]]
@@ -4821,7 +4831,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
 dependencies = [
  "autocfg",
- "num-traits",
+ "num-traits 0.2.15",
 ]
 
 [[package]]
@@ -4833,7 +4843,7 @@ dependencies = [
  "autocfg",
  "num-bigint 0.2.6",
  "num-integer",
- "num-traits",
+ "num-traits 0.2.15",
 ]
 
 [[package]]
@@ -4845,7 +4855,16 @@ dependencies = [
  "autocfg",
  "num-bigint 0.4.3",
  "num-integer",
- "num-traits",
+ "num-traits 0.2.15",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.1.43"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92e5113e9fd4cc14ded8e499429f396a20f98c772a47cc8622a736e1ec843c31"
+dependencies = [
+ "num-traits 0.2.15",
 ]
 
 [[package]]
@@ -6252,7 +6271,7 @@ version = "0.4.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31"
 dependencies = [
- "num-traits",
+ "num-traits 0.2.15",
  "rand 0.8.5",
 ]
 
@@ -6900,7 +6919,7 @@ dependencies = [
  "merlin",
  "num-bigint 0.2.6",
  "num-rational 0.2.4",
- "num-traits",
+ "num-traits 0.2.15",
  "parity-scale-codec",
  "parking_lot 0.12.1",
  "rand 0.7.3",
@@ -8094,7 +8113,7 @@ checksum = "8e82063457853d00243beda9952e910b82593e4b07ae9f721b9278a99a0d3d5c"
 dependencies = [
  "approx",
  "num-complex",
- "num-traits",
+ "num-traits 0.2.15",
  "paste",
 ]
 
@@ -8217,7 +8236,7 @@ version = "5.0.0"
 source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.32#7f8b8db65b441ce1d1b2ffb26ebde314b54e117c"
 dependencies = [
  "integer-sqrt",
- "num-traits",
+ "num-traits 0.2.15",
  "parity-scale-codec",
  "scale-info",
  "serde",
@@ -8388,7 +8407,7 @@ dependencies = [
  "libsecp256k1",
  "log",
  "merlin",
- "num-traits",
+ "num-traits 0.2.15",
  "parity-scale-codec",
  "parity-util-mem",
  "parking_lot 0.12.1",
@@ -8705,7 +8724,7 @@ source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9
 dependencies = [
  "hash-db",
  "log",
- "num-traits",
+ "num-traits 0.2.15",
  "parity-scale-codec",
  "parking_lot 0.12.1",
  "rand 0.7.3",
@@ -8964,7 +8983,7 @@ dependencies = [
  "approx",
  "lazy_static",
  "nalgebra",
- "num-traits",
+ "num-traits 0.2.15",
  "rand 0.8.5",
 ]
 
@@ -9694,9 +9713,9 @@ version = "1.6.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675"
 dependencies = [
- "cfg-if 0.1.10",
+ "cfg-if 1.0.0",
  "digest 0.10.6",
- "rand 0.7.3",
+ "rand 0.8.5",
  "static_assertions",
 ]
 
@@ -10107,7 +10126,7 @@ dependencies = [
  "libm 0.2.6",
  "memory_units",
  "num-rational 0.4.1",
- "num-traits",
+ "num-traits 0.2.15",
 ]
 
 [[package]]
diff --git a/live-tests/Cargo.toml b/live-tests/Cargo.toml
index 52e0e475d068d79b70cbece0f0e8b492bf0b84de..8d7dd260a69a00bceae5d4a2c95a761babc36d02 100644
--- a/live-tests/Cargo.toml
+++ b/live-tests/Cargo.toml
@@ -15,3 +15,4 @@ parity-scale-codec = "3.1.5"
 sp-core = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.32' }
 subxt = { git = 'https://github.com/duniter/subxt', branch = 'duniter-substrate-v0.9.32' }
 tokio = { version = "1.15.0", features = ["macros"] }
+countmap = "0.2.0"
\ No newline at end of file
diff --git a/live-tests/tests/sanity_gdev.rs b/live-tests/tests/sanity_gdev.rs
index 415a02d03114c30543305a901cf65c14ed49c6e8..93b3b7dcf0888e47d6326346fe73fbaae17a5dd0 100644
--- a/live-tests/tests/sanity_gdev.rs
+++ b/live-tests/tests/sanity_gdev.rs
@@ -17,6 +17,7 @@
 #[subxt::subxt(runtime_metadata_path = "../resources/metadata.scale")]
 pub mod gdev {}
 
+use countmap::CountMap;
 use hex_literal::hex;
 use sp_core::crypto::AccountId32;
 use sp_core::{blake2_128, ByteArray, H256};
@@ -226,7 +227,23 @@ mod verifier {
             accounts: &HashMap<AccountId32, AccountInfo>,
             identities: &HashMap<IdtyIndex, IdtyValue>,
         ) {
+            // counts occurence of owner key
+            let mut countmap = CountMap::<AccountId32, u8>::new();
+
             for (idty_index, idty_value) in identities {
+                countmap.insert_or_increment(idty_value.owner_key.clone());
+                if let Some(count) = countmap.get_count(&idty_value.owner_key) {
+                    if count > 1 {
+                        self.assert(
+                            false,
+                            format!(
+                                "owner_key {} is present {count} times",
+                                idty_value.owner_key
+                            ),
+                        );
+                    }
+                }
+
                 // Rule 1: each identity should have an account
                 let maybe_account = accounts.get(&idty_value.owner_key);
                 self.assert(