Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision

Target

Select target project
  • librelois/duniter-rs
  • ji_emme/duniter-rs
  • vindarel/duniter-rs
  • Hiroty1er/duniter-rs
  • dvermd/duniter-rs
  • 666titi999/duniter-rs
6 results
Select Git revision
Show changes
Commits on Source (10)
Showing
with 1212 additions and 5 deletions
...@@ -115,6 +115,24 @@ dependencies = [ ...@@ -115,6 +115,24 @@ dependencies = [
"serde 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)",
] ]
[[package]]
name = "bindgen"
version = "0.51.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"bitflags 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
"cexpr 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
"cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
"clang-sys 0.28.1 (registry+https://github.com/rust-lang/crates.io-index)",
"lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
"peeking_take_while 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
"proc-macro2 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
"quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
"regex 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
"rustc-hash 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
"shlex 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]] [[package]]
name = "bitflags" name = "bitflags"
version = "1.1.0" version = "1.1.0"
...@@ -193,11 +211,24 @@ dependencies = [ ...@@ -193,11 +211,24 @@ dependencies = [
"ppv-lite86 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", "ppv-lite86 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)",
] ]
[[package]]
name = "cast"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]] [[package]]
name = "cc" name = "cc"
version = "1.0.41" version = "1.0.41"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "cexpr"
version = "0.3.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]] [[package]]
name = "cfg-if" name = "cfg-if"
version = "0.1.9" version = "0.1.9"
...@@ -222,6 +253,16 @@ dependencies = [ ...@@ -222,6 +253,16 @@ dependencies = [
"time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)",
] ]
[[package]]
name = "clang-sys"
version = "0.28.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"glob 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
"libloading 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]] [[package]]
name = "clap" name = "clap"
version = "2.33.0" version = "2.33.0"
...@@ -265,6 +306,39 @@ dependencies = [ ...@@ -265,6 +306,39 @@ dependencies = [
"cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
] ]
[[package]]
name = "criterion"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"atty 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)",
"cast 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
"clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)",
"criterion-plot 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
"csv 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
"itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
"lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
"num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
"rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
"rand_os 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
"rand_xoshiro 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
"rayon 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_derive 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)",
"tinytemplate 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
"walkdir 2.2.9 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "criterion-plot"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"cast 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
"itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]] [[package]]
name = "crossbeam-deque" name = "crossbeam-deque"
version = "0.7.1" version = "0.7.1"
...@@ -539,6 +613,8 @@ dependencies = [ ...@@ -539,6 +613,8 @@ dependencies = [
"fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
"maplit 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", "maplit 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
"num 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
"rkv 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)",
"tempfile 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "tempfile 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
"unwrap 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "unwrap 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
...@@ -548,6 +624,7 @@ dependencies = [ ...@@ -548,6 +624,7 @@ dependencies = [
name = "durs-bc-db-writer" name = "durs-bc-db-writer"
version = "0.3.0-dev" version = "0.3.0-dev"
dependencies = [ dependencies = [
"criterion 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
"dubp-block-doc 0.1.0", "dubp-block-doc 0.1.0",
"dubp-blocks-tests-tools 0.1.0", "dubp-blocks-tests-tools 0.1.0",
"dubp-common-doc 0.1.0", "dubp-common-doc 0.1.0",
...@@ -1012,6 +1089,11 @@ dependencies = [ ...@@ -1012,6 +1089,11 @@ dependencies = [
"wasi 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "wasi 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
] ]
[[package]]
name = "glob"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]] [[package]]
name = "half" name = "half"
version = "1.3.0" version = "1.3.0"
...@@ -1087,6 +1169,14 @@ dependencies = [ ...@@ -1087,6 +1169,14 @@ dependencies = [
"either 1.5.2 (registry+https://github.com/rust-lang/crates.io-index)", "either 1.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
] ]
[[package]]
name = "itertools"
version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"either 1.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]] [[package]]
name = "itoa" name = "itoa"
version = "0.4.4" version = "0.4.4"
...@@ -1134,6 +1224,15 @@ name = "libc" ...@@ -1134,6 +1224,15 @@ name = "libc"
version = "0.2.62" version = "0.2.62"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "libloading"
version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"cc 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]] [[package]]
name = "libz-sys" name = "libz-sys"
version = "1.0.25" version = "1.0.25"
...@@ -1156,6 +1255,17 @@ dependencies = [ ...@@ -1156,6 +1255,17 @@ dependencies = [
"lmdb-rkv-sys 0.8.6 (registry+https://github.com/rust-lang/crates.io-index)", "lmdb-rkv-sys 0.8.6 (registry+https://github.com/rust-lang/crates.io-index)",
] ]
[[package]]
name = "lmdb-rkv"
version = "0.12.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"bitflags 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
"byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
"lmdb-rkv-sys 0.9.5 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]] [[package]]
name = "lmdb-rkv-sys" name = "lmdb-rkv-sys"
version = "0.8.6" version = "0.8.6"
...@@ -1166,6 +1276,17 @@ dependencies = [ ...@@ -1166,6 +1276,17 @@ dependencies = [
"pkg-config 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)", "pkg-config 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)",
] ]
[[package]]
name = "lmdb-rkv-sys"
version = "0.9.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"bindgen 0.51.1 (registry+https://github.com/rust-lang/crates.io-index)",
"cc 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
"pkg-config 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]] [[package]]
name = "log" name = "log"
version = "0.4.8" version = "0.4.8"
...@@ -1280,6 +1401,38 @@ dependencies = [ ...@@ -1280,6 +1401,38 @@ dependencies = [
"version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
] ]
[[package]]
name = "num"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"num-bigint 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
"num-complex 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
"num-integer 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)",
"num-iter 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)",
"num-rational 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
"num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "num-bigint"
version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"autocfg 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
"num-integer 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)",
"num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "num-complex"
version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"autocfg 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
"num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]] [[package]]
name = "num-integer" name = "num-integer"
version = "0.1.41" version = "0.1.41"
...@@ -1289,6 +1442,27 @@ dependencies = [ ...@@ -1289,6 +1442,27 @@ dependencies = [
"num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", "num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
] ]
[[package]]
name = "num-iter"
version = "0.1.39"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"autocfg 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
"num-integer 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)",
"num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "num-rational"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"autocfg 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
"num-bigint 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
"num-integer 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)",
"num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]] [[package]]
name = "num-traits" name = "num-traits"
version = "0.2.8" version = "0.2.8"
...@@ -1385,6 +1559,11 @@ dependencies = [ ...@@ -1385,6 +1559,11 @@ dependencies = [
"winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
] ]
[[package]]
name = "peeking_take_while"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]] [[package]]
name = "percent-encoding" name = "percent-encoding"
version = "2.1.0" version = "2.1.0"
...@@ -1665,6 +1844,15 @@ dependencies = [ ...@@ -1665,6 +1844,15 @@ dependencies = [
"winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
] ]
[[package]]
name = "rand_os"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"getrandom 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
"rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]] [[package]]
name = "rand_pcg" name = "rand_pcg"
version = "0.1.2" version = "0.1.2"
...@@ -1682,6 +1870,14 @@ dependencies = [ ...@@ -1682,6 +1870,14 @@ dependencies = [
"rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
] ]
[[package]]
name = "rand_xoshiro"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]] [[package]]
name = "rayon" name = "rayon"
version = "1.2.0" version = "1.2.0"
...@@ -1801,6 +1997,25 @@ dependencies = [ ...@@ -1801,6 +1997,25 @@ dependencies = [
"uuid 0.7.4 (registry+https://github.com/rust-lang/crates.io-index)", "uuid 0.7.4 (registry+https://github.com/rust-lang/crates.io-index)",
] ]
[[package]]
name = "rkv"
version = "0.10.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"arrayref 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
"bincode 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
"bitflags 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
"byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
"failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
"lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
"lmdb-rkv 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)",
"ordered-float 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_derive 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)",
"url 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
"uuid 0.7.4 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]] [[package]]
name = "rpassword" name = "rpassword"
version = "1.0.2" version = "1.0.2"
...@@ -1852,6 +2067,14 @@ name = "rustc-demangle" ...@@ -1852,6 +2067,14 @@ name = "rustc-demangle"
version = "0.1.16" version = "0.1.16"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "rustc-hash"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]] [[package]]
name = "rustc_version" name = "rustc_version"
version = "0.2.3" version = "0.2.3"
...@@ -1870,6 +2093,14 @@ name = "safemem" ...@@ -1870,6 +2093,14 @@ name = "safemem"
version = "0.3.2" version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "same-file"
version = "1.0.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]] [[package]]
name = "scopeguard" name = "scopeguard"
version = "1.0.0" version = "1.0.0"
...@@ -1960,6 +2191,11 @@ dependencies = [ ...@@ -1960,6 +2191,11 @@ dependencies = [
"opaque-debug 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "opaque-debug 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
] ]
[[package]]
name = "shlex"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]] [[package]]
name = "shrinkwraprs" name = "shrinkwraprs"
version = "0.2.1" version = "0.2.1"
...@@ -2157,6 +2393,15 @@ dependencies = [ ...@@ -2157,6 +2393,15 @@ dependencies = [
"winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
] ]
[[package]]
name = "tinytemplate"
version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"serde 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]] [[package]]
name = "toml" name = "toml"
version = "0.4.10" version = "0.4.10"
...@@ -2264,6 +2509,16 @@ name = "version_check" ...@@ -2264,6 +2509,16 @@ name = "version_check"
version = "0.1.5" version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "walkdir"
version = "2.2.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"same-file 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]] [[package]]
name = "wasi" name = "wasi"
version = "0.5.0" version = "0.5.0"
...@@ -2377,6 +2632,14 @@ name = "winapi-i686-pc-windows-gnu" ...@@ -2377,6 +2632,14 @@ name = "winapi-i686-pc-windows-gnu"
version = "0.4.0" version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "winapi-util"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]] [[package]]
name = "winapi-x86_64-pc-windows-gnu" name = "winapi-x86_64-pc-windows-gnu"
version = "0.4.0" version = "0.4.0"
...@@ -2433,6 +2696,7 @@ dependencies = [ ...@@ -2433,6 +2696,7 @@ dependencies = [
"checksum base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0b25d992356d2eb0ed82172f5248873db5560c4721f564b13cb5193bda5e668e" "checksum base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0b25d992356d2eb0ed82172f5248873db5560c4721f564b13cb5193bda5e668e"
"checksum base64 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)" = "489d6c0ed21b11d038c31b6ceccca973e65d73ba3bd8ecb9a2babf5546164643" "checksum base64 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)" = "489d6c0ed21b11d038c31b6ceccca973e65d73ba3bd8ecb9a2babf5546164643"
"checksum bincode 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9f2fb9e29e72fd6bc12071533d5dc7664cb01480c59406f656d7ac25c7bd8ff7" "checksum bincode 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9f2fb9e29e72fd6bc12071533d5dc7664cb01480c59406f656d7ac25c7bd8ff7"
"checksum bindgen 0.51.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ebd71393f1ec0509b553aa012b9b58e81dadbdff7130bd3b8cba576e69b32f75"
"checksum bitflags 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3d155346769a6855b86399e9bc3814ab343cd3d62c7e985113d46a0ec3c281fd" "checksum bitflags 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3d155346769a6855b86399e9bc3814ab343cd3d62c7e985113d46a0ec3c281fd"
"checksum blake2b_simd 0.5.7 (registry+https://github.com/rust-lang/crates.io-index)" = "bf775a81bb2d464e20ff170ac20316c7b08a43d11dbc72f0f82e8e8d3d6d0499" "checksum blake2b_simd 0.5.7 (registry+https://github.com/rust-lang/crates.io-index)" = "bf775a81bb2d464e20ff170ac20316c7b08a43d11dbc72f0f82e8e8d3d6d0499"
"checksum block-buffer 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" "checksum block-buffer 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b"
...@@ -2443,15 +2707,20 @@ dependencies = [ ...@@ -2443,15 +2707,20 @@ dependencies = [
"checksum byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "94f88df23a25417badc922ab0f5716cc1330e87f71ddd9203b3a3ccd9cedf75d" "checksum byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "94f88df23a25417badc922ab0f5716cc1330e87f71ddd9203b3a3ccd9cedf75d"
"checksum bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)" = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c" "checksum bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)" = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c"
"checksum c2-chacha 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7d64d04786e0f528460fc884753cf8dddcc466be308f6026f8e355c41a0e4101" "checksum c2-chacha 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7d64d04786e0f528460fc884753cf8dddcc466be308f6026f8e355c41a0e4101"
"checksum cast 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "926013f2860c46252efceabb19f4a6b308197505082c609025aa6706c011d427"
"checksum cc 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)" = "8dae9c4b8fedcae85592ba623c4fd08cfdab3e3b72d6df780c6ead964a69bfff" "checksum cc 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)" = "8dae9c4b8fedcae85592ba623c4fd08cfdab3e3b72d6df780c6ead964a69bfff"
"checksum cexpr 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "a7fa24eb00d5ffab90eaeaf1092ac85c04c64aaf358ea6f84505b8116d24c6af"
"checksum cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "b486ce3ccf7ffd79fdeb678eac06a9e6c09fc88d33836340becb8fffe87c5e33" "checksum cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "b486ce3ccf7ffd79fdeb678eac06a9e6c09fc88d33836340becb8fffe87c5e33"
"checksum chacha20-poly1305-aead 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "77d2058ba29594f69c75e8a9018e0485e3914ca5084e3613cd64529042f5423b" "checksum chacha20-poly1305-aead 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "77d2058ba29594f69c75e8a9018e0485e3914ca5084e3613cd64529042f5423b"
"checksum chrono 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)" = "77d81f58b7301084de3b958691458a53c3f7e0b1d702f77e550b6a88e3a88abe" "checksum chrono 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)" = "77d81f58b7301084de3b958691458a53c3f7e0b1d702f77e550b6a88e3a88abe"
"checksum clang-sys 0.28.1 (registry+https://github.com/rust-lang/crates.io-index)" = "81de550971c976f176130da4b2978d3b524eaa0fd9ac31f3ceb5ae1231fb4853"
"checksum clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5067f5bb2d80ef5d68b4c87db81601f0b75bca627bc2ef76b141d7b846a3c6d9" "checksum clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5067f5bb2d80ef5d68b4c87db81601f0b75bca627bc2ef76b141d7b846a3c6d9"
"checksum clear_on_drop 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "97276801e127ffb46b66ce23f35cc96bd454fa311294bced4bbace7baa8b1d17" "checksum clear_on_drop 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "97276801e127ffb46b66ce23f35cc96bd454fa311294bced4bbace7baa8b1d17"
"checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" "checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f"
"checksum constant_time_eq 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "995a44c877f9212528ccc74b21a232f66ad69001e40ede5bcee2ac9ef2657120" "checksum constant_time_eq 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "995a44c877f9212528ccc74b21a232f66ad69001e40ede5bcee2ac9ef2657120"
"checksum crc32fast 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ba125de2af0df55319f41944744ad91c71113bf74a4646efff39afe1f6842db1" "checksum crc32fast 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ba125de2af0df55319f41944744ad91c71113bf74a4646efff39afe1f6842db1"
"checksum criterion 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "938703e165481c8d612ea3479ac8342e5615185db37765162e762ec3523e2fc6"
"checksum criterion-plot 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "eccdc6ce8bbe352ca89025bee672aa6d24f4eb8c53e3a8b5d1bc58011da072a2"
"checksum crossbeam-deque 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b18cd2e169ad86297e6bc0ad9aa679aee9daa4f19e8163860faf7c164e4f5a71" "checksum crossbeam-deque 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b18cd2e169ad86297e6bc0ad9aa679aee9daa4f19e8163860faf7c164e4f5a71"
"checksum crossbeam-epoch 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "fedcd6772e37f3da2a9af9bf12ebe046c0dfe657992377b4df982a2b54cd37a9" "checksum crossbeam-epoch 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "fedcd6772e37f3da2a9af9bf12ebe046c0dfe657992377b4df982a2b54cd37a9"
"checksum crossbeam-queue 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7c979cd6cfe72335896575c6b5688da489e420d36a27a0b9eb0c73db574b4a4b" "checksum crossbeam-queue 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7c979cd6cfe72335896575c6b5688da489e420d36a27a0b9eb0c73db574b4a4b"
...@@ -2477,6 +2746,7 @@ dependencies = [ ...@@ -2477,6 +2746,7 @@ dependencies = [
"checksum fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" "checksum fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7"
"checksum generic-array 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c68f0274ae0e023facc3c97b2e00f076be70e254bc851d972503b328db79b2ec" "checksum generic-array 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c68f0274ae0e023facc3c97b2e00f076be70e254bc851d972503b328db79b2ec"
"checksum getrandom 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "fc344b02d3868feb131e8b5fe2b9b0a1cc42942679af493061fc13b853243872" "checksum getrandom 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "fc344b02d3868feb131e8b5fe2b9b0a1cc42942679af493061fc13b853243872"
"checksum glob 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574"
"checksum half 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9353c2a89d550b58fa0061d8ed8d002a7d8cdf2494eb0e432859bd3a9e543836" "checksum half 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9353c2a89d550b58fa0061d8ed8d002a7d8cdf2494eb0e432859bd3a9e543836"
"checksum heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "20564e78d53d2bb135c343b3f47714a56af2061f1c928fdb541dc7b9fdd94205" "checksum heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "20564e78d53d2bb135c343b3f47714a56af2061f1c928fdb541dc7b9fdd94205"
"checksum hex 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "805026a5d0141ffc30abb3be3173848ad46a1b1664fe632428479619a3644d77" "checksum hex 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "805026a5d0141ffc30abb3be3173848ad46a1b1664fe632428479619a3644d77"
...@@ -2486,15 +2756,19 @@ dependencies = [ ...@@ -2486,15 +2756,19 @@ dependencies = [
"checksum idna 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "02e2673c30ee86b5b96a9cb52ad15718aa1f966f5ab9ad54a8b95d5ca33120a9" "checksum idna 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "02e2673c30ee86b5b96a9cb52ad15718aa1f966f5ab9ad54a8b95d5ca33120a9"
"checksum iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dbe6e417e7d0975db6512b90796e8ce223145ac4e33c377e4a42882a0e88bb08" "checksum iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dbe6e417e7d0975db6512b90796e8ce223145ac4e33c377e4a42882a0e88bb08"
"checksum itertools 0.7.11 (registry+https://github.com/rust-lang/crates.io-index)" = "0d47946d458e94a1b7bcabbf6521ea7c037062c81f534615abcad76e84d4970d" "checksum itertools 0.7.11 (registry+https://github.com/rust-lang/crates.io-index)" = "0d47946d458e94a1b7bcabbf6521ea7c037062c81f534615abcad76e84d4970d"
"checksum itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5b8467d9c1cebe26feb08c640139247fac215782d35371ade9a2136ed6085358"
"checksum itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "501266b7edd0174f8530248f87f99c88fbe60ca4ef3dd486835b8d8d53136f7f" "checksum itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "501266b7edd0174f8530248f87f99c88fbe60ca4ef3dd486835b8d8d53136f7f"
"checksum js-sys 0.3.27 (registry+https://github.com/rust-lang/crates.io-index)" = "1efc4f2a556c58e79c5500912e221dd826bec64ff4aabd8ce71ccef6da02d7d4" "checksum js-sys 0.3.27 (registry+https://github.com/rust-lang/crates.io-index)" = "1efc4f2a556c58e79c5500912e221dd826bec64ff4aabd8ce71ccef6da02d7d4"
"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" "checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
"checksum lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" "checksum lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
"checksum lazycell 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b294d6fa9ee409a054354afc4352b0b9ef7ca222c69b8812cbea9e7d2bf3783f" "checksum lazycell 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b294d6fa9ee409a054354afc4352b0b9ef7ca222c69b8812cbea9e7d2bf3783f"
"checksum libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)" = "34fcd2c08d2f832f376f4173a231990fa5aef4e99fb569867318a227ef4c06ba" "checksum libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)" = "34fcd2c08d2f832f376f4173a231990fa5aef4e99fb569867318a227ef4c06ba"
"checksum libloading 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f2b111a074963af1d37a139918ac6d49ad1d0d5e47f72fd55388619691a7d753"
"checksum libz-sys 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)" = "2eb5e43362e38e2bca2fd5f5134c4d4564a23a5c28e9b95411652021a8675ebe" "checksum libz-sys 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)" = "2eb5e43362e38e2bca2fd5f5134c4d4564a23a5c28e9b95411652021a8675ebe"
"checksum lmdb-rkv 0.11.4 (registry+https://github.com/rust-lang/crates.io-index)" = "e25b4069789bf7ac069d6fd58229f18aec20c6f7cc9173cb731d11c10dbb6b6e" "checksum lmdb-rkv 0.11.4 (registry+https://github.com/rust-lang/crates.io-index)" = "e25b4069789bf7ac069d6fd58229f18aec20c6f7cc9173cb731d11c10dbb6b6e"
"checksum lmdb-rkv 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)" = "605061e5465304475be2041f19967a900175ea1b6d8f47fbab84a84fb8c48452"
"checksum lmdb-rkv-sys 0.8.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c60e2728ce41a4d4fa4ccf3d07c105bebf198721117e6328a3cf1cb7e4242c70" "checksum lmdb-rkv-sys 0.8.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c60e2728ce41a4d4fa4ccf3d07c105bebf198721117e6328a3cf1cb7e4242c70"
"checksum lmdb-rkv-sys 0.9.5 (registry+https://github.com/rust-lang/crates.io-index)" = "a1e4b19a1fdf5b74bc802cc9aa7c0c86a775e8b872ba9d5a4e606ffc5d076953"
"checksum log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7" "checksum log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7"
"checksum maplit 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" "checksum maplit 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d"
"checksum matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" "checksum matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08"
...@@ -2508,7 +2782,12 @@ dependencies = [ ...@@ -2508,7 +2782,12 @@ dependencies = [
"checksum net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88" "checksum net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88"
"checksum nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "2f9667ddcc6cc8a43afc9b7917599d7216aa09c463919ea32c59ed6cac8bc945" "checksum nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "2f9667ddcc6cc8a43afc9b7917599d7216aa09c463919ea32c59ed6cac8bc945"
"checksum nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2ad2a91a8e869eeb30b9cb3119ae87773a8f4ae617f41b1eb9c154b2905f7bd6" "checksum nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2ad2a91a8e869eeb30b9cb3119ae87773a8f4ae617f41b1eb9c154b2905f7bd6"
"checksum num 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "cf4825417e1e1406b3782a8ce92f4d53f26ec055e3622e1881ca8e9f5f9e08db"
"checksum num-bigint 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "f9c3f34cdd24f334cb265d9bf8bfa8a241920d026916785747a92f0e55541a1a"
"checksum num-complex 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "fcb0cf31fb3ff77e6d2a6ebd6800df7fdcd106f2ad89113c9130bcd07f93dffc"
"checksum num-integer 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)" = "b85e541ef8255f6cf42bbfe4ef361305c6c135d10919ecc26126c4e5ae94bc09" "checksum num-integer 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)" = "b85e541ef8255f6cf42bbfe4ef361305c6c135d10919ecc26126c4e5ae94bc09"
"checksum num-iter 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)" = "76bd5272412d173d6bf9afdf98db8612bbabc9a7a830b7bfc9c188911716132e"
"checksum num-rational 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f2885278d5fe2adc2f75ced642d52d879bffaceb5a2e0b1d4309ffdfb239b454"
"checksum num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "6ba9a427cfca2be13aa6f6403b0b7e7368fe982bfa16fccc450ce74c46cd9b32" "checksum num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "6ba9a427cfca2be13aa6f6403b0b7e7368fe982bfa16fccc450ce74c46cd9b32"
"checksum num_cpus 1.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "bcef43580c035376c0705c42792c294b66974abbfd2789b511784023f71f3273" "checksum num_cpus 1.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "bcef43580c035376c0705c42792c294b66974abbfd2789b511784023f71f3273"
"checksum numtoa 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b8f8bdf33df195859076e54ab11ee78a1b208382d3a26ec40d142ffc1ecc49ef" "checksum numtoa 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b8f8bdf33df195859076e54ab11ee78a1b208382d3a26ec40d142ffc1ecc49ef"
...@@ -2520,6 +2799,7 @@ dependencies = [ ...@@ -2520,6 +2799,7 @@ dependencies = [
"checksum output_vt100 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "53cdc5b785b7a58c5aad8216b3dfa114df64b0b06ae6e1501cef91df2fbdf8f9" "checksum output_vt100 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "53cdc5b785b7a58c5aad8216b3dfa114df64b0b06ae6e1501cef91df2fbdf8f9"
"checksum pbkdf2 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "006c038a43a45995a9670da19e67600114740e8511d4333bf97a56e66a7542d9" "checksum pbkdf2 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "006c038a43a45995a9670da19e67600114740e8511d4333bf97a56e66a7542d9"
"checksum pbr 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "deb73390ab68d81992bd994d145f697451bb0b54fd39738e72eef32458ad6907" "checksum pbr 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "deb73390ab68d81992bd994d145f697451bb0b54fd39738e72eef32458ad6907"
"checksum peeking_take_while 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099"
"checksum percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" "checksum percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
"checksum pest 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "933085deae3f32071f135d799d75667b63c8dc1f4537159756e3d4ceab41868c" "checksum pest 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "933085deae3f32071f135d799d75667b63c8dc1f4537159756e3d4ceab41868c"
"checksum pest_derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "833d1ae558dc601e9a60366421196a8d94bc0ac980476d0b67e1d0988d72b2d0" "checksum pest_derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "833d1ae558dc601e9a60366421196a8d94bc0ac980476d0b67e1d0988d72b2d0"
...@@ -2549,8 +2829,10 @@ dependencies = [ ...@@ -2549,8 +2829,10 @@ dependencies = [
"checksum rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08" "checksum rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08"
"checksum rand_jitter 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b" "checksum rand_jitter 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b"
"checksum rand_os 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071" "checksum rand_os 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071"
"checksum rand_os 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a788ae3edb696cfcba1c19bfd388cc4b8c21f8a408432b199c072825084da58a"
"checksum rand_pcg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44" "checksum rand_pcg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44"
"checksum rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c" "checksum rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c"
"checksum rand_xoshiro 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0e18c91676f670f6f0312764c759405f13afb98d5d73819840cf72a518487bff"
"checksum rayon 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "83a27732a533a1be0a0035a111fe76db89ad312f6f0347004c220c57f209a123" "checksum rayon 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "83a27732a533a1be0a0035a111fe76db89ad312f6f0347004c220c57f209a123"
"checksum rayon-core 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "98dcf634205083b17d0861252431eb2acbfb698ab7478a2d20de07954f47ec7b" "checksum rayon-core 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "98dcf634205083b17d0861252431eb2acbfb698ab7478a2d20de07954f47ec7b"
"checksum rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" "checksum rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2"
...@@ -2562,15 +2844,18 @@ dependencies = [ ...@@ -2562,15 +2844,18 @@ dependencies = [
"checksum regex-syntax 0.6.11 (registry+https://github.com/rust-lang/crates.io-index)" = "b143cceb2ca5e56d5671988ef8b15615733e7ee16cd348e064333b251b89343f" "checksum regex-syntax 0.6.11 (registry+https://github.com/rust-lang/crates.io-index)" = "b143cceb2ca5e56d5671988ef8b15615733e7ee16cd348e064333b251b89343f"
"checksum remove_dir_all 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4a83fa3702a688b9359eccba92d153ac33fd2e8462f9e0e3fdf155239ea7792e" "checksum remove_dir_all 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4a83fa3702a688b9359eccba92d153ac33fd2e8462f9e0e3fdf155239ea7792e"
"checksum ring 0.16.9 (registry+https://github.com/rust-lang/crates.io-index)" = "6747f8da1f2b1fabbee1aaa4eb8a11abf9adef0bf58a41cee45db5d59cecdfac" "checksum ring 0.16.9 (registry+https://github.com/rust-lang/crates.io-index)" = "6747f8da1f2b1fabbee1aaa4eb8a11abf9adef0bf58a41cee45db5d59cecdfac"
"checksum rkv 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9aab7c645d32e977e186448b0a5c2c3139a91a7f630cfd8a8c314d1d145e78bf"
"checksum rkv 0.9.7 (registry+https://github.com/rust-lang/crates.io-index)" = "4f9d6a4dd60be13a62ae1d19df68c0c85d77bbee3749b62bf35c49f207d3d750" "checksum rkv 0.9.7 (registry+https://github.com/rust-lang/crates.io-index)" = "4f9d6a4dd60be13a62ae1d19df68c0c85d77bbee3749b62bf35c49f207d3d750"
"checksum rpassword 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b273c91bd242ca03ad6d71c143b6f17a48790e61f21a6c78568fa2b6774a24a4" "checksum rpassword 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b273c91bd242ca03ad6d71c143b6f17a48790e61f21a6c78568fa2b6774a24a4"
"checksum rprompt 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "1601f32bc5858aae3cbfa1c645c96c4d820cc5c16be0194f089560c00b6eb625" "checksum rprompt 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "1601f32bc5858aae3cbfa1c645c96c4d820cc5c16be0194f089560c00b6eb625"
"checksum rust-argon2 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4ca4eaef519b494d1f2848fc602d18816fed808a981aedf4f1f00ceb7c9d32cf" "checksum rust-argon2 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4ca4eaef519b494d1f2848fc602d18816fed808a981aedf4f1f00ceb7c9d32cf"
"checksum rustbreak 2.0.0-rc3 (registry+https://github.com/rust-lang/crates.io-index)" = "b1c185a2ede13fcb28feb6864ee9412a20f57bd83b4be18dc81fde4d6e786982" "checksum rustbreak 2.0.0-rc3 (registry+https://github.com/rust-lang/crates.io-index)" = "b1c185a2ede13fcb28feb6864ee9412a20f57bd83b4be18dc81fde4d6e786982"
"checksum rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "4c691c0e608126e00913e33f0ccf3727d5fc84573623b8d65b2df340b5201783" "checksum rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "4c691c0e608126e00913e33f0ccf3727d5fc84573623b8d65b2df340b5201783"
"checksum rustc-hash 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7540fc8b0c49f096ee9c961cda096467dce8084bec6bdca2fc83895fd9b28cb8"
"checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" "checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
"checksum ryu 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c92464b447c0ee8c4fb3824ecc8383b81717b9f1e74ba2e72540aef7b9f82997" "checksum ryu 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c92464b447c0ee8c4fb3824ecc8383b81717b9f1e74ba2e72540aef7b9f82997"
"checksum safemem 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d2b08423011dae9a5ca23f07cf57dac3857f5c885d352b76f6d95f4aea9434d0" "checksum safemem 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d2b08423011dae9a5ca23f07cf57dac3857f5c885d352b76f6d95f4aea9434d0"
"checksum same-file 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "585e8ddcedc187886a30fa705c47985c3fa88d06624095856b36ca0b82ff4421"
"checksum scopeguard 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b42e15e59b18a828bbf5c58ea01debb36b9b096346de35d941dcb89009f24a0d" "checksum scopeguard 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b42e15e59b18a828bbf5c58ea01debb36b9b096346de35d941dcb89009f24a0d"
"checksum scrypt 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "656c79d0e90d0ab28ac86bf3c3d10bfbbac91450d3f190113b4e76d9fec3cfdd" "checksum scrypt 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "656c79d0e90d0ab28ac86bf3c3d10bfbbac91450d3f190113b4e76d9fec3cfdd"
"checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" "checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
...@@ -2581,6 +2866,7 @@ dependencies = [ ...@@ -2581,6 +2866,7 @@ dependencies = [
"checksum serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)" = "051c49229f282f7c6f3813f8286cc1e3323e8051823fce42c7ea80fe13521704" "checksum serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)" = "051c49229f282f7c6f3813f8286cc1e3323e8051823fce42c7ea80fe13521704"
"checksum sha-1 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "23962131a91661d643c98940b20fcaffe62d776a823247be80a48fcb8b6fce68" "checksum sha-1 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "23962131a91661d643c98940b20fcaffe62d776a823247be80a48fcb8b6fce68"
"checksum sha2 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7b4d8bfd0e469f417657573d8451fb33d16cfe0989359b93baf3a1ffc639543d" "checksum sha2 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7b4d8bfd0e469f417657573d8451fb33d16cfe0989359b93baf3a1ffc639543d"
"checksum shlex 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7fdf1b9db47230893d76faad238fd6097fd6d6a9245cd7a4d90dbd639536bbd2"
"checksum shrinkwraprs 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7d5f047b90b2ca2d1526ff73d67cba61f86f4cf9a8afddc99dd96702ded8e684" "checksum shrinkwraprs 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7d5f047b90b2ca2d1526ff73d67cba61f86f4cf9a8afddc99dd96702ded8e684"
"checksum simplelog 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2e95345f185d5adeb8ec93459d2dc99654e294cc6ccf5b75414d8ea262de9a13" "checksum simplelog 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2e95345f185d5adeb8ec93459d2dc99654e294cc6ccf5b75414d8ea262de9a13"
"checksum slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" "checksum slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8"
...@@ -2604,6 +2890,7 @@ dependencies = [ ...@@ -2604,6 +2890,7 @@ dependencies = [
"checksum thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c6b53e329000edc2b34dbe8545fd20e55a333362d0a321909685a19bd28c3f1b" "checksum thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c6b53e329000edc2b34dbe8545fd20e55a333362d0a321909685a19bd28c3f1b"
"checksum threadpool 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e2f0c90a5f3459330ac8bc0d2f879c693bb7a2f59689c1083fc4ef83834da865" "checksum threadpool 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e2f0c90a5f3459330ac8bc0d2f879c693bb7a2f59689c1083fc4ef83834da865"
"checksum time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "db8dcfca086c1143c9270ac42a2bbd8a7ee477b78ac8e45b19abfb0cbede4b6f" "checksum time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "db8dcfca086c1143c9270ac42a2bbd8a7ee477b78ac8e45b19abfb0cbede4b6f"
"checksum tinytemplate 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4574b75faccaacddb9b284faecdf0b544b80b6b294f3d062d325c5726a209c20"
"checksum toml 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)" = "758664fc71a3a69038656bee8b6be6477d2a6c315a6b81f7081f591bffa4111f" "checksum toml 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)" = "758664fc71a3a69038656bee8b6be6477d2a6c315a6b81f7081f591bffa4111f"
"checksum typenum 1.11.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6d2783fe2d6b8c1101136184eb41be8b1ad379e4657050b8aaff0c79ee7575f9" "checksum typenum 1.11.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6d2783fe2d6b8c1101136184eb41be8b1ad379e4657050b8aaff0c79ee7575f9"
"checksum ucd-trie 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "8f00ed7be0c1ff1e24f46c3d2af4859f7e863672ba3a6e92e7cff702bf9f06c2" "checksum ucd-trie 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "8f00ed7be0c1ff1e24f46c3d2af4859f7e863672ba3a6e92e7cff702bf9f06c2"
...@@ -2621,6 +2908,7 @@ dependencies = [ ...@@ -2621,6 +2908,7 @@ dependencies = [
"checksum vcpkg 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "33dd455d0f96e90a75803cfeb7f948768c08d70a6de9a8d2362461935698bf95" "checksum vcpkg 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "33dd455d0f96e90a75803cfeb7f948768c08d70a6de9a8d2362461935698bf95"
"checksum vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a" "checksum vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a"
"checksum version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd" "checksum version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd"
"checksum walkdir 2.2.9 (registry+https://github.com/rust-lang/crates.io-index)" = "9658c94fa8b940eab2250bd5a457f9c48b748420d71293b165c8cdbe2f55f71e"
"checksum wasi 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fd5442abcac6525a045cc8c795aedb60da7a2e5e89c7bf18a0d5357849bb23c7" "checksum wasi 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fd5442abcac6525a045cc8c795aedb60da7a2e5e89c7bf18a0d5357849bb23c7"
"checksum wasm-bindgen 0.2.50 (registry+https://github.com/rust-lang/crates.io-index)" = "dcddca308b16cd93c2b67b126c688e5467e4ef2e28200dc7dfe4ae284f2faefc" "checksum wasm-bindgen 0.2.50 (registry+https://github.com/rust-lang/crates.io-index)" = "dcddca308b16cd93c2b67b126c688e5467e4ef2e28200dc7dfe4ae284f2faefc"
"checksum wasm-bindgen-backend 0.2.50 (registry+https://github.com/rust-lang/crates.io-index)" = "f805d9328b5fc7e5c6399960fd1889271b9b58ae17bdb2417472156cc9fafdd0" "checksum wasm-bindgen-backend 0.2.50 (registry+https://github.com/rust-lang/crates.io-index)" = "f805d9328b5fc7e5c6399960fd1889271b9b58ae17bdb2417472156cc9fafdd0"
...@@ -2634,6 +2922,7 @@ dependencies = [ ...@@ -2634,6 +2922,7 @@ dependencies = [
"checksum winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6" "checksum winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6"
"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" "checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
"checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" "checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
"checksum winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7168bab6e1daee33b4557efd0e95d5ca70a03706d39fa5f3fe7a236f584b03c9"
"checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" "checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
"checksum wincolor 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "eeb06499a3a4d44302791052df005d5232b927ed1a9658146d842165c4de7767" "checksum wincolor 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "eeb06499a3a4d44302791052df005d5232b927ed1a9658146d842165c4de7767"
"checksum ws 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8a6f5bb86663ff4d1639408410f50bf6050367a8525d644d49a6894cd618a631" "checksum ws 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8a6f5bb86663ff4d1639408410f50bf6050367a8525d644d49a6894cd618a631"
......
...@@ -26,6 +26,8 @@ maplit = "1.0.1" ...@@ -26,6 +26,8 @@ maplit = "1.0.1"
fnv = "1.0.6" fnv = "1.0.6"
serde = { version = "1.0.*", features = ["derive"] } serde = { version = "1.0.*", features = ["derive"] }
unwrap = "1.2.1" unwrap = "1.2.1"
num = "0.2"
rkv = "0.10.2"
[dev-dependencies] [dev-dependencies]
dup-crypto-tests-tools = { path = "../../tests-tools/crypto-tests-tools" } dup-crypto-tests-tools = { path = "../../tests-tools/crypto-tests-tools" }
......
...@@ -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";
......
// Copyright (C) 2017-2019 The AXIOM TEAM Association.
//
// 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/>.
//! Current frame : Interval of blocks taken for the calculation of the personalized difficulty.
pub mod entities;
use crate::current_meta_datas::get_current_blockstamp_;
use crate::*;
use current_meta_datas::CurrentMetaDataKey;
use dubp_common_doc::BlockNumber;
//use durs_dbs_tools::DbError;
use durs_wot::WotId;
use entities::{MemberFrameInfo, MemberInCurrentFrame, PersonalDifficulty};
use num::Float;
/// Get current frame datas
pub fn get_current_frame<DB: DbReadable>(
_db: &DB,
) -> Result<Vec<(WotId, MemberInCurrentFrame)>, DbError> {
unimplemented!();
}
/// Get the personal difficulty of a member.
/// If the member is not in the current window, returns `pow_min`.
pub fn get_member_diffi<DB: DbReadable, R: DbReader>(
db: &DB,
r: &R,
wot_id: WotId,
) -> Result<PersonalDifficulty, DbError> {
unimplemented!();
//compute_member_diffi(db, r, wot_id)
}
// Copyright (C) 2017-2019 The AXIOM TEAM Association.
//
// 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/>.
//! Defines current frame entities (struct and traits)
use dubp_common_doc::BlockNumber;
use serde::{Deserialize, Serialize};
#[derive(Clone, Copy, Debug, Eq, PartialEq, Serialize, Deserialize)]
/// Describe a member in current frame
pub struct MemberInCurrentFrame {
/// Number of blocks forged by the member in the current frame.
pub forged_blocks: usize,
/// Personal difficulty of the member.
pub difficulty: PersonalDifficulty,
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Serialize, Deserialize)]
/// Personal difficulty of a member.
pub struct PersonalDifficulty {
/// Exclusion factor
pub exclusion_factor: usize,
/// Handicap
pub handicap: usize,
}
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 block number written by this member
pub last_personal_block_number: BlockNumber,
/// Nb member in current frame when last block was written by this member
pub last_personal_nb_members_in_frame: usize,
/// Substruct member_in_current_frame (forged_blocks, difficulty) read scope oriented
pub member_in_current_frame: MemberInCurrentFrame,
}
...@@ -38,6 +38,8 @@ pub enum CurrentMetaDataKey { ...@@ -38,6 +38,8 @@ pub enum CurrentMetaDataKey {
ForkTree, ForkTree,
/// Greatest wot id /// Greatest wot id
NextWotId, NextWotId,
/// Block by member median in current frame
MedianFrameMember,
} }
impl CurrentMetaDataKey { impl CurrentMetaDataKey {
...@@ -50,6 +52,7 @@ impl CurrentMetaDataKey { ...@@ -50,6 +52,7 @@ impl CurrentMetaDataKey {
Self::CurrentBlockchainTime => 3, Self::CurrentBlockchainTime => 3,
Self::ForkTree => 4, Self::ForkTree => 4,
Self::NextWotId => 5, Self::NextWotId => 5,
Self::MedianFrameMember => 6,
} }
} }
} }
......
// Copyright (C) 2017-2019 The AXIOM TEAM Association.
//
// 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/>.
//! Getters for easyer access to store
use crate::*;
use serde::de::DeserializeOwned;
// TODO: tester ça
/// -- fr --
/// Récupère dans le store store_name de la db active le contenu u64 de la clef key
/// la clef doit être présente dans le store, sinon DBCorrupted
/// ne fonctionne que pour des store à index / clef au format u32
pub fn get_required_u64_in_int_store<DB: DbReadable, R: DbReader>(
db: &DB,
r: &R,
store_name: &str,
key: u32,
) -> Result<u64, DbError> {
if let Some(value) = db.get_int_store(store_name).get(r, key)? {
if let DbValue::U64(value_u64) = value {
Ok(value_u64)
} else {
Err(DbError::DBCorrupted)
}
} else {
Err(DbError::DBCorrupted)
}
}
// TODO: tester ça
//pub fn get_required_bin_in_int_store<DB: DbReadable, R: DbReader, V: DeserializeOwned>(
// db: &DB,
// r: &R,
// store_name: &str,
// key: u32,
//) -> Result<V, DbError> {
// if let Some(value) = db.get_int_store(store_name).get(r, key)? {
// Ok(BcDbRo::from_db_value(value)?)
// } else {
// Err(DbError::DBCorrupted)
// }
//}
/// TODO: tester ça
/// -- fr --
/// récupère dans le store store_name de la db active le contenu binaire/Blob de la clef key
/// retourne None si la clef n'est pas trouvée.
/// ne fonctionne que pour des store à index / clef au format u32
pub fn get_bin_in_int_store<DB: DbReadable, R: DbReader, V: DeserializeOwned>(
db: &DB,
r: &R,
store_name: &str,
key: u32,
) -> Result<Option<V>, DbError> {
if let Some(value) = db.get_int_store(store_name).get(r, key)? {
Ok(Some(BcDbRo::from_db_value(value)?))
} else {
Ok(None)
}
}
...@@ -30,7 +30,9 @@ ...@@ -30,7 +30,9 @@
pub mod blocks; pub mod blocks;
pub mod constants; pub mod constants;
pub mod currency_params; pub mod currency_params;
pub mod current_frame;
pub mod current_meta_datas; pub mod current_meta_datas;
pub mod get;
pub mod indexes; pub mod indexes;
pub mod paging; pub mod paging;
pub mod tools; pub mod tools;
...@@ -51,6 +53,7 @@ pub fn bc_db_schema() -> KvFileDbSchema { ...@@ -51,6 +53,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,
...@@ -73,9 +76,9 @@ pub fn open_db_ro(path: &Path) -> Result<BcDbRo, DbError> { ...@@ -73,9 +76,9 @@ pub fn open_db_ro(path: &Path) -> Result<BcDbRo, DbError> {
#[cfg(test)] #[cfg(test)]
pub mod tests { pub mod tests {
use super::*; use super::*;
use durs_dbs_tools::kv_db::KvFileDbHandler; use durs_dbs_tools::kv_db::KvFileDbHandler;
pub use durs_dbs_tools::kv_db::KvFileDbWriter as DbWriter;
use tempfile::tempdir; use tempfile::tempdir;
#[inline] #[inline]
......
...@@ -29,10 +29,15 @@ serde_derive = "1.0.*" ...@@ -29,10 +29,15 @@ serde_derive = "1.0.*"
unwrap = "1.2.1" unwrap = "1.2.1"
[dev-dependencies] [dev-dependencies]
criterion = "0.3.0"
dup-crypto-tests-tools = { path = "../../../tests-tools/crypto-tests-tools" } dup-crypto-tests-tools = { path = "../../../tests-tools/crypto-tests-tools" }
dubp-blocks-tests-tools = { path = "../../../tests-tools/blocks-tests-tools" } dubp-blocks-tests-tools = { path = "../../../tests-tools/blocks-tests-tools" }
dubp-user-docs-tests-tools = { path = "../../../tests-tools/user-docs-tests-tools" } dubp-user-docs-tests-tools = { path = "../../../tests-tools/user-docs-tests-tools" }
durs-common-tests-tools = { path = "../../../tests-tools/common-tests-tools" } durs-common-tests-tools = { path = "../../../tests-tools/common-tests-tools" }
tempfile = "3.1.0" tempfile = "3.1.0"
[[bench]]
name = "current_frame"
harness = false
[features] [features]
// Copyright (C) 2017-2019 The AXIOM TEAM Association.
//
// 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/>.
use dubp_block_doc::BlockDocument;
use dup_crypto::keys::{PubKey, PublicKey};
use durs_bc_db_reader::blocks::DbBlock;
use durs_bc_db_reader::constants::*;
use durs_bc_db_reader::{DbReadable, DbValue};
use durs_bc_db_writer::DbWriter;
use durs_bc_db_writer::{Db, DbError};
use durs_wot::WotId;
pub fn to_db_block(block: BlockDocument) -> DbBlock {
DbBlock {
block,
expire_certs: None,
}
}
pub fn insert_wot_index_entry(
db: &Db,
w: &mut DbWriter,
wot_id: WotId,
pubkey: PubKey,
) -> Result<(), DbError> {
db.get_store(WOT_ID_INDEX).put(
w.as_mut(),
&pubkey.to_bytes_vector(),
&DbValue::U64(wot_id.0 as u64),
)?;
Ok(())
}
// Copyright (C) 2017-2019 The AXIOM TEAM Association.
//
// 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/>.
#[macro_use]
extern crate criterion;
use criterion::black_box;
use criterion::Criterion;
use dubp_block_doc::BlockDocument;
use dubp_blocks_tests_tools::mocks::gen_empty_block_v10_with_issuer_and_pow_min as gen_empty_block;
use dubp_common_doc::BlockNumber;
use durs_bc_db_writer::blocks::insert_new_head_block;
use durs_bc_db_writer::{Db, DbError};
use durs_wot::WotId;
use tempfile::tempdir;
mod common;
const INITIAL_POW_MIN: usize = 70;
fn insert_250_blocks_with_distinct_issuers(db: &Db) -> Result<(), DbError> {
for i in 0..250 {
let byte = (i % 255) as u8;
let pubkey = dup_crypto_tests_tools::mocks::pubkey_from_byte(byte);
let block = BlockDocument::V10(gen_empty_block(
BlockNumber(i as u32),
pubkey,
INITIAL_POW_MIN + (i % 25),
));
db.write(|mut w| {
common::insert_wot_index_entry(&db, &mut w, WotId(i), pubkey)?;
insert_new_head_block(&db, &mut w, None, common::to_db_block(block))?;
Ok(w)
})?;
}
Ok(())
}
fn criterion_benchmark(c: &mut Criterion) {
// Open temporary database
let db = durs_bc_db_writer::open_db(tempdir().expect("Fail open tmp db").path())
.expect("Fail open tmp db");
c.bench_function("insert 250 blocks", |b| {
b.iter(|| insert_250_blocks_with_distinct_issuers(black_box(&db)))
});
}
criterion_group!(benches, criterion_benchmark);
criterion_main!(benches);
...@@ -27,7 +27,6 @@ use durs_bc_db_reader::DbValue; ...@@ -27,7 +27,6 @@ use durs_bc_db_reader::DbValue;
use unwrap::unwrap; use unwrap::unwrap;
/// Insert new head Block in databases /// Insert new head Block in databases
/// Update MAIN_BLOCK only
pub fn insert_new_head_block( pub fn insert_new_head_block(
db: &Db, db: &Db,
w: &mut DbWriter, w: &mut DbWriter,
...@@ -47,6 +46,12 @@ pub fn insert_new_head_block( ...@@ -47,6 +46,12 @@ pub fn insert_new_head_block(
&Db::db_value(&bin_dal_block)?, &Db::db_value(&bin_dal_block)?,
)?; )?;
// Update current meta datas
crate::current_meta_datas::update_current_meta_datas(db, w, &dal_block.block)?;
// Update stores linked to MAIN_BLOCKS
crate::current_frame::update_current_frame(db, w, &dal_block.block)?;
if let Some(fork_tree) = fork_tree { if let Some(fork_tree) = fork_tree {
// Insert head block in fork tree // Insert head block in fork tree
let removed_blockstamps = let removed_blockstamps =
......
// Copyright (C) 2017-2019 The AXIOM TEAM Association.
//
// 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/>.
//! Dubp personal difficulty logic
pub mod personal_diffi_computation;
use crate::*;
use durs_wot::WotId;
use durs_bc_db_reader::current_frame::entities::{MemberFrameInfo, MemberInCurrentFrame, PersonalDifficulty};
use durs_bc_db_reader::constants::*;
use durs_bc_db_reader::current_meta_datas::get_current_blockstamp_;
use durs_bc_db_reader::current_meta_datas::CurrentMetaDataKey;
use durs_bc_db_reader::{DbValue,DbReader};
use dubp_block_doc::BlockDocument;
// TODO: revert_current_frame
pub(crate) fn update_current_frame(
_db: &Db,
_w: &mut DbWriter,
_new_current_block: &BlockDocument,
) -> Result<(), DbError> {
unimplemented!();
//Ok(())
// 1. dans CURRENT_FRAME_MEMBERS
// pour le WotId du nouveau bloc
// last_block = CurrentBlockNumber
// block_count++ OR 1 si nouvelle clef
// pour les WotId des 0 à 2 blocs sortant (à récupérer via une queue)
// block_count-- Si 0 supprimer la clef
// 2. créer SortedFrameMemberTable : Vec<(bloc_count : u32, WotId)>
// en extraire la valeur médiane MedianFrameMember
// 3. dans CURRENT_META_DATAS
// CurrentFrameMembersSize += diff clef WotId ajoutée/supprimée
// MedianFrameMember = MedianFrameMember
// CurrentFrameFIFO
}
// fn update_current_frame_fifo
// fn push_in_current_frame_fifo
// update_current_frame_members <- add WotId
// fn pop_in_current_frame_fifo
// 0-2 update_current_frame_members <- rm WotId
// (fn update_current_frame_members)
// fn write_current_frame_fifo_in_store
// fn update_median_forged_blocks_in_current_frame
// fn get_current_frame durs-bc-db-reader (mais comment on l'initialise au lancement ?)
// chercher rust compute median (en ligne) si pas d'algo sans tri : fn sort_current_frame_members_by_forged_blocks (en itérant/transformant la structure précédente)
// fn compute_median_forged_blocks_in_current_frame (à partir du tableau trié)
// fn update_current_frame_meta_data (sauf fifo)
/// Compute the personal difficulty of a member.
/// If the member is not in the current window, returns `pow_min`.
pub fn compute_member_diffi<DB: DbReadable, R: DbReader>(
db: &DB,
r: &R,
wot_id: WotId,
) -> Result<PersonalDifficulty, DbError> {
// si membre absent du store return personnal;
// difficulty par défaut
// sinon récupérer le résultat et continuer
let optional_member_info: Option<MemberFrameInfo> =
durs_bc_db_reader::get::get_bin_in_int_store(db, r, CURRENT_FRAME_MEMBERS, wot_id.0 as u32)?;
if let Some(member_info) = optional_member_info {
let current_block_number = get_current_blockstamp_(db, r)?
.ok_or(DbError::DBCorrupted)?
.id;
let median_frame_member = durs_bc_db_reader::get::get_required_u64_in_int_store(
db,
r,
CURRENT_METAS_DATAS,
CurrentMetaDataKey::MedianFrameMember.to_u32(),
)?;
Ok(personal_diffi_computation::compute_personal_difficulty(
member_info.last_personal_nb_members_in_frame.into(),
member_info.last_personal_block_number,
current_block_number,
member_info.member_in_current_frame.forged_blocks,
median_frame_member as usize,
))
} else {
Ok(PersonalDifficulty {
exclusion_factor: 1,
handicap: 0,
})
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::tests::*;
use dubp_common_doc::Blockstamp;
use durs_dbs_tools::kv_db::KvFileDbHandler;
// test avec db mockée
fn factory_member_frame_info(
last_bn: u32,
last_mf: usize,
fb: usize,
) -> Result<Vec<u8>, DbError> {
durs_dbs_tools::to_bytes(&MemberFrameInfo {
last_personal_block_number: BlockNumber(last_bn),
last_personal_nb_members_in_frame: last_mf,
member_in_current_frame: MemberInCurrentFrame {
forged_blocks: fb,
difficulty: PersonalDifficulty::default(),
},
})
}
fn put_member_frame_info_in_db(
db: &KvFileDbHandler,
w: &mut DbWriter,
wot_id: u32,
last_bn: u32,
last_mf: usize,
nbr_pbf: usize,
) -> Result<(), DbError> {
db.get_int_store(CURRENT_FRAME_MEMBERS).put(
w.as_mut(),
wot_id,
&DbValue::Blob(&factory_member_frame_info(last_bn, last_mf, nbr_pbf)?),
)?;
Ok(())
}
/// cré un store CURRENT_FRAME_MEMBERS 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 membre dans la fenetre courante au dernier block de ce membre
/// |- le nombre de block de ce membre dans la fenêtre courante
fn init_mocked_db() -> Result<KvFileDbHandler, DbError> {
let db = open_tmp_db()?;
db.write(|mut w| {
put_member_frame_info_in_db(&db, &mut w, 1, 99, 6, 19)?;
put_member_frame_info_in_db(&db, &mut w, 3, 80, 6, 5)?;
put_member_frame_info_in_db(&db, &mut w, 4, 97, 6, 3)?;
put_member_frame_info_in_db(&db, &mut w, 5, 98, 6, 1)?;
put_member_frame_info_in_db(&db, &mut w, 6, 90, 6, 1)?;
put_member_frame_info_in_db(&db, &mut w, 8, 71, 6, 1)?;
let blockstamp_bytes: Vec<u8> = Blockstamp {
id: BlockNumber(100),
..Default::default()
}
.into();
db.get_int_store(CURRENT_METAS_DATAS).put(
w.as_mut(),
CurrentMetaDataKey::CurrentBlockstamp.to_u32(),
&DbValue::Blob(&blockstamp_bytes),
)?;
// db.get_int_store(CURRENT_METAS_DATAS).put(
// w.as_mut(),
// CurrentMetaDataKey::CurrentFrameMembersSize.to_u32(),
// &DbValue::U64(6),
// )?;
db.get_int_store(CURRENT_METAS_DATAS).put(
w.as_mut(),
CurrentMetaDataKey::MedianFrameMember.to_u32(),
&DbValue::U64(2),
)?;
//CurrentBlockNumber : BlockNumber
//CurrentFrameMembersSize : u32
//MedianFrameMember : bloc_count
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| compute_member_diffi(&db, r, WotId(0)))?
);
Ok(())
}
#[test]
fn test_personal_difficulty_member_supercalculator() -> Result<(), DbError> {
let db = init_mocked_db()?;
assert_eq!(
PersonalDifficulty {
exclusion_factor: 2,
handicap: 13,
},
db.read(|r| compute_member_diffi(&db, r, WotId(1)))?
);
Ok(())
}
#[test]
fn test_personal_difficulty_member_high_calculator() -> Result<(), DbError> {
let db = init_mocked_db()?;
assert_eq!(
PersonalDifficulty {
exclusion_factor: 1,
handicap: 6,
},
db.read(|r| compute_member_diffi(&db, r, WotId(3)))?
);
Ok(())
}
}
// Copyright (C) 2017-2019 The AXIOM TEAM Association.
//
// 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/>.
//! Dubp personal difficulty computation (specific logic computation)
use dubp_common_doc::BlockNumber;
use durs_bc_db_reader::current_frame::entities::PersonalDifficulty;
/// 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
pub fn compute_personal_difficulty(
nb_member_in_frame: usize,
last_personal_block_number: BlockNumber,
current_block_number: BlockNumber,
personal_forged_blocks_in_frame: usize,
median_of_blocks_in_frame: usize,
) -> PersonalDifficulty {
PersonalDifficulty {
exclusion_factor: exclusion_factor(
nb_member_in_frame,
current_block_number.0 - last_personal_block_number.0,
),
handicap: handicap(personal_forged_blocks_in_frame, median_of_blocks_in_frame),
}
}
/// calcule le facteur d'exclusion à partir des membres de la fenêtres courante et du dernier block du membre concerné
/// ne gère pas le cas où le membre n'est pas dans la fenêtre courante
///
/// nb_member_in_frame : la valeur du champ issuersCount du dernier bloc trouvé par le membre
/// nb_blocks_since : le nombre de blocs trouvés par le reste du réseau depuis que le membre considéré a trouvé son dernier bloc
/// exclusion_factor = MAX [ 1 ; FLOOR (0.67 * nb_member_in_frame / (1 + nb_blocks_since)) ]
///
/// reference dans le protocol : https://github.com/duniter/duniter/blob/master/doc/Protocol.md#br_g18---headpowzeros-and-headpowremainder
#[inline]
pub fn exclusion_factor(nb_member_in_frame: usize, nb_blocks_since: u32) -> usize {
std::cmp::max(
1,
(0.67 * (nb_member_in_frame as f64 / (1 + nb_blocks_since) as f64)).floor() as usize,
)
}
/// handicap calcule le handicap d'un membre à partir du nombre de blocs qu'il a caclulé dans la fenêtre courante et du
/// nombre median de blocs écrits par les membres dans la fenêtre courante.
/// ne gère pas le cas où le membre n'est pas dans la fenêtre courante
///
/// personal_forged_blocks_in_frame : le nombre de blocs écrits par le membre considéré dans la fenêtre courante
/// median_of_blocks_in_frame : le nombre médian de blocs écrits par les membres au sein de la fenêtre courante.
/// handicap = FLOOR(LN(MAX(1;(personal_forged_blocks_in_frame + 1) / median_of_blocks_in_frame)) / LN(1.189))
///
/// reference dans le protocol : https://github.com/duniter/duniter/blob/master/doc/Protocol.md#br_g18---headpowzeros-and-headpowremainder
#[inline]
pub fn handicap(personal_forged_blocks_in_frame: usize, median_of_blocks_in_frame: usize) -> usize {
(((std::cmp::max(
1,
(personal_forged_blocks_in_frame + 1) / median_of_blocks_in_frame,
)) as f64)
.ln()
/ 1.189_f64.ln())
.floor() as usize
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_exclusion_factor() {
assert_eq!(1, exclusion_factor(1, 0));
assert_eq!(2, exclusion_factor(15, 4));
}
#[test]
fn test_handicap() {
assert_eq!(13, handicap(500, 50));
assert_eq!(0, handicap(1, 50));
}
#[test]
fn test_default_personal_difficulty() {
assert_eq!(
PersonalDifficulty {
exclusion_factor: 1,
handicap: 0,
},
PersonalDifficulty::default()
);
}
#[test]
fn test_compute_personal_difficulty_no_penality() {
assert_eq!(
PersonalDifficulty {
exclusion_factor: 1,
handicap: 0,
},
compute_personal_difficulty(100, BlockNumber(1000), BlockNumber(1100), 2, 5)
);
}
#[test]
fn test_compute_personal_difficulty_double_penality() {
assert_eq!(
PersonalDifficulty {
exclusion_factor: 3,
handicap: 10,
},
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)
);
assert_eq!(
PersonalDifficulty {
exclusion_factor: 1,
handicap: 6,
},
compute_personal_difficulty(6, BlockNumber(80), BlockNumber(100), 5, 2)
);
}
}
...@@ -24,7 +24,7 @@ use durs_bc_db_reader::current_meta_datas::CurrentMetaDataKey; ...@@ -24,7 +24,7 @@ use durs_bc_db_reader::current_meta_datas::CurrentMetaDataKey;
use durs_bc_db_reader::DbValue; use durs_bc_db_reader::DbValue;
/// Update CURRENT_META_DATAS /// Update CURRENT_META_DATAS
pub fn update_current_meta_datas( pub(crate) fn update_current_meta_datas(
db: &Db, db: &Db,
w: &mut DbWriter, w: &mut DbWriter,
new_current_block: &BlockDocument, new_current_block: &BlockDocument,
......
...@@ -31,6 +31,7 @@ ...@@ -31,6 +31,7 @@
extern crate log; extern crate log;
pub mod blocks; pub mod blocks;
pub mod current_frame;
pub mod current_meta_datas; pub mod current_meta_datas;
pub mod indexes; pub mod indexes;
pub mod writers; pub mod writers;
......
...@@ -67,7 +67,6 @@ impl BlocksDBsWriteQuery { ...@@ -67,7 +67,6 @@ impl BlocksDBsWriteQuery {
BlocksDBsWriteQuery::WriteBlock(dal_block) => { BlocksDBsWriteQuery::WriteBlock(dal_block) => {
let dal_block: DbBlock = dal_block; let dal_block: DbBlock = dal_block;
trace!("BlocksDBsWriteQuery::WriteBlock..."); trace!("BlocksDBsWriteQuery::WriteBlock...");
crate::current_meta_datas::update_current_meta_datas(db, w, &dal_block.block)?;
if sync_target.is_none() if sync_target.is_none()
|| dal_block.blockstamp().id.0 + fork_window_size as u32 || dal_block.blockstamp().id.0 + fork_window_size as u32
>= sync_target.expect("safe unwrap").id.0 >= sync_target.expect("safe unwrap").id.0
......
// Copyright (C) 2017-2019 The AXIOM TEAM Association.
//
// 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/>.
use dubp_block_doc::BlockDocument;
use dup_crypto::keys::{PubKey, PublicKey};
use durs_bc_db_reader::blocks::DbBlock;
use durs_bc_db_reader::constants::*;
use durs_bc_db_reader::{DbReadable, DbValue};
use durs_bc_db_writer::DbWriter;
use durs_bc_db_writer::{Db, DbError};
use durs_wot::WotId;
use tempfile::tempdir;
#[inline]
/// Open database in an arbitrary temporary directory given by OS
/// and automatically cleaned when `Db` is dropped
pub fn open_tmp_db() -> Result<Db, DbError> {
durs_bc_db_writer::open_db(tempdir().map_err(DbError::FileSystemError)?.path())
}
pub fn to_db_block(block: BlockDocument) -> DbBlock {
DbBlock {
block,
expire_certs: None,
}
}
pub fn insert_wot_index_entry(
db: &Db,
w: &mut DbWriter,
wot_id: WotId,
pubkey: PubKey,
) -> Result<(), DbError> {
db.get_store(WOT_ID_INDEX).put(
w.as_mut(),
&pubkey.to_bytes_vector(),
&DbValue::U64(wot_id.0 as u64),
)?;
Ok(())
}
// Copyright (C) 2017-2019 The AXIOM TEAM Association.
//
// 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/>.
use dubp_block_doc::BlockDocument;
use dubp_blocks_tests_tools::mocks::gen_empty_block_v10_with_issuer_and_pow_min as gen_empty_block;
use dubp_common_doc::BlockNumber;
use dup_crypto_tests_tools::mocks::pubkey;
use durs_bc_db_reader::current_frame::entities::*;
use durs_bc_db_reader::current_frame::*;
use durs_bc_db_reader::DbReadable;
use durs_bc_db_writer::blocks::insert_new_head_block;
use durs_bc_db_writer::DbError;
use durs_wot::WotId;
mod common;
const INITIAL_POW_MIN: usize = 70;
//#[ignore]
#[test]
fn test_current_frame() -> Result<(), DbError> {
// Open temporary database
let db = common::open_tmp_db()?;
// Create and insert fake wot index
let issuer_a = pubkey('A');
db.write(|mut w| {
common::insert_wot_index_entry(&db, &mut w, WotId(0), issuer_a)?;
Ok(w)
})?;
// Insert genesis block
let genesis_block =
BlockDocument::V10(gen_empty_block(BlockNumber(0), issuer_a, INITIAL_POW_MIN));
db.write(|mut w| {
insert_new_head_block(&db, &mut w, None, common::to_db_block(genesis_block))?;
Ok(w)
})?;
// Verify current frame #0
let current_frame = get_current_frame(&db)?;
assert_eq!(1, current_frame.len());
assert_eq!(
(
WotId(0),
MemberInCurrentFrame {
forged_blocks: 1,
difficulty: PersonalDifficulty {
exclusion_factor: 1,
handicap: 0,
},
}
),
current_frame[0]
);
// Insert block #1
let block_1 = BlockDocument::V10(gen_empty_block(
BlockNumber(1),
issuer_a,
INITIAL_POW_MIN + 1,
));
db.write(|mut w| {
insert_new_head_block(&db, &mut w, None, common::to_db_block(block_1))?;
Ok(w)
})?;
// Verify current frame #1
let current_frame = get_current_frame(&db)?;
assert_eq!(2, current_frame.len());
assert_eq!(
(
WotId(0),
MemberInCurrentFrame {
forged_blocks: 2,
difficulty: PersonalDifficulty {
exclusion_factor: 1,
handicap: 0,
},
}
),
current_frame[0]
);
assert_eq!(
PersonalDifficulty {
exclusion_factor: 1,
handicap: 2,
},
db.read(|r| get_member_diffi(&db, r, WotId(0)))?
);
// Insert block #2
let issuer_b = pubkey('B');
let block_2 = BlockDocument::V10(gen_empty_block(
BlockNumber(2),
issuer_b,
INITIAL_POW_MIN + 2,
));
db.write(|mut w| {
insert_new_head_block(&db, &mut w, None, common::to_db_block(block_2))?;
Ok(w)
})?;
// Verify current frame #2
let current_frame = get_current_frame(&db)?;
assert_eq!(3, current_frame.len());
assert_eq!(
(
WotId(0),
MemberInCurrentFrame {
forged_blocks: 2,
difficulty: PersonalDifficulty {
exclusion_factor: 1,
handicap: 2,
},
}
),
current_frame[0]
);
assert_eq!(
(
WotId(1),
MemberInCurrentFrame {
forged_blocks: 1,
difficulty: PersonalDifficulty {
exclusion_factor: 1,
handicap: 2,
},
}
),
current_frame[1]
);
// Insert block #3
let block_3 = BlockDocument::V10(gen_empty_block(
BlockNumber(3),
issuer_b,
INITIAL_POW_MIN + 3,
));
db.write(|mut w| {
insert_new_head_block(&db, &mut w, None, common::to_db_block(block_3))?;
Ok(w)
})?;
// Verify current frame #3
let current_frame = get_current_frame(&db)?;
assert_eq!(4, current_frame.len());
assert_eq!(
(
WotId(0),
MemberInCurrentFrame {
forged_blocks: 2,
difficulty: PersonalDifficulty {
exclusion_factor: 1,
handicap: 2,
},
}
),
current_frame[0]
);
assert_eq!(
(
WotId(1),
MemberInCurrentFrame {
forged_blocks: 2,
difficulty: PersonalDifficulty {
exclusion_factor: 1,
handicap: 2,
},
}
),
current_frame[1]
);
Ok(())
}
...@@ -21,14 +21,19 @@ use crate::dubp::BlockError; ...@@ -21,14 +21,19 @@ use crate::dubp::BlockError;
use dubp_block_doc::block::{BlockDocument, BlockDocumentTrait}; use dubp_block_doc::block::{BlockDocument, BlockDocumentTrait};
use dubp_common_doc::traits::Document; use dubp_common_doc::traits::Document;
use dubp_common_doc::BlockNumber; use dubp_common_doc::BlockNumber;
use dup_crypto::hashs::Hash;
use dup_crypto::keys::PubKey; use dup_crypto::keys::PubKey;
use durs_bc_db_reader::DbReader; use durs_bc_db_reader::DbReader;
use durs_bc_db_writer::*; use durs_bc_db_writer::*;
use durs_wot::*; use durs_wot::*;
use std::collections::HashMap; use std::collections::HashMap;
#[derive(Debug, Copy, Clone)] #[derive(Debug, Clone)]
pub enum InvalidBlockError { pub enum InvalidBlockError {
_InvalidPow {
expected_pattern: String,
block_hash: Hash,
},
NoPreviousBlock, NoPreviousBlock,
VersionDecrease, VersionDecrease,
} }
...@@ -68,3 +73,13 @@ where ...@@ -68,3 +73,13 @@ where
Ok(()) Ok(())
} }
fn _verify_pow<DB: DbReadable, R: DbReader>(
_db: &DB,
_r: &R,
_wot_id: WotId,
_block_hash: Hash,
_block_pow_min: u32,
) -> Result<(), InvalidBlockError> {
unimplemented!();
}