├── .gitignore ├── Cargo.lock ├── Cargo.toml ├── README.md ├── assets └── DASNode.png └── src ├── content_key.rs ├── discovery.rs ├── main.rs ├── node_struct.rs ├── overlay.rs └── scratch.rs /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 3 4 | 5 | [[package]] 6 | name = "adler" 7 | version = "1.0.2" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" 10 | 11 | [[package]] 12 | name = "aead" 13 | version = "0.4.3" 14 | source = "registry+https://github.com/rust-lang/crates.io-index" 15 | checksum = "0b613b8e1e3cf911a086f53f03bf286f52fd7a7258e4fa606f0ef220d39d8877" 16 | dependencies = [ 17 | "generic-array", 18 | ] 19 | 20 | [[package]] 21 | name = "aes" 22 | version = "0.7.5" 23 | source = "registry+https://github.com/rust-lang/crates.io-index" 24 | checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8" 25 | dependencies = [ 26 | "cfg-if 1.0.0", 27 | "cipher", 28 | "cpufeatures 0.2.5", 29 | "ctr", 30 | "opaque-debug", 31 | ] 32 | 33 | [[package]] 34 | name = "aes-gcm" 35 | version = "0.9.4" 36 | source = "registry+https://github.com/rust-lang/crates.io-index" 37 | checksum = "df5f85a83a7d8b0442b6aa7b504b8212c1733da07b98aae43d4bc21b2cb3cdf6" 38 | dependencies = [ 39 | "aead", 40 | "aes", 41 | "cipher", 42 | "ctr", 43 | "ghash", 44 | "subtle", 45 | ] 46 | 47 | [[package]] 48 | name = "ahash" 49 | version = "0.7.6" 50 | source = "registry+https://github.com/rust-lang/crates.io-index" 51 | checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" 52 | dependencies = [ 53 | "getrandom 0.2.8", 54 | "once_cell", 55 | "version_check", 56 | ] 57 | 58 | [[package]] 59 | name = "aho-corasick" 60 | version = "0.6.10" 61 | source = "registry+https://github.com/rust-lang/crates.io-index" 62 | checksum = "81ce3d38065e618af2d7b77e10c5ad9a069859b4be3c2250f674af3840d9c8a5" 63 | dependencies = [ 64 | "memchr", 65 | ] 66 | 67 | [[package]] 68 | name = "aho-corasick" 69 | version = "0.7.20" 70 | source = "registry+https://github.com/rust-lang/crates.io-index" 71 | checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac" 72 | dependencies = [ 73 | "memchr", 74 | ] 75 | 76 | [[package]] 77 | name = "ansi_term" 78 | version = "0.12.1" 79 | source = "registry+https://github.com/rust-lang/crates.io-index" 80 | checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" 81 | dependencies = [ 82 | "winapi 0.3.9", 83 | ] 84 | 85 | [[package]] 86 | name = "anyhow" 87 | version = "1.0.68" 88 | source = "registry+https://github.com/rust-lang/crates.io-index" 89 | checksum = "2cb2f989d18dd141ab8ae82f64d1a8cdd37e0840f73a406896cf5e99502fab61" 90 | 91 | [[package]] 92 | name = "arrayvec" 93 | version = "0.7.2" 94 | source = "registry+https://github.com/rust-lang/crates.io-index" 95 | checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" 96 | 97 | [[package]] 98 | name = "ascii" 99 | version = "1.1.0" 100 | source = "registry+https://github.com/rust-lang/crates.io-index" 101 | checksum = "d92bec98840b8f03a5ff5413de5293bfcd8bf96467cf5452609f939ec6f5de16" 102 | 103 | [[package]] 104 | name = "async-recursion" 105 | version = "1.0.0" 106 | source = "registry+https://github.com/rust-lang/crates.io-index" 107 | checksum = "2cda8f4bcc10624c4e85bc66b3f452cca98cfa5ca002dc83a16aad2367641bea" 108 | dependencies = [ 109 | "proc-macro2", 110 | "quote", 111 | "syn", 112 | ] 113 | 114 | [[package]] 115 | name = "async-trait" 116 | version = "0.1.60" 117 | source = "registry+https://github.com/rust-lang/crates.io-index" 118 | checksum = "677d1d8ab452a3936018a687b20e6f7cf5363d713b732b8884001317b0e48aa3" 119 | dependencies = [ 120 | "proc-macro2", 121 | "quote", 122 | "syn", 123 | ] 124 | 125 | [[package]] 126 | name = "atty" 127 | version = "0.2.14" 128 | source = "registry+https://github.com/rust-lang/crates.io-index" 129 | checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" 130 | dependencies = [ 131 | "hermit-abi 0.1.19", 132 | "libc", 133 | "winapi 0.3.9", 134 | ] 135 | 136 | [[package]] 137 | name = "autocfg" 138 | version = "0.1.8" 139 | source = "registry+https://github.com/rust-lang/crates.io-index" 140 | checksum = "0dde43e75fd43e8a1bf86103336bc699aa8d17ad1be60c76c0bdfd4828e19b78" 141 | dependencies = [ 142 | "autocfg 1.1.0", 143 | ] 144 | 145 | [[package]] 146 | name = "autocfg" 147 | version = "1.1.0" 148 | source = "registry+https://github.com/rust-lang/crates.io-index" 149 | checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" 150 | 151 | [[package]] 152 | name = "base16ct" 153 | version = "0.1.1" 154 | source = "registry+https://github.com/rust-lang/crates.io-index" 155 | checksum = "349a06037c7bf932dd7e7d1f653678b2038b9ad46a74102f1fc7bd7872678cce" 156 | 157 | [[package]] 158 | name = "base64" 159 | version = "0.13.1" 160 | source = "registry+https://github.com/rust-lang/crates.io-index" 161 | checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" 162 | 163 | [[package]] 164 | name = "base64ct" 165 | version = "1.5.3" 166 | source = "registry+https://github.com/rust-lang/crates.io-index" 167 | checksum = "b645a089122eccb6111b4f81cbc1a49f5900ac4666bb93ac027feaecf15607bf" 168 | 169 | [[package]] 170 | name = "bindgen" 171 | version = "0.59.2" 172 | source = "registry+https://github.com/rust-lang/crates.io-index" 173 | checksum = "2bd2a9a458e8f4304c52c43ebb0cfbd520289f8379a52e329a38afda99bf8eb8" 174 | dependencies = [ 175 | "bitflags", 176 | "cexpr", 177 | "clang-sys", 178 | "lazy_static 1.4.0", 179 | "lazycell", 180 | "peeking_take_while", 181 | "proc-macro2", 182 | "quote", 183 | "regex 1.7.0", 184 | "rustc-hash", 185 | "shlex", 186 | ] 187 | 188 | [[package]] 189 | name = "bitflags" 190 | version = "1.3.2" 191 | source = "registry+https://github.com/rust-lang/crates.io-index" 192 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 193 | 194 | [[package]] 195 | name = "bitvec" 196 | version = "0.20.4" 197 | source = "registry+https://github.com/rust-lang/crates.io-index" 198 | checksum = "7774144344a4faa177370406a7ff5f1da24303817368584c6206c8303eb07848" 199 | dependencies = [ 200 | "funty", 201 | "radium", 202 | "tap", 203 | "wyz", 204 | ] 205 | 206 | [[package]] 207 | name = "block-buffer" 208 | version = "0.9.0" 209 | source = "registry+https://github.com/rust-lang/crates.io-index" 210 | checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" 211 | dependencies = [ 212 | "block-padding", 213 | "generic-array", 214 | ] 215 | 216 | [[package]] 217 | name = "block-buffer" 218 | version = "0.10.3" 219 | source = "registry+https://github.com/rust-lang/crates.io-index" 220 | checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e" 221 | dependencies = [ 222 | "generic-array", 223 | ] 224 | 225 | [[package]] 226 | name = "block-padding" 227 | version = "0.2.1" 228 | source = "registry+https://github.com/rust-lang/crates.io-index" 229 | checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" 230 | 231 | [[package]] 232 | name = "bs58" 233 | version = "0.4.0" 234 | source = "registry+https://github.com/rust-lang/crates.io-index" 235 | checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" 236 | 237 | [[package]] 238 | name = "build_const" 239 | version = "0.2.2" 240 | source = "registry+https://github.com/rust-lang/crates.io-index" 241 | checksum = "b4ae4235e6dac0694637c763029ecea1a2ec9e4e06ec2729bd21ba4d9c863eb7" 242 | 243 | [[package]] 244 | name = "bumpalo" 245 | version = "3.11.1" 246 | source = "registry+https://github.com/rust-lang/crates.io-index" 247 | checksum = "572f695136211188308f16ad2ca5c851a712c464060ae6974944458eb83880ba" 248 | 249 | [[package]] 250 | name = "byte-slice-cast" 251 | version = "1.2.2" 252 | source = "registry+https://github.com/rust-lang/crates.io-index" 253 | checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" 254 | 255 | [[package]] 256 | name = "bytecodec" 257 | version = "0.4.15" 258 | source = "registry+https://github.com/rust-lang/crates.io-index" 259 | checksum = "adf4c9d0bbf32eea58d7c0f812058138ee8edaf0f2802b6d03561b504729a325" 260 | dependencies = [ 261 | "byteorder", 262 | "trackable 0.2.24", 263 | ] 264 | 265 | [[package]] 266 | name = "byteorder" 267 | version = "1.4.3" 268 | source = "registry+https://github.com/rust-lang/crates.io-index" 269 | checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" 270 | 271 | [[package]] 272 | name = "bytes" 273 | version = "0.4.12" 274 | source = "registry+https://github.com/rust-lang/crates.io-index" 275 | checksum = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c" 276 | dependencies = [ 277 | "byteorder", 278 | "iovec", 279 | ] 280 | 281 | [[package]] 282 | name = "bytes" 283 | version = "1.3.0" 284 | source = "registry+https://github.com/rust-lang/crates.io-index" 285 | checksum = "dfb24e866b15a1af2a1b663f10c6b6b8f397a84aadb828f12e5b289ec23a3a3c" 286 | 287 | [[package]] 288 | name = "bzip2-sys" 289 | version = "0.1.11+1.0.8" 290 | source = "registry+https://github.com/rust-lang/crates.io-index" 291 | checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc" 292 | dependencies = [ 293 | "cc", 294 | "libc", 295 | "pkg-config", 296 | ] 297 | 298 | [[package]] 299 | name = "cc" 300 | version = "1.0.78" 301 | source = "registry+https://github.com/rust-lang/crates.io-index" 302 | checksum = "a20104e2335ce8a659d6dd92a51a767a0c062599c73b343fd152cb401e828c3d" 303 | dependencies = [ 304 | "jobserver", 305 | ] 306 | 307 | [[package]] 308 | name = "cexpr" 309 | version = "0.6.0" 310 | source = "registry+https://github.com/rust-lang/crates.io-index" 311 | checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" 312 | dependencies = [ 313 | "nom", 314 | ] 315 | 316 | [[package]] 317 | name = "cfg-if" 318 | version = "0.1.10" 319 | source = "registry+https://github.com/rust-lang/crates.io-index" 320 | checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" 321 | 322 | [[package]] 323 | name = "cfg-if" 324 | version = "1.0.0" 325 | source = "registry+https://github.com/rust-lang/crates.io-index" 326 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 327 | 328 | [[package]] 329 | name = "chunked_transfer" 330 | version = "1.4.0" 331 | source = "registry+https://github.com/rust-lang/crates.io-index" 332 | checksum = "fff857943da45f546682664a79488be82e69e43c1a7a2307679ab9afb3a66d2e" 333 | 334 | [[package]] 335 | name = "cipher" 336 | version = "0.3.0" 337 | source = "registry+https://github.com/rust-lang/crates.io-index" 338 | checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7" 339 | dependencies = [ 340 | "generic-array", 341 | ] 342 | 343 | [[package]] 344 | name = "clang-sys" 345 | version = "1.4.0" 346 | source = "registry+https://github.com/rust-lang/crates.io-index" 347 | checksum = "fa2e27ae6ab525c3d369ded447057bca5438d86dc3a68f6faafb8269ba82ebf3" 348 | dependencies = [ 349 | "glob", 350 | "libc", 351 | "libloading", 352 | ] 353 | 354 | [[package]] 355 | name = "clap" 356 | version = "2.34.0" 357 | source = "registry+https://github.com/rust-lang/crates.io-index" 358 | checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" 359 | dependencies = [ 360 | "ansi_term", 361 | "atty", 362 | "bitflags", 363 | "strsim 0.8.0", 364 | "textwrap", 365 | "unicode-width", 366 | "vec_map", 367 | ] 368 | 369 | [[package]] 370 | name = "cloudabi" 371 | version = "0.0.3" 372 | source = "registry+https://github.com/rust-lang/crates.io-index" 373 | checksum = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" 374 | dependencies = [ 375 | "bitflags", 376 | ] 377 | 378 | [[package]] 379 | name = "const-oid" 380 | version = "0.9.1" 381 | source = "registry+https://github.com/rust-lang/crates.io-index" 382 | checksum = "cec318a675afcb6a1ea1d4340e2d377e56e47c266f28043ceccbf4412ddfdd3b" 383 | 384 | [[package]] 385 | name = "cpufeatures" 386 | version = "0.1.5" 387 | source = "registry+https://github.com/rust-lang/crates.io-index" 388 | checksum = "66c99696f6c9dd7f35d486b9d04d7e6e202aa3e8c40d553f2fdf5e7e0c6a71ef" 389 | dependencies = [ 390 | "libc", 391 | ] 392 | 393 | [[package]] 394 | name = "cpufeatures" 395 | version = "0.2.5" 396 | source = "registry+https://github.com/rust-lang/crates.io-index" 397 | checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" 398 | dependencies = [ 399 | "libc", 400 | ] 401 | 402 | [[package]] 403 | name = "crc" 404 | version = "1.8.1" 405 | source = "registry+https://github.com/rust-lang/crates.io-index" 406 | checksum = "d663548de7f5cca343f1e0a48d14dcfb0e9eb4e079ec58883b7251539fa10aeb" 407 | dependencies = [ 408 | "build_const", 409 | ] 410 | 411 | [[package]] 412 | name = "crc32fast" 413 | version = "1.3.2" 414 | source = "registry+https://github.com/rust-lang/crates.io-index" 415 | checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" 416 | dependencies = [ 417 | "cfg-if 1.0.0", 418 | ] 419 | 420 | [[package]] 421 | name = "crossbeam-utils" 422 | version = "0.7.2" 423 | source = "registry+https://github.com/rust-lang/crates.io-index" 424 | checksum = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8" 425 | dependencies = [ 426 | "autocfg 1.1.0", 427 | "cfg-if 0.1.10", 428 | "lazy_static 1.4.0", 429 | ] 430 | 431 | [[package]] 432 | name = "crunchy" 433 | version = "0.1.6" 434 | source = "registry+https://github.com/rust-lang/crates.io-index" 435 | checksum = "a2f4a431c5c9f662e1200b7c7f02c34e91361150e382089a8f2dec3ba680cbda" 436 | 437 | [[package]] 438 | name = "crunchy" 439 | version = "0.2.2" 440 | source = "registry+https://github.com/rust-lang/crates.io-index" 441 | checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" 442 | 443 | [[package]] 444 | name = "crypto-bigint" 445 | version = "0.4.9" 446 | source = "registry+https://github.com/rust-lang/crates.io-index" 447 | checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef" 448 | dependencies = [ 449 | "generic-array", 450 | "rand_core 0.6.4", 451 | "subtle", 452 | "zeroize", 453 | ] 454 | 455 | [[package]] 456 | name = "crypto-common" 457 | version = "0.1.6" 458 | source = "registry+https://github.com/rust-lang/crates.io-index" 459 | checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" 460 | dependencies = [ 461 | "generic-array", 462 | "typenum", 463 | ] 464 | 465 | [[package]] 466 | name = "ctr" 467 | version = "0.8.0" 468 | source = "registry+https://github.com/rust-lang/crates.io-index" 469 | checksum = "049bb91fb4aaf0e3c7efa6cd5ef877dbbbd15b39dad06d9948de4ec8a75761ea" 470 | dependencies = [ 471 | "cipher", 472 | ] 473 | 474 | [[package]] 475 | name = "ctrlc" 476 | version = "3.2.4" 477 | source = "registry+https://github.com/rust-lang/crates.io-index" 478 | checksum = "1631ca6e3c59112501a9d87fd86f21591ff77acd31331e8a73f8d80a65bbdd71" 479 | dependencies = [ 480 | "nix 0.26.1", 481 | "windows-sys", 482 | ] 483 | 484 | [[package]] 485 | name = "curve25519-dalek" 486 | version = "3.2.0" 487 | source = "registry+https://github.com/rust-lang/crates.io-index" 488 | checksum = "0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61" 489 | dependencies = [ 490 | "byteorder", 491 | "digest 0.9.0", 492 | "rand_core 0.5.1", 493 | "subtle", 494 | "zeroize", 495 | ] 496 | 497 | [[package]] 498 | name = "darling" 499 | version = "0.13.4" 500 | source = "registry+https://github.com/rust-lang/crates.io-index" 501 | checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c" 502 | dependencies = [ 503 | "darling_core", 504 | "darling_macro", 505 | ] 506 | 507 | [[package]] 508 | name = "darling_core" 509 | version = "0.13.4" 510 | source = "registry+https://github.com/rust-lang/crates.io-index" 511 | checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610" 512 | dependencies = [ 513 | "fnv", 514 | "ident_case", 515 | "proc-macro2", 516 | "quote", 517 | "strsim 0.10.0", 518 | "syn", 519 | ] 520 | 521 | [[package]] 522 | name = "darling_macro" 523 | version = "0.13.4" 524 | source = "registry+https://github.com/rust-lang/crates.io-index" 525 | checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835" 526 | dependencies = [ 527 | "darling_core", 528 | "quote", 529 | "syn", 530 | ] 531 | 532 | [[package]] 533 | name = "das_playground" 534 | version = "0.1.0" 535 | dependencies = [ 536 | "anyhow", 537 | "async-trait", 538 | "discv5", 539 | "discv5-overlay", 540 | "eth2_ssz", 541 | "eth2_ssz_derive", 542 | "futures 0.3.25", 543 | "hex", 544 | "parking_lot 0.11.2", 545 | "rand 0.8.5", 546 | "tokio", 547 | "tokio-stream", 548 | "tracing", 549 | ] 550 | 551 | [[package]] 552 | name = "delay_map" 553 | version = "0.1.2" 554 | source = "registry+https://github.com/rust-lang/crates.io-index" 555 | checksum = "9c4d75d3abfe4830dcbf9bcb1b926954e121669f74dd1ca7aa0183b1755d83f6" 556 | dependencies = [ 557 | "futures 0.3.25", 558 | "tokio-util", 559 | ] 560 | 561 | [[package]] 562 | name = "der" 563 | version = "0.6.1" 564 | source = "registry+https://github.com/rust-lang/crates.io-index" 565 | checksum = "f1a467a65c5e759bce6e65eaf91cc29f466cdc57cb65777bd646872a8a1fd4de" 566 | dependencies = [ 567 | "const-oid", 568 | "zeroize", 569 | ] 570 | 571 | [[package]] 572 | name = "digest" 573 | version = "0.9.0" 574 | source = "registry+https://github.com/rust-lang/crates.io-index" 575 | checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" 576 | dependencies = [ 577 | "generic-array", 578 | ] 579 | 580 | [[package]] 581 | name = "digest" 582 | version = "0.10.6" 583 | source = "registry+https://github.com/rust-lang/crates.io-index" 584 | checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" 585 | dependencies = [ 586 | "block-buffer 0.10.3", 587 | "crypto-common", 588 | "subtle", 589 | ] 590 | 591 | [[package]] 592 | name = "directories" 593 | version = "3.0.2" 594 | source = "registry+https://github.com/rust-lang/crates.io-index" 595 | checksum = "e69600ff1703123957937708eb27f7a564e48885c537782722ed0ba3189ce1d7" 596 | dependencies = [ 597 | "dirs-sys", 598 | ] 599 | 600 | [[package]] 601 | name = "dirs-sys" 602 | version = "0.3.7" 603 | source = "registry+https://github.com/rust-lang/crates.io-index" 604 | checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" 605 | dependencies = [ 606 | "libc", 607 | "redox_users", 608 | "winapi 0.3.9", 609 | ] 610 | 611 | [[package]] 612 | name = "discv5" 613 | version = "0.1.0" 614 | source = "git+https://github.com/timoth-y/discv5#89e7d95cae8653b827b446f57a9e98c165683e75" 615 | dependencies = [ 616 | "aes", 617 | "aes-gcm", 618 | "arrayvec", 619 | "delay_map", 620 | "enr", 621 | "fnv", 622 | "futures 0.3.25", 623 | "hashlink", 624 | "hex", 625 | "hkdf", 626 | "lazy_static 1.4.0", 627 | "lru", 628 | "more-asserts", 629 | "parking_lot 0.11.2", 630 | "rand 0.8.5", 631 | "rlp 0.5.2", 632 | "smallvec 1.10.0", 633 | "socket2 0.4.7", 634 | "tokio", 635 | "tokio-stream", 636 | "tokio-util", 637 | "tracing", 638 | "tracing-subscriber", 639 | "uint 0.9.5", 640 | "zeroize", 641 | ] 642 | 643 | [[package]] 644 | name = "discv5-overlay" 645 | version = "0.1.0" 646 | source = "git+https://github.com/timoth-y/discv5-overlay#8b5c2c5eb34f02641911c49c930dbe1859145ab8" 647 | dependencies = [ 648 | "anyhow", 649 | "async-recursion", 650 | "async-trait", 651 | "base64", 652 | "bytes 1.3.0", 653 | "clap", 654 | "ctrlc", 655 | "delay_map", 656 | "directories", 657 | "discv5", 658 | "eth2_ssz", 659 | "eth2_ssz_derive", 660 | "eth2_ssz_types", 661 | "eth_trie", 662 | "ethereum-types 0.12.1", 663 | "fnv", 664 | "futures 0.3.25", 665 | "hex", 666 | "httparse", 667 | "interfaces", 668 | "ipconfig", 669 | "keccak-hash", 670 | "lazy_static 1.4.0", 671 | "leb128", 672 | "lru", 673 | "num", 674 | "parking_lot 0.11.2", 675 | "prometheus_exporter", 676 | "r2d2", 677 | "r2d2_sqlite", 678 | "rand 0.8.5", 679 | "rlp 0.5.2", 680 | "rlp-derive", 681 | "rocksdb", 682 | "rusqlite", 683 | "serde", 684 | "serde_json", 685 | "sha2 0.10.6", 686 | "sha3 0.9.1", 687 | "smallvec 1.10.0", 688 | "structopt", 689 | "stunclient", 690 | "tempfile", 691 | "thiserror", 692 | "threadpool", 693 | "tokio", 694 | "tokio-util", 695 | "tracing", 696 | "tree_hash", 697 | "tree_hash_derive", 698 | "uds_windows", 699 | "uint 0.8.5", 700 | "ureq", 701 | "validator", 702 | ] 703 | 704 | [[package]] 705 | name = "ecdsa" 706 | version = "0.14.8" 707 | source = "registry+https://github.com/rust-lang/crates.io-index" 708 | checksum = "413301934810f597c1d19ca71c8710e99a3f1ba28a0d2ebc01551a2daeea3c5c" 709 | dependencies = [ 710 | "der", 711 | "elliptic-curve", 712 | "rfc6979", 713 | "signature", 714 | ] 715 | 716 | [[package]] 717 | name = "ed25519" 718 | version = "1.5.2" 719 | source = "registry+https://github.com/rust-lang/crates.io-index" 720 | checksum = "1e9c280362032ea4203659fc489832d0204ef09f247a0506f170dafcac08c369" 721 | dependencies = [ 722 | "signature", 723 | ] 724 | 725 | [[package]] 726 | name = "ed25519-dalek" 727 | version = "1.0.1" 728 | source = "registry+https://github.com/rust-lang/crates.io-index" 729 | checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d" 730 | dependencies = [ 731 | "curve25519-dalek", 732 | "ed25519", 733 | "rand 0.7.3", 734 | "serde", 735 | "sha2 0.9.9", 736 | "zeroize", 737 | ] 738 | 739 | [[package]] 740 | name = "elliptic-curve" 741 | version = "0.12.3" 742 | source = "registry+https://github.com/rust-lang/crates.io-index" 743 | checksum = "e7bb888ab5300a19b8e5bceef25ac745ad065f3c9f7efc6de1b91958110891d3" 744 | dependencies = [ 745 | "base16ct", 746 | "crypto-bigint", 747 | "der", 748 | "digest 0.10.6", 749 | "ff", 750 | "generic-array", 751 | "group", 752 | "pkcs8", 753 | "rand_core 0.6.4", 754 | "sec1", 755 | "subtle", 756 | "zeroize", 757 | ] 758 | 759 | [[package]] 760 | name = "enr" 761 | version = "0.6.2" 762 | source = "registry+https://github.com/rust-lang/crates.io-index" 763 | checksum = "26fa0a0be8915790626d5759eb51fe47435a8eac92c2f212bd2da9aa7f30ea56" 764 | dependencies = [ 765 | "base64", 766 | "bs58", 767 | "bytes 1.3.0", 768 | "ed25519-dalek", 769 | "hex", 770 | "k256", 771 | "log 0.4.17", 772 | "rand 0.8.5", 773 | "rlp 0.5.2", 774 | "serde", 775 | "sha3 0.10.6", 776 | "zeroize", 777 | ] 778 | 779 | [[package]] 780 | name = "eth2_hashing" 781 | version = "0.2.0" 782 | source = "registry+https://github.com/rust-lang/crates.io-index" 783 | checksum = "5b67737df7e3769e823d9d583eb5d60bcc4b2ef97ca674d1964ef287a02f8517" 784 | dependencies = [ 785 | "cpufeatures 0.1.5", 786 | "lazy_static 1.4.0", 787 | "ring", 788 | "sha2 0.9.9", 789 | ] 790 | 791 | [[package]] 792 | name = "eth2_serde_utils" 793 | version = "0.1.0" 794 | source = "registry+https://github.com/rust-lang/crates.io-index" 795 | checksum = "477fffc25490dfc866288273f96344c6879676a1337187fc39245cd422e10825" 796 | dependencies = [ 797 | "hex", 798 | "serde", 799 | "serde_derive", 800 | ] 801 | 802 | [[package]] 803 | name = "eth2_ssz" 804 | version = "0.4.0" 805 | source = "registry+https://github.com/rust-lang/crates.io-index" 806 | checksum = "948e343aa022785c07193f41ed37adfd9dd0350368060803b8302c7f798e8306" 807 | dependencies = [ 808 | "ethereum-types 0.12.1", 809 | "smallvec 1.10.0", 810 | ] 811 | 812 | [[package]] 813 | name = "eth2_ssz_derive" 814 | version = "0.3.0" 815 | source = "registry+https://github.com/rust-lang/crates.io-index" 816 | checksum = "635b86d2c941bb71e7419a571e1763d65c93e51a1bafc400352e3bef6ff59fc9" 817 | dependencies = [ 818 | "darling", 819 | "proc-macro2", 820 | "quote", 821 | "syn", 822 | ] 823 | 824 | [[package]] 825 | name = "eth2_ssz_types" 826 | version = "0.2.1" 827 | source = "registry+https://github.com/rust-lang/crates.io-index" 828 | checksum = "a9423ac7fb37037f828a32b724cdfa65ea62290055811731402a90fb8a5bcbb1" 829 | dependencies = [ 830 | "eth2_serde_utils", 831 | "eth2_ssz", 832 | "serde", 833 | "serde_derive", 834 | "tree_hash", 835 | "typenum", 836 | ] 837 | 838 | [[package]] 839 | name = "eth_trie" 840 | version = "0.1.0" 841 | source = "registry+https://github.com/rust-lang/crates.io-index" 842 | checksum = "219675dc3593f2b99d5cc22d8bbaf956059a66b7eb69444d8502e2b9f5199814" 843 | dependencies = [ 844 | "hashbrown 0.3.1", 845 | "keccak-hash", 846 | "log 0.4.17", 847 | "parking_lot 0.8.0", 848 | "rlp 0.3.0", 849 | ] 850 | 851 | [[package]] 852 | name = "ethbloom" 853 | version = "0.5.3" 854 | source = "registry+https://github.com/rust-lang/crates.io-index" 855 | checksum = "a6294da962646baa738414e8e718d1a1f0360a51d92de89ccbf91870418f5360" 856 | dependencies = [ 857 | "crunchy 0.1.6", 858 | "ethereum-types-serialize", 859 | "fixed-hash 0.2.5", 860 | "serde", 861 | "tiny-keccak 1.5.0", 862 | ] 863 | 864 | [[package]] 865 | name = "ethbloom" 866 | version = "0.11.1" 867 | source = "registry+https://github.com/rust-lang/crates.io-index" 868 | checksum = "bfb684ac8fa8f6c5759f788862bb22ec6fe3cb392f6bfd08e3c64b603661e3f8" 869 | dependencies = [ 870 | "crunchy 0.2.2", 871 | "fixed-hash 0.7.0", 872 | "impl-rlp", 873 | "impl-serde", 874 | "tiny-keccak 2.0.2", 875 | ] 876 | 877 | [[package]] 878 | name = "ethereum-types" 879 | version = "0.4.2" 880 | source = "registry+https://github.com/rust-lang/crates.io-index" 881 | checksum = "6e742184dc63a01c8ea0637369f8faa27c40f537949908a237f95c05e68d2c96" 882 | dependencies = [ 883 | "crunchy 0.1.6", 884 | "ethbloom 0.5.3", 885 | "ethereum-types-serialize", 886 | "fixed-hash 0.2.5", 887 | "serde", 888 | "uint 0.4.1", 889 | ] 890 | 891 | [[package]] 892 | name = "ethereum-types" 893 | version = "0.12.1" 894 | source = "registry+https://github.com/rust-lang/crates.io-index" 895 | checksum = "05136f7057fe789f06e6d41d07b34e6f70d8c86e5693b60f97aaa6553553bdaf" 896 | dependencies = [ 897 | "ethbloom 0.11.1", 898 | "fixed-hash 0.7.0", 899 | "impl-rlp", 900 | "impl-serde", 901 | "primitive-types", 902 | "uint 0.9.5", 903 | ] 904 | 905 | [[package]] 906 | name = "ethereum-types-serialize" 907 | version = "0.2.2" 908 | source = "registry+https://github.com/rust-lang/crates.io-index" 909 | checksum = "1873d77b32bc1891a79dad925f2acbc318ee942b38b9110f9dbc5fbeffcea350" 910 | dependencies = [ 911 | "serde", 912 | ] 913 | 914 | [[package]] 915 | name = "fallible-iterator" 916 | version = "0.2.0" 917 | source = "registry+https://github.com/rust-lang/crates.io-index" 918 | checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" 919 | 920 | [[package]] 921 | name = "fallible-streaming-iterator" 922 | version = "0.1.9" 923 | source = "registry+https://github.com/rust-lang/crates.io-index" 924 | checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a" 925 | 926 | [[package]] 927 | name = "fastrand" 928 | version = "1.8.0" 929 | source = "registry+https://github.com/rust-lang/crates.io-index" 930 | checksum = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499" 931 | dependencies = [ 932 | "instant", 933 | ] 934 | 935 | [[package]] 936 | name = "ff" 937 | version = "0.12.1" 938 | source = "registry+https://github.com/rust-lang/crates.io-index" 939 | checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160" 940 | dependencies = [ 941 | "rand_core 0.6.4", 942 | "subtle", 943 | ] 944 | 945 | [[package]] 946 | name = "fixed-hash" 947 | version = "0.2.5" 948 | source = "registry+https://github.com/rust-lang/crates.io-index" 949 | checksum = "7afe6ce860afb14422711595a7b26ada9ed7de2f43c0b2ab79d09ee196287273" 950 | dependencies = [ 951 | "heapsize", 952 | "rand 0.4.6", 953 | "rustc-hex", 954 | ] 955 | 956 | [[package]] 957 | name = "fixed-hash" 958 | version = "0.7.0" 959 | source = "registry+https://github.com/rust-lang/crates.io-index" 960 | checksum = "cfcf0ed7fe52a17a03854ec54a9f76d6d84508d1c0e66bc1793301c73fc8493c" 961 | dependencies = [ 962 | "byteorder", 963 | "rand 0.8.5", 964 | "rustc-hex", 965 | "static_assertions", 966 | ] 967 | 968 | [[package]] 969 | name = "flate2" 970 | version = "1.0.25" 971 | source = "registry+https://github.com/rust-lang/crates.io-index" 972 | checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841" 973 | dependencies = [ 974 | "crc32fast", 975 | "miniz_oxide", 976 | ] 977 | 978 | [[package]] 979 | name = "fnv" 980 | version = "1.0.7" 981 | source = "registry+https://github.com/rust-lang/crates.io-index" 982 | checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 983 | 984 | [[package]] 985 | name = "form_urlencoded" 986 | version = "1.1.0" 987 | source = "registry+https://github.com/rust-lang/crates.io-index" 988 | checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" 989 | dependencies = [ 990 | "percent-encoding", 991 | ] 992 | 993 | [[package]] 994 | name = "fuchsia-cprng" 995 | version = "0.1.1" 996 | source = "registry+https://github.com/rust-lang/crates.io-index" 997 | checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" 998 | 999 | [[package]] 1000 | name = "fuchsia-zircon" 1001 | version = "0.3.3" 1002 | source = "registry+https://github.com/rust-lang/crates.io-index" 1003 | checksum = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" 1004 | dependencies = [ 1005 | "bitflags", 1006 | "fuchsia-zircon-sys", 1007 | ] 1008 | 1009 | [[package]] 1010 | name = "fuchsia-zircon-sys" 1011 | version = "0.3.3" 1012 | source = "registry+https://github.com/rust-lang/crates.io-index" 1013 | checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" 1014 | 1015 | [[package]] 1016 | name = "funty" 1017 | version = "1.1.0" 1018 | source = "registry+https://github.com/rust-lang/crates.io-index" 1019 | checksum = "fed34cd105917e91daa4da6b3728c47b068749d6a62c59811f06ed2ac71d9da7" 1020 | 1021 | [[package]] 1022 | name = "futures" 1023 | version = "0.1.31" 1024 | source = "registry+https://github.com/rust-lang/crates.io-index" 1025 | checksum = "3a471a38ef8ed83cd6e40aa59c1ffe17db6855c18e3604d9c4ed8c08ebc28678" 1026 | 1027 | [[package]] 1028 | name = "futures" 1029 | version = "0.3.25" 1030 | source = "registry+https://github.com/rust-lang/crates.io-index" 1031 | checksum = "38390104763dc37a5145a53c29c63c1290b5d316d6086ec32c293f6736051bb0" 1032 | dependencies = [ 1033 | "futures-channel", 1034 | "futures-core", 1035 | "futures-executor", 1036 | "futures-io", 1037 | "futures-sink", 1038 | "futures-task", 1039 | "futures-util", 1040 | ] 1041 | 1042 | [[package]] 1043 | name = "futures-channel" 1044 | version = "0.3.25" 1045 | source = "registry+https://github.com/rust-lang/crates.io-index" 1046 | checksum = "52ba265a92256105f45b719605a571ffe2d1f0fea3807304b522c1d778f79eed" 1047 | dependencies = [ 1048 | "futures-core", 1049 | "futures-sink", 1050 | ] 1051 | 1052 | [[package]] 1053 | name = "futures-core" 1054 | version = "0.3.25" 1055 | source = "registry+https://github.com/rust-lang/crates.io-index" 1056 | checksum = "04909a7a7e4633ae6c4a9ab280aeb86da1236243a77b694a49eacd659a4bd3ac" 1057 | 1058 | [[package]] 1059 | name = "futures-executor" 1060 | version = "0.3.25" 1061 | source = "registry+https://github.com/rust-lang/crates.io-index" 1062 | checksum = "7acc85df6714c176ab5edf386123fafe217be88c0840ec11f199441134a074e2" 1063 | dependencies = [ 1064 | "futures-core", 1065 | "futures-task", 1066 | "futures-util", 1067 | ] 1068 | 1069 | [[package]] 1070 | name = "futures-io" 1071 | version = "0.3.25" 1072 | source = "registry+https://github.com/rust-lang/crates.io-index" 1073 | checksum = "00f5fb52a06bdcadeb54e8d3671f8888a39697dcb0b81b23b55174030427f4eb" 1074 | 1075 | [[package]] 1076 | name = "futures-macro" 1077 | version = "0.3.25" 1078 | source = "registry+https://github.com/rust-lang/crates.io-index" 1079 | checksum = "bdfb8ce053d86b91919aad980c220b1fb8401a9394410e1c289ed7e66b61835d" 1080 | dependencies = [ 1081 | "proc-macro2", 1082 | "quote", 1083 | "syn", 1084 | ] 1085 | 1086 | [[package]] 1087 | name = "futures-sink" 1088 | version = "0.3.25" 1089 | source = "registry+https://github.com/rust-lang/crates.io-index" 1090 | checksum = "39c15cf1a4aa79df40f1bb462fb39676d0ad9e366c2a33b590d7c66f4f81fcf9" 1091 | 1092 | [[package]] 1093 | name = "futures-task" 1094 | version = "0.3.25" 1095 | source = "registry+https://github.com/rust-lang/crates.io-index" 1096 | checksum = "2ffb393ac5d9a6eaa9d3fdf37ae2776656b706e200c8e16b1bdb227f5198e6ea" 1097 | 1098 | [[package]] 1099 | name = "futures-util" 1100 | version = "0.3.25" 1101 | source = "registry+https://github.com/rust-lang/crates.io-index" 1102 | checksum = "197676987abd2f9cadff84926f410af1c183608d36641465df73ae8211dc65d6" 1103 | dependencies = [ 1104 | "futures-channel", 1105 | "futures-core", 1106 | "futures-io", 1107 | "futures-macro", 1108 | "futures-sink", 1109 | "futures-task", 1110 | "memchr", 1111 | "pin-project-lite", 1112 | "pin-utils", 1113 | "slab", 1114 | ] 1115 | 1116 | [[package]] 1117 | name = "generic-array" 1118 | version = "0.14.6" 1119 | source = "registry+https://github.com/rust-lang/crates.io-index" 1120 | checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" 1121 | dependencies = [ 1122 | "typenum", 1123 | "version_check", 1124 | ] 1125 | 1126 | [[package]] 1127 | name = "getrandom" 1128 | version = "0.1.16" 1129 | source = "registry+https://github.com/rust-lang/crates.io-index" 1130 | checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" 1131 | dependencies = [ 1132 | "cfg-if 1.0.0", 1133 | "libc", 1134 | "wasi 0.9.0+wasi-snapshot-preview1", 1135 | ] 1136 | 1137 | [[package]] 1138 | name = "getrandom" 1139 | version = "0.2.8" 1140 | source = "registry+https://github.com/rust-lang/crates.io-index" 1141 | checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" 1142 | dependencies = [ 1143 | "cfg-if 1.0.0", 1144 | "libc", 1145 | "wasi 0.11.0+wasi-snapshot-preview1", 1146 | ] 1147 | 1148 | [[package]] 1149 | name = "ghash" 1150 | version = "0.4.4" 1151 | source = "registry+https://github.com/rust-lang/crates.io-index" 1152 | checksum = "1583cc1656d7839fd3732b80cf4f38850336cdb9b8ded1cd399ca62958de3c99" 1153 | dependencies = [ 1154 | "opaque-debug", 1155 | "polyval", 1156 | ] 1157 | 1158 | [[package]] 1159 | name = "glob" 1160 | version = "0.3.0" 1161 | source = "registry+https://github.com/rust-lang/crates.io-index" 1162 | checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" 1163 | 1164 | [[package]] 1165 | name = "group" 1166 | version = "0.12.1" 1167 | source = "registry+https://github.com/rust-lang/crates.io-index" 1168 | checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7" 1169 | dependencies = [ 1170 | "ff", 1171 | "rand_core 0.6.4", 1172 | "subtle", 1173 | ] 1174 | 1175 | [[package]] 1176 | name = "handlebars" 1177 | version = "0.29.1" 1178 | source = "registry+https://github.com/rust-lang/crates.io-index" 1179 | checksum = "fb04af2006ea09d985fef82b81e0eb25337e51b691c76403332378a53d521edc" 1180 | dependencies = [ 1181 | "lazy_static 0.2.11", 1182 | "log 0.3.9", 1183 | "pest", 1184 | "quick-error", 1185 | "regex 0.2.11", 1186 | "serde", 1187 | "serde_json", 1188 | ] 1189 | 1190 | [[package]] 1191 | name = "hashbrown" 1192 | version = "0.3.1" 1193 | source = "registry+https://github.com/rust-lang/crates.io-index" 1194 | checksum = "29fba9abe4742d586dfd0c06ae4f7e73a1c2d86b856933509b269d82cdf06e18" 1195 | 1196 | [[package]] 1197 | name = "hashbrown" 1198 | version = "0.11.2" 1199 | source = "registry+https://github.com/rust-lang/crates.io-index" 1200 | checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" 1201 | dependencies = [ 1202 | "ahash", 1203 | ] 1204 | 1205 | [[package]] 1206 | name = "hashbrown" 1207 | version = "0.12.3" 1208 | source = "registry+https://github.com/rust-lang/crates.io-index" 1209 | checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" 1210 | dependencies = [ 1211 | "ahash", 1212 | ] 1213 | 1214 | [[package]] 1215 | name = "hashlink" 1216 | version = "0.7.0" 1217 | source = "registry+https://github.com/rust-lang/crates.io-index" 1218 | checksum = "7249a3129cbc1ffccd74857f81464a323a152173cdb134e0fd81bc803b29facf" 1219 | dependencies = [ 1220 | "hashbrown 0.11.2", 1221 | ] 1222 | 1223 | [[package]] 1224 | name = "heapsize" 1225 | version = "0.4.2" 1226 | source = "registry+https://github.com/rust-lang/crates.io-index" 1227 | checksum = "1679e6ea370dee694f91f1dc469bf94cf8f52051d147aec3e1f9497c6fc22461" 1228 | dependencies = [ 1229 | "winapi 0.3.9", 1230 | ] 1231 | 1232 | [[package]] 1233 | name = "heck" 1234 | version = "0.3.3" 1235 | source = "registry+https://github.com/rust-lang/crates.io-index" 1236 | checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" 1237 | dependencies = [ 1238 | "unicode-segmentation", 1239 | ] 1240 | 1241 | [[package]] 1242 | name = "hermit-abi" 1243 | version = "0.1.19" 1244 | source = "registry+https://github.com/rust-lang/crates.io-index" 1245 | checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" 1246 | dependencies = [ 1247 | "libc", 1248 | ] 1249 | 1250 | [[package]] 1251 | name = "hermit-abi" 1252 | version = "0.2.6" 1253 | source = "registry+https://github.com/rust-lang/crates.io-index" 1254 | checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" 1255 | dependencies = [ 1256 | "libc", 1257 | ] 1258 | 1259 | [[package]] 1260 | name = "hex" 1261 | version = "0.4.3" 1262 | source = "registry+https://github.com/rust-lang/crates.io-index" 1263 | checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" 1264 | 1265 | [[package]] 1266 | name = "hkdf" 1267 | version = "0.12.3" 1268 | source = "registry+https://github.com/rust-lang/crates.io-index" 1269 | checksum = "791a029f6b9fc27657f6f188ec6e5e43f6911f6f878e0dc5501396e09809d437" 1270 | dependencies = [ 1271 | "hmac", 1272 | ] 1273 | 1274 | [[package]] 1275 | name = "hmac" 1276 | version = "0.12.1" 1277 | source = "registry+https://github.com/rust-lang/crates.io-index" 1278 | checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" 1279 | dependencies = [ 1280 | "digest 0.10.6", 1281 | ] 1282 | 1283 | [[package]] 1284 | name = "hmac-sha1" 1285 | version = "0.1.3" 1286 | source = "registry+https://github.com/rust-lang/crates.io-index" 1287 | checksum = "e1333fad8d94b82cab989da428b0b36a3435db3870d85e971a1d6dc0a8576722" 1288 | dependencies = [ 1289 | "sha1", 1290 | ] 1291 | 1292 | [[package]] 1293 | name = "httparse" 1294 | version = "1.8.0" 1295 | source = "registry+https://github.com/rust-lang/crates.io-index" 1296 | checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" 1297 | 1298 | [[package]] 1299 | name = "ident_case" 1300 | version = "1.0.1" 1301 | source = "registry+https://github.com/rust-lang/crates.io-index" 1302 | checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" 1303 | 1304 | [[package]] 1305 | name = "idna" 1306 | version = "0.2.3" 1307 | source = "registry+https://github.com/rust-lang/crates.io-index" 1308 | checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" 1309 | dependencies = [ 1310 | "matches", 1311 | "unicode-bidi", 1312 | "unicode-normalization", 1313 | ] 1314 | 1315 | [[package]] 1316 | name = "idna" 1317 | version = "0.3.0" 1318 | source = "registry+https://github.com/rust-lang/crates.io-index" 1319 | checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" 1320 | dependencies = [ 1321 | "unicode-bidi", 1322 | "unicode-normalization", 1323 | ] 1324 | 1325 | [[package]] 1326 | name = "if_chain" 1327 | version = "1.0.2" 1328 | source = "registry+https://github.com/rust-lang/crates.io-index" 1329 | checksum = "cb56e1aa765b4b4f3aadfab769793b7087bb03a4ea4920644a6d238e2df5b9ed" 1330 | 1331 | [[package]] 1332 | name = "impl-codec" 1333 | version = "0.5.1" 1334 | source = "registry+https://github.com/rust-lang/crates.io-index" 1335 | checksum = "161ebdfec3c8e3b52bf61c4f3550a1eea4f9579d10dc1b936f3171ebdcd6c443" 1336 | dependencies = [ 1337 | "parity-scale-codec", 1338 | ] 1339 | 1340 | [[package]] 1341 | name = "impl-rlp" 1342 | version = "0.3.0" 1343 | source = "registry+https://github.com/rust-lang/crates.io-index" 1344 | checksum = "f28220f89297a075ddc7245cd538076ee98b01f2a9c23a53a4f1105d5a322808" 1345 | dependencies = [ 1346 | "rlp 0.5.2", 1347 | ] 1348 | 1349 | [[package]] 1350 | name = "impl-serde" 1351 | version = "0.3.2" 1352 | source = "registry+https://github.com/rust-lang/crates.io-index" 1353 | checksum = "4551f042f3438e64dbd6226b20527fc84a6e1fe65688b58746a2f53623f25f5c" 1354 | dependencies = [ 1355 | "serde", 1356 | ] 1357 | 1358 | [[package]] 1359 | name = "impl-trait-for-tuples" 1360 | version = "0.2.2" 1361 | source = "registry+https://github.com/rust-lang/crates.io-index" 1362 | checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" 1363 | dependencies = [ 1364 | "proc-macro2", 1365 | "quote", 1366 | "syn", 1367 | ] 1368 | 1369 | [[package]] 1370 | name = "instant" 1371 | version = "0.1.12" 1372 | source = "registry+https://github.com/rust-lang/crates.io-index" 1373 | checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" 1374 | dependencies = [ 1375 | "cfg-if 1.0.0", 1376 | ] 1377 | 1378 | [[package]] 1379 | name = "interfaces" 1380 | version = "0.0.7" 1381 | source = "registry+https://github.com/rust-lang/crates.io-index" 1382 | checksum = "82971b4f9e8bd1c3132e8d480e5b4c49431ade79e0339aad1abb917affe1e877" 1383 | dependencies = [ 1384 | "bitflags", 1385 | "cc", 1386 | "handlebars", 1387 | "lazy_static 1.4.0", 1388 | "libc", 1389 | "nix 0.19.1", 1390 | "serde", 1391 | "serde_derive", 1392 | ] 1393 | 1394 | [[package]] 1395 | name = "iovec" 1396 | version = "0.1.4" 1397 | source = "registry+https://github.com/rust-lang/crates.io-index" 1398 | checksum = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e" 1399 | dependencies = [ 1400 | "libc", 1401 | ] 1402 | 1403 | [[package]] 1404 | name = "ipconfig" 1405 | version = "0.2.2" 1406 | source = "registry+https://github.com/rust-lang/crates.io-index" 1407 | checksum = "f7e2f18aece9709094573a9f24f483c4f65caa4298e2f7ae1b71cc65d853fad7" 1408 | dependencies = [ 1409 | "socket2 0.3.19", 1410 | "widestring", 1411 | "winapi 0.3.9", 1412 | "winreg", 1413 | ] 1414 | 1415 | [[package]] 1416 | name = "itoa" 1417 | version = "1.0.5" 1418 | source = "registry+https://github.com/rust-lang/crates.io-index" 1419 | checksum = "fad582f4b9e86b6caa621cabeb0963332d92eea04729ab12892c2533951e6440" 1420 | 1421 | [[package]] 1422 | name = "jobserver" 1423 | version = "0.1.25" 1424 | source = "registry+https://github.com/rust-lang/crates.io-index" 1425 | checksum = "068b1ee6743e4d11fb9c6a1e6064b3693a1b600e7f5f5988047d98b3dc9fb90b" 1426 | dependencies = [ 1427 | "libc", 1428 | ] 1429 | 1430 | [[package]] 1431 | name = "js-sys" 1432 | version = "0.3.60" 1433 | source = "registry+https://github.com/rust-lang/crates.io-index" 1434 | checksum = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47" 1435 | dependencies = [ 1436 | "wasm-bindgen", 1437 | ] 1438 | 1439 | [[package]] 1440 | name = "k256" 1441 | version = "0.11.6" 1442 | source = "registry+https://github.com/rust-lang/crates.io-index" 1443 | checksum = "72c1e0b51e7ec0a97369623508396067a486bd0cbed95a2659a4b863d28cfc8b" 1444 | dependencies = [ 1445 | "cfg-if 1.0.0", 1446 | "ecdsa", 1447 | "elliptic-curve", 1448 | "sha2 0.10.6", 1449 | ] 1450 | 1451 | [[package]] 1452 | name = "keccak" 1453 | version = "0.1.3" 1454 | source = "registry+https://github.com/rust-lang/crates.io-index" 1455 | checksum = "3afef3b6eff9ce9d8ff9b3601125eec7f0c8cbac7abd14f355d053fa56c98768" 1456 | dependencies = [ 1457 | "cpufeatures 0.2.5", 1458 | ] 1459 | 1460 | [[package]] 1461 | name = "keccak-hash" 1462 | version = "0.8.0" 1463 | source = "registry+https://github.com/rust-lang/crates.io-index" 1464 | checksum = "ce2bd4c29270e724d3eaadf7bdc8700af4221fc0ed771b855eadcd1b98d52851" 1465 | dependencies = [ 1466 | "primitive-types", 1467 | "tiny-keccak 2.0.2", 1468 | ] 1469 | 1470 | [[package]] 1471 | name = "kernel32-sys" 1472 | version = "0.2.2" 1473 | source = "registry+https://github.com/rust-lang/crates.io-index" 1474 | checksum = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" 1475 | dependencies = [ 1476 | "winapi 0.2.8", 1477 | "winapi-build", 1478 | ] 1479 | 1480 | [[package]] 1481 | name = "lazy_static" 1482 | version = "0.2.11" 1483 | source = "registry+https://github.com/rust-lang/crates.io-index" 1484 | checksum = "76f033c7ad61445c5b347c7382dd1237847eb1bce590fe50365dcb33d546be73" 1485 | 1486 | [[package]] 1487 | name = "lazy_static" 1488 | version = "1.4.0" 1489 | source = "registry+https://github.com/rust-lang/crates.io-index" 1490 | checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" 1491 | 1492 | [[package]] 1493 | name = "lazycell" 1494 | version = "1.3.0" 1495 | source = "registry+https://github.com/rust-lang/crates.io-index" 1496 | checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" 1497 | 1498 | [[package]] 1499 | name = "leb128" 1500 | version = "0.2.5" 1501 | source = "registry+https://github.com/rust-lang/crates.io-index" 1502 | checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67" 1503 | 1504 | [[package]] 1505 | name = "libc" 1506 | version = "0.2.139" 1507 | source = "registry+https://github.com/rust-lang/crates.io-index" 1508 | checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79" 1509 | 1510 | [[package]] 1511 | name = "libloading" 1512 | version = "0.7.4" 1513 | source = "registry+https://github.com/rust-lang/crates.io-index" 1514 | checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" 1515 | dependencies = [ 1516 | "cfg-if 1.0.0", 1517 | "winapi 0.3.9", 1518 | ] 1519 | 1520 | [[package]] 1521 | name = "librocksdb-sys" 1522 | version = "0.6.1+6.28.2" 1523 | source = "registry+https://github.com/rust-lang/crates.io-index" 1524 | checksum = "81bc587013734dadb7cf23468e531aa120788b87243648be42e2d3a072186291" 1525 | dependencies = [ 1526 | "bindgen", 1527 | "bzip2-sys", 1528 | "cc", 1529 | "glob", 1530 | "libc", 1531 | "libz-sys", 1532 | "zstd-sys", 1533 | ] 1534 | 1535 | [[package]] 1536 | name = "libsqlite3-sys" 1537 | version = "0.23.2" 1538 | source = "registry+https://github.com/rust-lang/crates.io-index" 1539 | checksum = "d2cafc7c74096c336d9d27145f7ebd4f4b6f95ba16aa5a282387267e6925cb58" 1540 | dependencies = [ 1541 | "cc", 1542 | "pkg-config", 1543 | "vcpkg", 1544 | ] 1545 | 1546 | [[package]] 1547 | name = "libz-sys" 1548 | version = "1.1.8" 1549 | source = "registry+https://github.com/rust-lang/crates.io-index" 1550 | checksum = "9702761c3935f8cc2f101793272e202c72b99da8f4224a19ddcf1279a6450bbf" 1551 | dependencies = [ 1552 | "cc", 1553 | "pkg-config", 1554 | "vcpkg", 1555 | ] 1556 | 1557 | [[package]] 1558 | name = "lock_api" 1559 | version = "0.2.0" 1560 | source = "registry+https://github.com/rust-lang/crates.io-index" 1561 | checksum = "ed946d4529956a20f2d63ebe1b69996d5a2137c91913fe3ebbeff957f5bca7ff" 1562 | dependencies = [ 1563 | "scopeguard", 1564 | ] 1565 | 1566 | [[package]] 1567 | name = "lock_api" 1568 | version = "0.3.4" 1569 | source = "registry+https://github.com/rust-lang/crates.io-index" 1570 | checksum = "c4da24a77a3d8a6d4862d95f72e6fdb9c09a643ecdb402d754004a557f2bec75" 1571 | dependencies = [ 1572 | "scopeguard", 1573 | ] 1574 | 1575 | [[package]] 1576 | name = "lock_api" 1577 | version = "0.4.9" 1578 | source = "registry+https://github.com/rust-lang/crates.io-index" 1579 | checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" 1580 | dependencies = [ 1581 | "autocfg 1.1.0", 1582 | "scopeguard", 1583 | ] 1584 | 1585 | [[package]] 1586 | name = "log" 1587 | version = "0.3.9" 1588 | source = "registry+https://github.com/rust-lang/crates.io-index" 1589 | checksum = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b" 1590 | dependencies = [ 1591 | "log 0.4.17", 1592 | ] 1593 | 1594 | [[package]] 1595 | name = "log" 1596 | version = "0.4.17" 1597 | source = "registry+https://github.com/rust-lang/crates.io-index" 1598 | checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" 1599 | dependencies = [ 1600 | "cfg-if 1.0.0", 1601 | ] 1602 | 1603 | [[package]] 1604 | name = "lru" 1605 | version = "0.7.8" 1606 | source = "registry+https://github.com/rust-lang/crates.io-index" 1607 | checksum = "e999beba7b6e8345721bd280141ed958096a2e4abdf74f67ff4ce49b4b54e47a" 1608 | dependencies = [ 1609 | "hashbrown 0.12.3", 1610 | ] 1611 | 1612 | [[package]] 1613 | name = "matchers" 1614 | version = "0.1.0" 1615 | source = "registry+https://github.com/rust-lang/crates.io-index" 1616 | checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" 1617 | dependencies = [ 1618 | "regex-automata", 1619 | ] 1620 | 1621 | [[package]] 1622 | name = "matches" 1623 | version = "0.1.9" 1624 | source = "registry+https://github.com/rust-lang/crates.io-index" 1625 | checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" 1626 | 1627 | [[package]] 1628 | name = "maybe-uninit" 1629 | version = "2.0.0" 1630 | source = "registry+https://github.com/rust-lang/crates.io-index" 1631 | checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" 1632 | 1633 | [[package]] 1634 | name = "md5" 1635 | version = "0.7.0" 1636 | source = "registry+https://github.com/rust-lang/crates.io-index" 1637 | checksum = "490cc448043f947bae3cbee9c203358d62dbee0db12107a74be5c30ccfd09771" 1638 | 1639 | [[package]] 1640 | name = "memchr" 1641 | version = "2.5.0" 1642 | source = "registry+https://github.com/rust-lang/crates.io-index" 1643 | checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" 1644 | 1645 | [[package]] 1646 | name = "minimal-lexical" 1647 | version = "0.2.1" 1648 | source = "registry+https://github.com/rust-lang/crates.io-index" 1649 | checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" 1650 | 1651 | [[package]] 1652 | name = "miniz_oxide" 1653 | version = "0.6.2" 1654 | source = "registry+https://github.com/rust-lang/crates.io-index" 1655 | checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa" 1656 | dependencies = [ 1657 | "adler", 1658 | ] 1659 | 1660 | [[package]] 1661 | name = "mio" 1662 | version = "0.6.23" 1663 | source = "registry+https://github.com/rust-lang/crates.io-index" 1664 | checksum = "4afd66f5b91bf2a3bc13fad0e21caedac168ca4c707504e75585648ae80e4cc4" 1665 | dependencies = [ 1666 | "cfg-if 0.1.10", 1667 | "fuchsia-zircon", 1668 | "fuchsia-zircon-sys", 1669 | "iovec", 1670 | "kernel32-sys", 1671 | "libc", 1672 | "log 0.4.17", 1673 | "miow", 1674 | "net2", 1675 | "slab", 1676 | "winapi 0.2.8", 1677 | ] 1678 | 1679 | [[package]] 1680 | name = "mio" 1681 | version = "0.8.5" 1682 | source = "registry+https://github.com/rust-lang/crates.io-index" 1683 | checksum = "e5d732bc30207a6423068df043e3d02e0735b155ad7ce1a6f76fe2baa5b158de" 1684 | dependencies = [ 1685 | "libc", 1686 | "log 0.4.17", 1687 | "wasi 0.11.0+wasi-snapshot-preview1", 1688 | "windows-sys", 1689 | ] 1690 | 1691 | [[package]] 1692 | name = "miow" 1693 | version = "0.2.2" 1694 | source = "registry+https://github.com/rust-lang/crates.io-index" 1695 | checksum = "ebd808424166322d4a38da87083bfddd3ac4c131334ed55856112eb06d46944d" 1696 | dependencies = [ 1697 | "kernel32-sys", 1698 | "net2", 1699 | "winapi 0.2.8", 1700 | "ws2_32-sys", 1701 | ] 1702 | 1703 | [[package]] 1704 | name = "more-asserts" 1705 | version = "0.2.2" 1706 | source = "registry+https://github.com/rust-lang/crates.io-index" 1707 | checksum = "7843ec2de400bcbc6a6328c958dc38e5359da6e93e72e37bc5246bf1ae776389" 1708 | 1709 | [[package]] 1710 | name = "net2" 1711 | version = "0.2.38" 1712 | source = "registry+https://github.com/rust-lang/crates.io-index" 1713 | checksum = "74d0df99cfcd2530b2e694f6e17e7f37b8e26bb23983ac530c0c97408837c631" 1714 | dependencies = [ 1715 | "cfg-if 0.1.10", 1716 | "libc", 1717 | "winapi 0.3.9", 1718 | ] 1719 | 1720 | [[package]] 1721 | name = "nix" 1722 | version = "0.19.1" 1723 | source = "registry+https://github.com/rust-lang/crates.io-index" 1724 | checksum = "b2ccba0cfe4fdf15982d1674c69b1fd80bad427d293849982668dfe454bd61f2" 1725 | dependencies = [ 1726 | "bitflags", 1727 | "cc", 1728 | "cfg-if 1.0.0", 1729 | "libc", 1730 | ] 1731 | 1732 | [[package]] 1733 | name = "nix" 1734 | version = "0.26.1" 1735 | source = "registry+https://github.com/rust-lang/crates.io-index" 1736 | checksum = "46a58d1d356c6597d08cde02c2f09d785b09e28711837b1ed667dc652c08a694" 1737 | dependencies = [ 1738 | "bitflags", 1739 | "cfg-if 1.0.0", 1740 | "libc", 1741 | "static_assertions", 1742 | ] 1743 | 1744 | [[package]] 1745 | name = "nom" 1746 | version = "7.1.1" 1747 | source = "registry+https://github.com/rust-lang/crates.io-index" 1748 | checksum = "a8903e5a29a317527874d0402f867152a3d21c908bb0b933e416c65e301d4c36" 1749 | dependencies = [ 1750 | "memchr", 1751 | "minimal-lexical", 1752 | ] 1753 | 1754 | [[package]] 1755 | name = "nu-ansi-term" 1756 | version = "0.46.0" 1757 | source = "registry+https://github.com/rust-lang/crates.io-index" 1758 | checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" 1759 | dependencies = [ 1760 | "overload", 1761 | "winapi 0.3.9", 1762 | ] 1763 | 1764 | [[package]] 1765 | name = "num" 1766 | version = "0.4.0" 1767 | source = "registry+https://github.com/rust-lang/crates.io-index" 1768 | checksum = "43db66d1170d347f9a065114077f7dccb00c1b9478c89384490a3425279a4606" 1769 | dependencies = [ 1770 | "num-bigint", 1771 | "num-complex", 1772 | "num-integer", 1773 | "num-iter", 1774 | "num-rational", 1775 | "num-traits", 1776 | ] 1777 | 1778 | [[package]] 1779 | name = "num-bigint" 1780 | version = "0.4.3" 1781 | source = "registry+https://github.com/rust-lang/crates.io-index" 1782 | checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f" 1783 | dependencies = [ 1784 | "autocfg 1.1.0", 1785 | "num-integer", 1786 | "num-traits", 1787 | ] 1788 | 1789 | [[package]] 1790 | name = "num-complex" 1791 | version = "0.4.2" 1792 | source = "registry+https://github.com/rust-lang/crates.io-index" 1793 | checksum = "7ae39348c8bc5fbd7f40c727a9925f03517afd2ab27d46702108b6a7e5414c19" 1794 | dependencies = [ 1795 | "num-traits", 1796 | ] 1797 | 1798 | [[package]] 1799 | name = "num-integer" 1800 | version = "0.1.45" 1801 | source = "registry+https://github.com/rust-lang/crates.io-index" 1802 | checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" 1803 | dependencies = [ 1804 | "autocfg 1.1.0", 1805 | "num-traits", 1806 | ] 1807 | 1808 | [[package]] 1809 | name = "num-iter" 1810 | version = "0.1.43" 1811 | source = "registry+https://github.com/rust-lang/crates.io-index" 1812 | checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252" 1813 | dependencies = [ 1814 | "autocfg 1.1.0", 1815 | "num-integer", 1816 | "num-traits", 1817 | ] 1818 | 1819 | [[package]] 1820 | name = "num-rational" 1821 | version = "0.4.1" 1822 | source = "registry+https://github.com/rust-lang/crates.io-index" 1823 | checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" 1824 | dependencies = [ 1825 | "autocfg 1.1.0", 1826 | "num-bigint", 1827 | "num-integer", 1828 | "num-traits", 1829 | ] 1830 | 1831 | [[package]] 1832 | name = "num-traits" 1833 | version = "0.2.15" 1834 | source = "registry+https://github.com/rust-lang/crates.io-index" 1835 | checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" 1836 | dependencies = [ 1837 | "autocfg 1.1.0", 1838 | ] 1839 | 1840 | [[package]] 1841 | name = "num_cpus" 1842 | version = "1.15.0" 1843 | source = "registry+https://github.com/rust-lang/crates.io-index" 1844 | checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" 1845 | dependencies = [ 1846 | "hermit-abi 0.2.6", 1847 | "libc", 1848 | ] 1849 | 1850 | [[package]] 1851 | name = "once_cell" 1852 | version = "1.16.0" 1853 | source = "registry+https://github.com/rust-lang/crates.io-index" 1854 | checksum = "86f0b0d4bf799edbc74508c1e8bf170ff5f41238e5f8225603ca7caaae2b7860" 1855 | 1856 | [[package]] 1857 | name = "opaque-debug" 1858 | version = "0.3.0" 1859 | source = "registry+https://github.com/rust-lang/crates.io-index" 1860 | checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" 1861 | 1862 | [[package]] 1863 | name = "overload" 1864 | version = "0.1.1" 1865 | source = "registry+https://github.com/rust-lang/crates.io-index" 1866 | checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" 1867 | 1868 | [[package]] 1869 | name = "parity-scale-codec" 1870 | version = "2.3.1" 1871 | source = "registry+https://github.com/rust-lang/crates.io-index" 1872 | checksum = "373b1a4c1338d9cd3d1fa53b3a11bdab5ab6bd80a20f7f7becd76953ae2be909" 1873 | dependencies = [ 1874 | "arrayvec", 1875 | "bitvec", 1876 | "byte-slice-cast", 1877 | "impl-trait-for-tuples", 1878 | "parity-scale-codec-derive", 1879 | "serde", 1880 | ] 1881 | 1882 | [[package]] 1883 | name = "parity-scale-codec-derive" 1884 | version = "2.3.1" 1885 | source = "registry+https://github.com/rust-lang/crates.io-index" 1886 | checksum = "1557010476e0595c9b568d16dcfb81b93cdeb157612726f5170d31aa707bed27" 1887 | dependencies = [ 1888 | "proc-macro-crate", 1889 | "proc-macro2", 1890 | "quote", 1891 | "syn", 1892 | ] 1893 | 1894 | [[package]] 1895 | name = "parking_lot" 1896 | version = "0.8.0" 1897 | source = "registry+https://github.com/rust-lang/crates.io-index" 1898 | checksum = "fa7767817701cce701d5585b9c4db3cdd02086398322c1d7e8bf5094a96a2ce7" 1899 | dependencies = [ 1900 | "lock_api 0.2.0", 1901 | "parking_lot_core 0.5.0", 1902 | "rustc_version", 1903 | ] 1904 | 1905 | [[package]] 1906 | name = "parking_lot" 1907 | version = "0.9.0" 1908 | source = "registry+https://github.com/rust-lang/crates.io-index" 1909 | checksum = "f842b1982eb6c2fe34036a4fbfb06dd185a3f5c8edfaacdf7d1ea10b07de6252" 1910 | dependencies = [ 1911 | "lock_api 0.3.4", 1912 | "parking_lot_core 0.6.3", 1913 | "rustc_version", 1914 | ] 1915 | 1916 | [[package]] 1917 | name = "parking_lot" 1918 | version = "0.11.2" 1919 | source = "registry+https://github.com/rust-lang/crates.io-index" 1920 | checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" 1921 | dependencies = [ 1922 | "instant", 1923 | "lock_api 0.4.9", 1924 | "parking_lot_core 0.8.6", 1925 | ] 1926 | 1927 | [[package]] 1928 | name = "parking_lot" 1929 | version = "0.12.1" 1930 | source = "registry+https://github.com/rust-lang/crates.io-index" 1931 | checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" 1932 | dependencies = [ 1933 | "lock_api 0.4.9", 1934 | "parking_lot_core 0.9.5", 1935 | ] 1936 | 1937 | [[package]] 1938 | name = "parking_lot_core" 1939 | version = "0.5.0" 1940 | source = "registry+https://github.com/rust-lang/crates.io-index" 1941 | checksum = "cb88cb1cb3790baa6776844f968fea3be44956cf184fa1be5a03341f5491278c" 1942 | dependencies = [ 1943 | "cfg-if 0.1.10", 1944 | "cloudabi", 1945 | "libc", 1946 | "rand 0.6.5", 1947 | "redox_syscall 0.1.57", 1948 | "rustc_version", 1949 | "smallvec 0.6.14", 1950 | "winapi 0.3.9", 1951 | ] 1952 | 1953 | [[package]] 1954 | name = "parking_lot_core" 1955 | version = "0.6.3" 1956 | source = "registry+https://github.com/rust-lang/crates.io-index" 1957 | checksum = "bda66b810a62be75176a80873726630147a5ca780cd33921e0b5709033e66b0a" 1958 | dependencies = [ 1959 | "cfg-if 0.1.10", 1960 | "cloudabi", 1961 | "libc", 1962 | "redox_syscall 0.1.57", 1963 | "rustc_version", 1964 | "smallvec 0.6.14", 1965 | "winapi 0.3.9", 1966 | ] 1967 | 1968 | [[package]] 1969 | name = "parking_lot_core" 1970 | version = "0.8.6" 1971 | source = "registry+https://github.com/rust-lang/crates.io-index" 1972 | checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" 1973 | dependencies = [ 1974 | "cfg-if 1.0.0", 1975 | "instant", 1976 | "libc", 1977 | "redox_syscall 0.2.16", 1978 | "smallvec 1.10.0", 1979 | "winapi 0.3.9", 1980 | ] 1981 | 1982 | [[package]] 1983 | name = "parking_lot_core" 1984 | version = "0.9.5" 1985 | source = "registry+https://github.com/rust-lang/crates.io-index" 1986 | checksum = "7ff9f3fef3968a3ec5945535ed654cb38ff72d7495a25619e2247fb15a2ed9ba" 1987 | dependencies = [ 1988 | "cfg-if 1.0.0", 1989 | "libc", 1990 | "redox_syscall 0.2.16", 1991 | "smallvec 1.10.0", 1992 | "windows-sys", 1993 | ] 1994 | 1995 | [[package]] 1996 | name = "peeking_take_while" 1997 | version = "0.1.2" 1998 | source = "registry+https://github.com/rust-lang/crates.io-index" 1999 | checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" 2000 | 2001 | [[package]] 2002 | name = "percent-encoding" 2003 | version = "2.2.0" 2004 | source = "registry+https://github.com/rust-lang/crates.io-index" 2005 | checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" 2006 | 2007 | [[package]] 2008 | name = "pest" 2009 | version = "0.3.3" 2010 | source = "registry+https://github.com/rust-lang/crates.io-index" 2011 | checksum = "0a6dda33d67c26f0aac90d324ab2eb7239c819fc7b2552fe9faa4fe88441edc8" 2012 | 2013 | [[package]] 2014 | name = "pin-project-lite" 2015 | version = "0.2.9" 2016 | source = "registry+https://github.com/rust-lang/crates.io-index" 2017 | checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" 2018 | 2019 | [[package]] 2020 | name = "pin-utils" 2021 | version = "0.1.0" 2022 | source = "registry+https://github.com/rust-lang/crates.io-index" 2023 | checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 2024 | 2025 | [[package]] 2026 | name = "pkcs8" 2027 | version = "0.9.0" 2028 | source = "registry+https://github.com/rust-lang/crates.io-index" 2029 | checksum = "9eca2c590a5f85da82668fa685c09ce2888b9430e83299debf1f34b65fd4a4ba" 2030 | dependencies = [ 2031 | "der", 2032 | "spki", 2033 | ] 2034 | 2035 | [[package]] 2036 | name = "pkg-config" 2037 | version = "0.3.26" 2038 | source = "registry+https://github.com/rust-lang/crates.io-index" 2039 | checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160" 2040 | 2041 | [[package]] 2042 | name = "polyval" 2043 | version = "0.5.3" 2044 | source = "registry+https://github.com/rust-lang/crates.io-index" 2045 | checksum = "8419d2b623c7c0896ff2d5d96e2cb4ede590fed28fcc34934f4c33c036e620a1" 2046 | dependencies = [ 2047 | "cfg-if 1.0.0", 2048 | "cpufeatures 0.2.5", 2049 | "opaque-debug", 2050 | "universal-hash", 2051 | ] 2052 | 2053 | [[package]] 2054 | name = "ppv-lite86" 2055 | version = "0.2.17" 2056 | source = "registry+https://github.com/rust-lang/crates.io-index" 2057 | checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" 2058 | 2059 | [[package]] 2060 | name = "primitive-types" 2061 | version = "0.10.1" 2062 | source = "registry+https://github.com/rust-lang/crates.io-index" 2063 | checksum = "05e4722c697a58a99d5d06a08c30821d7c082a4632198de1eaa5a6c22ef42373" 2064 | dependencies = [ 2065 | "fixed-hash 0.7.0", 2066 | "impl-codec", 2067 | "impl-rlp", 2068 | "impl-serde", 2069 | "uint 0.9.5", 2070 | ] 2071 | 2072 | [[package]] 2073 | name = "proc-macro-crate" 2074 | version = "1.2.1" 2075 | source = "registry+https://github.com/rust-lang/crates.io-index" 2076 | checksum = "eda0fc3b0fb7c975631757e14d9049da17374063edb6ebbcbc54d880d4fe94e9" 2077 | dependencies = [ 2078 | "once_cell", 2079 | "thiserror", 2080 | "toml", 2081 | ] 2082 | 2083 | [[package]] 2084 | name = "proc-macro-error" 2085 | version = "1.0.4" 2086 | source = "registry+https://github.com/rust-lang/crates.io-index" 2087 | checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" 2088 | dependencies = [ 2089 | "proc-macro-error-attr", 2090 | "proc-macro2", 2091 | "quote", 2092 | "syn", 2093 | "version_check", 2094 | ] 2095 | 2096 | [[package]] 2097 | name = "proc-macro-error-attr" 2098 | version = "1.0.4" 2099 | source = "registry+https://github.com/rust-lang/crates.io-index" 2100 | checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" 2101 | dependencies = [ 2102 | "proc-macro2", 2103 | "quote", 2104 | "version_check", 2105 | ] 2106 | 2107 | [[package]] 2108 | name = "proc-macro2" 2109 | version = "1.0.49" 2110 | source = "registry+https://github.com/rust-lang/crates.io-index" 2111 | checksum = "57a8eca9f9c4ffde41714334dee777596264c7825420f521abc92b5b5deb63a5" 2112 | dependencies = [ 2113 | "unicode-ident", 2114 | ] 2115 | 2116 | [[package]] 2117 | name = "prometheus" 2118 | version = "0.13.3" 2119 | source = "registry+https://github.com/rust-lang/crates.io-index" 2120 | checksum = "449811d15fbdf5ceb5c1144416066429cf82316e2ec8ce0c1f6f8a02e7bbcf8c" 2121 | dependencies = [ 2122 | "cfg-if 1.0.0", 2123 | "fnv", 2124 | "lazy_static 1.4.0", 2125 | "memchr", 2126 | "parking_lot 0.12.1", 2127 | "thiserror", 2128 | ] 2129 | 2130 | [[package]] 2131 | name = "prometheus_exporter" 2132 | version = "0.8.5" 2133 | source = "registry+https://github.com/rust-lang/crates.io-index" 2134 | checksum = "caf17cbebe0bfdf4f279ef84eeefe0d50468b0b7116f078acf41d456e48fe81a" 2135 | dependencies = [ 2136 | "ascii", 2137 | "lazy_static 1.4.0", 2138 | "log 0.4.17", 2139 | "prometheus", 2140 | "thiserror", 2141 | "tiny_http", 2142 | ] 2143 | 2144 | [[package]] 2145 | name = "quick-error" 2146 | version = "1.2.3" 2147 | source = "registry+https://github.com/rust-lang/crates.io-index" 2148 | checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" 2149 | 2150 | [[package]] 2151 | name = "quote" 2152 | version = "1.0.23" 2153 | source = "registry+https://github.com/rust-lang/crates.io-index" 2154 | checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b" 2155 | dependencies = [ 2156 | "proc-macro2", 2157 | ] 2158 | 2159 | [[package]] 2160 | name = "r2d2" 2161 | version = "0.8.10" 2162 | source = "registry+https://github.com/rust-lang/crates.io-index" 2163 | checksum = "51de85fb3fb6524929c8a2eb85e6b6d363de4e8c48f9e2c2eac4944abc181c93" 2164 | dependencies = [ 2165 | "log 0.4.17", 2166 | "parking_lot 0.12.1", 2167 | "scheduled-thread-pool", 2168 | ] 2169 | 2170 | [[package]] 2171 | name = "r2d2_sqlite" 2172 | version = "0.19.0" 2173 | source = "registry+https://github.com/rust-lang/crates.io-index" 2174 | checksum = "54ca3c9468a76fc2ad724c486a59682fc362efeac7b18d1c012958bc19f34800" 2175 | dependencies = [ 2176 | "r2d2", 2177 | "rusqlite", 2178 | ] 2179 | 2180 | [[package]] 2181 | name = "radium" 2182 | version = "0.6.2" 2183 | source = "registry+https://github.com/rust-lang/crates.io-index" 2184 | checksum = "643f8f41a8ebc4c5dc4515c82bb8abd397b527fc20fd681b7c011c2aee5d44fb" 2185 | 2186 | [[package]] 2187 | name = "rand" 2188 | version = "0.4.6" 2189 | source = "registry+https://github.com/rust-lang/crates.io-index" 2190 | checksum = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293" 2191 | dependencies = [ 2192 | "fuchsia-cprng", 2193 | "libc", 2194 | "rand_core 0.3.1", 2195 | "rdrand", 2196 | "winapi 0.3.9", 2197 | ] 2198 | 2199 | [[package]] 2200 | name = "rand" 2201 | version = "0.6.5" 2202 | source = "registry+https://github.com/rust-lang/crates.io-index" 2203 | checksum = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca" 2204 | dependencies = [ 2205 | "autocfg 0.1.8", 2206 | "libc", 2207 | "rand_chacha 0.1.1", 2208 | "rand_core 0.4.2", 2209 | "rand_hc 0.1.0", 2210 | "rand_isaac", 2211 | "rand_jitter", 2212 | "rand_os", 2213 | "rand_pcg", 2214 | "rand_xorshift", 2215 | "winapi 0.3.9", 2216 | ] 2217 | 2218 | [[package]] 2219 | name = "rand" 2220 | version = "0.7.3" 2221 | source = "registry+https://github.com/rust-lang/crates.io-index" 2222 | checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" 2223 | dependencies = [ 2224 | "getrandom 0.1.16", 2225 | "libc", 2226 | "rand_chacha 0.2.2", 2227 | "rand_core 0.5.1", 2228 | "rand_hc 0.2.0", 2229 | ] 2230 | 2231 | [[package]] 2232 | name = "rand" 2233 | version = "0.8.5" 2234 | source = "registry+https://github.com/rust-lang/crates.io-index" 2235 | checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" 2236 | dependencies = [ 2237 | "libc", 2238 | "rand_chacha 0.3.1", 2239 | "rand_core 0.6.4", 2240 | ] 2241 | 2242 | [[package]] 2243 | name = "rand_chacha" 2244 | version = "0.1.1" 2245 | source = "registry+https://github.com/rust-lang/crates.io-index" 2246 | checksum = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef" 2247 | dependencies = [ 2248 | "autocfg 0.1.8", 2249 | "rand_core 0.3.1", 2250 | ] 2251 | 2252 | [[package]] 2253 | name = "rand_chacha" 2254 | version = "0.2.2" 2255 | source = "registry+https://github.com/rust-lang/crates.io-index" 2256 | checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" 2257 | dependencies = [ 2258 | "ppv-lite86", 2259 | "rand_core 0.5.1", 2260 | ] 2261 | 2262 | [[package]] 2263 | name = "rand_chacha" 2264 | version = "0.3.1" 2265 | source = "registry+https://github.com/rust-lang/crates.io-index" 2266 | checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" 2267 | dependencies = [ 2268 | "ppv-lite86", 2269 | "rand_core 0.6.4", 2270 | ] 2271 | 2272 | [[package]] 2273 | name = "rand_core" 2274 | version = "0.3.1" 2275 | source = "registry+https://github.com/rust-lang/crates.io-index" 2276 | checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" 2277 | dependencies = [ 2278 | "rand_core 0.4.2", 2279 | ] 2280 | 2281 | [[package]] 2282 | name = "rand_core" 2283 | version = "0.4.2" 2284 | source = "registry+https://github.com/rust-lang/crates.io-index" 2285 | checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" 2286 | 2287 | [[package]] 2288 | name = "rand_core" 2289 | version = "0.5.1" 2290 | source = "registry+https://github.com/rust-lang/crates.io-index" 2291 | checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" 2292 | dependencies = [ 2293 | "getrandom 0.1.16", 2294 | ] 2295 | 2296 | [[package]] 2297 | name = "rand_core" 2298 | version = "0.6.4" 2299 | source = "registry+https://github.com/rust-lang/crates.io-index" 2300 | checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" 2301 | dependencies = [ 2302 | "getrandom 0.2.8", 2303 | ] 2304 | 2305 | [[package]] 2306 | name = "rand_hc" 2307 | version = "0.1.0" 2308 | source = "registry+https://github.com/rust-lang/crates.io-index" 2309 | checksum = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4" 2310 | dependencies = [ 2311 | "rand_core 0.3.1", 2312 | ] 2313 | 2314 | [[package]] 2315 | name = "rand_hc" 2316 | version = "0.2.0" 2317 | source = "registry+https://github.com/rust-lang/crates.io-index" 2318 | checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" 2319 | dependencies = [ 2320 | "rand_core 0.5.1", 2321 | ] 2322 | 2323 | [[package]] 2324 | name = "rand_isaac" 2325 | version = "0.1.1" 2326 | source = "registry+https://github.com/rust-lang/crates.io-index" 2327 | checksum = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08" 2328 | dependencies = [ 2329 | "rand_core 0.3.1", 2330 | ] 2331 | 2332 | [[package]] 2333 | name = "rand_jitter" 2334 | version = "0.1.4" 2335 | source = "registry+https://github.com/rust-lang/crates.io-index" 2336 | checksum = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b" 2337 | dependencies = [ 2338 | "libc", 2339 | "rand_core 0.4.2", 2340 | "winapi 0.3.9", 2341 | ] 2342 | 2343 | [[package]] 2344 | name = "rand_os" 2345 | version = "0.1.3" 2346 | source = "registry+https://github.com/rust-lang/crates.io-index" 2347 | checksum = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071" 2348 | dependencies = [ 2349 | "cloudabi", 2350 | "fuchsia-cprng", 2351 | "libc", 2352 | "rand_core 0.4.2", 2353 | "rdrand", 2354 | "winapi 0.3.9", 2355 | ] 2356 | 2357 | [[package]] 2358 | name = "rand_pcg" 2359 | version = "0.1.2" 2360 | source = "registry+https://github.com/rust-lang/crates.io-index" 2361 | checksum = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44" 2362 | dependencies = [ 2363 | "autocfg 0.1.8", 2364 | "rand_core 0.4.2", 2365 | ] 2366 | 2367 | [[package]] 2368 | name = "rand_xorshift" 2369 | version = "0.1.1" 2370 | source = "registry+https://github.com/rust-lang/crates.io-index" 2371 | checksum = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c" 2372 | dependencies = [ 2373 | "rand_core 0.3.1", 2374 | ] 2375 | 2376 | [[package]] 2377 | name = "rdrand" 2378 | version = "0.4.0" 2379 | source = "registry+https://github.com/rust-lang/crates.io-index" 2380 | checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" 2381 | dependencies = [ 2382 | "rand_core 0.3.1", 2383 | ] 2384 | 2385 | [[package]] 2386 | name = "redox_syscall" 2387 | version = "0.1.57" 2388 | source = "registry+https://github.com/rust-lang/crates.io-index" 2389 | checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce" 2390 | 2391 | [[package]] 2392 | name = "redox_syscall" 2393 | version = "0.2.16" 2394 | source = "registry+https://github.com/rust-lang/crates.io-index" 2395 | checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" 2396 | dependencies = [ 2397 | "bitflags", 2398 | ] 2399 | 2400 | [[package]] 2401 | name = "redox_users" 2402 | version = "0.4.3" 2403 | source = "registry+https://github.com/rust-lang/crates.io-index" 2404 | checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" 2405 | dependencies = [ 2406 | "getrandom 0.2.8", 2407 | "redox_syscall 0.2.16", 2408 | "thiserror", 2409 | ] 2410 | 2411 | [[package]] 2412 | name = "regex" 2413 | version = "0.2.11" 2414 | source = "registry+https://github.com/rust-lang/crates.io-index" 2415 | checksum = "9329abc99e39129fcceabd24cf5d85b4671ef7c29c50e972bc5afe32438ec384" 2416 | dependencies = [ 2417 | "aho-corasick 0.6.10", 2418 | "memchr", 2419 | "regex-syntax 0.5.6", 2420 | "thread_local 0.3.6", 2421 | "utf8-ranges", 2422 | ] 2423 | 2424 | [[package]] 2425 | name = "regex" 2426 | version = "1.7.0" 2427 | source = "registry+https://github.com/rust-lang/crates.io-index" 2428 | checksum = "e076559ef8e241f2ae3479e36f97bd5741c0330689e217ad51ce2c76808b868a" 2429 | dependencies = [ 2430 | "aho-corasick 0.7.20", 2431 | "memchr", 2432 | "regex-syntax 0.6.28", 2433 | ] 2434 | 2435 | [[package]] 2436 | name = "regex-automata" 2437 | version = "0.1.10" 2438 | source = "registry+https://github.com/rust-lang/crates.io-index" 2439 | checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" 2440 | dependencies = [ 2441 | "regex-syntax 0.6.28", 2442 | ] 2443 | 2444 | [[package]] 2445 | name = "regex-syntax" 2446 | version = "0.5.6" 2447 | source = "registry+https://github.com/rust-lang/crates.io-index" 2448 | checksum = "7d707a4fa2637f2dca2ef9fd02225ec7661fe01a53623c1e6515b6916511f7a7" 2449 | dependencies = [ 2450 | "ucd-util", 2451 | ] 2452 | 2453 | [[package]] 2454 | name = "regex-syntax" 2455 | version = "0.6.28" 2456 | source = "registry+https://github.com/rust-lang/crates.io-index" 2457 | checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848" 2458 | 2459 | [[package]] 2460 | name = "remove_dir_all" 2461 | version = "0.5.3" 2462 | source = "registry+https://github.com/rust-lang/crates.io-index" 2463 | checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" 2464 | dependencies = [ 2465 | "winapi 0.3.9", 2466 | ] 2467 | 2468 | [[package]] 2469 | name = "rfc6979" 2470 | version = "0.3.1" 2471 | source = "registry+https://github.com/rust-lang/crates.io-index" 2472 | checksum = "7743f17af12fa0b03b803ba12cd6a8d9483a587e89c69445e3909655c0b9fabb" 2473 | dependencies = [ 2474 | "crypto-bigint", 2475 | "hmac", 2476 | "zeroize", 2477 | ] 2478 | 2479 | [[package]] 2480 | name = "ring" 2481 | version = "0.16.20" 2482 | source = "registry+https://github.com/rust-lang/crates.io-index" 2483 | checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" 2484 | dependencies = [ 2485 | "cc", 2486 | "libc", 2487 | "once_cell", 2488 | "spin", 2489 | "untrusted", 2490 | "web-sys", 2491 | "winapi 0.3.9", 2492 | ] 2493 | 2494 | [[package]] 2495 | name = "rlp" 2496 | version = "0.3.0" 2497 | source = "registry+https://github.com/rust-lang/crates.io-index" 2498 | checksum = "16d1effe9845d54f90e7be8420ee49e5c94623140b97ee4bc6fb5bfddb745720" 2499 | dependencies = [ 2500 | "byteorder", 2501 | "ethereum-types 0.4.2", 2502 | "rustc-hex", 2503 | ] 2504 | 2505 | [[package]] 2506 | name = "rlp" 2507 | version = "0.5.2" 2508 | source = "registry+https://github.com/rust-lang/crates.io-index" 2509 | checksum = "bb919243f34364b6bd2fc10ef797edbfa75f33c252e7998527479c6d6b47e1ec" 2510 | dependencies = [ 2511 | "bytes 1.3.0", 2512 | "rustc-hex", 2513 | ] 2514 | 2515 | [[package]] 2516 | name = "rlp-derive" 2517 | version = "0.1.0" 2518 | source = "registry+https://github.com/rust-lang/crates.io-index" 2519 | checksum = "e33d7b2abe0c340d8797fe2907d3f20d3b5ea5908683618bfe80df7f621f672a" 2520 | dependencies = [ 2521 | "proc-macro2", 2522 | "quote", 2523 | "syn", 2524 | ] 2525 | 2526 | [[package]] 2527 | name = "rocksdb" 2528 | version = "0.18.0" 2529 | source = "registry+https://github.com/rust-lang/crates.io-index" 2530 | checksum = "620f4129485ff1a7128d184bc687470c21c7951b64779ebc9cfdad3dcd920290" 2531 | dependencies = [ 2532 | "libc", 2533 | "librocksdb-sys", 2534 | ] 2535 | 2536 | [[package]] 2537 | name = "rusqlite" 2538 | version = "0.26.3" 2539 | source = "registry+https://github.com/rust-lang/crates.io-index" 2540 | checksum = "4ba4d3462c8b2e4d7f4fcfcf2b296dc6b65404fbbc7b63daa37fd485c149daf7" 2541 | dependencies = [ 2542 | "bitflags", 2543 | "fallible-iterator", 2544 | "fallible-streaming-iterator", 2545 | "hashlink", 2546 | "libsqlite3-sys", 2547 | "memchr", 2548 | "smallvec 1.10.0", 2549 | ] 2550 | 2551 | [[package]] 2552 | name = "rustc-hash" 2553 | version = "1.1.0" 2554 | source = "registry+https://github.com/rust-lang/crates.io-index" 2555 | checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" 2556 | 2557 | [[package]] 2558 | name = "rustc-hex" 2559 | version = "2.1.0" 2560 | source = "registry+https://github.com/rust-lang/crates.io-index" 2561 | checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" 2562 | 2563 | [[package]] 2564 | name = "rustc_version" 2565 | version = "0.2.3" 2566 | source = "registry+https://github.com/rust-lang/crates.io-index" 2567 | checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" 2568 | dependencies = [ 2569 | "semver", 2570 | ] 2571 | 2572 | [[package]] 2573 | name = "rustls" 2574 | version = "0.20.7" 2575 | source = "registry+https://github.com/rust-lang/crates.io-index" 2576 | checksum = "539a2bfe908f471bfa933876bd1eb6a19cf2176d375f82ef7f99530a40e48c2c" 2577 | dependencies = [ 2578 | "log 0.4.17", 2579 | "ring", 2580 | "sct", 2581 | "webpki", 2582 | ] 2583 | 2584 | [[package]] 2585 | name = "ryu" 2586 | version = "1.0.12" 2587 | source = "registry+https://github.com/rust-lang/crates.io-index" 2588 | checksum = "7b4b9743ed687d4b4bcedf9ff5eaa7398495ae14e61cba0a295704edbc7decde" 2589 | 2590 | [[package]] 2591 | name = "scheduled-thread-pool" 2592 | version = "0.2.6" 2593 | source = "registry+https://github.com/rust-lang/crates.io-index" 2594 | checksum = "977a7519bff143a44f842fd07e80ad1329295bd71686457f18e496736f4bf9bf" 2595 | dependencies = [ 2596 | "parking_lot 0.12.1", 2597 | ] 2598 | 2599 | [[package]] 2600 | name = "scopeguard" 2601 | version = "1.1.0" 2602 | source = "registry+https://github.com/rust-lang/crates.io-index" 2603 | checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" 2604 | 2605 | [[package]] 2606 | name = "sct" 2607 | version = "0.7.0" 2608 | source = "registry+https://github.com/rust-lang/crates.io-index" 2609 | checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" 2610 | dependencies = [ 2611 | "ring", 2612 | "untrusted", 2613 | ] 2614 | 2615 | [[package]] 2616 | name = "sec1" 2617 | version = "0.3.0" 2618 | source = "registry+https://github.com/rust-lang/crates.io-index" 2619 | checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928" 2620 | dependencies = [ 2621 | "base16ct", 2622 | "der", 2623 | "generic-array", 2624 | "pkcs8", 2625 | "subtle", 2626 | "zeroize", 2627 | ] 2628 | 2629 | [[package]] 2630 | name = "semver" 2631 | version = "0.9.0" 2632 | source = "registry+https://github.com/rust-lang/crates.io-index" 2633 | checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" 2634 | dependencies = [ 2635 | "semver-parser", 2636 | ] 2637 | 2638 | [[package]] 2639 | name = "semver-parser" 2640 | version = "0.7.0" 2641 | source = "registry+https://github.com/rust-lang/crates.io-index" 2642 | checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" 2643 | 2644 | [[package]] 2645 | name = "serde" 2646 | version = "1.0.151" 2647 | source = "registry+https://github.com/rust-lang/crates.io-index" 2648 | checksum = "97fed41fc1a24994d044e6db6935e69511a1153b52c15eb42493b26fa87feba0" 2649 | dependencies = [ 2650 | "serde_derive", 2651 | ] 2652 | 2653 | [[package]] 2654 | name = "serde_derive" 2655 | version = "1.0.151" 2656 | source = "registry+https://github.com/rust-lang/crates.io-index" 2657 | checksum = "255abe9a125a985c05190d687b320c12f9b1f0b99445e608c21ba0782c719ad8" 2658 | dependencies = [ 2659 | "proc-macro2", 2660 | "quote", 2661 | "syn", 2662 | ] 2663 | 2664 | [[package]] 2665 | name = "serde_json" 2666 | version = "1.0.91" 2667 | source = "registry+https://github.com/rust-lang/crates.io-index" 2668 | checksum = "877c235533714907a8c2464236f5c4b2a17262ef1bd71f38f35ea592c8da6883" 2669 | dependencies = [ 2670 | "itoa", 2671 | "ryu", 2672 | "serde", 2673 | ] 2674 | 2675 | [[package]] 2676 | name = "sha1" 2677 | version = "0.2.0" 2678 | source = "registry+https://github.com/rust-lang/crates.io-index" 2679 | checksum = "cc30b1e1e8c40c121ca33b86c23308a090d19974ef001b4bf6e61fd1a0fb095c" 2680 | 2681 | [[package]] 2682 | name = "sha2" 2683 | version = "0.9.9" 2684 | source = "registry+https://github.com/rust-lang/crates.io-index" 2685 | checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" 2686 | dependencies = [ 2687 | "block-buffer 0.9.0", 2688 | "cfg-if 1.0.0", 2689 | "cpufeatures 0.2.5", 2690 | "digest 0.9.0", 2691 | "opaque-debug", 2692 | ] 2693 | 2694 | [[package]] 2695 | name = "sha2" 2696 | version = "0.10.6" 2697 | source = "registry+https://github.com/rust-lang/crates.io-index" 2698 | checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" 2699 | dependencies = [ 2700 | "cfg-if 1.0.0", 2701 | "cpufeatures 0.2.5", 2702 | "digest 0.10.6", 2703 | ] 2704 | 2705 | [[package]] 2706 | name = "sha3" 2707 | version = "0.9.1" 2708 | source = "registry+https://github.com/rust-lang/crates.io-index" 2709 | checksum = "f81199417d4e5de3f04b1e871023acea7389672c4135918f05aa9cbf2f2fa809" 2710 | dependencies = [ 2711 | "block-buffer 0.9.0", 2712 | "digest 0.9.0", 2713 | "keccak", 2714 | "opaque-debug", 2715 | ] 2716 | 2717 | [[package]] 2718 | name = "sha3" 2719 | version = "0.10.6" 2720 | source = "registry+https://github.com/rust-lang/crates.io-index" 2721 | checksum = "bdf0c33fae925bdc080598b84bc15c55e7b9a4a43b3c704da051f977469691c9" 2722 | dependencies = [ 2723 | "digest 0.10.6", 2724 | "keccak", 2725 | ] 2726 | 2727 | [[package]] 2728 | name = "sharded-slab" 2729 | version = "0.1.4" 2730 | source = "registry+https://github.com/rust-lang/crates.io-index" 2731 | checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" 2732 | dependencies = [ 2733 | "lazy_static 1.4.0", 2734 | ] 2735 | 2736 | [[package]] 2737 | name = "shlex" 2738 | version = "1.1.0" 2739 | source = "registry+https://github.com/rust-lang/crates.io-index" 2740 | checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3" 2741 | 2742 | [[package]] 2743 | name = "signal-hook-registry" 2744 | version = "1.4.0" 2745 | source = "registry+https://github.com/rust-lang/crates.io-index" 2746 | checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0" 2747 | dependencies = [ 2748 | "libc", 2749 | ] 2750 | 2751 | [[package]] 2752 | name = "signature" 2753 | version = "1.6.4" 2754 | source = "registry+https://github.com/rust-lang/crates.io-index" 2755 | checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" 2756 | dependencies = [ 2757 | "digest 0.10.6", 2758 | "rand_core 0.6.4", 2759 | ] 2760 | 2761 | [[package]] 2762 | name = "slab" 2763 | version = "0.4.7" 2764 | source = "registry+https://github.com/rust-lang/crates.io-index" 2765 | checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef" 2766 | dependencies = [ 2767 | "autocfg 1.1.0", 2768 | ] 2769 | 2770 | [[package]] 2771 | name = "smallvec" 2772 | version = "0.6.14" 2773 | source = "registry+https://github.com/rust-lang/crates.io-index" 2774 | checksum = "b97fcaeba89edba30f044a10c6a3cc39df9c3f17d7cd829dd1446cab35f890e0" 2775 | dependencies = [ 2776 | "maybe-uninit", 2777 | ] 2778 | 2779 | [[package]] 2780 | name = "smallvec" 2781 | version = "1.10.0" 2782 | source = "registry+https://github.com/rust-lang/crates.io-index" 2783 | checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" 2784 | 2785 | [[package]] 2786 | name = "socket2" 2787 | version = "0.3.19" 2788 | source = "registry+https://github.com/rust-lang/crates.io-index" 2789 | checksum = "122e570113d28d773067fab24266b66753f6ea915758651696b6e35e49f88d6e" 2790 | dependencies = [ 2791 | "cfg-if 1.0.0", 2792 | "libc", 2793 | "winapi 0.3.9", 2794 | ] 2795 | 2796 | [[package]] 2797 | name = "socket2" 2798 | version = "0.4.7" 2799 | source = "registry+https://github.com/rust-lang/crates.io-index" 2800 | checksum = "02e2d2db9033d13a1567121ddd7a095ee144db4e1ca1b1bda3419bc0da294ebd" 2801 | dependencies = [ 2802 | "libc", 2803 | "winapi 0.3.9", 2804 | ] 2805 | 2806 | [[package]] 2807 | name = "spin" 2808 | version = "0.5.2" 2809 | source = "registry+https://github.com/rust-lang/crates.io-index" 2810 | checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" 2811 | 2812 | [[package]] 2813 | name = "spki" 2814 | version = "0.6.0" 2815 | source = "registry+https://github.com/rust-lang/crates.io-index" 2816 | checksum = "67cf02bbac7a337dc36e4f5a693db6c21e7863f45070f7064577eb4367a3212b" 2817 | dependencies = [ 2818 | "base64ct", 2819 | "der", 2820 | ] 2821 | 2822 | [[package]] 2823 | name = "static_assertions" 2824 | version = "1.1.0" 2825 | source = "registry+https://github.com/rust-lang/crates.io-index" 2826 | checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" 2827 | 2828 | [[package]] 2829 | name = "strsim" 2830 | version = "0.8.0" 2831 | source = "registry+https://github.com/rust-lang/crates.io-index" 2832 | checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" 2833 | 2834 | [[package]] 2835 | name = "strsim" 2836 | version = "0.10.0" 2837 | source = "registry+https://github.com/rust-lang/crates.io-index" 2838 | checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" 2839 | 2840 | [[package]] 2841 | name = "structopt" 2842 | version = "0.3.26" 2843 | source = "registry+https://github.com/rust-lang/crates.io-index" 2844 | checksum = "0c6b5c64445ba8094a6ab0c3cd2ad323e07171012d9c98b0b15651daf1787a10" 2845 | dependencies = [ 2846 | "clap", 2847 | "lazy_static 1.4.0", 2848 | "structopt-derive", 2849 | ] 2850 | 2851 | [[package]] 2852 | name = "structopt-derive" 2853 | version = "0.4.18" 2854 | source = "registry+https://github.com/rust-lang/crates.io-index" 2855 | checksum = "dcb5ae327f9cc13b68763b5749770cb9e048a99bd9dfdfa58d0cf05d5f64afe0" 2856 | dependencies = [ 2857 | "heck", 2858 | "proc-macro-error", 2859 | "proc-macro2", 2860 | "quote", 2861 | "syn", 2862 | ] 2863 | 2864 | [[package]] 2865 | name = "stun_codec" 2866 | version = "0.1.13" 2867 | source = "registry+https://github.com/rust-lang/crates.io-index" 2868 | checksum = "00241c5479b10c738408a263970fa46ea10924c8851bf45e8c24b306083b5a60" 2869 | dependencies = [ 2870 | "bytecodec", 2871 | "byteorder", 2872 | "crc", 2873 | "hmac-sha1", 2874 | "md5", 2875 | "trackable 0.2.24", 2876 | ] 2877 | 2878 | [[package]] 2879 | name = "stunclient" 2880 | version = "0.1.2" 2881 | source = "registry+https://github.com/rust-lang/crates.io-index" 2882 | checksum = "bf8738227c771bc536712eb5e63099ac84ce06a0cf99a194a915b293876a3b0f" 2883 | dependencies = [ 2884 | "bytecodec", 2885 | "futures 0.1.31", 2886 | "rand 0.6.5", 2887 | "stun_codec", 2888 | "tokio-timer", 2889 | "tokio-udp", 2890 | ] 2891 | 2892 | [[package]] 2893 | name = "subtle" 2894 | version = "2.4.1" 2895 | source = "registry+https://github.com/rust-lang/crates.io-index" 2896 | checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" 2897 | 2898 | [[package]] 2899 | name = "syn" 2900 | version = "1.0.107" 2901 | source = "registry+https://github.com/rust-lang/crates.io-index" 2902 | checksum = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5" 2903 | dependencies = [ 2904 | "proc-macro2", 2905 | "quote", 2906 | "unicode-ident", 2907 | ] 2908 | 2909 | [[package]] 2910 | name = "synstructure" 2911 | version = "0.12.6" 2912 | source = "registry+https://github.com/rust-lang/crates.io-index" 2913 | checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" 2914 | dependencies = [ 2915 | "proc-macro2", 2916 | "quote", 2917 | "syn", 2918 | "unicode-xid", 2919 | ] 2920 | 2921 | [[package]] 2922 | name = "tap" 2923 | version = "1.0.1" 2924 | source = "registry+https://github.com/rust-lang/crates.io-index" 2925 | checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" 2926 | 2927 | [[package]] 2928 | name = "tempfile" 2929 | version = "3.3.0" 2930 | source = "registry+https://github.com/rust-lang/crates.io-index" 2931 | checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4" 2932 | dependencies = [ 2933 | "cfg-if 1.0.0", 2934 | "fastrand", 2935 | "libc", 2936 | "redox_syscall 0.2.16", 2937 | "remove_dir_all", 2938 | "winapi 0.3.9", 2939 | ] 2940 | 2941 | [[package]] 2942 | name = "textwrap" 2943 | version = "0.11.0" 2944 | source = "registry+https://github.com/rust-lang/crates.io-index" 2945 | checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" 2946 | dependencies = [ 2947 | "unicode-width", 2948 | ] 2949 | 2950 | [[package]] 2951 | name = "thiserror" 2952 | version = "1.0.38" 2953 | source = "registry+https://github.com/rust-lang/crates.io-index" 2954 | checksum = "6a9cd18aa97d5c45c6603caea1da6628790b37f7a34b6ca89522331c5180fed0" 2955 | dependencies = [ 2956 | "thiserror-impl", 2957 | ] 2958 | 2959 | [[package]] 2960 | name = "thiserror-impl" 2961 | version = "1.0.38" 2962 | source = "registry+https://github.com/rust-lang/crates.io-index" 2963 | checksum = "1fb327af4685e4d03fa8cbcf1716380da910eeb2bb8be417e7f9fd3fb164f36f" 2964 | dependencies = [ 2965 | "proc-macro2", 2966 | "quote", 2967 | "syn", 2968 | ] 2969 | 2970 | [[package]] 2971 | name = "thread_local" 2972 | version = "0.3.6" 2973 | source = "registry+https://github.com/rust-lang/crates.io-index" 2974 | checksum = "c6b53e329000edc2b34dbe8545fd20e55a333362d0a321909685a19bd28c3f1b" 2975 | dependencies = [ 2976 | "lazy_static 1.4.0", 2977 | ] 2978 | 2979 | [[package]] 2980 | name = "thread_local" 2981 | version = "1.1.4" 2982 | source = "registry+https://github.com/rust-lang/crates.io-index" 2983 | checksum = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180" 2984 | dependencies = [ 2985 | "once_cell", 2986 | ] 2987 | 2988 | [[package]] 2989 | name = "threadpool" 2990 | version = "1.8.1" 2991 | source = "registry+https://github.com/rust-lang/crates.io-index" 2992 | checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" 2993 | dependencies = [ 2994 | "num_cpus", 2995 | ] 2996 | 2997 | [[package]] 2998 | name = "time" 2999 | version = "0.3.17" 3000 | source = "registry+https://github.com/rust-lang/crates.io-index" 3001 | checksum = "a561bf4617eebd33bca6434b988f39ed798e527f51a1e797d0ee4f61c0a38376" 3002 | dependencies = [ 3003 | "itoa", 3004 | "serde", 3005 | "time-core", 3006 | "time-macros", 3007 | ] 3008 | 3009 | [[package]] 3010 | name = "time-core" 3011 | version = "0.1.0" 3012 | source = "registry+https://github.com/rust-lang/crates.io-index" 3013 | checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd" 3014 | 3015 | [[package]] 3016 | name = "time-macros" 3017 | version = "0.2.6" 3018 | source = "registry+https://github.com/rust-lang/crates.io-index" 3019 | checksum = "d967f99f534ca7e495c575c62638eebc2898a8c84c119b89e250477bc4ba16b2" 3020 | dependencies = [ 3021 | "time-core", 3022 | ] 3023 | 3024 | [[package]] 3025 | name = "tiny-keccak" 3026 | version = "1.5.0" 3027 | source = "registry+https://github.com/rust-lang/crates.io-index" 3028 | checksum = "1d8a021c69bb74a44ccedb824a046447e2c84a01df9e5c20779750acb38e11b2" 3029 | dependencies = [ 3030 | "crunchy 0.2.2", 3031 | ] 3032 | 3033 | [[package]] 3034 | name = "tiny-keccak" 3035 | version = "2.0.2" 3036 | source = "registry+https://github.com/rust-lang/crates.io-index" 3037 | checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" 3038 | dependencies = [ 3039 | "crunchy 0.2.2", 3040 | ] 3041 | 3042 | [[package]] 3043 | name = "tiny_http" 3044 | version = "0.10.0" 3045 | source = "registry+https://github.com/rust-lang/crates.io-index" 3046 | checksum = "c5f8734c6d6943ad6df6b588d228a87b4af184998bcffa268ceddf05c2055a8c" 3047 | dependencies = [ 3048 | "ascii", 3049 | "chunked_transfer", 3050 | "log 0.4.17", 3051 | "time", 3052 | "url", 3053 | ] 3054 | 3055 | [[package]] 3056 | name = "tinyvec" 3057 | version = "1.6.0" 3058 | source = "registry+https://github.com/rust-lang/crates.io-index" 3059 | checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" 3060 | dependencies = [ 3061 | "tinyvec_macros", 3062 | ] 3063 | 3064 | [[package]] 3065 | name = "tinyvec_macros" 3066 | version = "0.1.0" 3067 | source = "registry+https://github.com/rust-lang/crates.io-index" 3068 | checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" 3069 | 3070 | [[package]] 3071 | name = "tokio" 3072 | version = "1.23.0" 3073 | source = "registry+https://github.com/rust-lang/crates.io-index" 3074 | checksum = "eab6d665857cc6ca78d6e80303a02cea7a7851e85dfbd77cbdc09bd129f1ef46" 3075 | dependencies = [ 3076 | "autocfg 1.1.0", 3077 | "bytes 1.3.0", 3078 | "libc", 3079 | "memchr", 3080 | "mio 0.8.5", 3081 | "num_cpus", 3082 | "parking_lot 0.12.1", 3083 | "pin-project-lite", 3084 | "signal-hook-registry", 3085 | "socket2 0.4.7", 3086 | "tokio-macros", 3087 | "windows-sys", 3088 | ] 3089 | 3090 | [[package]] 3091 | name = "tokio-codec" 3092 | version = "0.1.2" 3093 | source = "registry+https://github.com/rust-lang/crates.io-index" 3094 | checksum = "25b2998660ba0e70d18684de5d06b70b70a3a747469af9dea7618cc59e75976b" 3095 | dependencies = [ 3096 | "bytes 0.4.12", 3097 | "futures 0.1.31", 3098 | "tokio-io", 3099 | ] 3100 | 3101 | [[package]] 3102 | name = "tokio-executor" 3103 | version = "0.1.10" 3104 | source = "registry+https://github.com/rust-lang/crates.io-index" 3105 | checksum = "fb2d1b8f4548dbf5e1f7818512e9c406860678f29c300cdf0ebac72d1a3a1671" 3106 | dependencies = [ 3107 | "crossbeam-utils", 3108 | "futures 0.1.31", 3109 | ] 3110 | 3111 | [[package]] 3112 | name = "tokio-io" 3113 | version = "0.1.13" 3114 | source = "registry+https://github.com/rust-lang/crates.io-index" 3115 | checksum = "57fc868aae093479e3131e3d165c93b1c7474109d13c90ec0dda2a1bbfff0674" 3116 | dependencies = [ 3117 | "bytes 0.4.12", 3118 | "futures 0.1.31", 3119 | "log 0.4.17", 3120 | ] 3121 | 3122 | [[package]] 3123 | name = "tokio-macros" 3124 | version = "1.8.2" 3125 | source = "registry+https://github.com/rust-lang/crates.io-index" 3126 | checksum = "d266c00fde287f55d3f1c3e96c500c362a2b8c695076ec180f27918820bc6df8" 3127 | dependencies = [ 3128 | "proc-macro2", 3129 | "quote", 3130 | "syn", 3131 | ] 3132 | 3133 | [[package]] 3134 | name = "tokio-reactor" 3135 | version = "0.1.12" 3136 | source = "registry+https://github.com/rust-lang/crates.io-index" 3137 | checksum = "09bc590ec4ba8ba87652da2068d150dcada2cfa2e07faae270a5e0409aa51351" 3138 | dependencies = [ 3139 | "crossbeam-utils", 3140 | "futures 0.1.31", 3141 | "lazy_static 1.4.0", 3142 | "log 0.4.17", 3143 | "mio 0.6.23", 3144 | "num_cpus", 3145 | "parking_lot 0.9.0", 3146 | "slab", 3147 | "tokio-executor", 3148 | "tokio-io", 3149 | "tokio-sync", 3150 | ] 3151 | 3152 | [[package]] 3153 | name = "tokio-stream" 3154 | version = "0.1.11" 3155 | source = "registry+https://github.com/rust-lang/crates.io-index" 3156 | checksum = "d660770404473ccd7bc9f8b28494a811bc18542b915c0855c51e8f419d5223ce" 3157 | dependencies = [ 3158 | "futures-core", 3159 | "pin-project-lite", 3160 | "tokio", 3161 | ] 3162 | 3163 | [[package]] 3164 | name = "tokio-sync" 3165 | version = "0.1.8" 3166 | source = "registry+https://github.com/rust-lang/crates.io-index" 3167 | checksum = "edfe50152bc8164fcc456dab7891fa9bf8beaf01c5ee7e1dd43a397c3cf87dee" 3168 | dependencies = [ 3169 | "fnv", 3170 | "futures 0.1.31", 3171 | ] 3172 | 3173 | [[package]] 3174 | name = "tokio-timer" 3175 | version = "0.2.13" 3176 | source = "registry+https://github.com/rust-lang/crates.io-index" 3177 | checksum = "93044f2d313c95ff1cb7809ce9a7a05735b012288a888b62d4434fd58c94f296" 3178 | dependencies = [ 3179 | "crossbeam-utils", 3180 | "futures 0.1.31", 3181 | "slab", 3182 | "tokio-executor", 3183 | ] 3184 | 3185 | [[package]] 3186 | name = "tokio-udp" 3187 | version = "0.1.6" 3188 | source = "registry+https://github.com/rust-lang/crates.io-index" 3189 | checksum = "e2a0b10e610b39c38b031a2fcab08e4b82f16ece36504988dcbd81dbba650d82" 3190 | dependencies = [ 3191 | "bytes 0.4.12", 3192 | "futures 0.1.31", 3193 | "log 0.4.17", 3194 | "mio 0.6.23", 3195 | "tokio-codec", 3196 | "tokio-io", 3197 | "tokio-reactor", 3198 | ] 3199 | 3200 | [[package]] 3201 | name = "tokio-util" 3202 | version = "0.6.10" 3203 | source = "registry+https://github.com/rust-lang/crates.io-index" 3204 | checksum = "36943ee01a6d67977dd3f84a5a1d2efeb4ada3a1ae771cadfaa535d9d9fc6507" 3205 | dependencies = [ 3206 | "bytes 1.3.0", 3207 | "futures-core", 3208 | "futures-sink", 3209 | "log 0.4.17", 3210 | "pin-project-lite", 3211 | "slab", 3212 | "tokio", 3213 | ] 3214 | 3215 | [[package]] 3216 | name = "toml" 3217 | version = "0.5.10" 3218 | source = "registry+https://github.com/rust-lang/crates.io-index" 3219 | checksum = "1333c76748e868a4d9d1017b5ab53171dfd095f70c712fdb4653a406547f598f" 3220 | dependencies = [ 3221 | "serde", 3222 | ] 3223 | 3224 | [[package]] 3225 | name = "tracing" 3226 | version = "0.1.37" 3227 | source = "registry+https://github.com/rust-lang/crates.io-index" 3228 | checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" 3229 | dependencies = [ 3230 | "cfg-if 1.0.0", 3231 | "log 0.4.17", 3232 | "pin-project-lite", 3233 | "tracing-attributes", 3234 | "tracing-core", 3235 | ] 3236 | 3237 | [[package]] 3238 | name = "tracing-attributes" 3239 | version = "0.1.23" 3240 | source = "registry+https://github.com/rust-lang/crates.io-index" 3241 | checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" 3242 | dependencies = [ 3243 | "proc-macro2", 3244 | "quote", 3245 | "syn", 3246 | ] 3247 | 3248 | [[package]] 3249 | name = "tracing-core" 3250 | version = "0.1.30" 3251 | source = "registry+https://github.com/rust-lang/crates.io-index" 3252 | checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" 3253 | dependencies = [ 3254 | "once_cell", 3255 | "valuable", 3256 | ] 3257 | 3258 | [[package]] 3259 | name = "tracing-log" 3260 | version = "0.1.3" 3261 | source = "registry+https://github.com/rust-lang/crates.io-index" 3262 | checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922" 3263 | dependencies = [ 3264 | "lazy_static 1.4.0", 3265 | "log 0.4.17", 3266 | "tracing-core", 3267 | ] 3268 | 3269 | [[package]] 3270 | name = "tracing-subscriber" 3271 | version = "0.3.16" 3272 | source = "registry+https://github.com/rust-lang/crates.io-index" 3273 | checksum = "a6176eae26dd70d0c919749377897b54a9276bd7061339665dd68777926b5a70" 3274 | dependencies = [ 3275 | "matchers", 3276 | "nu-ansi-term", 3277 | "once_cell", 3278 | "regex 1.7.0", 3279 | "sharded-slab", 3280 | "smallvec 1.10.0", 3281 | "thread_local 1.1.4", 3282 | "tracing", 3283 | "tracing-core", 3284 | "tracing-log", 3285 | ] 3286 | 3287 | [[package]] 3288 | name = "trackable" 3289 | version = "0.2.24" 3290 | source = "registry+https://github.com/rust-lang/crates.io-index" 3291 | checksum = "b98abb9e7300b9ac902cc04920945a874c1973e08c310627cc4458c04b70dd32" 3292 | dependencies = [ 3293 | "trackable 1.2.0", 3294 | "trackable_derive", 3295 | ] 3296 | 3297 | [[package]] 3298 | name = "trackable" 3299 | version = "1.2.0" 3300 | source = "registry+https://github.com/rust-lang/crates.io-index" 3301 | checksum = "017e2a1a93718e4e8386d037cfb8add78f1d690467f4350fb582f55af1203167" 3302 | dependencies = [ 3303 | "trackable_derive", 3304 | ] 3305 | 3306 | [[package]] 3307 | name = "trackable_derive" 3308 | version = "1.0.0" 3309 | source = "registry+https://github.com/rust-lang/crates.io-index" 3310 | checksum = "ebeb235c5847e2f82cfe0f07eb971d1e5f6804b18dac2ae16349cc604380f82f" 3311 | dependencies = [ 3312 | "quote", 3313 | "syn", 3314 | ] 3315 | 3316 | [[package]] 3317 | name = "tree_hash" 3318 | version = "0.4.0" 3319 | source = "registry+https://github.com/rust-lang/crates.io-index" 3320 | checksum = "3f9c8a86fad3169a65aad2265d3c6a8bc119d0b771046af3c1b2fb0e9b12182b" 3321 | dependencies = [ 3322 | "eth2_hashing", 3323 | "ethereum-types 0.12.1", 3324 | "smallvec 1.10.0", 3325 | ] 3326 | 3327 | [[package]] 3328 | name = "tree_hash_derive" 3329 | version = "0.4.0" 3330 | source = "registry+https://github.com/rust-lang/crates.io-index" 3331 | checksum = "3cd22d128157837a4434bb51119aef11103f17bfe8c402ce688cf25aa1e608ad" 3332 | dependencies = [ 3333 | "darling", 3334 | "quote", 3335 | "syn", 3336 | ] 3337 | 3338 | [[package]] 3339 | name = "typenum" 3340 | version = "1.16.0" 3341 | source = "registry+https://github.com/rust-lang/crates.io-index" 3342 | checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" 3343 | 3344 | [[package]] 3345 | name = "ucd-util" 3346 | version = "0.1.9" 3347 | source = "registry+https://github.com/rust-lang/crates.io-index" 3348 | checksum = "65bfcbf611b122f2c10eb1bb6172fbc4c2e25df9970330e4d75ce2b5201c9bfc" 3349 | 3350 | [[package]] 3351 | name = "uds_windows" 3352 | version = "1.0.2" 3353 | source = "registry+https://github.com/rust-lang/crates.io-index" 3354 | checksum = "ce65604324d3cce9b966701489fbd0cf318cb1f7bd9dd07ac9a4ee6fb791930d" 3355 | dependencies = [ 3356 | "tempfile", 3357 | "winapi 0.3.9", 3358 | ] 3359 | 3360 | [[package]] 3361 | name = "uint" 3362 | version = "0.4.1" 3363 | source = "registry+https://github.com/rust-lang/crates.io-index" 3364 | checksum = "754ba11732b9161b94c41798e5197e5e75388d012f760c42adb5000353e98646" 3365 | dependencies = [ 3366 | "byteorder", 3367 | "crunchy 0.1.6", 3368 | "heapsize", 3369 | "rustc-hex", 3370 | ] 3371 | 3372 | [[package]] 3373 | name = "uint" 3374 | version = "0.8.5" 3375 | source = "registry+https://github.com/rust-lang/crates.io-index" 3376 | checksum = "9db035e67dfaf7edd9aebfe8676afcd63eed53c8a4044fed514c8cccf1835177" 3377 | dependencies = [ 3378 | "byteorder", 3379 | "crunchy 0.2.2", 3380 | "rustc-hex", 3381 | "static_assertions", 3382 | ] 3383 | 3384 | [[package]] 3385 | name = "uint" 3386 | version = "0.9.5" 3387 | source = "registry+https://github.com/rust-lang/crates.io-index" 3388 | checksum = "76f64bba2c53b04fcab63c01a7d7427eadc821e3bc48c34dc9ba29c501164b52" 3389 | dependencies = [ 3390 | "byteorder", 3391 | "crunchy 0.2.2", 3392 | "hex", 3393 | "static_assertions", 3394 | ] 3395 | 3396 | [[package]] 3397 | name = "unicode-bidi" 3398 | version = "0.3.8" 3399 | source = "registry+https://github.com/rust-lang/crates.io-index" 3400 | checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992" 3401 | 3402 | [[package]] 3403 | name = "unicode-ident" 3404 | version = "1.0.6" 3405 | source = "registry+https://github.com/rust-lang/crates.io-index" 3406 | checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc" 3407 | 3408 | [[package]] 3409 | name = "unicode-normalization" 3410 | version = "0.1.22" 3411 | source = "registry+https://github.com/rust-lang/crates.io-index" 3412 | checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" 3413 | dependencies = [ 3414 | "tinyvec", 3415 | ] 3416 | 3417 | [[package]] 3418 | name = "unicode-segmentation" 3419 | version = "1.10.0" 3420 | source = "registry+https://github.com/rust-lang/crates.io-index" 3421 | checksum = "0fdbf052a0783de01e944a6ce7a8cb939e295b1e7be835a1112c3b9a7f047a5a" 3422 | 3423 | [[package]] 3424 | name = "unicode-width" 3425 | version = "0.1.10" 3426 | source = "registry+https://github.com/rust-lang/crates.io-index" 3427 | checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" 3428 | 3429 | [[package]] 3430 | name = "unicode-xid" 3431 | version = "0.2.4" 3432 | source = "registry+https://github.com/rust-lang/crates.io-index" 3433 | checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" 3434 | 3435 | [[package]] 3436 | name = "universal-hash" 3437 | version = "0.4.1" 3438 | source = "registry+https://github.com/rust-lang/crates.io-index" 3439 | checksum = "9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05" 3440 | dependencies = [ 3441 | "generic-array", 3442 | "subtle", 3443 | ] 3444 | 3445 | [[package]] 3446 | name = "untrusted" 3447 | version = "0.7.1" 3448 | source = "registry+https://github.com/rust-lang/crates.io-index" 3449 | checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" 3450 | 3451 | [[package]] 3452 | name = "ureq" 3453 | version = "2.5.0" 3454 | source = "registry+https://github.com/rust-lang/crates.io-index" 3455 | checksum = "b97acb4c28a254fd7a4aeec976c46a7fa404eac4d7c134b30c75144846d7cb8f" 3456 | dependencies = [ 3457 | "base64", 3458 | "chunked_transfer", 3459 | "flate2", 3460 | "log 0.4.17", 3461 | "once_cell", 3462 | "rustls", 3463 | "serde", 3464 | "serde_json", 3465 | "url", 3466 | "webpki", 3467 | "webpki-roots", 3468 | ] 3469 | 3470 | [[package]] 3471 | name = "url" 3472 | version = "2.3.1" 3473 | source = "registry+https://github.com/rust-lang/crates.io-index" 3474 | checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" 3475 | dependencies = [ 3476 | "form_urlencoded", 3477 | "idna 0.3.0", 3478 | "percent-encoding", 3479 | ] 3480 | 3481 | [[package]] 3482 | name = "utf8-ranges" 3483 | version = "1.0.5" 3484 | source = "registry+https://github.com/rust-lang/crates.io-index" 3485 | checksum = "7fcfc827f90e53a02eaef5e535ee14266c1d569214c6aa70133a624d8a3164ba" 3486 | 3487 | [[package]] 3488 | name = "validator" 3489 | version = "0.13.0" 3490 | source = "registry+https://github.com/rust-lang/crates.io-index" 3491 | checksum = "be110dc66fa015b8b1d2c4eae40c495a27fae55f82b9cae3efb8178241ed20eb" 3492 | dependencies = [ 3493 | "idna 0.2.3", 3494 | "lazy_static 1.4.0", 3495 | "regex 1.7.0", 3496 | "serde", 3497 | "serde_derive", 3498 | "serde_json", 3499 | "url", 3500 | "validator_derive", 3501 | "validator_types", 3502 | ] 3503 | 3504 | [[package]] 3505 | name = "validator_derive" 3506 | version = "0.13.0" 3507 | source = "registry+https://github.com/rust-lang/crates.io-index" 3508 | checksum = "68f14fe757e2894ce4271991901567be07fbc3eac6b24246122214e1d5a16554" 3509 | dependencies = [ 3510 | "if_chain", 3511 | "lazy_static 1.4.0", 3512 | "proc-macro-error", 3513 | "proc-macro2", 3514 | "quote", 3515 | "regex 1.7.0", 3516 | "syn", 3517 | "validator_types", 3518 | ] 3519 | 3520 | [[package]] 3521 | name = "validator_types" 3522 | version = "0.12.0" 3523 | source = "registry+https://github.com/rust-lang/crates.io-index" 3524 | checksum = "ad9680608df133af2c1ddd5eaf1ddce91d60d61b6bc51494ef326458365a470a" 3525 | 3526 | [[package]] 3527 | name = "valuable" 3528 | version = "0.1.0" 3529 | source = "registry+https://github.com/rust-lang/crates.io-index" 3530 | checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" 3531 | 3532 | [[package]] 3533 | name = "vcpkg" 3534 | version = "0.2.15" 3535 | source = "registry+https://github.com/rust-lang/crates.io-index" 3536 | checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" 3537 | 3538 | [[package]] 3539 | name = "vec_map" 3540 | version = "0.8.2" 3541 | source = "registry+https://github.com/rust-lang/crates.io-index" 3542 | checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" 3543 | 3544 | [[package]] 3545 | name = "version_check" 3546 | version = "0.9.4" 3547 | source = "registry+https://github.com/rust-lang/crates.io-index" 3548 | checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" 3549 | 3550 | [[package]] 3551 | name = "wasi" 3552 | version = "0.9.0+wasi-snapshot-preview1" 3553 | source = "registry+https://github.com/rust-lang/crates.io-index" 3554 | checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" 3555 | 3556 | [[package]] 3557 | name = "wasi" 3558 | version = "0.11.0+wasi-snapshot-preview1" 3559 | source = "registry+https://github.com/rust-lang/crates.io-index" 3560 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 3561 | 3562 | [[package]] 3563 | name = "wasm-bindgen" 3564 | version = "0.2.83" 3565 | source = "registry+https://github.com/rust-lang/crates.io-index" 3566 | checksum = "eaf9f5aceeec8be17c128b2e93e031fb8a4d469bb9c4ae2d7dc1888b26887268" 3567 | dependencies = [ 3568 | "cfg-if 1.0.0", 3569 | "wasm-bindgen-macro", 3570 | ] 3571 | 3572 | [[package]] 3573 | name = "wasm-bindgen-backend" 3574 | version = "0.2.83" 3575 | source = "registry+https://github.com/rust-lang/crates.io-index" 3576 | checksum = "4c8ffb332579b0557b52d268b91feab8df3615f265d5270fec2a8c95b17c1142" 3577 | dependencies = [ 3578 | "bumpalo", 3579 | "log 0.4.17", 3580 | "once_cell", 3581 | "proc-macro2", 3582 | "quote", 3583 | "syn", 3584 | "wasm-bindgen-shared", 3585 | ] 3586 | 3587 | [[package]] 3588 | name = "wasm-bindgen-macro" 3589 | version = "0.2.83" 3590 | source = "registry+https://github.com/rust-lang/crates.io-index" 3591 | checksum = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810" 3592 | dependencies = [ 3593 | "quote", 3594 | "wasm-bindgen-macro-support", 3595 | ] 3596 | 3597 | [[package]] 3598 | name = "wasm-bindgen-macro-support" 3599 | version = "0.2.83" 3600 | source = "registry+https://github.com/rust-lang/crates.io-index" 3601 | checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c" 3602 | dependencies = [ 3603 | "proc-macro2", 3604 | "quote", 3605 | "syn", 3606 | "wasm-bindgen-backend", 3607 | "wasm-bindgen-shared", 3608 | ] 3609 | 3610 | [[package]] 3611 | name = "wasm-bindgen-shared" 3612 | version = "0.2.83" 3613 | source = "registry+https://github.com/rust-lang/crates.io-index" 3614 | checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f" 3615 | 3616 | [[package]] 3617 | name = "web-sys" 3618 | version = "0.3.60" 3619 | source = "registry+https://github.com/rust-lang/crates.io-index" 3620 | checksum = "bcda906d8be16e728fd5adc5b729afad4e444e106ab28cd1c7256e54fa61510f" 3621 | dependencies = [ 3622 | "js-sys", 3623 | "wasm-bindgen", 3624 | ] 3625 | 3626 | [[package]] 3627 | name = "webpki" 3628 | version = "0.22.0" 3629 | source = "registry+https://github.com/rust-lang/crates.io-index" 3630 | checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd" 3631 | dependencies = [ 3632 | "ring", 3633 | "untrusted", 3634 | ] 3635 | 3636 | [[package]] 3637 | name = "webpki-roots" 3638 | version = "0.22.6" 3639 | source = "registry+https://github.com/rust-lang/crates.io-index" 3640 | checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87" 3641 | dependencies = [ 3642 | "webpki", 3643 | ] 3644 | 3645 | [[package]] 3646 | name = "widestring" 3647 | version = "0.4.3" 3648 | source = "registry+https://github.com/rust-lang/crates.io-index" 3649 | checksum = "c168940144dd21fd8046987c16a46a33d5fc84eec29ef9dcddc2ac9e31526b7c" 3650 | 3651 | [[package]] 3652 | name = "winapi" 3653 | version = "0.2.8" 3654 | source = "registry+https://github.com/rust-lang/crates.io-index" 3655 | checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" 3656 | 3657 | [[package]] 3658 | name = "winapi" 3659 | version = "0.3.9" 3660 | source = "registry+https://github.com/rust-lang/crates.io-index" 3661 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 3662 | dependencies = [ 3663 | "winapi-i686-pc-windows-gnu", 3664 | "winapi-x86_64-pc-windows-gnu", 3665 | ] 3666 | 3667 | [[package]] 3668 | name = "winapi-build" 3669 | version = "0.1.1" 3670 | source = "registry+https://github.com/rust-lang/crates.io-index" 3671 | checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" 3672 | 3673 | [[package]] 3674 | name = "winapi-i686-pc-windows-gnu" 3675 | version = "0.4.0" 3676 | source = "registry+https://github.com/rust-lang/crates.io-index" 3677 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 3678 | 3679 | [[package]] 3680 | name = "winapi-x86_64-pc-windows-gnu" 3681 | version = "0.4.0" 3682 | source = "registry+https://github.com/rust-lang/crates.io-index" 3683 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 3684 | 3685 | [[package]] 3686 | name = "windows-sys" 3687 | version = "0.42.0" 3688 | source = "registry+https://github.com/rust-lang/crates.io-index" 3689 | checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" 3690 | dependencies = [ 3691 | "windows_aarch64_gnullvm", 3692 | "windows_aarch64_msvc", 3693 | "windows_i686_gnu", 3694 | "windows_i686_msvc", 3695 | "windows_x86_64_gnu", 3696 | "windows_x86_64_gnullvm", 3697 | "windows_x86_64_msvc", 3698 | ] 3699 | 3700 | [[package]] 3701 | name = "windows_aarch64_gnullvm" 3702 | version = "0.42.0" 3703 | source = "registry+https://github.com/rust-lang/crates.io-index" 3704 | checksum = "41d2aa71f6f0cbe00ae5167d90ef3cfe66527d6f613ca78ac8024c3ccab9a19e" 3705 | 3706 | [[package]] 3707 | name = "windows_aarch64_msvc" 3708 | version = "0.42.0" 3709 | source = "registry+https://github.com/rust-lang/crates.io-index" 3710 | checksum = "dd0f252f5a35cac83d6311b2e795981f5ee6e67eb1f9a7f64eb4500fbc4dcdb4" 3711 | 3712 | [[package]] 3713 | name = "windows_i686_gnu" 3714 | version = "0.42.0" 3715 | source = "registry+https://github.com/rust-lang/crates.io-index" 3716 | checksum = "fbeae19f6716841636c28d695375df17562ca208b2b7d0dc47635a50ae6c5de7" 3717 | 3718 | [[package]] 3719 | name = "windows_i686_msvc" 3720 | version = "0.42.0" 3721 | source = "registry+https://github.com/rust-lang/crates.io-index" 3722 | checksum = "84c12f65daa39dd2babe6e442988fc329d6243fdce47d7d2d155b8d874862246" 3723 | 3724 | [[package]] 3725 | name = "windows_x86_64_gnu" 3726 | version = "0.42.0" 3727 | source = "registry+https://github.com/rust-lang/crates.io-index" 3728 | checksum = "bf7b1b21b5362cbc318f686150e5bcea75ecedc74dd157d874d754a2ca44b0ed" 3729 | 3730 | [[package]] 3731 | name = "windows_x86_64_gnullvm" 3732 | version = "0.42.0" 3733 | source = "registry+https://github.com/rust-lang/crates.io-index" 3734 | checksum = "09d525d2ba30eeb3297665bd434a54297e4170c7f1a44cad4ef58095b4cd2028" 3735 | 3736 | [[package]] 3737 | name = "windows_x86_64_msvc" 3738 | version = "0.42.0" 3739 | source = "registry+https://github.com/rust-lang/crates.io-index" 3740 | checksum = "f40009d85759725a34da6d89a94e63d7bdc50a862acf0dbc7c8e488f1edcb6f5" 3741 | 3742 | [[package]] 3743 | name = "winreg" 3744 | version = "0.6.2" 3745 | source = "registry+https://github.com/rust-lang/crates.io-index" 3746 | checksum = "b2986deb581c4fe11b621998a5e53361efe6b48a151178d0cd9eeffa4dc6acc9" 3747 | dependencies = [ 3748 | "winapi 0.3.9", 3749 | ] 3750 | 3751 | [[package]] 3752 | name = "ws2_32-sys" 3753 | version = "0.2.1" 3754 | source = "registry+https://github.com/rust-lang/crates.io-index" 3755 | checksum = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" 3756 | dependencies = [ 3757 | "winapi 0.2.8", 3758 | "winapi-build", 3759 | ] 3760 | 3761 | [[package]] 3762 | name = "wyz" 3763 | version = "0.2.0" 3764 | source = "registry+https://github.com/rust-lang/crates.io-index" 3765 | checksum = "85e60b0d1b5f99db2556934e21937020776a5d31520bf169e851ac44e6420214" 3766 | 3767 | [[package]] 3768 | name = "zeroize" 3769 | version = "1.5.7" 3770 | source = "registry+https://github.com/rust-lang/crates.io-index" 3771 | checksum = "c394b5bd0c6f669e7275d9c20aa90ae064cb22e75a1cad54e1b34088034b149f" 3772 | dependencies = [ 3773 | "zeroize_derive", 3774 | ] 3775 | 3776 | [[package]] 3777 | name = "zeroize_derive" 3778 | version = "1.3.3" 3779 | source = "registry+https://github.com/rust-lang/crates.io-index" 3780 | checksum = "44bf07cb3e50ea2003396695d58bf46bc9887a1f362260446fad6bc4e79bd36c" 3781 | dependencies = [ 3782 | "proc-macro2", 3783 | "quote", 3784 | "syn", 3785 | "synstructure", 3786 | ] 3787 | 3788 | [[package]] 3789 | name = "zstd-sys" 3790 | version = "1.6.3+zstd.1.5.2" 3791 | source = "registry+https://github.com/rust-lang/crates.io-index" 3792 | checksum = "fc49afa5c8d634e75761feda8c592051e7eeb4683ba827211eb0d731d3402ea8" 3793 | dependencies = [ 3794 | "cc", 3795 | "libc", 3796 | ] 3797 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "das_playground" 3 | version = "0.1.0" 4 | edition = "2021" 5 | 6 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 7 | 8 | [dependencies] 9 | anyhow = "1.0.66" 10 | async-trait = "0.1.58" 11 | discv5 = "0.1" 12 | discv5-overlay = {git = "https://github.com/timoth-y/discv5-overlay" } 13 | eth2_ssz = "0.4.0" 14 | eth2_ssz_derive = "0.3.0" 15 | futures = "0.3.24" 16 | hex = "0.4.3" 17 | parking_lot = "0.11.2" 18 | rand = "0.8.5" 19 | tokio = { version = "1.23.0", features = ["full"] } 20 | tokio-stream = "0.1.10" 21 | tracing = { version = "0.1.29" } 22 | 23 | [patch.crates-io] 24 | discv5 = {git = "https://github.com/timoth-y/discv5"} -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Motivation 2 | As per Ethereum's [rollup-centric roadmap](https://ethereum-magicians.org/t/a-rollup-centric-ethereum-roadmap/4698), full-scale Danksharding requires extra *blob* data to be [available](https://github.com/ethereum/research/wiki/A-note-on-data-availability-and-erasure-coding) for others to download. Efficient verification of a blob's availability can be achieved through the process of [data availability sampling](https://hackmd.io/@vbuterin/sharding_proposal#ELI5-data-availability-sampling), allowing the network to come to consensus on this data's availability without increasing the computational resources required for a node. 3 | 4 | Between this increase in information (from 90 KB to 128 MB per block!) and our new communication paradigm (data availability sampling), Ethereum's Consensus Layer P2P Network needs an upgrade. 5 | 6 | Designs around *how* Ethereum's Consensus Layer P2P Network network can communicate this new information is an open question known as the [Data Availability Sampling Networking problem](https://github.com/ethereum/requests-for-proposals/blob/master/open-rfps/das.md). 7 | 8 | 9 | 10 | # Summary 11 | One possible solution to *part of* the DAS Networking problem is to create a **Secure Kademlia DHT overlay network atop Discv5**, with the goal of facilitating a robust structured network where samples could be efficiently stored and retrieved throughout Ethereum's consensus layer network. **This S/Kad overlay network would serve as a backup in case the primary network was attacked.** 12 | 13 | DAS Playground aims to combine Dankrad's idea of a [Secure Kademlia DHT]((https://notes.ethereum.org/@dankrad/S-Kademlia-DAS)) with the main data struct, [DASNode](https://github.com/ChainSafe/das-prototype/blob/main/src/main.rs#L88), found within Timofey and Eric's discv5 overlay simulation, [DAS Prototype](https://github.com/ChainSafe/das-prototype), to create the networking stack nodes need for a DAS p2p networking design. 14 | 15 | 16 |   17 | ![dasnode_image](./assets/DASNode.png) 18 | 19 | [DAS Playground](https://github.com/EchoAlice/das-playground) and [DAS Prototype](https://github.com/ChainSafe/das-prototype) leverage Trin's [overlay protocol](https://github.com/ethereum/trin/tree/master/trin-core/src/portalnet) + Sigma Prime's [discv5 protocol](https://github.com/sigp/discv5) to support these custom overlay networks. 20 | 21 | 22 |   23 | # Current Repository Status 24 | DASNodes contain discv5, overlay, and secure overlay protocol structs, services and message processing. The discv5 protocol [powers these overlay networks](https://notes.ethereum.org/@pipermerriam/B1SS-nhad) via its TalkReq/TalkResp message. DAS Playground's instance of discv5 seems to be supporting all base protocol [Overlay Network functionality](https://github.com/ethereum/portal-network-specs/blob/796d3c5772e845b98a6191465a695be7f5324b65/implementation-details-overlay.md#portal-network-overlay-network-functionality) needed for overlay routing table maintenance. 25 | 26 | 27 | **Note:** 28 | As of right now the overlay and secure overlay protocol structs are functionally the same. **There is no updated secure kademlia routing table logic that allows for desired secure overlay properties**: our DASNode just has two separate routing tables that can send and receive discv5 TalkReq/TalkResp messages to each individual subnetwork. I'm beginning work on a secure kademlia library that will (hopefully) integrate in with this repository. 29 | 30 | ### To Do: 31 | 1. Send and receive samples via overlay and secure overlay networks 32 | 2. Implement all other [Portal Wire Protocol Message types](https://github.com/ethereum/portal-network-specs/blob/796d3c5772e845b98a6191465a695be7f5324b65/implementation-details-overlay.md#portal-network-overlay-network-functionality): 33 | - Ping/Pong 34 | - FindNodes/FoundNodes 35 | - FindContent/FoundContent 36 | - Offer/Accept 37 | 3. Combine overlay functions' logic 38 | 4. Implement concurrent communication 39 | 5. Integrate SecureDAS Overlay within [Model DAS](https://github.com/EchoAlice/Model-DAS) 40 | 6. Create attacks and fallback network logic -------------------------------------------------------------------------------- /assets/DASNode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EchoAlice/das-playground/7e3828c94606cb733c17820d25266c8c61bca809/assets/DASNode.png -------------------------------------------------------------------------------- /src/content_key.rs: -------------------------------------------------------------------------------- 1 | use async_trait::async_trait; 2 | use discv5::ConnectionDirection; 3 | use discv5_overlay::{ 4 | portalnet::types::content_key::OverlayContentKey, 5 | types::validation::Validator, 6 | }; 7 | use std::{ 8 | fmt, 9 | fmt::Display, 10 | }; 11 | use ssz::{Decode, Encode}; 12 | use ssz_derive::{Decode, Encode}; 13 | 14 | 15 | 16 | // Content keys are used to request or offer specific content data through discv5. Certain overlay networks allow communication of certain types of content. 17 | // Discv5 TalkReq/TalkResp uses these keys to know which overlay-specific req handling logic is needed 18 | 19 | // To Do: 20 | // Consolidate logic 21 | 22 | /// This is a content key in the DAS overlay network. 23 | #[derive(Clone, Debug, Decode, Encode, PartialEq)] 24 | #[ssz(enum_behaviour = "union")] 25 | pub enum DASContentKey { 26 | Sample([u8; 32]), 27 | } 28 | 29 | #[allow(clippy::from_over_into)] 30 | impl Into> for DASContentKey { 31 | fn into(self) -> Vec { 32 | self.as_ssz_bytes() 33 | } 34 | } 35 | 36 | impl TryFrom> for DASContentKey { 37 | type Error = &'static str; 38 | 39 | fn try_from(value: Vec) -> Result { 40 | match DASContentKey::from_ssz_bytes(&value) { 41 | Ok(key) => Ok(key), 42 | Err(_err) => { 43 | println!("unable to decode DASContentKey"); 44 | Err("Unable to decode SSZ") 45 | } 46 | } 47 | } 48 | } 49 | 50 | impl Display for DASContentKey { 51 | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { 52 | let s = match self { 53 | Self::Sample(b) => format!("sample: {}", hex::encode(b)), 54 | }; 55 | 56 | write!(f, "{}", s) 57 | } 58 | } 59 | 60 | impl OverlayContentKey for DASContentKey { 61 | fn content_id(&self) -> [u8; 32] { 62 | match self { 63 | DASContentKey::Sample(b) => b.clone(), 64 | } 65 | } 66 | } 67 | 68 | pub struct DASValidator; 69 | 70 | // Implementing a trait on a type 71 | #[async_trait] 72 | impl Validator for DASValidator { 73 | async fn validate_content( 74 | &self, 75 | content_key: &DASContentKey, 76 | content: &[u8], 77 | ) -> anyhow::Result<()> 78 | // where 79 | // DASContentKey: 'async_trait, 80 | { 81 | match content_key { 82 | DASContentKey::Sample(_) => Ok(()), 83 | } 84 | } 85 | } 86 | 87 | 88 | 89 | 90 | 91 | /// This is a content key in the SecureDAS overlay network. 92 | #[derive(Clone, Debug, Decode, Encode, PartialEq)] 93 | #[ssz(enum_behaviour = "union")] 94 | pub enum SecureDASContentKey { 95 | Sample([u8; 32]), 96 | } 97 | 98 | #[allow(clippy::from_over_into)] 99 | impl Into> for SecureDASContentKey { 100 | fn into(self) -> Vec { 101 | self.as_ssz_bytes() 102 | } 103 | } 104 | 105 | impl TryFrom> for SecureDASContentKey { 106 | type Error = &'static str; 107 | 108 | fn try_from(value: Vec) -> Result { 109 | match SecureDASContentKey::from_ssz_bytes(&value) { 110 | Ok(key) => Ok(key), 111 | Err(_err) => { 112 | println!("unable to decode SecureDASContentKey"); 113 | Err("Unable to decode SSZ") 114 | } 115 | } 116 | } 117 | } 118 | 119 | impl Display for SecureDASContentKey { 120 | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { 121 | let s = match self { 122 | Self::Sample(b) => format!("sample: {}", hex::encode(b)), 123 | }; 124 | 125 | write!(f, "{}", s) 126 | } 127 | } 128 | 129 | impl OverlayContentKey for SecureDASContentKey { 130 | fn content_id(&self) -> [u8; 32] { 131 | match self { 132 | SecureDASContentKey::Sample(b) => b.clone(), 133 | } 134 | } 135 | } 136 | 137 | pub struct SecureDASValidator; 138 | 139 | #[async_trait] 140 | impl Validator for SecureDASValidator { 141 | async fn validate_content( 142 | &self, 143 | content_key: &SecureDASContentKey, 144 | content: &[u8], 145 | ) -> anyhow::Result<()> 146 | // where 147 | // SecureDASContentKey: 'async_trait, 148 | { 149 | match content_key { 150 | SecureDASContentKey::Sample(_) => Ok(()), 151 | } 152 | } 153 | } -------------------------------------------------------------------------------- /src/discovery.rs: -------------------------------------------------------------------------------- 1 | use discv5::{ 2 | Discv5, 3 | Discv5ConfigBuilder, 4 | Discv5Event, 5 | enr, 6 | Enr, 7 | enr::CombinedKey, 8 | }; 9 | use discv5_overlay::portalnet::discovery::Discovery; 10 | use std::{ 11 | net::Ipv4Addr, 12 | str::FromStr, 13 | sync::Arc, 14 | time::Duration, 15 | }; 16 | 17 | /* 18 | The Node Discovery Protocol v5 (discv5) is the UDP-based p2p network that Ethereum Nodes use 19 | to establish network connections with other nodes. It acts as a database of all live nodes 20 | in the network, performing 3 main functions: 21 | 1. Sampling the set of all live node 22 | 2. Searching for nodes providing a certain service (topic advertisement) 23 | 3. Authoratative resolution of node records with a node's id 24 | 25 | Discv5 implements message passing via UDP transport! 26 | This allows for fast ping/pong message between nodes (necessary to establish real connection). 27 | A more formal connection via TCP (or UTP wrt DAS Prototype + Trin?) is then established. 28 | 29 | "For discovery, where a node simply wants to make its presence known in order to then 30 | establish a formal connection with a peer, UDP is sufficient" 31 | */ 32 | 33 | // Questions: 34 | // Why does our discv5 struct have no table entries? 35 | 36 | // Creates discovery protocol struct + service for a node! 37 | pub async fn create_discovery(i: u16) -> Arc { 38 | // UDP port to find peers + IP address to connect to peers to have its record relayed in the DHT 39 | // I believe this is a client-side (ephemeral) port 40 | let port_start = 9000 + i; 41 | let listen_ip = String::from("127.0.0.1").parse::().unwrap(); 42 | 43 | // Generates local node's random enr key and new enr. *Base the secp256k1 on our node's public key* 44 | // There's a lot to talk about wrt ENR things. Create a summary here soon 45 | let enr_key = CombinedKey::generate_secp256k1(); 46 | let enr = { 47 | let mut builder = enr::EnrBuilder::new("v4"); 48 | builder.ip4(listen_ip); 49 | builder.udp4(port_start); 50 | builder.build(&enr_key).unwrap() 51 | }; 52 | 53 | // Discv5 configuration. Following Eric and Timofey's lead 54 | let mut config_builder = Discv5ConfigBuilder::default(); 55 | config_builder.request_retries(10); 56 | config_builder.filter_max_nodes_per_ip(None); 57 | config_builder.request_timeout(Duration::from_secs(60)); 58 | config_builder.query_timeout(Duration::from_secs(60)); 59 | let config = config_builder.build(); 60 | 61 | // Construct the discv5 server 62 | let mut discv5 = Discv5::new(enr, enr_key, config).unwrap(); 63 | let ip4 = discv5.local_enr().ip4().unwrap(); 64 | let udp4 = discv5.local_enr().udp4().unwrap(); 65 | 66 | // Initializes the discv5 service. Starts the required tasks and begins listening on a given UDP SocketAddr 67 | discv5.start(format!("{}:{}", ip4, udp4).parse().unwrap()) 68 | .await 69 | .unwrap(); 70 | 71 | // Initializes our protocol struct 72 | let discovery = Arc::new(Discovery::new_raw(discv5, Default::default())); 73 | 74 | discovery 75 | } -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | #![allow(unused)] 2 | use discv5::{ 3 | Discv5Event, 4 | TalkRequest 5 | }; 6 | use discv5_overlay::{ 7 | portalnet::{ 8 | discovery::Discovery, 9 | overlay_service::{ 10 | OverlayCommand, 11 | OverlayService 12 | }, 13 | storage::MemoryContentStore, 14 | types::{ 15 | distance::XorMetric, 16 | messages::ProtocolId 17 | }, 18 | }, 19 | utp::stream::{UtpListener, UtpListenerEvent} 20 | }; 21 | use futures::StreamExt; 22 | use rand::Rng; 23 | use std::{ 24 | str::FromStr, 25 | sync::Arc, 26 | }; 27 | use tokio::{ 28 | select, 29 | sync::mpsc::{UnboundedReceiver, UnboundedSender} 30 | }; 31 | use tokio_stream::wrappers::ReceiverStream; 32 | use tracing; 33 | use tracing::log::error; 34 | 35 | use crate::{ 36 | node_struct::DASNode, 37 | content_key::{ 38 | DASContentKey, 39 | DASValidator, 40 | SecureDASContentKey, 41 | SecureDASValidator, 42 | } 43 | }; 44 | 45 | pub mod content_key; 46 | pub mod discovery; 47 | pub mod node_struct; 48 | pub mod overlay; 49 | 50 | pub const NUMBER_OF_NODES: usize = 10; 51 | const DAS_PROTOCOL_ID: &str = "DAS"; 52 | const SECURE_DAS_PROTOCOL_ID: &str = "SECURE_DAS"; 53 | 54 | /* 55 | Goals 56 | - Create DASNodes that contain the protocols and subprotocols needed for a backup, 57 | validator-only DHT, discv5 overlay network so participates in the repo can communicate. 58 | 59 | Questions: 60 | - Are data shard validator committees the same committees used within Light Client things? 61 | - Should I create a proxy for message processing to handle my two seperate overlays? 62 | 63 | 64 | Notes: 65 | - Discv5 IP addresses might be wrong 66 | - Trin uses a proxy for message processing: https://github.com/ethereum/trin/blob/master/trin-core/src/portalnet/discovery.rs#L174 67 | */ 68 | 69 | 70 | #[tokio::main] 71 | async fn main() { 72 | //============================ 73 | // Part 1: Node Creation 74 | //============================ 75 | let mut discv5_structs = Vec::new(); 76 | let mut nodes = Vec::new(); 77 | 78 | // Create all Discv5 servers, then pass these into create_nodes. 79 | for i in 0.. NUMBER_OF_NODES { 80 | let discv5_struct = discovery::create_discovery(i as u16).await; 81 | discv5_structs.push(discv5_struct) 82 | } 83 | 84 | // Populate discv5 tables 85 | for i in 0..NUMBER_OF_NODES { 86 | populate_discv5_table(i, discv5_structs.clone()); 87 | } 88 | 89 | // Instantiates protocol structs and message processing within each node 90 | for i in discv5_structs.into_iter() { 91 | let ( 92 | starter_node, 93 | mut overlay_service, 94 | mut secure_overlay_service, 95 | utp_events_tx, 96 | utp_listener_rx 97 | ) = create_node(i).await; 98 | 99 | let mut event_str = ReceiverStream::new(starter_node.discovery.discv5.event_stream().await.unwrap()); 100 | 101 | // Copying the entire node to pass info into our task manager :P 102 | let node = starter_node.clone(); 103 | nodes.push(starter_node); 104 | 105 | // Instantiates task manager to continually process ALL messages for each node (server side of node). 106 | // Wrap message processing code into a function so it's easy to read. 107 | tokio::spawn(async move { 108 | loop { 109 | /// "Select!" randomly picks one of these match branches to process an event 110 | select! { 111 | // =========================== 112 | // Overlay Message Processing: 113 | // =========================== 114 | // Request 115 | Some(command) = overlay_service.command_rx.recv() => { 116 | match command { 117 | OverlayCommand::Request(request) => { 118 | println!("Processing Overlay Request"); 119 | overlay_service.process_request(request) 120 | }, 121 | _ => {} 122 | } 123 | } 124 | // Response 125 | Some(response) = overlay_service.response_rx.recv() => { 126 | // Look up active request that corresponds to the response. 127 | let optional_active_request = overlay_service.active_outgoing_requests.write().remove(&response.request_id); 128 | if let Some(active_request) = optional_active_request { 129 | println!("Send overlay response"); 130 | println!("\n"); 131 | // Send response to responder if present. 132 | if let Some(responder) = active_request.responder { 133 | let _ = responder.send(response.response.clone()); 134 | } 135 | 136 | // Perform background processing. 137 | match response.response { 138 | Ok(response) => overlay_service.process_response(response, active_request.destination, active_request.request, active_request.query_id), 139 | Err(error) => overlay_service.process_request_failure(response.request_id, active_request.destination, error), 140 | } 141 | 142 | } else { 143 | println!("No request found for response"); 144 | } 145 | } 146 | // ================================== 147 | // Secure Overlay Message Processing: 148 | // ================================== 149 | // Request 150 | Some(command) = secure_overlay_service.command_rx.recv() => { 151 | match command { 152 | OverlayCommand::Request(request) => { 153 | println!("Processing Secure Overlay Request"); 154 | secure_overlay_service.process_request(request) 155 | }, 156 | _ => {} 157 | } 158 | } 159 | // Response 160 | Some(response) = secure_overlay_service.response_rx.recv() => { 161 | // Look up active request that corresponds to the response. 162 | let optional_active_request = secure_overlay_service.active_outgoing_requests.write().remove(&response.request_id); 163 | if let Some(active_request) = optional_active_request { 164 | println!("Send secure overlay response"); 165 | println!("\n"); 166 | // Send response to responder if present. 167 | if let Some(responder) = active_request.responder { 168 | let _ = responder.send(response.response.clone()); 169 | } 170 | 171 | // Perform background processing. 172 | match response.response { 173 | Ok(response) => secure_overlay_service.process_response(response, active_request.destination, active_request.request, active_request.query_id), 174 | Err(error) => secure_overlay_service.process_request_failure(response.request_id, active_request.destination, error), 175 | } 176 | 177 | } else { 178 | println!("No request found for response"); 179 | } 180 | } 181 | // ========================== 182 | // Discv5 Message Processing: 183 | // ========================== 184 | // Incoming event 185 | Some(event) = event_str.next() => { 186 | // let chan = format!("{:?} {i}", node.discovery.discv5.local_enr().node_id().to_string()); 187 | match event { 188 | Discv5Event::TalkRequest(req) => { 189 | // println!("Stream {}: Discv5 TalkReq received", chan); 190 | 191 | let node = node.clone(); 192 | tokio::spawn(async move { 193 | let protocol = ProtocolId::from_str(&hex::encode_upper(req.protocol())).unwrap(); 194 | 195 | if protocol == ProtocolId::Custom(DAS_PROTOCOL_ID.to_string()) { 196 | println!("Enters DAS Protocol"); 197 | let talk_resp = match node.overlay.process_one_request(&req).await { 198 | Ok(response) => discv5_overlay::portalnet::types::messages::Message::from(response).into(), 199 | Err(err) => { 200 | error!("Error processing request:"); 201 | // error!("Node {chan} Error processing request: {err}"); 202 | return; 203 | }, 204 | }; 205 | 206 | if let Err(err) = req.respond(talk_resp) { 207 | println!("Error"); 208 | error!("Unable to respond to talk request: "); 209 | // error!("Unable to respond to talk request: {}", err); 210 | return; 211 | } 212 | 213 | return; 214 | } 215 | 216 | // See if we can watch for a secure overlay event. 217 | if protocol == ProtocolId::Custom(SECURE_DAS_PROTOCOL_ID.to_string()) { 218 | println!("Enters SecureDAS Protocol"); 219 | let talk_resp = match node.overlay.process_one_request(&req).await { 220 | // let talk_resp = match node.secure_overlay.process_one_request(&req).await { 221 | Ok(response) => discv5_overlay::portalnet::types::messages::Message::from(response).into(), 222 | Err(err) => { 223 | error!("Node Error processing request: "); 224 | // error!("Node {chan} Error processing request: {err}"); 225 | return; 226 | }, 227 | }; 228 | 229 | if let Err(err) = req.respond(talk_resp) { 230 | println!("Error"); 231 | error!("Unable to respond to talk request: "); 232 | // error!("Unable to respond to talk request: {}", err); 233 | return; 234 | } 235 | 236 | return; 237 | } 238 | // let resp = handle_talk_request(req.node_id().clone(), req.protocol(), req.body().to_vec(), node, opts, enr_to_libp2p, node_ids, i).await; 239 | // let resp = handle_talk_request(req.node_id().clone(), req.protocol(), req.body().to_vec(), node).await; 240 | // req.respond(resp); 241 | }); 242 | }, 243 | _ => {} 244 | } 245 | }, 246 | } 247 | } 248 | }); 249 | } 250 | 251 | // View of a node's routing table 252 | // ---------------------------- 253 | println!("Node's discv5 routing table: {:?}", nodes[2].discovery.connected_peers()); 254 | println!("\n"); 255 | println!("Node's overlay routing table: {:?}", nodes[2].overlay.table_entries_id()); 256 | println!("\n"); 257 | println!("Node's secure overlay routing table: {:?}", nodes[2].secure_overlay.table_entries_id()); 258 | println!("\n"); 259 | 260 | 261 | /* 262 | ================================== 263 | Part 2: Node Communication 264 | ================================== 265 | Creates simple communication between nodes. We need to pass our overlay messages 266 | through peers' routing tables. Implement concurrent communication later. 267 | 268 | Overlay Protocol struct --> calls our Overlay Service 269 | */ 270 | 271 | // Overlay Messaging 272 | // ------------------ 273 | let das_ping = nodes[1].overlay.send_ping(nodes[2].overlay.local_enr()); 274 | das_ping.await; 275 | // TODO: Send find_nodes 276 | // TODO: Send find_content 277 | 278 | // Secure Overlay Messaging 279 | // -------------------------- 280 | let secure_das_ping = nodes[1].secure_overlay.send_ping(nodes[2].secure_overlay.local_enr()); 281 | secure_das_ping.await; 282 | // TODO: Send find_nodes 283 | // TODO: Send find_content 284 | 285 | //================================ 286 | // Sanity Check 287 | //================================ 288 | println!("Overlay Protocol ID: {:?}", nodes[2].overlay.protocol()); 289 | println!("Secure Overlay Protocol ID: {:?}", nodes[2].secure_overlay.protocol()); 290 | 291 | } 292 | 293 | 294 | async fn create_node(discv5_struct: Arc) -> ( 295 | DASNode, 296 | OverlayService, 297 | OverlayService, 298 | UnboundedSender, 299 | UnboundedReceiver 300 | ) { 301 | 302 | // DAS Overlay UTP Channel 303 | let ( utp_events_tx, 304 | utp_listener_tx, mut utp_listener_rx, 305 | mut utp_listener, 306 | ) = UtpListener::new(discv5_struct.clone()); 307 | tokio::spawn(async move { utp_listener.start().await }); 308 | 309 | // Secure DAS Overlay UTP Channel 310 | let ( secure_utp_events_tx, 311 | secure_utp_listener_tx, mut secure_utp_listener_rx, 312 | mut secure_utp_listener, 313 | ) = UtpListener::new(discv5_struct.clone()); 314 | tokio::spawn(async move { secure_utp_listener.start().await }); 315 | 316 | // DAS and Secure DAS Overlay Protocols 317 | let (overlay, overlay_service) = overlay::create_das_overlay(discv5_struct.clone(), utp_listener_tx).await; 318 | let (secure_overlay, secure_overlay_service) = overlay::create_secure_das_overlay(discv5_struct.clone(), secure_utp_listener_tx).await; 319 | 320 | // Samples: TODO 321 | 322 | // Handled_ids: TODO 323 | 324 | // Creates node (Timofey creates node with utp_listener_tx) 325 | let mut my_node = DASNode::new(discv5_struct, overlay, secure_overlay); 326 | 327 | ( 328 | my_node, 329 | overlay_service, 330 | secure_overlay_service, 331 | utp_events_tx, 332 | utp_listener_rx 333 | ) 334 | } 335 | 336 | 337 | // Adds nodes from within the simulation to routing tables. 338 | fn populate_discv5_table(local_index: usize, mut structs: Vec>) { 339 | // Number of peers a node adds to their routing table 340 | let mut n = 3; 341 | let mut used_indexes = Vec::new(); 342 | 343 | while n != 0 { 344 | let mut invalid_index = false; 345 | let mut rng = rand::thread_rng(); 346 | let rand = rng.gen_range(0usize..NUMBER_OF_NODES); 347 | 348 | // Makes sure we aren't duplicating nodes within our routing table 349 | for i in 0..used_indexes.len() { 350 | if rand == used_indexes[i] || rand == local_index { 351 | invalid_index = true; 352 | } 353 | } 354 | 355 | if invalid_index == false { 356 | match structs[local_index].discv5.add_enr(structs[rand].discv5.local_enr().clone()) { 357 | Ok(_) => { 358 | used_indexes.push(rand); 359 | n -= 1; 360 | }, 361 | Err(_) => continue, 362 | } 363 | } 364 | } 365 | } -------------------------------------------------------------------------------- /src/node_struct.rs: -------------------------------------------------------------------------------- 1 | use discv5_overlay::{ 2 | portalnet::{ 3 | discovery::Discovery, 4 | overlay::OverlayProtocol, 5 | storage::MemoryContentStore, 6 | types::distance::XorMetric 7 | }, 8 | }; 9 | use std::sync::Arc; 10 | 11 | use crate::content_key::{ 12 | DASContentKey, 13 | DASValidator, 14 | SecureDASContentKey, 15 | SecureDASValidator, 16 | }; 17 | 18 | 19 | #[derive(Clone)] 20 | pub struct DASNode { 21 | pub discovery: Arc, 22 | pub overlay: Arc>, 23 | pub secure_overlay: Arc>, 24 | 25 | samples: [u8; 8], 26 | pub handled_ids: i32, 27 | } 28 | 29 | // The DASNode within Model-DAS returns itself AND an overlay service! 30 | impl DASNode { 31 | pub fn new( 32 | discovery: Arc, 33 | overlay: Arc>, 34 | secure_overlay: Arc>, 35 | ) -> Self { 36 | Self { 37 | discovery, 38 | overlay, 39 | secure_overlay, 40 | samples: [0; 8], 41 | handled_ids: 0, 42 | } 43 | } 44 | } -------------------------------------------------------------------------------- /src/overlay.rs: -------------------------------------------------------------------------------- 1 | use discv5_overlay::{ 2 | portalnet::{ 3 | discovery::Discovery, 4 | overlay::{ 5 | OverlayConfig, 6 | OverlayProtocol 7 | }, 8 | overlay_service::OverlayService, 9 | storage::{DistanceFunction, MemoryContentStore}, 10 | types::{ 11 | distance::{Distance, XorMetric}, 12 | messages::ProtocolId 13 | } 14 | }, 15 | utp::stream::UtpListenerRequest, 16 | }; 17 | use std::{ 18 | sync::Arc, 19 | time::Duration 20 | }; 21 | use tokio::sync::mpsc; 22 | 23 | use crate::content_key::{ 24 | DASContentKey, 25 | DASValidator, 26 | SecureDASContentKey, 27 | SecureDASValidator, 28 | }; 29 | 30 | const DAS_PROTOCOL_ID: &str = "DAS"; 31 | const SECURE_DAS_PROTOCOL_ID: &str = "SECURE_DAS"; 32 | 33 | 34 | /* 35 | "The Overlay protocol is a layer on top of discv5 that handles all requests from the overlay networks 36 | (state, history etc.) and dispatch them to the discv5 protocol TalkReq. Each network should 37 | implement the overlay protocol and the overlay protocol is where we can encapsulate the logic for 38 | handling common network requests/responses." 39 | -Trin repo 40 | 41 | 42 | Note: 43 | - The Validator type what tells our OverlayProtocol::new( ) the type of overlay we're creating 44 | - To do: generalize create_overlay function 45 | */ 46 | 47 | 48 | // ----------------------------------- 49 | // INTERMEDIATE PHASE 50 | // 51 | // Just implement overlays seperately. 52 | // ----------------------------------- 53 | // 54 | // I'm spending a lot of time on complexities within Rust. Make simple overlay creation functions for now. 55 | // Circle back once I've implemented the message proxy 56 | pub async fn create_das_overlay(discovery: Arc, utp_listener_tx: mpsc::UnboundedSender) -> ( 57 | Arc>, 58 | OverlayService, 59 | ){ 60 | let config = OverlayConfig { 61 | bootnode_enrs: discovery.discv5.table_entries_enr(), 62 | ping_queue_interval: Some(Duration::from_secs(10000)), 63 | query_num_results: usize::MAX, 64 | query_timeout: Duration::from_secs(60), 65 | query_peer_timeout: Duration::from_secs(30), 66 | ..Default::default() 67 | }; 68 | // println!("Overlay config bootnodes *OVERLAY*: {:?}", config.bootnode_enrs); 69 | let storage = { 70 | Arc::new(parking_lot::RwLock::new(MemoryContentStore::new( 71 | discovery.discv5.local_enr().node_id(), 72 | DistanceFunction::Xor, 73 | ))) 74 | }; 75 | 76 | let protocol = ProtocolId::Custom(DAS_PROTOCOL_ID.to_string()); 77 | let validator = Arc::new(DASValidator); 78 | 79 | let (overlay, service) = OverlayProtocol::new( 80 | config, 81 | discovery.clone(), 82 | utp_listener_tx, 83 | storage, 84 | Distance::MAX, 85 | protocol, 86 | validator, 87 | ); 88 | 89 | // println!("Node's overlay kbuckets table: {:?}", overlay); 90 | 91 | let overlay = Arc::new(overlay); 92 | ( 93 | overlay, 94 | service 95 | ) 96 | } 97 | 98 | 99 | pub async fn create_secure_das_overlay(discovery: Arc, utp_listener_tx: mpsc::UnboundedSender) -> ( 100 | Arc>, 101 | OverlayService, 102 | ){ 103 | 104 | let config = OverlayConfig { 105 | bootnode_enrs: discovery.discv5.table_entries_enr(), 106 | ping_queue_interval: Some(Duration::from_secs(10000)), 107 | query_num_results: usize::MAX, 108 | query_timeout: Duration::from_secs(60), 109 | query_peer_timeout: Duration::from_secs(30), 110 | ..Default::default() 111 | }; 112 | 113 | let storage = { 114 | Arc::new(parking_lot::RwLock::new(MemoryContentStore::new( 115 | discovery.discv5.local_enr().node_id(), 116 | DistanceFunction::Xor, 117 | ))) 118 | }; 119 | 120 | let protocol = ProtocolId::Custom(SECURE_DAS_PROTOCOL_ID.to_string()); 121 | let validator = Arc::new(SecureDASValidator); 122 | 123 | let (overlay, service) = OverlayProtocol::new( 124 | config, 125 | discovery.clone(), 126 | utp_listener_tx, 127 | storage, 128 | Distance::MAX, 129 | protocol, 130 | validator, 131 | ); 132 | 133 | let overlay = Arc::new(overlay); 134 | ( 135 | overlay, 136 | service 137 | ) 138 | } -------------------------------------------------------------------------------- /src/scratch.rs: -------------------------------------------------------------------------------- 1 | pub fn scratch() { 2 | } --------------------------------------------------------------------------------