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(