├── .gitignore ├── .gitmodules ├── Cargo.lock ├── Cargo.toml ├── LICENSE ├── README.md ├── examples └── backrun │ ├── Cargo.toml │ ├── README.md │ └── src │ └── main.rs ├── protos ├── Cargo.toml ├── build.rs └── src │ └── lib.rs ├── rust-toolchain.toml ├── rustfmt.toml └── searcher_client ├── Cargo.toml └── src ├── client_interceptor.rs ├── cluster_data_impl.rs ├── convert.rs └── lib.rs /.gitignore: -------------------------------------------------------------------------------- 1 | .idea/ 2 | target/ 3 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "protos/mev-protos"] 2 | path = protos/mev-protos 3 | url = git@github.com:jito-labs/mev-protos.git 4 | -------------------------------------------------------------------------------- /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 = "Inflector" 7 | version = "0.11.4" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3" 10 | dependencies = [ 11 | "lazy_static", 12 | "regex", 13 | ] 14 | 15 | [[package]] 16 | name = "adler" 17 | version = "1.0.2" 18 | source = "registry+https://github.com/rust-lang/crates.io-index" 19 | checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" 20 | 21 | [[package]] 22 | name = "aead" 23 | version = "0.4.3" 24 | source = "registry+https://github.com/rust-lang/crates.io-index" 25 | checksum = "0b613b8e1e3cf911a086f53f03bf286f52fd7a7258e4fa606f0ef220d39d8877" 26 | dependencies = [ 27 | "generic-array", 28 | ] 29 | 30 | [[package]] 31 | name = "aes" 32 | version = "0.7.5" 33 | source = "registry+https://github.com/rust-lang/crates.io-index" 34 | checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8" 35 | dependencies = [ 36 | "cfg-if", 37 | "cipher 0.3.0", 38 | "cpufeatures", 39 | "opaque-debug", 40 | ] 41 | 42 | [[package]] 43 | name = "aes-gcm-siv" 44 | version = "0.10.3" 45 | source = "registry+https://github.com/rust-lang/crates.io-index" 46 | checksum = "589c637f0e68c877bbd59a4599bbe849cac8e5f3e4b5a3ebae8f528cd218dcdc" 47 | dependencies = [ 48 | "aead", 49 | "aes", 50 | "cipher 0.3.0", 51 | "ctr", 52 | "polyval", 53 | "subtle", 54 | "zeroize", 55 | ] 56 | 57 | [[package]] 58 | name = "ahash" 59 | version = "0.7.6" 60 | source = "registry+https://github.com/rust-lang/crates.io-index" 61 | checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" 62 | dependencies = [ 63 | "getrandom 0.2.8", 64 | "once_cell", 65 | "version_check", 66 | ] 67 | 68 | [[package]] 69 | name = "aho-corasick" 70 | version = "0.7.20" 71 | source = "registry+https://github.com/rust-lang/crates.io-index" 72 | checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac" 73 | dependencies = [ 74 | "memchr", 75 | ] 76 | 77 | [[package]] 78 | name = "alloc-no-stdlib" 79 | version = "2.0.4" 80 | source = "registry+https://github.com/rust-lang/crates.io-index" 81 | checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" 82 | 83 | [[package]] 84 | name = "alloc-stdlib" 85 | version = "0.2.2" 86 | source = "registry+https://github.com/rust-lang/crates.io-index" 87 | checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" 88 | dependencies = [ 89 | "alloc-no-stdlib", 90 | ] 91 | 92 | [[package]] 93 | name = "anchor-attribute-access-control" 94 | version = "0.24.2" 95 | source = "git+https://github.com/jito-foundation/jito-solana.git?tag=v1.14.16-jito#9857335b7453be86795f62380c7a8f79e2b84f27" 96 | dependencies = [ 97 | "anchor-syn", 98 | "anyhow", 99 | "proc-macro2 1.0.56", 100 | "quote 1.0.26", 101 | "regex", 102 | "syn 1.0.109", 103 | ] 104 | 105 | [[package]] 106 | name = "anchor-attribute-account" 107 | version = "0.24.2" 108 | source = "git+https://github.com/jito-foundation/jito-solana.git?tag=v1.14.16-jito#9857335b7453be86795f62380c7a8f79e2b84f27" 109 | dependencies = [ 110 | "anchor-syn", 111 | "anyhow", 112 | "bs58 0.4.0", 113 | "proc-macro2 1.0.56", 114 | "quote 1.0.26", 115 | "rustversion", 116 | "syn 1.0.109", 117 | ] 118 | 119 | [[package]] 120 | name = "anchor-attribute-constant" 121 | version = "0.24.2" 122 | source = "git+https://github.com/jito-foundation/jito-solana.git?tag=v1.14.16-jito#9857335b7453be86795f62380c7a8f79e2b84f27" 123 | dependencies = [ 124 | "anchor-syn", 125 | "proc-macro2 1.0.56", 126 | "syn 1.0.109", 127 | ] 128 | 129 | [[package]] 130 | name = "anchor-attribute-error" 131 | version = "0.24.2" 132 | source = "git+https://github.com/jito-foundation/jito-solana.git?tag=v1.14.16-jito#9857335b7453be86795f62380c7a8f79e2b84f27" 133 | dependencies = [ 134 | "anchor-syn", 135 | "proc-macro2 1.0.56", 136 | "quote 1.0.26", 137 | "syn 1.0.109", 138 | ] 139 | 140 | [[package]] 141 | name = "anchor-attribute-event" 142 | version = "0.24.2" 143 | source = "git+https://github.com/jito-foundation/jito-solana.git?tag=v1.14.16-jito#9857335b7453be86795f62380c7a8f79e2b84f27" 144 | dependencies = [ 145 | "anchor-syn", 146 | "anyhow", 147 | "proc-macro2 1.0.56", 148 | "quote 1.0.26", 149 | "syn 1.0.109", 150 | ] 151 | 152 | [[package]] 153 | name = "anchor-attribute-interface" 154 | version = "0.24.2" 155 | source = "git+https://github.com/jito-foundation/jito-solana.git?tag=v1.14.16-jito#9857335b7453be86795f62380c7a8f79e2b84f27" 156 | dependencies = [ 157 | "anchor-syn", 158 | "anyhow", 159 | "heck 0.3.3", 160 | "proc-macro2 1.0.56", 161 | "quote 1.0.26", 162 | "syn 1.0.109", 163 | ] 164 | 165 | [[package]] 166 | name = "anchor-attribute-program" 167 | version = "0.24.2" 168 | source = "git+https://github.com/jito-foundation/jito-solana.git?tag=v1.14.16-jito#9857335b7453be86795f62380c7a8f79e2b84f27" 169 | dependencies = [ 170 | "anchor-syn", 171 | "anyhow", 172 | "proc-macro2 1.0.56", 173 | "quote 1.0.26", 174 | "syn 1.0.109", 175 | ] 176 | 177 | [[package]] 178 | name = "anchor-attribute-state" 179 | version = "0.24.2" 180 | source = "git+https://github.com/jito-foundation/jito-solana.git?tag=v1.14.16-jito#9857335b7453be86795f62380c7a8f79e2b84f27" 181 | dependencies = [ 182 | "anchor-syn", 183 | "anyhow", 184 | "proc-macro2 1.0.56", 185 | "quote 1.0.26", 186 | "syn 1.0.109", 187 | ] 188 | 189 | [[package]] 190 | name = "anchor-derive-accounts" 191 | version = "0.24.2" 192 | source = "git+https://github.com/jito-foundation/jito-solana.git?tag=v1.14.16-jito#9857335b7453be86795f62380c7a8f79e2b84f27" 193 | dependencies = [ 194 | "anchor-syn", 195 | "anyhow", 196 | "proc-macro2 1.0.56", 197 | "quote 1.0.26", 198 | "syn 1.0.109", 199 | ] 200 | 201 | [[package]] 202 | name = "anchor-lang" 203 | version = "0.24.2" 204 | source = "git+https://github.com/jito-foundation/jito-solana.git?tag=v1.14.16-jito#9857335b7453be86795f62380c7a8f79e2b84f27" 205 | dependencies = [ 206 | "anchor-attribute-access-control", 207 | "anchor-attribute-account", 208 | "anchor-attribute-constant", 209 | "anchor-attribute-error", 210 | "anchor-attribute-event", 211 | "anchor-attribute-interface", 212 | "anchor-attribute-program", 213 | "anchor-attribute-state", 214 | "anchor-derive-accounts", 215 | "arrayref", 216 | "base64 0.13.1", 217 | "bincode", 218 | "borsh", 219 | "bytemuck", 220 | "solana-program 1.14.16", 221 | "thiserror", 222 | ] 223 | 224 | [[package]] 225 | name = "anchor-syn" 226 | version = "0.24.2" 227 | source = "git+https://github.com/jito-foundation/jito-solana.git?tag=v1.14.16-jito#9857335b7453be86795f62380c7a8f79e2b84f27" 228 | dependencies = [ 229 | "anyhow", 230 | "bs58 0.3.1", 231 | "heck 0.3.3", 232 | "proc-macro2 1.0.56", 233 | "proc-macro2-diagnostics", 234 | "quote 1.0.26", 235 | "serde", 236 | "serde_json", 237 | "sha2 0.9.9", 238 | "syn 1.0.109", 239 | "thiserror", 240 | ] 241 | 242 | [[package]] 243 | name = "android_system_properties" 244 | version = "0.1.5" 245 | source = "registry+https://github.com/rust-lang/crates.io-index" 246 | checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" 247 | dependencies = [ 248 | "libc", 249 | ] 250 | 251 | [[package]] 252 | name = "ansi_term" 253 | version = "0.12.1" 254 | source = "registry+https://github.com/rust-lang/crates.io-index" 255 | checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" 256 | dependencies = [ 257 | "winapi", 258 | ] 259 | 260 | [[package]] 261 | name = "anstream" 262 | version = "0.2.6" 263 | source = "registry+https://github.com/rust-lang/crates.io-index" 264 | checksum = "342258dd14006105c2b75ab1bd7543a03bdf0cfc94383303ac212a04939dff6f" 265 | dependencies = [ 266 | "anstyle", 267 | "anstyle-parse", 268 | "anstyle-wincon", 269 | "concolor-override", 270 | "concolor-query", 271 | "is-terminal", 272 | "utf8parse", 273 | ] 274 | 275 | [[package]] 276 | name = "anstyle" 277 | version = "0.3.5" 278 | source = "registry+https://github.com/rust-lang/crates.io-index" 279 | checksum = "23ea9e81bd02e310c216d080f6223c179012256e5151c41db88d12c88a1684d2" 280 | 281 | [[package]] 282 | name = "anstyle-parse" 283 | version = "0.1.1" 284 | source = "registry+https://github.com/rust-lang/crates.io-index" 285 | checksum = "a7d1bb534e9efed14f3e5f44e7dd1a4f709384023a4165199a4241e18dff0116" 286 | dependencies = [ 287 | "utf8parse", 288 | ] 289 | 290 | [[package]] 291 | name = "anstyle-wincon" 292 | version = "0.2.0" 293 | source = "registry+https://github.com/rust-lang/crates.io-index" 294 | checksum = "c3127af6145b149f3287bb9a0d10ad9c5692dba8c53ad48285e5bec4063834fa" 295 | dependencies = [ 296 | "anstyle", 297 | "windows-sys 0.45.0", 298 | ] 299 | 300 | [[package]] 301 | name = "anyhow" 302 | version = "1.0.69" 303 | source = "registry+https://github.com/rust-lang/crates.io-index" 304 | checksum = "224afbd727c3d6e4b90103ece64b8d1b67fbb1973b1046c2281eed3f3803f800" 305 | 306 | [[package]] 307 | name = "arrayref" 308 | version = "0.3.6" 309 | source = "registry+https://github.com/rust-lang/crates.io-index" 310 | checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" 311 | 312 | [[package]] 313 | name = "arrayvec" 314 | version = "0.7.2" 315 | source = "registry+https://github.com/rust-lang/crates.io-index" 316 | checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" 317 | 318 | [[package]] 319 | name = "asn1-rs" 320 | version = "0.5.2" 321 | source = "registry+https://github.com/rust-lang/crates.io-index" 322 | checksum = "7f6fd5ddaf0351dff5b8da21b2fb4ff8e08ddd02857f0bf69c47639106c0fff0" 323 | dependencies = [ 324 | "asn1-rs-derive", 325 | "asn1-rs-impl", 326 | "displaydoc", 327 | "nom", 328 | "num-traits", 329 | "rusticata-macros", 330 | "thiserror", 331 | "time 0.3.20", 332 | ] 333 | 334 | [[package]] 335 | name = "asn1-rs-derive" 336 | version = "0.4.0" 337 | source = "registry+https://github.com/rust-lang/crates.io-index" 338 | checksum = "726535892e8eae7e70657b4c8ea93d26b8553afb1ce617caee529ef96d7dee6c" 339 | dependencies = [ 340 | "proc-macro2 1.0.56", 341 | "quote 1.0.26", 342 | "syn 1.0.109", 343 | "synstructure", 344 | ] 345 | 346 | [[package]] 347 | name = "asn1-rs-impl" 348 | version = "0.1.0" 349 | source = "registry+https://github.com/rust-lang/crates.io-index" 350 | checksum = "2777730b2039ac0f95f093556e61b6d26cebed5393ca6f152717777cec3a42ed" 351 | dependencies = [ 352 | "proc-macro2 1.0.56", 353 | "quote 1.0.26", 354 | "syn 1.0.109", 355 | ] 356 | 357 | [[package]] 358 | name = "assert_matches" 359 | version = "1.5.0" 360 | source = "registry+https://github.com/rust-lang/crates.io-index" 361 | checksum = "9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9" 362 | 363 | [[package]] 364 | name = "async-compression" 365 | version = "0.3.15" 366 | source = "registry+https://github.com/rust-lang/crates.io-index" 367 | checksum = "942c7cd7ae39e91bde4820d74132e9862e62c2f386c3aa90ccf55949f5bad63a" 368 | dependencies = [ 369 | "brotli", 370 | "flate2", 371 | "futures-core", 372 | "memchr", 373 | "pin-project-lite", 374 | "tokio", 375 | ] 376 | 377 | [[package]] 378 | name = "async-mutex" 379 | version = "1.4.0" 380 | source = "registry+https://github.com/rust-lang/crates.io-index" 381 | checksum = "479db852db25d9dbf6204e6cb6253698f175c15726470f78af0d918e99d6156e" 382 | dependencies = [ 383 | "event-listener", 384 | ] 385 | 386 | [[package]] 387 | name = "async-stream" 388 | version = "0.3.4" 389 | source = "registry+https://github.com/rust-lang/crates.io-index" 390 | checksum = "ad445822218ce64be7a341abfb0b1ea43b5c23aa83902542a4542e78309d8e5e" 391 | dependencies = [ 392 | "async-stream-impl", 393 | "futures-core", 394 | "pin-project-lite", 395 | ] 396 | 397 | [[package]] 398 | name = "async-stream-impl" 399 | version = "0.3.4" 400 | source = "registry+https://github.com/rust-lang/crates.io-index" 401 | checksum = "e4655ae1a7b0cdf149156f780c5bf3f1352bc53cbd9e0a361a7ef7b22947e965" 402 | dependencies = [ 403 | "proc-macro2 1.0.56", 404 | "quote 1.0.26", 405 | "syn 1.0.109", 406 | ] 407 | 408 | [[package]] 409 | name = "async-trait" 410 | version = "0.1.66" 411 | source = "registry+https://github.com/rust-lang/crates.io-index" 412 | checksum = "b84f9ebcc6c1f5b8cb160f6990096a5c127f423fcb6e1ccc46c370cbdfb75dfc" 413 | dependencies = [ 414 | "proc-macro2 1.0.56", 415 | "quote 1.0.26", 416 | "syn 1.0.109", 417 | ] 418 | 419 | [[package]] 420 | name = "atty" 421 | version = "0.2.14" 422 | source = "registry+https://github.com/rust-lang/crates.io-index" 423 | checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" 424 | dependencies = [ 425 | "hermit-abi 0.1.19", 426 | "libc", 427 | "winapi", 428 | ] 429 | 430 | [[package]] 431 | name = "autocfg" 432 | version = "1.1.0" 433 | source = "registry+https://github.com/rust-lang/crates.io-index" 434 | checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" 435 | 436 | [[package]] 437 | name = "axum" 438 | version = "0.6.11" 439 | source = "registry+https://github.com/rust-lang/crates.io-index" 440 | checksum = "13d8068b6ccb8b34db9de397c7043f91db8b4c66414952c6db944f238c4d3db3" 441 | dependencies = [ 442 | "async-trait", 443 | "axum-core", 444 | "bitflags", 445 | "bytes", 446 | "futures-util", 447 | "http", 448 | "http-body", 449 | "hyper", 450 | "itoa", 451 | "matchit", 452 | "memchr", 453 | "mime", 454 | "percent-encoding", 455 | "pin-project-lite", 456 | "rustversion", 457 | "serde", 458 | "sync_wrapper", 459 | "tower", 460 | "tower-layer", 461 | "tower-service", 462 | ] 463 | 464 | [[package]] 465 | name = "axum-core" 466 | version = "0.3.3" 467 | source = "registry+https://github.com/rust-lang/crates.io-index" 468 | checksum = "b2f958c80c248b34b9a877a643811be8dbca03ca5ba827f2b63baf3a81e5fc4e" 469 | dependencies = [ 470 | "async-trait", 471 | "bytes", 472 | "futures-util", 473 | "http", 474 | "http-body", 475 | "mime", 476 | "rustversion", 477 | "tower-layer", 478 | "tower-service", 479 | ] 480 | 481 | [[package]] 482 | name = "base64" 483 | version = "0.12.3" 484 | source = "registry+https://github.com/rust-lang/crates.io-index" 485 | checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff" 486 | 487 | [[package]] 488 | name = "base64" 489 | version = "0.13.1" 490 | source = "registry+https://github.com/rust-lang/crates.io-index" 491 | checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" 492 | 493 | [[package]] 494 | name = "base64" 495 | version = "0.21.0" 496 | source = "registry+https://github.com/rust-lang/crates.io-index" 497 | checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a" 498 | 499 | [[package]] 500 | name = "base64ct" 501 | version = "1.6.0" 502 | source = "registry+https://github.com/rust-lang/crates.io-index" 503 | checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" 504 | 505 | [[package]] 506 | name = "bincode" 507 | version = "1.3.3" 508 | source = "registry+https://github.com/rust-lang/crates.io-index" 509 | checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" 510 | dependencies = [ 511 | "serde", 512 | ] 513 | 514 | [[package]] 515 | name = "bitflags" 516 | version = "1.3.2" 517 | source = "registry+https://github.com/rust-lang/crates.io-index" 518 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 519 | 520 | [[package]] 521 | name = "bitmaps" 522 | version = "2.1.0" 523 | source = "registry+https://github.com/rust-lang/crates.io-index" 524 | checksum = "031043d04099746d8db04daf1fa424b2bc8bd69d92b25962dcde24da39ab64a2" 525 | dependencies = [ 526 | "typenum", 527 | ] 528 | 529 | [[package]] 530 | name = "blake3" 531 | version = "1.3.3" 532 | source = "registry+https://github.com/rust-lang/crates.io-index" 533 | checksum = "42ae2468a89544a466886840aa467a25b766499f4f04bf7d9fcd10ecee9fccef" 534 | dependencies = [ 535 | "arrayref", 536 | "arrayvec", 537 | "cc", 538 | "cfg-if", 539 | "constant_time_eq", 540 | "digest 0.10.6", 541 | ] 542 | 543 | [[package]] 544 | name = "block-buffer" 545 | version = "0.9.0" 546 | source = "registry+https://github.com/rust-lang/crates.io-index" 547 | checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" 548 | dependencies = [ 549 | "block-padding", 550 | "generic-array", 551 | ] 552 | 553 | [[package]] 554 | name = "block-buffer" 555 | version = "0.10.4" 556 | source = "registry+https://github.com/rust-lang/crates.io-index" 557 | checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" 558 | dependencies = [ 559 | "generic-array", 560 | ] 561 | 562 | [[package]] 563 | name = "block-padding" 564 | version = "0.2.1" 565 | source = "registry+https://github.com/rust-lang/crates.io-index" 566 | checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" 567 | 568 | [[package]] 569 | name = "borsh" 570 | version = "0.9.3" 571 | source = "registry+https://github.com/rust-lang/crates.io-index" 572 | checksum = "15bf3650200d8bffa99015595e10f1fbd17de07abbc25bb067da79e769939bfa" 573 | dependencies = [ 574 | "borsh-derive", 575 | "hashbrown 0.11.2", 576 | ] 577 | 578 | [[package]] 579 | name = "borsh-derive" 580 | version = "0.9.3" 581 | source = "registry+https://github.com/rust-lang/crates.io-index" 582 | checksum = "6441c552f230375d18e3cc377677914d2ca2b0d36e52129fe15450a2dce46775" 583 | dependencies = [ 584 | "borsh-derive-internal", 585 | "borsh-schema-derive-internal", 586 | "proc-macro-crate 0.1.5", 587 | "proc-macro2 1.0.56", 588 | "syn 1.0.109", 589 | ] 590 | 591 | [[package]] 592 | name = "borsh-derive-internal" 593 | version = "0.9.3" 594 | source = "registry+https://github.com/rust-lang/crates.io-index" 595 | checksum = "5449c28a7b352f2d1e592a8a28bf139bc71afb0764a14f3c02500935d8c44065" 596 | dependencies = [ 597 | "proc-macro2 1.0.56", 598 | "quote 1.0.26", 599 | "syn 1.0.109", 600 | ] 601 | 602 | [[package]] 603 | name = "borsh-schema-derive-internal" 604 | version = "0.9.3" 605 | source = "registry+https://github.com/rust-lang/crates.io-index" 606 | checksum = "cdbd5696d8bfa21d53d9fe39a714a18538bad11492a42d066dbbc395fb1951c0" 607 | dependencies = [ 608 | "proc-macro2 1.0.56", 609 | "quote 1.0.26", 610 | "syn 1.0.109", 611 | ] 612 | 613 | [[package]] 614 | name = "brotli" 615 | version = "3.3.4" 616 | source = "registry+https://github.com/rust-lang/crates.io-index" 617 | checksum = "a1a0b1dbcc8ae29329621f8d4f0d835787c1c38bb1401979b49d13b0b305ff68" 618 | dependencies = [ 619 | "alloc-no-stdlib", 620 | "alloc-stdlib", 621 | "brotli-decompressor", 622 | ] 623 | 624 | [[package]] 625 | name = "brotli-decompressor" 626 | version = "2.3.4" 627 | source = "registry+https://github.com/rust-lang/crates.io-index" 628 | checksum = "4b6561fd3f895a11e8f72af2cb7d22e08366bebc2b6b57f7744c4bda27034744" 629 | dependencies = [ 630 | "alloc-no-stdlib", 631 | "alloc-stdlib", 632 | ] 633 | 634 | [[package]] 635 | name = "bs58" 636 | version = "0.3.1" 637 | source = "registry+https://github.com/rust-lang/crates.io-index" 638 | checksum = "476e9cd489f9e121e02ffa6014a8ef220ecb15c05ed23fc34cca13925dc283fb" 639 | 640 | [[package]] 641 | name = "bs58" 642 | version = "0.4.0" 643 | source = "registry+https://github.com/rust-lang/crates.io-index" 644 | checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" 645 | 646 | [[package]] 647 | name = "bumpalo" 648 | version = "3.12.0" 649 | source = "registry+https://github.com/rust-lang/crates.io-index" 650 | checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535" 651 | 652 | [[package]] 653 | name = "bv" 654 | version = "0.11.1" 655 | source = "registry+https://github.com/rust-lang/crates.io-index" 656 | checksum = "8834bb1d8ee5dc048ee3124f2c7c1afcc6bc9aed03f11e9dfd8c69470a5db340" 657 | dependencies = [ 658 | "feature-probe", 659 | "serde", 660 | ] 661 | 662 | [[package]] 663 | name = "bytemuck" 664 | version = "1.13.1" 665 | source = "registry+https://github.com/rust-lang/crates.io-index" 666 | checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea" 667 | dependencies = [ 668 | "bytemuck_derive", 669 | ] 670 | 671 | [[package]] 672 | name = "bytemuck_derive" 673 | version = "1.4.0" 674 | source = "registry+https://github.com/rust-lang/crates.io-index" 675 | checksum = "1aca418a974d83d40a0c1f0c5cba6ff4bc28d8df099109ca459a2118d40b6322" 676 | dependencies = [ 677 | "proc-macro2 1.0.56", 678 | "quote 1.0.26", 679 | "syn 1.0.109", 680 | ] 681 | 682 | [[package]] 683 | name = "byteorder" 684 | version = "1.4.3" 685 | source = "registry+https://github.com/rust-lang/crates.io-index" 686 | checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" 687 | 688 | [[package]] 689 | name = "bytes" 690 | version = "1.4.0" 691 | source = "registry+https://github.com/rust-lang/crates.io-index" 692 | checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" 693 | 694 | [[package]] 695 | name = "caps" 696 | version = "0.5.5" 697 | source = "registry+https://github.com/rust-lang/crates.io-index" 698 | checksum = "190baaad529bcfbde9e1a19022c42781bdb6ff9de25721abdb8fd98c0807730b" 699 | dependencies = [ 700 | "libc", 701 | "thiserror", 702 | ] 703 | 704 | [[package]] 705 | name = "cc" 706 | version = "1.0.79" 707 | source = "registry+https://github.com/rust-lang/crates.io-index" 708 | checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" 709 | dependencies = [ 710 | "jobserver", 711 | ] 712 | 713 | [[package]] 714 | name = "cfg-if" 715 | version = "1.0.0" 716 | source = "registry+https://github.com/rust-lang/crates.io-index" 717 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 718 | 719 | [[package]] 720 | name = "chrono" 721 | version = "0.4.24" 722 | source = "registry+https://github.com/rust-lang/crates.io-index" 723 | checksum = "4e3c5919066adf22df73762e50cffcde3a758f2a848b113b586d1f86728b673b" 724 | dependencies = [ 725 | "iana-time-zone", 726 | "js-sys", 727 | "num-integer", 728 | "num-traits", 729 | "serde", 730 | "time 0.1.45", 731 | "wasm-bindgen", 732 | "winapi", 733 | ] 734 | 735 | [[package]] 736 | name = "cipher" 737 | version = "0.3.0" 738 | source = "registry+https://github.com/rust-lang/crates.io-index" 739 | checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7" 740 | dependencies = [ 741 | "generic-array", 742 | ] 743 | 744 | [[package]] 745 | name = "cipher" 746 | version = "0.4.4" 747 | source = "registry+https://github.com/rust-lang/crates.io-index" 748 | checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" 749 | dependencies = [ 750 | "crypto-common", 751 | "inout", 752 | ] 753 | 754 | [[package]] 755 | name = "clap" 756 | version = "2.34.0" 757 | source = "registry+https://github.com/rust-lang/crates.io-index" 758 | checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" 759 | dependencies = [ 760 | "ansi_term", 761 | "atty", 762 | "bitflags", 763 | "strsim 0.8.0", 764 | "textwrap 0.11.0", 765 | "unicode-width", 766 | "vec_map", 767 | ] 768 | 769 | [[package]] 770 | name = "clap" 771 | version = "3.2.23" 772 | source = "registry+https://github.com/rust-lang/crates.io-index" 773 | checksum = "71655c45cb9845d3270c9d6df84ebe72b4dad3c2ba3f7023ad47c144e4e473a5" 774 | dependencies = [ 775 | "atty", 776 | "bitflags", 777 | "clap_lex 0.2.4", 778 | "indexmap", 779 | "once_cell", 780 | "strsim 0.10.0", 781 | "termcolor", 782 | "textwrap 0.16.0", 783 | ] 784 | 785 | [[package]] 786 | name = "clap" 787 | version = "4.2.1" 788 | source = "registry+https://github.com/rust-lang/crates.io-index" 789 | checksum = "046ae530c528f252094e4a77886ee1374437744b2bff1497aa898bbddbbb29b3" 790 | dependencies = [ 791 | "clap_builder", 792 | "clap_derive", 793 | "once_cell", 794 | ] 795 | 796 | [[package]] 797 | name = "clap_builder" 798 | version = "4.2.1" 799 | source = "registry+https://github.com/rust-lang/crates.io-index" 800 | checksum = "223163f58c9a40c3b0a43e1c4b50a9ce09f007ea2cb1ec258a687945b4b7929f" 801 | dependencies = [ 802 | "anstream", 803 | "anstyle", 804 | "bitflags", 805 | "clap_lex 0.4.1", 806 | "strsim 0.10.0", 807 | ] 808 | 809 | [[package]] 810 | name = "clap_derive" 811 | version = "4.2.0" 812 | source = "registry+https://github.com/rust-lang/crates.io-index" 813 | checksum = "3f9644cd56d6b87dbe899ef8b053e331c0637664e9e21a33dfcdc36093f5c5c4" 814 | dependencies = [ 815 | "heck 0.4.1", 816 | "proc-macro2 1.0.56", 817 | "quote 1.0.26", 818 | "syn 2.0.13", 819 | ] 820 | 821 | [[package]] 822 | name = "clap_lex" 823 | version = "0.2.4" 824 | source = "registry+https://github.com/rust-lang/crates.io-index" 825 | checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5" 826 | dependencies = [ 827 | "os_str_bytes", 828 | ] 829 | 830 | [[package]] 831 | name = "clap_lex" 832 | version = "0.4.1" 833 | source = "registry+https://github.com/rust-lang/crates.io-index" 834 | checksum = "8a2dd5a6fe8c6e3502f568a6353e5273bbb15193ad9a89e457b9970798efbea1" 835 | 836 | [[package]] 837 | name = "codespan-reporting" 838 | version = "0.11.1" 839 | source = "registry+https://github.com/rust-lang/crates.io-index" 840 | checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" 841 | dependencies = [ 842 | "termcolor", 843 | "unicode-width", 844 | ] 845 | 846 | [[package]] 847 | name = "concolor-override" 848 | version = "1.0.0" 849 | source = "registry+https://github.com/rust-lang/crates.io-index" 850 | checksum = "a855d4a1978dc52fb0536a04d384c2c0c1aa273597f08b77c8c4d3b2eec6037f" 851 | 852 | [[package]] 853 | name = "concolor-query" 854 | version = "0.3.3" 855 | source = "registry+https://github.com/rust-lang/crates.io-index" 856 | checksum = "88d11d52c3d7ca2e6d0040212be9e4dbbcd78b6447f535b6b561f449427944cf" 857 | dependencies = [ 858 | "windows-sys 0.45.0", 859 | ] 860 | 861 | [[package]] 862 | name = "console" 863 | version = "0.15.5" 864 | source = "registry+https://github.com/rust-lang/crates.io-index" 865 | checksum = "c3d79fbe8970a77e3e34151cc13d3b3e248aa0faaecb9f6091fa07ebefe5ad60" 866 | dependencies = [ 867 | "encode_unicode", 868 | "lazy_static", 869 | "libc", 870 | "unicode-width", 871 | "windows-sys 0.42.0", 872 | ] 873 | 874 | [[package]] 875 | name = "console_error_panic_hook" 876 | version = "0.1.7" 877 | source = "registry+https://github.com/rust-lang/crates.io-index" 878 | checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" 879 | dependencies = [ 880 | "cfg-if", 881 | "wasm-bindgen", 882 | ] 883 | 884 | [[package]] 885 | name = "console_log" 886 | version = "0.2.2" 887 | source = "registry+https://github.com/rust-lang/crates.io-index" 888 | checksum = "e89f72f65e8501878b8a004d5a1afb780987e2ce2b4532c562e367a72c57499f" 889 | dependencies = [ 890 | "log", 891 | "web-sys", 892 | ] 893 | 894 | [[package]] 895 | name = "const-oid" 896 | version = "0.7.1" 897 | source = "registry+https://github.com/rust-lang/crates.io-index" 898 | checksum = "e4c78c047431fee22c1a7bb92e00ad095a02a983affe4d8a72e2a2c62c1b94f3" 899 | 900 | [[package]] 901 | name = "constant_time_eq" 902 | version = "0.2.5" 903 | source = "registry+https://github.com/rust-lang/crates.io-index" 904 | checksum = "13418e745008f7349ec7e449155f419a61b92b58a99cc3616942b926825ec76b" 905 | 906 | [[package]] 907 | name = "core-foundation" 908 | version = "0.9.3" 909 | source = "registry+https://github.com/rust-lang/crates.io-index" 910 | checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" 911 | dependencies = [ 912 | "core-foundation-sys", 913 | "libc", 914 | ] 915 | 916 | [[package]] 917 | name = "core-foundation-sys" 918 | version = "0.8.3" 919 | source = "registry+https://github.com/rust-lang/crates.io-index" 920 | checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" 921 | 922 | [[package]] 923 | name = "cpufeatures" 924 | version = "0.2.5" 925 | source = "registry+https://github.com/rust-lang/crates.io-index" 926 | checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" 927 | dependencies = [ 928 | "libc", 929 | ] 930 | 931 | [[package]] 932 | name = "crc32fast" 933 | version = "1.3.2" 934 | source = "registry+https://github.com/rust-lang/crates.io-index" 935 | checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" 936 | dependencies = [ 937 | "cfg-if", 938 | ] 939 | 940 | [[package]] 941 | name = "crossbeam-channel" 942 | version = "0.5.7" 943 | source = "registry+https://github.com/rust-lang/crates.io-index" 944 | checksum = "cf2b3e8478797446514c91ef04bafcb59faba183e621ad488df88983cc14128c" 945 | dependencies = [ 946 | "cfg-if", 947 | "crossbeam-utils", 948 | ] 949 | 950 | [[package]] 951 | name = "crossbeam-deque" 952 | version = "0.8.3" 953 | source = "registry+https://github.com/rust-lang/crates.io-index" 954 | checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" 955 | dependencies = [ 956 | "cfg-if", 957 | "crossbeam-epoch", 958 | "crossbeam-utils", 959 | ] 960 | 961 | [[package]] 962 | name = "crossbeam-epoch" 963 | version = "0.9.14" 964 | source = "registry+https://github.com/rust-lang/crates.io-index" 965 | checksum = "46bd5f3f85273295a9d14aedfb86f6aadbff6d8f5295c4a9edb08e819dcf5695" 966 | dependencies = [ 967 | "autocfg", 968 | "cfg-if", 969 | "crossbeam-utils", 970 | "memoffset 0.8.0", 971 | "scopeguard", 972 | ] 973 | 974 | [[package]] 975 | name = "crossbeam-utils" 976 | version = "0.8.15" 977 | source = "registry+https://github.com/rust-lang/crates.io-index" 978 | checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b" 979 | dependencies = [ 980 | "cfg-if", 981 | ] 982 | 983 | [[package]] 984 | name = "crunchy" 985 | version = "0.2.2" 986 | source = "registry+https://github.com/rust-lang/crates.io-index" 987 | checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" 988 | 989 | [[package]] 990 | name = "crypto-common" 991 | version = "0.1.6" 992 | source = "registry+https://github.com/rust-lang/crates.io-index" 993 | checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" 994 | dependencies = [ 995 | "generic-array", 996 | "typenum", 997 | ] 998 | 999 | [[package]] 1000 | name = "crypto-mac" 1001 | version = "0.8.0" 1002 | source = "registry+https://github.com/rust-lang/crates.io-index" 1003 | checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" 1004 | dependencies = [ 1005 | "generic-array", 1006 | "subtle", 1007 | ] 1008 | 1009 | [[package]] 1010 | name = "ctr" 1011 | version = "0.8.0" 1012 | source = "registry+https://github.com/rust-lang/crates.io-index" 1013 | checksum = "049bb91fb4aaf0e3c7efa6cd5ef877dbbbd15b39dad06d9948de4ec8a75761ea" 1014 | dependencies = [ 1015 | "cipher 0.3.0", 1016 | ] 1017 | 1018 | [[package]] 1019 | name = "curve25519-dalek" 1020 | version = "3.2.1" 1021 | source = "registry+https://github.com/rust-lang/crates.io-index" 1022 | checksum = "90f9d052967f590a76e62eb387bd0bbb1b000182c3cefe5364db6b7211651bc0" 1023 | dependencies = [ 1024 | "byteorder", 1025 | "digest 0.9.0", 1026 | "rand_core 0.5.1", 1027 | "serde", 1028 | "subtle", 1029 | "zeroize", 1030 | ] 1031 | 1032 | [[package]] 1033 | name = "cxx" 1034 | version = "1.0.92" 1035 | source = "registry+https://github.com/rust-lang/crates.io-index" 1036 | checksum = "9a140f260e6f3f79013b8bfc65e7ce630c9ab4388c6a89c71e07226f49487b72" 1037 | dependencies = [ 1038 | "cc", 1039 | "cxxbridge-flags", 1040 | "cxxbridge-macro", 1041 | "link-cplusplus", 1042 | ] 1043 | 1044 | [[package]] 1045 | name = "cxx-build" 1046 | version = "1.0.92" 1047 | source = "registry+https://github.com/rust-lang/crates.io-index" 1048 | checksum = "da6383f459341ea689374bf0a42979739dc421874f112ff26f829b8040b8e613" 1049 | dependencies = [ 1050 | "cc", 1051 | "codespan-reporting", 1052 | "once_cell", 1053 | "proc-macro2 1.0.56", 1054 | "quote 1.0.26", 1055 | "scratch", 1056 | "syn 1.0.109", 1057 | ] 1058 | 1059 | [[package]] 1060 | name = "cxxbridge-flags" 1061 | version = "1.0.92" 1062 | source = "registry+https://github.com/rust-lang/crates.io-index" 1063 | checksum = "90201c1a650e95ccff1c8c0bb5a343213bdd317c6e600a93075bca2eff54ec97" 1064 | 1065 | [[package]] 1066 | name = "cxxbridge-macro" 1067 | version = "1.0.92" 1068 | source = "registry+https://github.com/rust-lang/crates.io-index" 1069 | checksum = "0b75aed41bb2e6367cae39e6326ef817a851db13c13e4f3263714ca3cfb8de56" 1070 | dependencies = [ 1071 | "proc-macro2 1.0.56", 1072 | "quote 1.0.26", 1073 | "syn 1.0.109", 1074 | ] 1075 | 1076 | [[package]] 1077 | name = "data-encoding" 1078 | version = "2.3.3" 1079 | source = "registry+https://github.com/rust-lang/crates.io-index" 1080 | checksum = "23d8666cb01533c39dde32bcbab8e227b4ed6679b2c925eba05feabea39508fb" 1081 | 1082 | [[package]] 1083 | name = "der" 1084 | version = "0.5.1" 1085 | source = "registry+https://github.com/rust-lang/crates.io-index" 1086 | checksum = "6919815d73839e7ad218de758883aae3a257ba6759ce7a9992501efbb53d705c" 1087 | dependencies = [ 1088 | "const-oid", 1089 | ] 1090 | 1091 | [[package]] 1092 | name = "der-parser" 1093 | version = "8.2.0" 1094 | source = "registry+https://github.com/rust-lang/crates.io-index" 1095 | checksum = "dbd676fbbab537128ef0278adb5576cf363cff6aa22a7b24effe97347cfab61e" 1096 | dependencies = [ 1097 | "asn1-rs", 1098 | "displaydoc", 1099 | "nom", 1100 | "num-bigint 0.4.3", 1101 | "num-traits", 1102 | "rusticata-macros", 1103 | ] 1104 | 1105 | [[package]] 1106 | name = "derivation-path" 1107 | version = "0.2.0" 1108 | source = "registry+https://github.com/rust-lang/crates.io-index" 1109 | checksum = "6e5c37193a1db1d8ed868c03ec7b152175f26160a5b740e5e484143877e0adf0" 1110 | 1111 | [[package]] 1112 | name = "dialoguer" 1113 | version = "0.10.3" 1114 | source = "registry+https://github.com/rust-lang/crates.io-index" 1115 | checksum = "af3c796f3b0b408d9fd581611b47fa850821fcb84aa640b83a3c1a5be2d691f2" 1116 | dependencies = [ 1117 | "console", 1118 | "shell-words", 1119 | "tempfile", 1120 | "zeroize", 1121 | ] 1122 | 1123 | [[package]] 1124 | name = "digest" 1125 | version = "0.9.0" 1126 | source = "registry+https://github.com/rust-lang/crates.io-index" 1127 | checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" 1128 | dependencies = [ 1129 | "generic-array", 1130 | ] 1131 | 1132 | [[package]] 1133 | name = "digest" 1134 | version = "0.10.6" 1135 | source = "registry+https://github.com/rust-lang/crates.io-index" 1136 | checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" 1137 | dependencies = [ 1138 | "block-buffer 0.10.4", 1139 | "crypto-common", 1140 | "subtle", 1141 | ] 1142 | 1143 | [[package]] 1144 | name = "dirs-next" 1145 | version = "2.0.0" 1146 | source = "registry+https://github.com/rust-lang/crates.io-index" 1147 | checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" 1148 | dependencies = [ 1149 | "cfg-if", 1150 | "dirs-sys-next", 1151 | ] 1152 | 1153 | [[package]] 1154 | name = "dirs-sys-next" 1155 | version = "0.1.2" 1156 | source = "registry+https://github.com/rust-lang/crates.io-index" 1157 | checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" 1158 | dependencies = [ 1159 | "libc", 1160 | "redox_users", 1161 | "winapi", 1162 | ] 1163 | 1164 | [[package]] 1165 | name = "displaydoc" 1166 | version = "0.2.3" 1167 | source = "registry+https://github.com/rust-lang/crates.io-index" 1168 | checksum = "3bf95dc3f046b9da4f2d51833c0d3547d8564ef6910f5c1ed130306a75b92886" 1169 | dependencies = [ 1170 | "proc-macro2 1.0.56", 1171 | "quote 1.0.26", 1172 | "syn 1.0.109", 1173 | ] 1174 | 1175 | [[package]] 1176 | name = "dlopen" 1177 | version = "0.1.8" 1178 | source = "registry+https://github.com/rust-lang/crates.io-index" 1179 | checksum = "71e80ad39f814a9abe68583cd50a2d45c8a67561c3361ab8da240587dda80937" 1180 | dependencies = [ 1181 | "dlopen_derive", 1182 | "lazy_static", 1183 | "libc", 1184 | "winapi", 1185 | ] 1186 | 1187 | [[package]] 1188 | name = "dlopen_derive" 1189 | version = "0.1.4" 1190 | source = "registry+https://github.com/rust-lang/crates.io-index" 1191 | checksum = "f236d9e1b1fbd81cea0f9cbdc8dcc7e8ebcd80e6659cd7cb2ad5f6c05946c581" 1192 | dependencies = [ 1193 | "libc", 1194 | "quote 0.6.13", 1195 | "syn 0.15.44", 1196 | ] 1197 | 1198 | [[package]] 1199 | name = "eager" 1200 | version = "0.1.0" 1201 | source = "registry+https://github.com/rust-lang/crates.io-index" 1202 | checksum = "abe71d579d1812060163dff96056261deb5bf6729b100fa2e36a68b9649ba3d3" 1203 | 1204 | [[package]] 1205 | name = "ed25519" 1206 | version = "1.5.3" 1207 | source = "registry+https://github.com/rust-lang/crates.io-index" 1208 | checksum = "91cff35c70bba8a626e3185d8cd48cc11b5437e1a5bcd15b9b5fa3c64b6dfee7" 1209 | dependencies = [ 1210 | "signature", 1211 | ] 1212 | 1213 | [[package]] 1214 | name = "ed25519-dalek" 1215 | version = "1.0.1" 1216 | source = "registry+https://github.com/rust-lang/crates.io-index" 1217 | checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d" 1218 | dependencies = [ 1219 | "curve25519-dalek", 1220 | "ed25519", 1221 | "rand 0.7.3", 1222 | "serde", 1223 | "sha2 0.9.9", 1224 | "zeroize", 1225 | ] 1226 | 1227 | [[package]] 1228 | name = "ed25519-dalek-bip32" 1229 | version = "0.2.0" 1230 | source = "registry+https://github.com/rust-lang/crates.io-index" 1231 | checksum = "9d2be62a4061b872c8c0873ee4fc6f101ce7b889d039f019c5fa2af471a59908" 1232 | dependencies = [ 1233 | "derivation-path", 1234 | "ed25519-dalek", 1235 | "hmac 0.12.1", 1236 | "sha2 0.10.6", 1237 | ] 1238 | 1239 | [[package]] 1240 | name = "either" 1241 | version = "1.8.1" 1242 | source = "registry+https://github.com/rust-lang/crates.io-index" 1243 | checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" 1244 | 1245 | [[package]] 1246 | name = "encode_unicode" 1247 | version = "0.3.6" 1248 | source = "registry+https://github.com/rust-lang/crates.io-index" 1249 | checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" 1250 | 1251 | [[package]] 1252 | name = "encoding_rs" 1253 | version = "0.8.32" 1254 | source = "registry+https://github.com/rust-lang/crates.io-index" 1255 | checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394" 1256 | dependencies = [ 1257 | "cfg-if", 1258 | ] 1259 | 1260 | [[package]] 1261 | name = "enum-iterator" 1262 | version = "0.8.1" 1263 | source = "registry+https://github.com/rust-lang/crates.io-index" 1264 | checksum = "2953d1df47ac0eb70086ccabf0275aa8da8591a28bd358ee2b52bd9f9e3ff9e9" 1265 | dependencies = [ 1266 | "enum-iterator-derive", 1267 | ] 1268 | 1269 | [[package]] 1270 | name = "enum-iterator-derive" 1271 | version = "0.8.1" 1272 | source = "registry+https://github.com/rust-lang/crates.io-index" 1273 | checksum = "8958699f9359f0b04e691a13850d48b7de329138023876d07cbd024c2c820598" 1274 | dependencies = [ 1275 | "proc-macro2 1.0.56", 1276 | "quote 1.0.26", 1277 | "syn 1.0.109", 1278 | ] 1279 | 1280 | [[package]] 1281 | name = "enum_dispatch" 1282 | version = "0.3.11" 1283 | source = "registry+https://github.com/rust-lang/crates.io-index" 1284 | checksum = "11f36e95862220b211a6e2aa5eca09b4fa391b13cd52ceb8035a24bf65a79de2" 1285 | dependencies = [ 1286 | "once_cell", 1287 | "proc-macro2 1.0.56", 1288 | "quote 1.0.26", 1289 | "syn 1.0.109", 1290 | ] 1291 | 1292 | [[package]] 1293 | name = "env_logger" 1294 | version = "0.9.0" 1295 | source = "registry+https://github.com/rust-lang/crates.io-index" 1296 | checksum = "0b2cf0344971ee6c64c31be0d530793fba457d322dfec2810c453d0ef228f9c3" 1297 | dependencies = [ 1298 | "atty", 1299 | "humantime", 1300 | "log", 1301 | "regex", 1302 | "termcolor", 1303 | ] 1304 | 1305 | [[package]] 1306 | name = "env_logger" 1307 | version = "0.10.0" 1308 | source = "registry+https://github.com/rust-lang/crates.io-index" 1309 | checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0" 1310 | dependencies = [ 1311 | "humantime", 1312 | "is-terminal", 1313 | "log", 1314 | "regex", 1315 | "termcolor", 1316 | ] 1317 | 1318 | [[package]] 1319 | name = "errno" 1320 | version = "0.2.8" 1321 | source = "registry+https://github.com/rust-lang/crates.io-index" 1322 | checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1" 1323 | dependencies = [ 1324 | "errno-dragonfly", 1325 | "libc", 1326 | "winapi", 1327 | ] 1328 | 1329 | [[package]] 1330 | name = "errno" 1331 | version = "0.3.0" 1332 | source = "registry+https://github.com/rust-lang/crates.io-index" 1333 | checksum = "50d6a0976c999d473fe89ad888d5a284e55366d9dc9038b1ba2aa15128c4afa0" 1334 | dependencies = [ 1335 | "errno-dragonfly", 1336 | "libc", 1337 | "windows-sys 0.45.0", 1338 | ] 1339 | 1340 | [[package]] 1341 | name = "errno-dragonfly" 1342 | version = "0.1.2" 1343 | source = "registry+https://github.com/rust-lang/crates.io-index" 1344 | checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" 1345 | dependencies = [ 1346 | "cc", 1347 | "libc", 1348 | ] 1349 | 1350 | [[package]] 1351 | name = "event-listener" 1352 | version = "2.5.3" 1353 | source = "registry+https://github.com/rust-lang/crates.io-index" 1354 | checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" 1355 | 1356 | [[package]] 1357 | name = "fastrand" 1358 | version = "1.9.0" 1359 | source = "registry+https://github.com/rust-lang/crates.io-index" 1360 | checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" 1361 | dependencies = [ 1362 | "instant", 1363 | ] 1364 | 1365 | [[package]] 1366 | name = "feature-probe" 1367 | version = "0.1.1" 1368 | source = "registry+https://github.com/rust-lang/crates.io-index" 1369 | checksum = "835a3dc7d1ec9e75e2b5fb4ba75396837112d2060b03f7d43bc1897c7f7211da" 1370 | 1371 | [[package]] 1372 | name = "fixedbitset" 1373 | version = "0.4.2" 1374 | source = "registry+https://github.com/rust-lang/crates.io-index" 1375 | checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" 1376 | 1377 | [[package]] 1378 | name = "flate2" 1379 | version = "1.0.25" 1380 | source = "registry+https://github.com/rust-lang/crates.io-index" 1381 | checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841" 1382 | dependencies = [ 1383 | "crc32fast", 1384 | "miniz_oxide", 1385 | ] 1386 | 1387 | [[package]] 1388 | name = "fnv" 1389 | version = "1.0.7" 1390 | source = "registry+https://github.com/rust-lang/crates.io-index" 1391 | checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 1392 | 1393 | [[package]] 1394 | name = "form_urlencoded" 1395 | version = "1.1.0" 1396 | source = "registry+https://github.com/rust-lang/crates.io-index" 1397 | checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" 1398 | dependencies = [ 1399 | "percent-encoding", 1400 | ] 1401 | 1402 | [[package]] 1403 | name = "futures" 1404 | version = "0.3.28" 1405 | source = "registry+https://github.com/rust-lang/crates.io-index" 1406 | checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40" 1407 | dependencies = [ 1408 | "futures-channel", 1409 | "futures-core", 1410 | "futures-executor", 1411 | "futures-io", 1412 | "futures-sink", 1413 | "futures-task", 1414 | "futures-util", 1415 | ] 1416 | 1417 | [[package]] 1418 | name = "futures-channel" 1419 | version = "0.3.28" 1420 | source = "registry+https://github.com/rust-lang/crates.io-index" 1421 | checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" 1422 | dependencies = [ 1423 | "futures-core", 1424 | "futures-sink", 1425 | ] 1426 | 1427 | [[package]] 1428 | name = "futures-core" 1429 | version = "0.3.28" 1430 | source = "registry+https://github.com/rust-lang/crates.io-index" 1431 | checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" 1432 | 1433 | [[package]] 1434 | name = "futures-executor" 1435 | version = "0.3.28" 1436 | source = "registry+https://github.com/rust-lang/crates.io-index" 1437 | checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0" 1438 | dependencies = [ 1439 | "futures-core", 1440 | "futures-task", 1441 | "futures-util", 1442 | ] 1443 | 1444 | [[package]] 1445 | name = "futures-io" 1446 | version = "0.3.28" 1447 | source = "registry+https://github.com/rust-lang/crates.io-index" 1448 | checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" 1449 | 1450 | [[package]] 1451 | name = "futures-macro" 1452 | version = "0.3.28" 1453 | source = "registry+https://github.com/rust-lang/crates.io-index" 1454 | checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" 1455 | dependencies = [ 1456 | "proc-macro2 1.0.56", 1457 | "quote 1.0.26", 1458 | "syn 2.0.13", 1459 | ] 1460 | 1461 | [[package]] 1462 | name = "futures-sink" 1463 | version = "0.3.28" 1464 | source = "registry+https://github.com/rust-lang/crates.io-index" 1465 | checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" 1466 | 1467 | [[package]] 1468 | name = "futures-task" 1469 | version = "0.3.28" 1470 | source = "registry+https://github.com/rust-lang/crates.io-index" 1471 | checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" 1472 | 1473 | [[package]] 1474 | name = "futures-util" 1475 | version = "0.3.28" 1476 | source = "registry+https://github.com/rust-lang/crates.io-index" 1477 | checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" 1478 | dependencies = [ 1479 | "futures-channel", 1480 | "futures-core", 1481 | "futures-io", 1482 | "futures-macro", 1483 | "futures-sink", 1484 | "futures-task", 1485 | "memchr", 1486 | "pin-project-lite", 1487 | "pin-utils", 1488 | "slab", 1489 | ] 1490 | 1491 | [[package]] 1492 | name = "fxhash" 1493 | version = "0.2.1" 1494 | source = "registry+https://github.com/rust-lang/crates.io-index" 1495 | checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" 1496 | dependencies = [ 1497 | "byteorder", 1498 | ] 1499 | 1500 | [[package]] 1501 | name = "generic-array" 1502 | version = "0.14.6" 1503 | source = "registry+https://github.com/rust-lang/crates.io-index" 1504 | checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" 1505 | dependencies = [ 1506 | "serde", 1507 | "typenum", 1508 | "version_check", 1509 | ] 1510 | 1511 | [[package]] 1512 | name = "gethostname" 1513 | version = "0.2.3" 1514 | source = "registry+https://github.com/rust-lang/crates.io-index" 1515 | checksum = "c1ebd34e35c46e00bb73e81363248d627782724609fe1b6396f553f68fe3862e" 1516 | dependencies = [ 1517 | "libc", 1518 | "winapi", 1519 | ] 1520 | 1521 | [[package]] 1522 | name = "getrandom" 1523 | version = "0.1.16" 1524 | source = "registry+https://github.com/rust-lang/crates.io-index" 1525 | checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" 1526 | dependencies = [ 1527 | "cfg-if", 1528 | "js-sys", 1529 | "libc", 1530 | "wasi 0.9.0+wasi-snapshot-preview1", 1531 | "wasm-bindgen", 1532 | ] 1533 | 1534 | [[package]] 1535 | name = "getrandom" 1536 | version = "0.2.8" 1537 | source = "registry+https://github.com/rust-lang/crates.io-index" 1538 | checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" 1539 | dependencies = [ 1540 | "cfg-if", 1541 | "js-sys", 1542 | "libc", 1543 | "wasi 0.11.0+wasi-snapshot-preview1", 1544 | "wasm-bindgen", 1545 | ] 1546 | 1547 | [[package]] 1548 | name = "h2" 1549 | version = "0.3.16" 1550 | source = "registry+https://github.com/rust-lang/crates.io-index" 1551 | checksum = "5be7b54589b581f624f566bf5d8eb2bab1db736c51528720b6bd36b96b55924d" 1552 | dependencies = [ 1553 | "bytes", 1554 | "fnv", 1555 | "futures-core", 1556 | "futures-sink", 1557 | "futures-util", 1558 | "http", 1559 | "indexmap", 1560 | "slab", 1561 | "tokio", 1562 | "tokio-util", 1563 | "tracing", 1564 | ] 1565 | 1566 | [[package]] 1567 | name = "hashbrown" 1568 | version = "0.11.2" 1569 | source = "registry+https://github.com/rust-lang/crates.io-index" 1570 | checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" 1571 | dependencies = [ 1572 | "ahash", 1573 | ] 1574 | 1575 | [[package]] 1576 | name = "hashbrown" 1577 | version = "0.12.3" 1578 | source = "registry+https://github.com/rust-lang/crates.io-index" 1579 | checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" 1580 | dependencies = [ 1581 | "ahash", 1582 | ] 1583 | 1584 | [[package]] 1585 | name = "heck" 1586 | version = "0.3.3" 1587 | source = "registry+https://github.com/rust-lang/crates.io-index" 1588 | checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" 1589 | dependencies = [ 1590 | "unicode-segmentation", 1591 | ] 1592 | 1593 | [[package]] 1594 | name = "heck" 1595 | version = "0.4.1" 1596 | source = "registry+https://github.com/rust-lang/crates.io-index" 1597 | checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" 1598 | 1599 | [[package]] 1600 | name = "hermit-abi" 1601 | version = "0.1.19" 1602 | source = "registry+https://github.com/rust-lang/crates.io-index" 1603 | checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" 1604 | dependencies = [ 1605 | "libc", 1606 | ] 1607 | 1608 | [[package]] 1609 | name = "hermit-abi" 1610 | version = "0.2.6" 1611 | source = "registry+https://github.com/rust-lang/crates.io-index" 1612 | checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" 1613 | dependencies = [ 1614 | "libc", 1615 | ] 1616 | 1617 | [[package]] 1618 | name = "hermit-abi" 1619 | version = "0.3.1" 1620 | source = "registry+https://github.com/rust-lang/crates.io-index" 1621 | checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" 1622 | 1623 | [[package]] 1624 | name = "histogram" 1625 | version = "0.6.9" 1626 | source = "registry+https://github.com/rust-lang/crates.io-index" 1627 | checksum = "12cb882ccb290b8646e554b157ab0b71e64e8d5bef775cd66b6531e52d302669" 1628 | 1629 | [[package]] 1630 | name = "hmac" 1631 | version = "0.8.1" 1632 | source = "registry+https://github.com/rust-lang/crates.io-index" 1633 | checksum = "126888268dcc288495a26bf004b38c5fdbb31682f992c84ceb046a1f0fe38840" 1634 | dependencies = [ 1635 | "crypto-mac", 1636 | "digest 0.9.0", 1637 | ] 1638 | 1639 | [[package]] 1640 | name = "hmac" 1641 | version = "0.12.1" 1642 | source = "registry+https://github.com/rust-lang/crates.io-index" 1643 | checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" 1644 | dependencies = [ 1645 | "digest 0.10.6", 1646 | ] 1647 | 1648 | [[package]] 1649 | name = "hmac-drbg" 1650 | version = "0.3.0" 1651 | source = "registry+https://github.com/rust-lang/crates.io-index" 1652 | checksum = "17ea0a1394df5b6574da6e0c1ade9e78868c9fb0a4e5ef4428e32da4676b85b1" 1653 | dependencies = [ 1654 | "digest 0.9.0", 1655 | "generic-array", 1656 | "hmac 0.8.1", 1657 | ] 1658 | 1659 | [[package]] 1660 | name = "http" 1661 | version = "0.2.9" 1662 | source = "registry+https://github.com/rust-lang/crates.io-index" 1663 | checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" 1664 | dependencies = [ 1665 | "bytes", 1666 | "fnv", 1667 | "itoa", 1668 | ] 1669 | 1670 | [[package]] 1671 | name = "http-body" 1672 | version = "0.4.5" 1673 | source = "registry+https://github.com/rust-lang/crates.io-index" 1674 | checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" 1675 | dependencies = [ 1676 | "bytes", 1677 | "http", 1678 | "pin-project-lite", 1679 | ] 1680 | 1681 | [[package]] 1682 | name = "httparse" 1683 | version = "1.8.0" 1684 | source = "registry+https://github.com/rust-lang/crates.io-index" 1685 | checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" 1686 | 1687 | [[package]] 1688 | name = "httpdate" 1689 | version = "1.0.2" 1690 | source = "registry+https://github.com/rust-lang/crates.io-index" 1691 | checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" 1692 | 1693 | [[package]] 1694 | name = "humantime" 1695 | version = "2.1.0" 1696 | source = "registry+https://github.com/rust-lang/crates.io-index" 1697 | checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" 1698 | 1699 | [[package]] 1700 | name = "hyper" 1701 | version = "0.14.25" 1702 | source = "registry+https://github.com/rust-lang/crates.io-index" 1703 | checksum = "cc5e554ff619822309ffd57d8734d77cd5ce6238bc956f037ea06c58238c9899" 1704 | dependencies = [ 1705 | "bytes", 1706 | "futures-channel", 1707 | "futures-core", 1708 | "futures-util", 1709 | "h2", 1710 | "http", 1711 | "http-body", 1712 | "httparse", 1713 | "httpdate", 1714 | "itoa", 1715 | "pin-project-lite", 1716 | "socket2", 1717 | "tokio", 1718 | "tower-service", 1719 | "tracing", 1720 | "want", 1721 | ] 1722 | 1723 | [[package]] 1724 | name = "hyper-rustls" 1725 | version = "0.23.2" 1726 | source = "registry+https://github.com/rust-lang/crates.io-index" 1727 | checksum = "1788965e61b367cd03a62950836d5cd41560c3577d90e40e0819373194d1661c" 1728 | dependencies = [ 1729 | "http", 1730 | "hyper", 1731 | "rustls", 1732 | "tokio", 1733 | "tokio-rustls", 1734 | ] 1735 | 1736 | [[package]] 1737 | name = "hyper-timeout" 1738 | version = "0.4.1" 1739 | source = "registry+https://github.com/rust-lang/crates.io-index" 1740 | checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1" 1741 | dependencies = [ 1742 | "hyper", 1743 | "pin-project-lite", 1744 | "tokio", 1745 | "tokio-io-timeout", 1746 | ] 1747 | 1748 | [[package]] 1749 | name = "iana-time-zone" 1750 | version = "0.1.53" 1751 | source = "registry+https://github.com/rust-lang/crates.io-index" 1752 | checksum = "64c122667b287044802d6ce17ee2ddf13207ed924c712de9a66a5814d5b64765" 1753 | dependencies = [ 1754 | "android_system_properties", 1755 | "core-foundation-sys", 1756 | "iana-time-zone-haiku", 1757 | "js-sys", 1758 | "wasm-bindgen", 1759 | "winapi", 1760 | ] 1761 | 1762 | [[package]] 1763 | name = "iana-time-zone-haiku" 1764 | version = "0.1.1" 1765 | source = "registry+https://github.com/rust-lang/crates.io-index" 1766 | checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca" 1767 | dependencies = [ 1768 | "cxx", 1769 | "cxx-build", 1770 | ] 1771 | 1772 | [[package]] 1773 | name = "idna" 1774 | version = "0.3.0" 1775 | source = "registry+https://github.com/rust-lang/crates.io-index" 1776 | checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" 1777 | dependencies = [ 1778 | "unicode-bidi", 1779 | "unicode-normalization", 1780 | ] 1781 | 1782 | [[package]] 1783 | name = "im" 1784 | version = "15.1.0" 1785 | source = "registry+https://github.com/rust-lang/crates.io-index" 1786 | checksum = "d0acd33ff0285af998aaf9b57342af478078f53492322fafc47450e09397e0e9" 1787 | dependencies = [ 1788 | "bitmaps", 1789 | "rand_core 0.6.4", 1790 | "rand_xoshiro", 1791 | "rayon", 1792 | "serde", 1793 | "sized-chunks", 1794 | "typenum", 1795 | "version_check", 1796 | ] 1797 | 1798 | [[package]] 1799 | name = "indexmap" 1800 | version = "1.9.2" 1801 | source = "registry+https://github.com/rust-lang/crates.io-index" 1802 | checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399" 1803 | dependencies = [ 1804 | "autocfg", 1805 | "hashbrown 0.12.3", 1806 | ] 1807 | 1808 | [[package]] 1809 | name = "indicatif" 1810 | version = "0.16.2" 1811 | source = "registry+https://github.com/rust-lang/crates.io-index" 1812 | checksum = "2d207dc617c7a380ab07ff572a6e52fa202a2a8f355860ac9c38e23f8196be1b" 1813 | dependencies = [ 1814 | "console", 1815 | "lazy_static", 1816 | "number_prefix", 1817 | "regex", 1818 | ] 1819 | 1820 | [[package]] 1821 | name = "inout" 1822 | version = "0.1.3" 1823 | source = "registry+https://github.com/rust-lang/crates.io-index" 1824 | checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" 1825 | dependencies = [ 1826 | "generic-array", 1827 | ] 1828 | 1829 | [[package]] 1830 | name = "instant" 1831 | version = "0.1.12" 1832 | source = "registry+https://github.com/rust-lang/crates.io-index" 1833 | checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" 1834 | dependencies = [ 1835 | "cfg-if", 1836 | ] 1837 | 1838 | [[package]] 1839 | name = "io-lifetimes" 1840 | version = "1.0.6" 1841 | source = "registry+https://github.com/rust-lang/crates.io-index" 1842 | checksum = "cfa919a82ea574332e2de6e74b4c36e74d41982b335080fa59d4ef31be20fdf3" 1843 | dependencies = [ 1844 | "libc", 1845 | "windows-sys 0.45.0", 1846 | ] 1847 | 1848 | [[package]] 1849 | name = "ipnet" 1850 | version = "2.7.1" 1851 | source = "registry+https://github.com/rust-lang/crates.io-index" 1852 | checksum = "30e22bd8629359895450b59ea7a776c850561b96a3b1d31321c1949d9e6c9146" 1853 | 1854 | [[package]] 1855 | name = "is-terminal" 1856 | version = "0.4.6" 1857 | source = "registry+https://github.com/rust-lang/crates.io-index" 1858 | checksum = "256017f749ab3117e93acb91063009e1f1bb56d03965b14c2c8df4eb02c524d8" 1859 | dependencies = [ 1860 | "hermit-abi 0.3.1", 1861 | "io-lifetimes", 1862 | "rustix 0.37.7", 1863 | "windows-sys 0.45.0", 1864 | ] 1865 | 1866 | [[package]] 1867 | name = "itertools" 1868 | version = "0.10.5" 1869 | source = "registry+https://github.com/rust-lang/crates.io-index" 1870 | checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" 1871 | dependencies = [ 1872 | "either", 1873 | ] 1874 | 1875 | [[package]] 1876 | name = "itoa" 1877 | version = "1.0.6" 1878 | source = "registry+https://github.com/rust-lang/crates.io-index" 1879 | checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" 1880 | 1881 | [[package]] 1882 | name = "jito-backrun-example" 1883 | version = "0.1.0" 1884 | dependencies = [ 1885 | "bincode", 1886 | "chrono", 1887 | "clap 4.2.1", 1888 | "crossbeam-channel", 1889 | "env_logger 0.10.0", 1890 | "futures", 1891 | "futures-util", 1892 | "jito-protos", 1893 | "jito-searcher-client", 1894 | "log", 1895 | "prost-types", 1896 | "rand 0.8.5", 1897 | "solana-client", 1898 | "solana-metrics", 1899 | "solana-sdk 1.14.16", 1900 | "solana-transaction-status", 1901 | "thiserror", 1902 | "tokio", 1903 | "tonic", 1904 | "uuid", 1905 | ] 1906 | 1907 | [[package]] 1908 | name = "jito-protos" 1909 | version = "0.1.0" 1910 | dependencies = [ 1911 | "prost", 1912 | "prost-types", 1913 | "tonic", 1914 | "tonic-build", 1915 | ] 1916 | 1917 | [[package]] 1918 | name = "jito-searcher-client" 1919 | version = "0.1.0-beta" 1920 | dependencies = [ 1921 | "bincode", 1922 | "bytes", 1923 | "futures", 1924 | "futures-util", 1925 | "jito-protos", 1926 | "log", 1927 | "prost-types", 1928 | "solana-client", 1929 | "solana-metrics", 1930 | "solana-perf", 1931 | "solana-sdk 1.14.16", 1932 | "thiserror", 1933 | "tokio", 1934 | "tonic", 1935 | ] 1936 | 1937 | [[package]] 1938 | name = "jobserver" 1939 | version = "0.1.26" 1940 | source = "registry+https://github.com/rust-lang/crates.io-index" 1941 | checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2" 1942 | dependencies = [ 1943 | "libc", 1944 | ] 1945 | 1946 | [[package]] 1947 | name = "js-sys" 1948 | version = "0.3.61" 1949 | source = "registry+https://github.com/rust-lang/crates.io-index" 1950 | checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730" 1951 | dependencies = [ 1952 | "wasm-bindgen", 1953 | ] 1954 | 1955 | [[package]] 1956 | name = "jsonrpc-core" 1957 | version = "18.0.0" 1958 | source = "registry+https://github.com/rust-lang/crates.io-index" 1959 | checksum = "14f7f76aef2d054868398427f6c54943cf3d1caa9a7ec7d0c38d69df97a965eb" 1960 | dependencies = [ 1961 | "futures", 1962 | "futures-executor", 1963 | "futures-util", 1964 | "log", 1965 | "serde", 1966 | "serde_derive", 1967 | "serde_json", 1968 | ] 1969 | 1970 | [[package]] 1971 | name = "keccak" 1972 | version = "0.1.3" 1973 | source = "registry+https://github.com/rust-lang/crates.io-index" 1974 | checksum = "3afef3b6eff9ce9d8ff9b3601125eec7f0c8cbac7abd14f355d053fa56c98768" 1975 | dependencies = [ 1976 | "cpufeatures", 1977 | ] 1978 | 1979 | [[package]] 1980 | name = "lazy_static" 1981 | version = "1.4.0" 1982 | source = "registry+https://github.com/rust-lang/crates.io-index" 1983 | checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" 1984 | 1985 | [[package]] 1986 | name = "libc" 1987 | version = "0.2.140" 1988 | source = "registry+https://github.com/rust-lang/crates.io-index" 1989 | checksum = "99227334921fae1a979cf0bfdfcc6b3e5ce376ef57e16fb6fb3ea2ed6095f80c" 1990 | 1991 | [[package]] 1992 | name = "libloading" 1993 | version = "0.7.4" 1994 | source = "registry+https://github.com/rust-lang/crates.io-index" 1995 | checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" 1996 | dependencies = [ 1997 | "cfg-if", 1998 | "winapi", 1999 | ] 2000 | 2001 | [[package]] 2002 | name = "libsecp256k1" 2003 | version = "0.6.0" 2004 | source = "registry+https://github.com/rust-lang/crates.io-index" 2005 | checksum = "c9d220bc1feda2ac231cb78c3d26f27676b8cf82c96971f7aeef3d0cf2797c73" 2006 | dependencies = [ 2007 | "arrayref", 2008 | "base64 0.12.3", 2009 | "digest 0.9.0", 2010 | "hmac-drbg", 2011 | "libsecp256k1-core", 2012 | "libsecp256k1-gen-ecmult", 2013 | "libsecp256k1-gen-genmult", 2014 | "rand 0.7.3", 2015 | "serde", 2016 | "sha2 0.9.9", 2017 | "typenum", 2018 | ] 2019 | 2020 | [[package]] 2021 | name = "libsecp256k1-core" 2022 | version = "0.2.2" 2023 | source = "registry+https://github.com/rust-lang/crates.io-index" 2024 | checksum = "d0f6ab710cec28cef759c5f18671a27dae2a5f952cdaaee1d8e2908cb2478a80" 2025 | dependencies = [ 2026 | "crunchy", 2027 | "digest 0.9.0", 2028 | "subtle", 2029 | ] 2030 | 2031 | [[package]] 2032 | name = "libsecp256k1-gen-ecmult" 2033 | version = "0.2.1" 2034 | source = "registry+https://github.com/rust-lang/crates.io-index" 2035 | checksum = "ccab96b584d38fac86a83f07e659f0deafd0253dc096dab5a36d53efe653c5c3" 2036 | dependencies = [ 2037 | "libsecp256k1-core", 2038 | ] 2039 | 2040 | [[package]] 2041 | name = "libsecp256k1-gen-genmult" 2042 | version = "0.2.1" 2043 | source = "registry+https://github.com/rust-lang/crates.io-index" 2044 | checksum = "67abfe149395e3aa1c48a2beb32b068e2334402df8181f818d3aee2b304c4f5d" 2045 | dependencies = [ 2046 | "libsecp256k1-core", 2047 | ] 2048 | 2049 | [[package]] 2050 | name = "link-cplusplus" 2051 | version = "1.0.8" 2052 | source = "registry+https://github.com/rust-lang/crates.io-index" 2053 | checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5" 2054 | dependencies = [ 2055 | "cc", 2056 | ] 2057 | 2058 | [[package]] 2059 | name = "linked-hash-map" 2060 | version = "0.5.6" 2061 | source = "registry+https://github.com/rust-lang/crates.io-index" 2062 | checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" 2063 | 2064 | [[package]] 2065 | name = "linux-raw-sys" 2066 | version = "0.1.4" 2067 | source = "registry+https://github.com/rust-lang/crates.io-index" 2068 | checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4" 2069 | 2070 | [[package]] 2071 | name = "linux-raw-sys" 2072 | version = "0.3.1" 2073 | source = "registry+https://github.com/rust-lang/crates.io-index" 2074 | checksum = "d59d8c75012853d2e872fb56bc8a2e53718e2cafe1a4c823143141c6d90c322f" 2075 | 2076 | [[package]] 2077 | name = "lock_api" 2078 | version = "0.4.9" 2079 | source = "registry+https://github.com/rust-lang/crates.io-index" 2080 | checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" 2081 | dependencies = [ 2082 | "autocfg", 2083 | "scopeguard", 2084 | ] 2085 | 2086 | [[package]] 2087 | name = "log" 2088 | version = "0.4.17" 2089 | source = "registry+https://github.com/rust-lang/crates.io-index" 2090 | checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" 2091 | dependencies = [ 2092 | "cfg-if", 2093 | ] 2094 | 2095 | [[package]] 2096 | name = "matchit" 2097 | version = "0.7.0" 2098 | source = "registry+https://github.com/rust-lang/crates.io-index" 2099 | checksum = "b87248edafb776e59e6ee64a79086f65890d3510f2c656c000bf2a7e8a0aea40" 2100 | 2101 | [[package]] 2102 | name = "memchr" 2103 | version = "2.5.0" 2104 | source = "registry+https://github.com/rust-lang/crates.io-index" 2105 | checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" 2106 | 2107 | [[package]] 2108 | name = "memmap2" 2109 | version = "0.5.10" 2110 | source = "registry+https://github.com/rust-lang/crates.io-index" 2111 | checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" 2112 | dependencies = [ 2113 | "libc", 2114 | ] 2115 | 2116 | [[package]] 2117 | name = "memoffset" 2118 | version = "0.6.5" 2119 | source = "registry+https://github.com/rust-lang/crates.io-index" 2120 | checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" 2121 | dependencies = [ 2122 | "autocfg", 2123 | ] 2124 | 2125 | [[package]] 2126 | name = "memoffset" 2127 | version = "0.8.0" 2128 | source = "registry+https://github.com/rust-lang/crates.io-index" 2129 | checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1" 2130 | dependencies = [ 2131 | "autocfg", 2132 | ] 2133 | 2134 | [[package]] 2135 | name = "merlin" 2136 | version = "3.0.0" 2137 | source = "registry+https://github.com/rust-lang/crates.io-index" 2138 | checksum = "58c38e2799fc0978b65dfff8023ec7843e2330bb462f19198840b34b6582397d" 2139 | dependencies = [ 2140 | "byteorder", 2141 | "keccak", 2142 | "rand_core 0.6.4", 2143 | "zeroize", 2144 | ] 2145 | 2146 | [[package]] 2147 | name = "mime" 2148 | version = "0.3.16" 2149 | source = "registry+https://github.com/rust-lang/crates.io-index" 2150 | checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" 2151 | 2152 | [[package]] 2153 | name = "minimal-lexical" 2154 | version = "0.2.1" 2155 | source = "registry+https://github.com/rust-lang/crates.io-index" 2156 | checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" 2157 | 2158 | [[package]] 2159 | name = "miniz_oxide" 2160 | version = "0.6.2" 2161 | source = "registry+https://github.com/rust-lang/crates.io-index" 2162 | checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa" 2163 | dependencies = [ 2164 | "adler", 2165 | ] 2166 | 2167 | [[package]] 2168 | name = "mio" 2169 | version = "0.8.6" 2170 | source = "registry+https://github.com/rust-lang/crates.io-index" 2171 | checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9" 2172 | dependencies = [ 2173 | "libc", 2174 | "log", 2175 | "wasi 0.11.0+wasi-snapshot-preview1", 2176 | "windows-sys 0.45.0", 2177 | ] 2178 | 2179 | [[package]] 2180 | name = "multimap" 2181 | version = "0.8.3" 2182 | source = "registry+https://github.com/rust-lang/crates.io-index" 2183 | checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" 2184 | 2185 | [[package]] 2186 | name = "nix" 2187 | version = "0.24.3" 2188 | source = "registry+https://github.com/rust-lang/crates.io-index" 2189 | checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069" 2190 | dependencies = [ 2191 | "bitflags", 2192 | "cfg-if", 2193 | "libc", 2194 | "memoffset 0.6.5", 2195 | ] 2196 | 2197 | [[package]] 2198 | name = "nom" 2199 | version = "7.1.3" 2200 | source = "registry+https://github.com/rust-lang/crates.io-index" 2201 | checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" 2202 | dependencies = [ 2203 | "memchr", 2204 | "minimal-lexical", 2205 | ] 2206 | 2207 | [[package]] 2208 | name = "num" 2209 | version = "0.2.1" 2210 | source = "registry+https://github.com/rust-lang/crates.io-index" 2211 | checksum = "b8536030f9fea7127f841b45bb6243b27255787fb4eb83958aa1ef9d2fdc0c36" 2212 | dependencies = [ 2213 | "num-bigint 0.2.6", 2214 | "num-complex", 2215 | "num-integer", 2216 | "num-iter", 2217 | "num-rational", 2218 | "num-traits", 2219 | ] 2220 | 2221 | [[package]] 2222 | name = "num-bigint" 2223 | version = "0.2.6" 2224 | source = "registry+https://github.com/rust-lang/crates.io-index" 2225 | checksum = "090c7f9998ee0ff65aa5b723e4009f7b217707f1fb5ea551329cc4d6231fb304" 2226 | dependencies = [ 2227 | "autocfg", 2228 | "num-integer", 2229 | "num-traits", 2230 | ] 2231 | 2232 | [[package]] 2233 | name = "num-bigint" 2234 | version = "0.4.3" 2235 | source = "registry+https://github.com/rust-lang/crates.io-index" 2236 | checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f" 2237 | dependencies = [ 2238 | "autocfg", 2239 | "num-integer", 2240 | "num-traits", 2241 | ] 2242 | 2243 | [[package]] 2244 | name = "num-complex" 2245 | version = "0.2.4" 2246 | source = "registry+https://github.com/rust-lang/crates.io-index" 2247 | checksum = "b6b19411a9719e753aff12e5187b74d60d3dc449ec3f4dc21e3989c3f554bc95" 2248 | dependencies = [ 2249 | "autocfg", 2250 | "num-traits", 2251 | ] 2252 | 2253 | [[package]] 2254 | name = "num-derive" 2255 | version = "0.3.3" 2256 | source = "registry+https://github.com/rust-lang/crates.io-index" 2257 | checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" 2258 | dependencies = [ 2259 | "proc-macro2 1.0.56", 2260 | "quote 1.0.26", 2261 | "syn 1.0.109", 2262 | ] 2263 | 2264 | [[package]] 2265 | name = "num-integer" 2266 | version = "0.1.45" 2267 | source = "registry+https://github.com/rust-lang/crates.io-index" 2268 | checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" 2269 | dependencies = [ 2270 | "autocfg", 2271 | "num-traits", 2272 | ] 2273 | 2274 | [[package]] 2275 | name = "num-iter" 2276 | version = "0.1.43" 2277 | source = "registry+https://github.com/rust-lang/crates.io-index" 2278 | checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252" 2279 | dependencies = [ 2280 | "autocfg", 2281 | "num-integer", 2282 | "num-traits", 2283 | ] 2284 | 2285 | [[package]] 2286 | name = "num-rational" 2287 | version = "0.2.4" 2288 | source = "registry+https://github.com/rust-lang/crates.io-index" 2289 | checksum = "5c000134b5dbf44adc5cb772486d335293351644b801551abe8f75c84cfa4aef" 2290 | dependencies = [ 2291 | "autocfg", 2292 | "num-bigint 0.2.6", 2293 | "num-integer", 2294 | "num-traits", 2295 | ] 2296 | 2297 | [[package]] 2298 | name = "num-traits" 2299 | version = "0.2.15" 2300 | source = "registry+https://github.com/rust-lang/crates.io-index" 2301 | checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" 2302 | dependencies = [ 2303 | "autocfg", 2304 | ] 2305 | 2306 | [[package]] 2307 | name = "num_cpus" 2308 | version = "1.15.0" 2309 | source = "registry+https://github.com/rust-lang/crates.io-index" 2310 | checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" 2311 | dependencies = [ 2312 | "hermit-abi 0.2.6", 2313 | "libc", 2314 | ] 2315 | 2316 | [[package]] 2317 | name = "num_enum" 2318 | version = "0.5.11" 2319 | source = "registry+https://github.com/rust-lang/crates.io-index" 2320 | checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" 2321 | dependencies = [ 2322 | "num_enum_derive", 2323 | ] 2324 | 2325 | [[package]] 2326 | name = "num_enum_derive" 2327 | version = "0.5.11" 2328 | source = "registry+https://github.com/rust-lang/crates.io-index" 2329 | checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" 2330 | dependencies = [ 2331 | "proc-macro-crate 1.3.1", 2332 | "proc-macro2 1.0.56", 2333 | "quote 1.0.26", 2334 | "syn 1.0.109", 2335 | ] 2336 | 2337 | [[package]] 2338 | name = "number_prefix" 2339 | version = "0.4.0" 2340 | source = "registry+https://github.com/rust-lang/crates.io-index" 2341 | checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" 2342 | 2343 | [[package]] 2344 | name = "oid-registry" 2345 | version = "0.6.1" 2346 | source = "registry+https://github.com/rust-lang/crates.io-index" 2347 | checksum = "9bedf36ffb6ba96c2eb7144ef6270557b52e54b20c0a8e1eb2ff99a6c6959bff" 2348 | dependencies = [ 2349 | "asn1-rs", 2350 | ] 2351 | 2352 | [[package]] 2353 | name = "once_cell" 2354 | version = "1.17.1" 2355 | source = "registry+https://github.com/rust-lang/crates.io-index" 2356 | checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" 2357 | 2358 | [[package]] 2359 | name = "opaque-debug" 2360 | version = "0.3.0" 2361 | source = "registry+https://github.com/rust-lang/crates.io-index" 2362 | checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" 2363 | 2364 | [[package]] 2365 | name = "openssl-probe" 2366 | version = "0.1.5" 2367 | source = "registry+https://github.com/rust-lang/crates.io-index" 2368 | checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" 2369 | 2370 | [[package]] 2371 | name = "os_str_bytes" 2372 | version = "6.4.1" 2373 | source = "registry+https://github.com/rust-lang/crates.io-index" 2374 | checksum = "9b7820b9daea5457c9f21c69448905d723fbd21136ccf521748f23fd49e723ee" 2375 | 2376 | [[package]] 2377 | name = "parking_lot" 2378 | version = "0.12.1" 2379 | source = "registry+https://github.com/rust-lang/crates.io-index" 2380 | checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" 2381 | dependencies = [ 2382 | "lock_api", 2383 | "parking_lot_core", 2384 | ] 2385 | 2386 | [[package]] 2387 | name = "parking_lot_core" 2388 | version = "0.9.7" 2389 | source = "registry+https://github.com/rust-lang/crates.io-index" 2390 | checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521" 2391 | dependencies = [ 2392 | "cfg-if", 2393 | "libc", 2394 | "redox_syscall", 2395 | "smallvec", 2396 | "windows-sys 0.45.0", 2397 | ] 2398 | 2399 | [[package]] 2400 | name = "pbkdf2" 2401 | version = "0.4.0" 2402 | source = "registry+https://github.com/rust-lang/crates.io-index" 2403 | checksum = "216eaa586a190f0a738f2f918511eecfa90f13295abec0e457cdebcceda80cbd" 2404 | dependencies = [ 2405 | "crypto-mac", 2406 | ] 2407 | 2408 | [[package]] 2409 | name = "pbkdf2" 2410 | version = "0.11.0" 2411 | source = "registry+https://github.com/rust-lang/crates.io-index" 2412 | checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" 2413 | dependencies = [ 2414 | "digest 0.10.6", 2415 | ] 2416 | 2417 | [[package]] 2418 | name = "pem" 2419 | version = "1.1.1" 2420 | source = "registry+https://github.com/rust-lang/crates.io-index" 2421 | checksum = "a8835c273a76a90455d7344889b0964598e3316e2a79ede8e36f16bdcf2228b8" 2422 | dependencies = [ 2423 | "base64 0.13.1", 2424 | ] 2425 | 2426 | [[package]] 2427 | name = "percent-encoding" 2428 | version = "2.2.0" 2429 | source = "registry+https://github.com/rust-lang/crates.io-index" 2430 | checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" 2431 | 2432 | [[package]] 2433 | name = "percentage" 2434 | version = "0.1.0" 2435 | source = "registry+https://github.com/rust-lang/crates.io-index" 2436 | checksum = "2fd23b938276f14057220b707937bcb42fa76dda7560e57a2da30cb52d557937" 2437 | dependencies = [ 2438 | "num", 2439 | ] 2440 | 2441 | [[package]] 2442 | name = "petgraph" 2443 | version = "0.6.3" 2444 | source = "registry+https://github.com/rust-lang/crates.io-index" 2445 | checksum = "4dd7d28ee937e54fe3080c91faa1c3a46c06de6252988a7f4592ba2310ef22a4" 2446 | dependencies = [ 2447 | "fixedbitset", 2448 | "indexmap", 2449 | ] 2450 | 2451 | [[package]] 2452 | name = "pin-project" 2453 | version = "1.0.12" 2454 | source = "registry+https://github.com/rust-lang/crates.io-index" 2455 | checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc" 2456 | dependencies = [ 2457 | "pin-project-internal", 2458 | ] 2459 | 2460 | [[package]] 2461 | name = "pin-project-internal" 2462 | version = "1.0.12" 2463 | source = "registry+https://github.com/rust-lang/crates.io-index" 2464 | checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" 2465 | dependencies = [ 2466 | "proc-macro2 1.0.56", 2467 | "quote 1.0.26", 2468 | "syn 1.0.109", 2469 | ] 2470 | 2471 | [[package]] 2472 | name = "pin-project-lite" 2473 | version = "0.2.9" 2474 | source = "registry+https://github.com/rust-lang/crates.io-index" 2475 | checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" 2476 | 2477 | [[package]] 2478 | name = "pin-utils" 2479 | version = "0.1.0" 2480 | source = "registry+https://github.com/rust-lang/crates.io-index" 2481 | checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 2482 | 2483 | [[package]] 2484 | name = "pkcs8" 2485 | version = "0.8.0" 2486 | source = "registry+https://github.com/rust-lang/crates.io-index" 2487 | checksum = "7cabda3fb821068a9a4fab19a683eac3af12edf0f34b94a8be53c4972b8149d0" 2488 | dependencies = [ 2489 | "der", 2490 | "spki", 2491 | "zeroize", 2492 | ] 2493 | 2494 | [[package]] 2495 | name = "pkg-config" 2496 | version = "0.3.26" 2497 | source = "registry+https://github.com/rust-lang/crates.io-index" 2498 | checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160" 2499 | 2500 | [[package]] 2501 | name = "polyval" 2502 | version = "0.5.3" 2503 | source = "registry+https://github.com/rust-lang/crates.io-index" 2504 | checksum = "8419d2b623c7c0896ff2d5d96e2cb4ede590fed28fcc34934f4c33c036e620a1" 2505 | dependencies = [ 2506 | "cfg-if", 2507 | "cpufeatures", 2508 | "opaque-debug", 2509 | "universal-hash", 2510 | ] 2511 | 2512 | [[package]] 2513 | name = "ppv-lite86" 2514 | version = "0.2.17" 2515 | source = "registry+https://github.com/rust-lang/crates.io-index" 2516 | checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" 2517 | 2518 | [[package]] 2519 | name = "prettyplease" 2520 | version = "0.1.25" 2521 | source = "registry+https://github.com/rust-lang/crates.io-index" 2522 | checksum = "6c8646e95016a7a6c4adea95bafa8a16baab64b583356217f2c85db4a39d9a86" 2523 | dependencies = [ 2524 | "proc-macro2 1.0.56", 2525 | "syn 1.0.109", 2526 | ] 2527 | 2528 | [[package]] 2529 | name = "proc-macro-crate" 2530 | version = "0.1.5" 2531 | source = "registry+https://github.com/rust-lang/crates.io-index" 2532 | checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785" 2533 | dependencies = [ 2534 | "toml", 2535 | ] 2536 | 2537 | [[package]] 2538 | name = "proc-macro-crate" 2539 | version = "1.3.1" 2540 | source = "registry+https://github.com/rust-lang/crates.io-index" 2541 | checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" 2542 | dependencies = [ 2543 | "once_cell", 2544 | "toml_edit", 2545 | ] 2546 | 2547 | [[package]] 2548 | name = "proc-macro2" 2549 | version = "0.4.30" 2550 | source = "registry+https://github.com/rust-lang/crates.io-index" 2551 | checksum = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759" 2552 | dependencies = [ 2553 | "unicode-xid 0.1.0", 2554 | ] 2555 | 2556 | [[package]] 2557 | name = "proc-macro2" 2558 | version = "1.0.56" 2559 | source = "registry+https://github.com/rust-lang/crates.io-index" 2560 | checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435" 2561 | dependencies = [ 2562 | "unicode-ident", 2563 | ] 2564 | 2565 | [[package]] 2566 | name = "proc-macro2-diagnostics" 2567 | version = "0.9.1" 2568 | source = "registry+https://github.com/rust-lang/crates.io-index" 2569 | checksum = "4bf29726d67464d49fa6224a1d07936a8c08bb3fba727c7493f6cf1616fdaada" 2570 | dependencies = [ 2571 | "proc-macro2 1.0.56", 2572 | "quote 1.0.26", 2573 | "syn 1.0.109", 2574 | "version_check", 2575 | "yansi", 2576 | ] 2577 | 2578 | [[package]] 2579 | name = "prost" 2580 | version = "0.11.8" 2581 | source = "registry+https://github.com/rust-lang/crates.io-index" 2582 | checksum = "e48e50df39172a3e7eb17e14642445da64996989bc212b583015435d39a58537" 2583 | dependencies = [ 2584 | "bytes", 2585 | "prost-derive", 2586 | ] 2587 | 2588 | [[package]] 2589 | name = "prost-build" 2590 | version = "0.11.8" 2591 | source = "registry+https://github.com/rust-lang/crates.io-index" 2592 | checksum = "2c828f93f5ca4826f97fedcbd3f9a536c16b12cff3dbbb4a007f932bbad95b12" 2593 | dependencies = [ 2594 | "bytes", 2595 | "heck 0.4.1", 2596 | "itertools", 2597 | "lazy_static", 2598 | "log", 2599 | "multimap", 2600 | "petgraph", 2601 | "prettyplease", 2602 | "prost", 2603 | "prost-types", 2604 | "regex", 2605 | "syn 1.0.109", 2606 | "tempfile", 2607 | "which", 2608 | ] 2609 | 2610 | [[package]] 2611 | name = "prost-derive" 2612 | version = "0.11.8" 2613 | source = "registry+https://github.com/rust-lang/crates.io-index" 2614 | checksum = "4ea9b0f8cbe5e15a8a042d030bd96668db28ecb567ec37d691971ff5731d2b1b" 2615 | dependencies = [ 2616 | "anyhow", 2617 | "itertools", 2618 | "proc-macro2 1.0.56", 2619 | "quote 1.0.26", 2620 | "syn 1.0.109", 2621 | ] 2622 | 2623 | [[package]] 2624 | name = "prost-types" 2625 | version = "0.11.8" 2626 | source = "registry+https://github.com/rust-lang/crates.io-index" 2627 | checksum = "379119666929a1afd7a043aa6cf96fa67a6dce9af60c88095a4686dbce4c9c88" 2628 | dependencies = [ 2629 | "prost", 2630 | ] 2631 | 2632 | [[package]] 2633 | name = "qstring" 2634 | version = "0.7.2" 2635 | source = "registry+https://github.com/rust-lang/crates.io-index" 2636 | checksum = "d464fae65fff2680baf48019211ce37aaec0c78e9264c84a3e484717f965104e" 2637 | dependencies = [ 2638 | "percent-encoding", 2639 | ] 2640 | 2641 | [[package]] 2642 | name = "quinn" 2643 | version = "0.8.5" 2644 | source = "registry+https://github.com/rust-lang/crates.io-index" 2645 | checksum = "5b435e71d9bfa0d8889927231970c51fb89c58fa63bffcab117c9c7a41e5ef8f" 2646 | dependencies = [ 2647 | "bytes", 2648 | "futures-channel", 2649 | "futures-util", 2650 | "fxhash", 2651 | "quinn-proto", 2652 | "quinn-udp", 2653 | "rustls", 2654 | "thiserror", 2655 | "tokio", 2656 | "tracing", 2657 | "webpki", 2658 | ] 2659 | 2660 | [[package]] 2661 | name = "quinn-proto" 2662 | version = "0.8.4" 2663 | source = "registry+https://github.com/rust-lang/crates.io-index" 2664 | checksum = "3fce546b9688f767a57530652488420d419a8b1f44a478b451c3d1ab6d992a55" 2665 | dependencies = [ 2666 | "bytes", 2667 | "fxhash", 2668 | "rand 0.8.5", 2669 | "ring", 2670 | "rustls", 2671 | "rustls-native-certs", 2672 | "rustls-pemfile 0.2.1", 2673 | "slab", 2674 | "thiserror", 2675 | "tinyvec", 2676 | "tracing", 2677 | "webpki", 2678 | ] 2679 | 2680 | [[package]] 2681 | name = "quinn-udp" 2682 | version = "0.1.4" 2683 | source = "registry+https://github.com/rust-lang/crates.io-index" 2684 | checksum = "b07946277141531aea269befd949ed16b2c85a780ba1043244eda0969e538e54" 2685 | dependencies = [ 2686 | "futures-util", 2687 | "libc", 2688 | "quinn-proto", 2689 | "socket2", 2690 | "tokio", 2691 | "tracing", 2692 | ] 2693 | 2694 | [[package]] 2695 | name = "quote" 2696 | version = "0.6.13" 2697 | source = "registry+https://github.com/rust-lang/crates.io-index" 2698 | checksum = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1" 2699 | dependencies = [ 2700 | "proc-macro2 0.4.30", 2701 | ] 2702 | 2703 | [[package]] 2704 | name = "quote" 2705 | version = "1.0.26" 2706 | source = "registry+https://github.com/rust-lang/crates.io-index" 2707 | checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc" 2708 | dependencies = [ 2709 | "proc-macro2 1.0.56", 2710 | ] 2711 | 2712 | [[package]] 2713 | name = "rand" 2714 | version = "0.7.3" 2715 | source = "registry+https://github.com/rust-lang/crates.io-index" 2716 | checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" 2717 | dependencies = [ 2718 | "getrandom 0.1.16", 2719 | "libc", 2720 | "rand_chacha 0.2.2", 2721 | "rand_core 0.5.1", 2722 | "rand_hc", 2723 | ] 2724 | 2725 | [[package]] 2726 | name = "rand" 2727 | version = "0.8.5" 2728 | source = "registry+https://github.com/rust-lang/crates.io-index" 2729 | checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" 2730 | dependencies = [ 2731 | "libc", 2732 | "rand_chacha 0.3.1", 2733 | "rand_core 0.6.4", 2734 | ] 2735 | 2736 | [[package]] 2737 | name = "rand_chacha" 2738 | version = "0.2.2" 2739 | source = "registry+https://github.com/rust-lang/crates.io-index" 2740 | checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" 2741 | dependencies = [ 2742 | "ppv-lite86", 2743 | "rand_core 0.5.1", 2744 | ] 2745 | 2746 | [[package]] 2747 | name = "rand_chacha" 2748 | version = "0.3.1" 2749 | source = "registry+https://github.com/rust-lang/crates.io-index" 2750 | checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" 2751 | dependencies = [ 2752 | "ppv-lite86", 2753 | "rand_core 0.6.4", 2754 | ] 2755 | 2756 | [[package]] 2757 | name = "rand_core" 2758 | version = "0.5.1" 2759 | source = "registry+https://github.com/rust-lang/crates.io-index" 2760 | checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" 2761 | dependencies = [ 2762 | "getrandom 0.1.16", 2763 | ] 2764 | 2765 | [[package]] 2766 | name = "rand_core" 2767 | version = "0.6.4" 2768 | source = "registry+https://github.com/rust-lang/crates.io-index" 2769 | checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" 2770 | dependencies = [ 2771 | "getrandom 0.2.8", 2772 | ] 2773 | 2774 | [[package]] 2775 | name = "rand_hc" 2776 | version = "0.2.0" 2777 | source = "registry+https://github.com/rust-lang/crates.io-index" 2778 | checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" 2779 | dependencies = [ 2780 | "rand_core 0.5.1", 2781 | ] 2782 | 2783 | [[package]] 2784 | name = "rand_xoshiro" 2785 | version = "0.6.0" 2786 | source = "registry+https://github.com/rust-lang/crates.io-index" 2787 | checksum = "6f97cdb2a36ed4183de61b2f824cc45c9f1037f28afe0a322e9fff4c108b5aaa" 2788 | dependencies = [ 2789 | "rand_core 0.6.4", 2790 | ] 2791 | 2792 | [[package]] 2793 | name = "rayon" 2794 | version = "1.7.0" 2795 | source = "registry+https://github.com/rust-lang/crates.io-index" 2796 | checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b" 2797 | dependencies = [ 2798 | "either", 2799 | "rayon-core", 2800 | ] 2801 | 2802 | [[package]] 2803 | name = "rayon-core" 2804 | version = "1.11.0" 2805 | source = "registry+https://github.com/rust-lang/crates.io-index" 2806 | checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d" 2807 | dependencies = [ 2808 | "crossbeam-channel", 2809 | "crossbeam-deque", 2810 | "crossbeam-utils", 2811 | "num_cpus", 2812 | ] 2813 | 2814 | [[package]] 2815 | name = "rcgen" 2816 | version = "0.9.3" 2817 | source = "registry+https://github.com/rust-lang/crates.io-index" 2818 | checksum = "6413f3de1edee53342e6138e75b56d32e7bc6e332b3bd62d497b1929d4cfbcdd" 2819 | dependencies = [ 2820 | "pem", 2821 | "ring", 2822 | "time 0.3.20", 2823 | "yasna", 2824 | ] 2825 | 2826 | [[package]] 2827 | name = "redox_syscall" 2828 | version = "0.2.16" 2829 | source = "registry+https://github.com/rust-lang/crates.io-index" 2830 | checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" 2831 | dependencies = [ 2832 | "bitflags", 2833 | ] 2834 | 2835 | [[package]] 2836 | name = "redox_users" 2837 | version = "0.4.3" 2838 | source = "registry+https://github.com/rust-lang/crates.io-index" 2839 | checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" 2840 | dependencies = [ 2841 | "getrandom 0.2.8", 2842 | "redox_syscall", 2843 | "thiserror", 2844 | ] 2845 | 2846 | [[package]] 2847 | name = "regex" 2848 | version = "1.7.1" 2849 | source = "registry+https://github.com/rust-lang/crates.io-index" 2850 | checksum = "48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733" 2851 | dependencies = [ 2852 | "aho-corasick", 2853 | "memchr", 2854 | "regex-syntax", 2855 | ] 2856 | 2857 | [[package]] 2858 | name = "regex-syntax" 2859 | version = "0.6.28" 2860 | source = "registry+https://github.com/rust-lang/crates.io-index" 2861 | checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848" 2862 | 2863 | [[package]] 2864 | name = "reqwest" 2865 | version = "0.11.14" 2866 | source = "registry+https://github.com/rust-lang/crates.io-index" 2867 | checksum = "21eed90ec8570952d53b772ecf8f206aa1ec9a3d76b2521c56c42973f2d91ee9" 2868 | dependencies = [ 2869 | "async-compression", 2870 | "base64 0.21.0", 2871 | "bytes", 2872 | "encoding_rs", 2873 | "futures-core", 2874 | "futures-util", 2875 | "h2", 2876 | "http", 2877 | "http-body", 2878 | "hyper", 2879 | "hyper-rustls", 2880 | "ipnet", 2881 | "js-sys", 2882 | "log", 2883 | "mime", 2884 | "once_cell", 2885 | "percent-encoding", 2886 | "pin-project-lite", 2887 | "rustls", 2888 | "rustls-pemfile 1.0.2", 2889 | "serde", 2890 | "serde_json", 2891 | "serde_urlencoded", 2892 | "tokio", 2893 | "tokio-rustls", 2894 | "tokio-util", 2895 | "tower-service", 2896 | "url", 2897 | "wasm-bindgen", 2898 | "wasm-bindgen-futures", 2899 | "web-sys", 2900 | "webpki-roots", 2901 | "winreg", 2902 | ] 2903 | 2904 | [[package]] 2905 | name = "ring" 2906 | version = "0.16.20" 2907 | source = "registry+https://github.com/rust-lang/crates.io-index" 2908 | checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" 2909 | dependencies = [ 2910 | "cc", 2911 | "libc", 2912 | "once_cell", 2913 | "spin", 2914 | "untrusted", 2915 | "web-sys", 2916 | "winapi", 2917 | ] 2918 | 2919 | [[package]] 2920 | name = "rpassword" 2921 | version = "6.0.1" 2922 | source = "registry+https://github.com/rust-lang/crates.io-index" 2923 | checksum = "2bf099a1888612545b683d2661a1940089f6c2e5a8e38979b2159da876bfd956" 2924 | dependencies = [ 2925 | "libc", 2926 | "serde", 2927 | "serde_json", 2928 | "winapi", 2929 | ] 2930 | 2931 | [[package]] 2932 | name = "rustc-hash" 2933 | version = "1.1.0" 2934 | source = "registry+https://github.com/rust-lang/crates.io-index" 2935 | checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" 2936 | 2937 | [[package]] 2938 | name = "rustc_version" 2939 | version = "0.4.0" 2940 | source = "registry+https://github.com/rust-lang/crates.io-index" 2941 | checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" 2942 | dependencies = [ 2943 | "semver", 2944 | ] 2945 | 2946 | [[package]] 2947 | name = "rusticata-macros" 2948 | version = "4.1.0" 2949 | source = "registry+https://github.com/rust-lang/crates.io-index" 2950 | checksum = "faf0c4a6ece9950b9abdb62b1cfcf2a68b3b67a10ba445b3bb85be2a293d0632" 2951 | dependencies = [ 2952 | "nom", 2953 | ] 2954 | 2955 | [[package]] 2956 | name = "rustix" 2957 | version = "0.36.9" 2958 | source = "registry+https://github.com/rust-lang/crates.io-index" 2959 | checksum = "fd5c6ff11fecd55b40746d1995a02f2eb375bf8c00d192d521ee09f42bef37bc" 2960 | dependencies = [ 2961 | "bitflags", 2962 | "errno 0.2.8", 2963 | "io-lifetimes", 2964 | "libc", 2965 | "linux-raw-sys 0.1.4", 2966 | "windows-sys 0.45.0", 2967 | ] 2968 | 2969 | [[package]] 2970 | name = "rustix" 2971 | version = "0.37.7" 2972 | source = "registry+https://github.com/rust-lang/crates.io-index" 2973 | checksum = "2aae838e49b3d63e9274e1c01833cc8139d3fec468c3b84688c628f44b1ae11d" 2974 | dependencies = [ 2975 | "bitflags", 2976 | "errno 0.3.0", 2977 | "io-lifetimes", 2978 | "libc", 2979 | "linux-raw-sys 0.3.1", 2980 | "windows-sys 0.45.0", 2981 | ] 2982 | 2983 | [[package]] 2984 | name = "rustls" 2985 | version = "0.20.8" 2986 | source = "registry+https://github.com/rust-lang/crates.io-index" 2987 | checksum = "fff78fc74d175294f4e83b28343315ffcfb114b156f0185e9741cb5570f50e2f" 2988 | dependencies = [ 2989 | "log", 2990 | "ring", 2991 | "sct", 2992 | "webpki", 2993 | ] 2994 | 2995 | [[package]] 2996 | name = "rustls-native-certs" 2997 | version = "0.6.2" 2998 | source = "registry+https://github.com/rust-lang/crates.io-index" 2999 | checksum = "0167bac7a9f490495f3c33013e7722b53cb087ecbe082fb0c6387c96f634ea50" 3000 | dependencies = [ 3001 | "openssl-probe", 3002 | "rustls-pemfile 1.0.2", 3003 | "schannel", 3004 | "security-framework", 3005 | ] 3006 | 3007 | [[package]] 3008 | name = "rustls-pemfile" 3009 | version = "0.2.1" 3010 | source = "registry+https://github.com/rust-lang/crates.io-index" 3011 | checksum = "5eebeaeb360c87bfb72e84abdb3447159c0eaececf1bef2aecd65a8be949d1c9" 3012 | dependencies = [ 3013 | "base64 0.13.1", 3014 | ] 3015 | 3016 | [[package]] 3017 | name = "rustls-pemfile" 3018 | version = "1.0.2" 3019 | source = "registry+https://github.com/rust-lang/crates.io-index" 3020 | checksum = "d194b56d58803a43635bdc398cd17e383d6f71f9182b9a192c127ca42494a59b" 3021 | dependencies = [ 3022 | "base64 0.21.0", 3023 | ] 3024 | 3025 | [[package]] 3026 | name = "rustversion" 3027 | version = "1.0.12" 3028 | source = "registry+https://github.com/rust-lang/crates.io-index" 3029 | checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06" 3030 | 3031 | [[package]] 3032 | name = "ryu" 3033 | version = "1.0.13" 3034 | source = "registry+https://github.com/rust-lang/crates.io-index" 3035 | checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" 3036 | 3037 | [[package]] 3038 | name = "schannel" 3039 | version = "0.1.21" 3040 | source = "registry+https://github.com/rust-lang/crates.io-index" 3041 | checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3" 3042 | dependencies = [ 3043 | "windows-sys 0.42.0", 3044 | ] 3045 | 3046 | [[package]] 3047 | name = "scopeguard" 3048 | version = "1.1.0" 3049 | source = "registry+https://github.com/rust-lang/crates.io-index" 3050 | checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" 3051 | 3052 | [[package]] 3053 | name = "scratch" 3054 | version = "1.0.5" 3055 | source = "registry+https://github.com/rust-lang/crates.io-index" 3056 | checksum = "1792db035ce95be60c3f8853017b3999209281c24e2ba5bc8e59bf97a0c590c1" 3057 | 3058 | [[package]] 3059 | name = "sct" 3060 | version = "0.7.0" 3061 | source = "registry+https://github.com/rust-lang/crates.io-index" 3062 | checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" 3063 | dependencies = [ 3064 | "ring", 3065 | "untrusted", 3066 | ] 3067 | 3068 | [[package]] 3069 | name = "security-framework" 3070 | version = "2.8.2" 3071 | source = "registry+https://github.com/rust-lang/crates.io-index" 3072 | checksum = "a332be01508d814fed64bf28f798a146d73792121129962fdf335bb3c49a4254" 3073 | dependencies = [ 3074 | "bitflags", 3075 | "core-foundation", 3076 | "core-foundation-sys", 3077 | "libc", 3078 | "security-framework-sys", 3079 | ] 3080 | 3081 | [[package]] 3082 | name = "security-framework-sys" 3083 | version = "2.8.0" 3084 | source = "registry+https://github.com/rust-lang/crates.io-index" 3085 | checksum = "31c9bb296072e961fcbd8853511dd39c2d8be2deb1e17c6860b1d30732b323b4" 3086 | dependencies = [ 3087 | "core-foundation-sys", 3088 | "libc", 3089 | ] 3090 | 3091 | [[package]] 3092 | name = "semver" 3093 | version = "1.0.17" 3094 | source = "registry+https://github.com/rust-lang/crates.io-index" 3095 | checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed" 3096 | 3097 | [[package]] 3098 | name = "serde" 3099 | version = "1.0.156" 3100 | source = "registry+https://github.com/rust-lang/crates.io-index" 3101 | checksum = "314b5b092c0ade17c00142951e50ced110ec27cea304b1037c6969246c2469a4" 3102 | dependencies = [ 3103 | "serde_derive", 3104 | ] 3105 | 3106 | [[package]] 3107 | name = "serde_bytes" 3108 | version = "0.11.9" 3109 | source = "registry+https://github.com/rust-lang/crates.io-index" 3110 | checksum = "416bda436f9aab92e02c8e10d49a15ddd339cea90b6e340fe51ed97abb548294" 3111 | dependencies = [ 3112 | "serde", 3113 | ] 3114 | 3115 | [[package]] 3116 | name = "serde_derive" 3117 | version = "1.0.156" 3118 | source = "registry+https://github.com/rust-lang/crates.io-index" 3119 | checksum = "d7e29c4601e36bcec74a223228dce795f4cd3616341a4af93520ca1a837c087d" 3120 | dependencies = [ 3121 | "proc-macro2 1.0.56", 3122 | "quote 1.0.26", 3123 | "syn 1.0.109", 3124 | ] 3125 | 3126 | [[package]] 3127 | name = "serde_json" 3128 | version = "1.0.94" 3129 | source = "registry+https://github.com/rust-lang/crates.io-index" 3130 | checksum = "1c533a59c9d8a93a09c6ab31f0fd5e5f4dd1b8fc9434804029839884765d04ea" 3131 | dependencies = [ 3132 | "itoa", 3133 | "ryu", 3134 | "serde", 3135 | ] 3136 | 3137 | [[package]] 3138 | name = "serde_urlencoded" 3139 | version = "0.7.1" 3140 | source = "registry+https://github.com/rust-lang/crates.io-index" 3141 | checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" 3142 | dependencies = [ 3143 | "form_urlencoded", 3144 | "itoa", 3145 | "ryu", 3146 | "serde", 3147 | ] 3148 | 3149 | [[package]] 3150 | name = "serde_yaml" 3151 | version = "0.8.26" 3152 | source = "registry+https://github.com/rust-lang/crates.io-index" 3153 | checksum = "578a7433b776b56a35785ed5ce9a7e777ac0598aac5a6dd1b4b18a307c7fc71b" 3154 | dependencies = [ 3155 | "indexmap", 3156 | "ryu", 3157 | "serde", 3158 | "yaml-rust", 3159 | ] 3160 | 3161 | [[package]] 3162 | name = "sha-1" 3163 | version = "0.10.1" 3164 | source = "registry+https://github.com/rust-lang/crates.io-index" 3165 | checksum = "f5058ada175748e33390e40e872bd0fe59a19f265d0158daa551c5a88a76009c" 3166 | dependencies = [ 3167 | "cfg-if", 3168 | "cpufeatures", 3169 | "digest 0.10.6", 3170 | ] 3171 | 3172 | [[package]] 3173 | name = "sha2" 3174 | version = "0.9.9" 3175 | source = "registry+https://github.com/rust-lang/crates.io-index" 3176 | checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" 3177 | dependencies = [ 3178 | "block-buffer 0.9.0", 3179 | "cfg-if", 3180 | "cpufeatures", 3181 | "digest 0.9.0", 3182 | "opaque-debug", 3183 | ] 3184 | 3185 | [[package]] 3186 | name = "sha2" 3187 | version = "0.10.6" 3188 | source = "registry+https://github.com/rust-lang/crates.io-index" 3189 | checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" 3190 | dependencies = [ 3191 | "cfg-if", 3192 | "cpufeatures", 3193 | "digest 0.10.6", 3194 | ] 3195 | 3196 | [[package]] 3197 | name = "sha3" 3198 | version = "0.9.1" 3199 | source = "registry+https://github.com/rust-lang/crates.io-index" 3200 | checksum = "f81199417d4e5de3f04b1e871023acea7389672c4135918f05aa9cbf2f2fa809" 3201 | dependencies = [ 3202 | "block-buffer 0.9.0", 3203 | "digest 0.9.0", 3204 | "keccak", 3205 | "opaque-debug", 3206 | ] 3207 | 3208 | [[package]] 3209 | name = "sha3" 3210 | version = "0.10.6" 3211 | source = "registry+https://github.com/rust-lang/crates.io-index" 3212 | checksum = "bdf0c33fae925bdc080598b84bc15c55e7b9a4a43b3c704da051f977469691c9" 3213 | dependencies = [ 3214 | "digest 0.10.6", 3215 | "keccak", 3216 | ] 3217 | 3218 | [[package]] 3219 | name = "shell-words" 3220 | version = "1.1.0" 3221 | source = "registry+https://github.com/rust-lang/crates.io-index" 3222 | checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde" 3223 | 3224 | [[package]] 3225 | name = "signal-hook-registry" 3226 | version = "1.4.1" 3227 | source = "registry+https://github.com/rust-lang/crates.io-index" 3228 | checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" 3229 | dependencies = [ 3230 | "libc", 3231 | ] 3232 | 3233 | [[package]] 3234 | name = "signature" 3235 | version = "1.6.4" 3236 | source = "registry+https://github.com/rust-lang/crates.io-index" 3237 | checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" 3238 | 3239 | [[package]] 3240 | name = "sized-chunks" 3241 | version = "0.6.5" 3242 | source = "registry+https://github.com/rust-lang/crates.io-index" 3243 | checksum = "16d69225bde7a69b235da73377861095455d298f2b970996eec25ddbb42b3d1e" 3244 | dependencies = [ 3245 | "bitmaps", 3246 | "typenum", 3247 | ] 3248 | 3249 | [[package]] 3250 | name = "slab" 3251 | version = "0.4.8" 3252 | source = "registry+https://github.com/rust-lang/crates.io-index" 3253 | checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" 3254 | dependencies = [ 3255 | "autocfg", 3256 | ] 3257 | 3258 | [[package]] 3259 | name = "smallvec" 3260 | version = "1.10.0" 3261 | source = "registry+https://github.com/rust-lang/crates.io-index" 3262 | checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" 3263 | 3264 | [[package]] 3265 | name = "socket2" 3266 | version = "0.4.9" 3267 | source = "registry+https://github.com/rust-lang/crates.io-index" 3268 | checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" 3269 | dependencies = [ 3270 | "libc", 3271 | "winapi", 3272 | ] 3273 | 3274 | [[package]] 3275 | name = "solana-account-decoder" 3276 | version = "1.14.16" 3277 | source = "git+https://github.com/jito-foundation/jito-solana.git?tag=v1.14.16-jito#9857335b7453be86795f62380c7a8f79e2b84f27" 3278 | dependencies = [ 3279 | "Inflector", 3280 | "base64 0.13.1", 3281 | "bincode", 3282 | "bs58 0.4.0", 3283 | "bv", 3284 | "lazy_static", 3285 | "serde", 3286 | "serde_derive", 3287 | "serde_json", 3288 | "solana-address-lookup-table-program", 3289 | "solana-config-program", 3290 | "solana-sdk 1.14.16", 3291 | "solana-vote-program", 3292 | "spl-token", 3293 | "spl-token-2022", 3294 | "thiserror", 3295 | "zstd", 3296 | ] 3297 | 3298 | [[package]] 3299 | name = "solana-address-lookup-table-program" 3300 | version = "1.14.16" 3301 | source = "git+https://github.com/jito-foundation/jito-solana.git?tag=v1.14.16-jito#9857335b7453be86795f62380c7a8f79e2b84f27" 3302 | dependencies = [ 3303 | "bincode", 3304 | "bytemuck", 3305 | "log", 3306 | "num-derive", 3307 | "num-traits", 3308 | "rustc_version", 3309 | "serde", 3310 | "solana-frozen-abi 1.14.16", 3311 | "solana-frozen-abi-macro 1.14.16", 3312 | "solana-program 1.14.16", 3313 | "solana-program-runtime", 3314 | "solana-sdk 1.14.16", 3315 | "thiserror", 3316 | ] 3317 | 3318 | [[package]] 3319 | name = "solana-clap-utils" 3320 | version = "1.14.16" 3321 | source = "git+https://github.com/jito-foundation/jito-solana.git?tag=v1.14.16-jito#9857335b7453be86795f62380c7a8f79e2b84f27" 3322 | dependencies = [ 3323 | "chrono", 3324 | "clap 2.34.0", 3325 | "rpassword", 3326 | "solana-perf", 3327 | "solana-remote-wallet", 3328 | "solana-sdk 1.14.16", 3329 | "thiserror", 3330 | "tiny-bip39", 3331 | "uriparse", 3332 | "url", 3333 | ] 3334 | 3335 | [[package]] 3336 | name = "solana-cli-config" 3337 | version = "1.14.16" 3338 | source = "git+https://github.com/jito-foundation/jito-solana.git?tag=v1.14.16-jito#9857335b7453be86795f62380c7a8f79e2b84f27" 3339 | dependencies = [ 3340 | "dirs-next", 3341 | "lazy_static", 3342 | "serde", 3343 | "serde_derive", 3344 | "serde_yaml", 3345 | "solana-clap-utils", 3346 | "solana-sdk 1.14.16", 3347 | "url", 3348 | ] 3349 | 3350 | [[package]] 3351 | name = "solana-client" 3352 | version = "1.14.16" 3353 | source = "git+https://github.com/jito-foundation/jito-solana.git?tag=v1.14.16-jito#9857335b7453be86795f62380c7a8f79e2b84f27" 3354 | dependencies = [ 3355 | "async-mutex", 3356 | "async-trait", 3357 | "base64 0.13.1", 3358 | "bincode", 3359 | "bs58 0.4.0", 3360 | "bytes", 3361 | "clap 2.34.0", 3362 | "crossbeam-channel", 3363 | "enum_dispatch", 3364 | "futures", 3365 | "futures-util", 3366 | "indexmap", 3367 | "indicatif", 3368 | "itertools", 3369 | "jsonrpc-core", 3370 | "lazy_static", 3371 | "log", 3372 | "quinn", 3373 | "quinn-proto", 3374 | "rand 0.7.3", 3375 | "rand_chacha 0.2.2", 3376 | "rayon", 3377 | "reqwest", 3378 | "rustls", 3379 | "semver", 3380 | "serde", 3381 | "serde_derive", 3382 | "serde_json", 3383 | "solana-account-decoder", 3384 | "solana-clap-utils", 3385 | "solana-faucet", 3386 | "solana-measure", 3387 | "solana-metrics", 3388 | "solana-net-utils", 3389 | "solana-sdk 1.14.16", 3390 | "solana-streamer", 3391 | "solana-transaction-status", 3392 | "solana-version", 3393 | "solana-vote-program", 3394 | "spl-token-2022", 3395 | "thiserror", 3396 | "tokio", 3397 | "tokio-stream", 3398 | "tokio-tungstenite", 3399 | "tungstenite", 3400 | "url", 3401 | ] 3402 | 3403 | [[package]] 3404 | name = "solana-config-program" 3405 | version = "1.14.16" 3406 | source = "git+https://github.com/jito-foundation/jito-solana.git?tag=v1.14.16-jito#9857335b7453be86795f62380c7a8f79e2b84f27" 3407 | dependencies = [ 3408 | "bincode", 3409 | "chrono", 3410 | "serde", 3411 | "serde_derive", 3412 | "solana-program-runtime", 3413 | "solana-sdk 1.14.16", 3414 | ] 3415 | 3416 | [[package]] 3417 | name = "solana-faucet" 3418 | version = "1.14.16" 3419 | source = "git+https://github.com/jito-foundation/jito-solana.git?tag=v1.14.16-jito#9857335b7453be86795f62380c7a8f79e2b84f27" 3420 | dependencies = [ 3421 | "bincode", 3422 | "byteorder", 3423 | "clap 2.34.0", 3424 | "crossbeam-channel", 3425 | "log", 3426 | "serde", 3427 | "serde_derive", 3428 | "solana-clap-utils", 3429 | "solana-cli-config", 3430 | "solana-logger 1.14.16", 3431 | "solana-metrics", 3432 | "solana-sdk 1.14.16", 3433 | "solana-version", 3434 | "spl-memo", 3435 | "thiserror", 3436 | "tokio", 3437 | ] 3438 | 3439 | [[package]] 3440 | name = "solana-frozen-abi" 3441 | version = "1.14.13" 3442 | source = "registry+https://github.com/rust-lang/crates.io-index" 3443 | checksum = "f44a019070a6cec4d3ad8605c5caa65bdaa13f00b5f1849340f44ffea63b625b" 3444 | dependencies = [ 3445 | "ahash", 3446 | "blake3", 3447 | "block-buffer 0.9.0", 3448 | "bs58 0.4.0", 3449 | "bv", 3450 | "byteorder", 3451 | "cc", 3452 | "either", 3453 | "generic-array", 3454 | "getrandom 0.1.16", 3455 | "hashbrown 0.12.3", 3456 | "im", 3457 | "lazy_static", 3458 | "log", 3459 | "memmap2", 3460 | "once_cell", 3461 | "rand_core 0.6.4", 3462 | "rustc_version", 3463 | "serde", 3464 | "serde_bytes", 3465 | "serde_derive", 3466 | "serde_json", 3467 | "sha2 0.10.6", 3468 | "solana-frozen-abi-macro 1.14.13", 3469 | "subtle", 3470 | "thiserror", 3471 | ] 3472 | 3473 | [[package]] 3474 | name = "solana-frozen-abi" 3475 | version = "1.14.16" 3476 | source = "git+https://github.com/jito-foundation/jito-solana.git?tag=v1.14.16-jito#9857335b7453be86795f62380c7a8f79e2b84f27" 3477 | dependencies = [ 3478 | "ahash", 3479 | "blake3", 3480 | "block-buffer 0.9.0", 3481 | "bs58 0.4.0", 3482 | "bv", 3483 | "byteorder", 3484 | "cc", 3485 | "either", 3486 | "generic-array", 3487 | "getrandom 0.1.16", 3488 | "hashbrown 0.12.3", 3489 | "im", 3490 | "lazy_static", 3491 | "log", 3492 | "memmap2", 3493 | "once_cell", 3494 | "rand_core 0.6.4", 3495 | "rustc_version", 3496 | "serde", 3497 | "serde_bytes", 3498 | "serde_derive", 3499 | "serde_json", 3500 | "sha2 0.10.6", 3501 | "solana-frozen-abi-macro 1.14.16", 3502 | "subtle", 3503 | "thiserror", 3504 | ] 3505 | 3506 | [[package]] 3507 | name = "solana-frozen-abi-macro" 3508 | version = "1.14.13" 3509 | source = "registry+https://github.com/rust-lang/crates.io-index" 3510 | checksum = "be23cc7a382f54dfe1348edb94610e5cc146b8eb21563cdd04062a403c75ba62" 3511 | dependencies = [ 3512 | "proc-macro2 1.0.56", 3513 | "quote 1.0.26", 3514 | "rustc_version", 3515 | "syn 1.0.109", 3516 | ] 3517 | 3518 | [[package]] 3519 | name = "solana-frozen-abi-macro" 3520 | version = "1.14.16" 3521 | source = "git+https://github.com/jito-foundation/jito-solana.git?tag=v1.14.16-jito#9857335b7453be86795f62380c7a8f79e2b84f27" 3522 | dependencies = [ 3523 | "proc-macro2 1.0.56", 3524 | "quote 1.0.26", 3525 | "rustc_version", 3526 | "syn 1.0.109", 3527 | ] 3528 | 3529 | [[package]] 3530 | name = "solana-logger" 3531 | version = "1.14.13" 3532 | source = "registry+https://github.com/rust-lang/crates.io-index" 3533 | checksum = "447d16a70a1b5383736ef44801050c0e1affd022303b22ed899352f958c2de4b" 3534 | dependencies = [ 3535 | "env_logger 0.9.0", 3536 | "lazy_static", 3537 | "log", 3538 | ] 3539 | 3540 | [[package]] 3541 | name = "solana-logger" 3542 | version = "1.14.16" 3543 | source = "git+https://github.com/jito-foundation/jito-solana.git?tag=v1.14.16-jito#9857335b7453be86795f62380c7a8f79e2b84f27" 3544 | dependencies = [ 3545 | "env_logger 0.9.0", 3546 | "lazy_static", 3547 | "log", 3548 | ] 3549 | 3550 | [[package]] 3551 | name = "solana-measure" 3552 | version = "1.14.16" 3553 | source = "git+https://github.com/jito-foundation/jito-solana.git?tag=v1.14.16-jito#9857335b7453be86795f62380c7a8f79e2b84f27" 3554 | dependencies = [ 3555 | "log", 3556 | "solana-sdk 1.14.16", 3557 | ] 3558 | 3559 | [[package]] 3560 | name = "solana-metrics" 3561 | version = "1.14.16" 3562 | source = "git+https://github.com/jito-foundation/jito-solana.git?tag=v1.14.16-jito#9857335b7453be86795f62380c7a8f79e2b84f27" 3563 | dependencies = [ 3564 | "crossbeam-channel", 3565 | "gethostname", 3566 | "lazy_static", 3567 | "log", 3568 | "reqwest", 3569 | "solana-sdk 1.14.16", 3570 | ] 3571 | 3572 | [[package]] 3573 | name = "solana-net-utils" 3574 | version = "1.14.16" 3575 | source = "git+https://github.com/jito-foundation/jito-solana.git?tag=v1.14.16-jito#9857335b7453be86795f62380c7a8f79e2b84f27" 3576 | dependencies = [ 3577 | "bincode", 3578 | "clap 3.2.23", 3579 | "crossbeam-channel", 3580 | "log", 3581 | "nix", 3582 | "rand 0.7.3", 3583 | "serde", 3584 | "serde_derive", 3585 | "socket2", 3586 | "solana-logger 1.14.16", 3587 | "solana-sdk 1.14.16", 3588 | "solana-version", 3589 | "tokio", 3590 | "url", 3591 | ] 3592 | 3593 | [[package]] 3594 | name = "solana-perf" 3595 | version = "1.14.16" 3596 | source = "git+https://github.com/jito-foundation/jito-solana.git?tag=v1.14.16-jito#9857335b7453be86795f62380c7a8f79e2b84f27" 3597 | dependencies = [ 3598 | "ahash", 3599 | "bincode", 3600 | "bv", 3601 | "caps", 3602 | "curve25519-dalek", 3603 | "dlopen", 3604 | "dlopen_derive", 3605 | "fnv", 3606 | "lazy_static", 3607 | "libc", 3608 | "log", 3609 | "nix", 3610 | "rand 0.7.3", 3611 | "rayon", 3612 | "serde", 3613 | "solana-metrics", 3614 | "solana-rayon-threadlimit", 3615 | "solana-sdk 1.14.16", 3616 | "solana-vote-program", 3617 | ] 3618 | 3619 | [[package]] 3620 | name = "solana-program" 3621 | version = "1.14.13" 3622 | source = "registry+https://github.com/rust-lang/crates.io-index" 3623 | checksum = "d0937481f080f5dd495fae456c94718a7bacf30fb5fdabb02dcb8a9622e446d5" 3624 | dependencies = [ 3625 | "base64 0.13.1", 3626 | "bincode", 3627 | "bitflags", 3628 | "blake3", 3629 | "borsh", 3630 | "borsh-derive", 3631 | "bs58 0.4.0", 3632 | "bv", 3633 | "bytemuck", 3634 | "cc", 3635 | "console_error_panic_hook", 3636 | "console_log", 3637 | "curve25519-dalek", 3638 | "getrandom 0.2.8", 3639 | "itertools", 3640 | "js-sys", 3641 | "lazy_static", 3642 | "libc", 3643 | "libsecp256k1", 3644 | "log", 3645 | "memoffset 0.6.5", 3646 | "num-derive", 3647 | "num-traits", 3648 | "parking_lot", 3649 | "rand 0.7.3", 3650 | "rand_chacha 0.2.2", 3651 | "rustc_version", 3652 | "rustversion", 3653 | "serde", 3654 | "serde_bytes", 3655 | "serde_derive", 3656 | "serde_json", 3657 | "sha2 0.10.6", 3658 | "sha3 0.10.6", 3659 | "solana-frozen-abi 1.14.13", 3660 | "solana-frozen-abi-macro 1.14.13", 3661 | "solana-sdk-macro 1.14.13", 3662 | "thiserror", 3663 | "tiny-bip39", 3664 | "wasm-bindgen", 3665 | "zeroize", 3666 | ] 3667 | 3668 | [[package]] 3669 | name = "solana-program" 3670 | version = "1.14.16" 3671 | source = "git+https://github.com/jito-foundation/jito-solana.git?tag=v1.14.16-jito#9857335b7453be86795f62380c7a8f79e2b84f27" 3672 | dependencies = [ 3673 | "base64 0.13.1", 3674 | "bincode", 3675 | "bitflags", 3676 | "blake3", 3677 | "borsh", 3678 | "borsh-derive", 3679 | "bs58 0.4.0", 3680 | "bv", 3681 | "bytemuck", 3682 | "cc", 3683 | "console_error_panic_hook", 3684 | "console_log", 3685 | "curve25519-dalek", 3686 | "getrandom 0.2.8", 3687 | "itertools", 3688 | "js-sys", 3689 | "lazy_static", 3690 | "libc", 3691 | "libsecp256k1", 3692 | "log", 3693 | "memoffset 0.6.5", 3694 | "num-derive", 3695 | "num-traits", 3696 | "parking_lot", 3697 | "rand 0.7.3", 3698 | "rand_chacha 0.2.2", 3699 | "rustc_version", 3700 | "rustversion", 3701 | "serde", 3702 | "serde_bytes", 3703 | "serde_derive", 3704 | "serde_json", 3705 | "sha2 0.10.6", 3706 | "sha3 0.10.6", 3707 | "solana-frozen-abi 1.14.16", 3708 | "solana-frozen-abi-macro 1.14.16", 3709 | "solana-sdk-macro 1.14.16", 3710 | "thiserror", 3711 | "tiny-bip39", 3712 | "wasm-bindgen", 3713 | "zeroize", 3714 | ] 3715 | 3716 | [[package]] 3717 | name = "solana-program-runtime" 3718 | version = "1.14.16" 3719 | source = "git+https://github.com/jito-foundation/jito-solana.git?tag=v1.14.16-jito#9857335b7453be86795f62380c7a8f79e2b84f27" 3720 | dependencies = [ 3721 | "base64 0.13.1", 3722 | "bincode", 3723 | "eager", 3724 | "enum-iterator", 3725 | "itertools", 3726 | "libc", 3727 | "libloading", 3728 | "log", 3729 | "num-derive", 3730 | "num-traits", 3731 | "rand 0.7.3", 3732 | "rustc_version", 3733 | "serde", 3734 | "solana-frozen-abi 1.14.16", 3735 | "solana-frozen-abi-macro 1.14.16", 3736 | "solana-measure", 3737 | "solana-metrics", 3738 | "solana-sdk 1.14.16", 3739 | "thiserror", 3740 | ] 3741 | 3742 | [[package]] 3743 | name = "solana-rayon-threadlimit" 3744 | version = "1.14.16" 3745 | source = "git+https://github.com/jito-foundation/jito-solana.git?tag=v1.14.16-jito#9857335b7453be86795f62380c7a8f79e2b84f27" 3746 | dependencies = [ 3747 | "lazy_static", 3748 | "num_cpus", 3749 | ] 3750 | 3751 | [[package]] 3752 | name = "solana-remote-wallet" 3753 | version = "1.14.16" 3754 | source = "git+https://github.com/jito-foundation/jito-solana.git?tag=v1.14.16-jito#9857335b7453be86795f62380c7a8f79e2b84f27" 3755 | dependencies = [ 3756 | "console", 3757 | "dialoguer", 3758 | "log", 3759 | "num-derive", 3760 | "num-traits", 3761 | "parking_lot", 3762 | "qstring", 3763 | "semver", 3764 | "solana-sdk 1.14.16", 3765 | "thiserror", 3766 | "uriparse", 3767 | ] 3768 | 3769 | [[package]] 3770 | name = "solana-sdk" 3771 | version = "1.14.13" 3772 | source = "registry+https://github.com/rust-lang/crates.io-index" 3773 | checksum = "390e7481c56dda2ceab2652beeda30a533e9667b34861a2eb4eec92fa1d826d7" 3774 | dependencies = [ 3775 | "assert_matches", 3776 | "base64 0.13.1", 3777 | "bincode", 3778 | "bitflags", 3779 | "borsh", 3780 | "bs58 0.4.0", 3781 | "bytemuck", 3782 | "byteorder", 3783 | "chrono", 3784 | "derivation-path", 3785 | "digest 0.10.6", 3786 | "ed25519-dalek", 3787 | "ed25519-dalek-bip32", 3788 | "generic-array", 3789 | "hmac 0.12.1", 3790 | "itertools", 3791 | "js-sys", 3792 | "lazy_static", 3793 | "libsecp256k1", 3794 | "log", 3795 | "memmap2", 3796 | "num-derive", 3797 | "num-traits", 3798 | "pbkdf2 0.11.0", 3799 | "qstring", 3800 | "rand 0.7.3", 3801 | "rand_chacha 0.2.2", 3802 | "rustc_version", 3803 | "rustversion", 3804 | "serde", 3805 | "serde_bytes", 3806 | "serde_derive", 3807 | "serde_json", 3808 | "sha2 0.10.6", 3809 | "sha3 0.10.6", 3810 | "solana-frozen-abi 1.14.13", 3811 | "solana-frozen-abi-macro 1.14.13", 3812 | "solana-logger 1.14.13", 3813 | "solana-program 1.14.13", 3814 | "solana-sdk-macro 1.14.13", 3815 | "thiserror", 3816 | "uriparse", 3817 | "wasm-bindgen", 3818 | ] 3819 | 3820 | [[package]] 3821 | name = "solana-sdk" 3822 | version = "1.14.16" 3823 | source = "git+https://github.com/jito-foundation/jito-solana.git?tag=v1.14.16-jito#9857335b7453be86795f62380c7a8f79e2b84f27" 3824 | dependencies = [ 3825 | "anchor-lang", 3826 | "assert_matches", 3827 | "base64 0.13.1", 3828 | "bincode", 3829 | "bitflags", 3830 | "borsh", 3831 | "bs58 0.4.0", 3832 | "bytemuck", 3833 | "byteorder", 3834 | "chrono", 3835 | "derivation-path", 3836 | "digest 0.10.6", 3837 | "ed25519-dalek", 3838 | "ed25519-dalek-bip32", 3839 | "generic-array", 3840 | "hmac 0.12.1", 3841 | "itertools", 3842 | "js-sys", 3843 | "lazy_static", 3844 | "libsecp256k1", 3845 | "log", 3846 | "memmap2", 3847 | "num-derive", 3848 | "num-traits", 3849 | "pbkdf2 0.11.0", 3850 | "qstring", 3851 | "rand 0.7.3", 3852 | "rand_chacha 0.2.2", 3853 | "rustc_version", 3854 | "rustversion", 3855 | "serde", 3856 | "serde_bytes", 3857 | "serde_derive", 3858 | "serde_json", 3859 | "sha2 0.10.6", 3860 | "sha3 0.10.6", 3861 | "solana-frozen-abi 1.14.16", 3862 | "solana-frozen-abi-macro 1.14.16", 3863 | "solana-logger 1.14.16", 3864 | "solana-program 1.14.16", 3865 | "solana-sdk-macro 1.14.16", 3866 | "thiserror", 3867 | "uriparse", 3868 | "uuid", 3869 | "wasm-bindgen", 3870 | ] 3871 | 3872 | [[package]] 3873 | name = "solana-sdk-macro" 3874 | version = "1.14.13" 3875 | source = "registry+https://github.com/rust-lang/crates.io-index" 3876 | checksum = "33d0acbad862093ea123f3a27364336dcb0c8373522cd6810496a34e932c56c1" 3877 | dependencies = [ 3878 | "bs58 0.4.0", 3879 | "proc-macro2 1.0.56", 3880 | "quote 1.0.26", 3881 | "rustversion", 3882 | "syn 1.0.109", 3883 | ] 3884 | 3885 | [[package]] 3886 | name = "solana-sdk-macro" 3887 | version = "1.14.16" 3888 | source = "git+https://github.com/jito-foundation/jito-solana.git?tag=v1.14.16-jito#9857335b7453be86795f62380c7a8f79e2b84f27" 3889 | dependencies = [ 3890 | "bs58 0.4.0", 3891 | "proc-macro2 1.0.56", 3892 | "quote 1.0.26", 3893 | "rustversion", 3894 | "syn 1.0.109", 3895 | ] 3896 | 3897 | [[package]] 3898 | name = "solana-streamer" 3899 | version = "1.14.16" 3900 | source = "git+https://github.com/jito-foundation/jito-solana.git?tag=v1.14.16-jito#9857335b7453be86795f62380c7a8f79e2b84f27" 3901 | dependencies = [ 3902 | "crossbeam-channel", 3903 | "futures-util", 3904 | "histogram", 3905 | "indexmap", 3906 | "itertools", 3907 | "libc", 3908 | "log", 3909 | "nix", 3910 | "pem", 3911 | "percentage", 3912 | "pkcs8", 3913 | "quinn", 3914 | "rand 0.7.3", 3915 | "rcgen", 3916 | "rustls", 3917 | "solana-metrics", 3918 | "solana-perf", 3919 | "solana-sdk 1.14.16", 3920 | "thiserror", 3921 | "tokio", 3922 | "x509-parser", 3923 | ] 3924 | 3925 | [[package]] 3926 | name = "solana-transaction-status" 3927 | version = "1.14.16" 3928 | source = "git+https://github.com/jito-foundation/jito-solana.git?tag=v1.14.16-jito#9857335b7453be86795f62380c7a8f79e2b84f27" 3929 | dependencies = [ 3930 | "Inflector", 3931 | "base64 0.13.1", 3932 | "bincode", 3933 | "borsh", 3934 | "bs58 0.4.0", 3935 | "lazy_static", 3936 | "log", 3937 | "serde", 3938 | "serde_derive", 3939 | "serde_json", 3940 | "solana-account-decoder", 3941 | "solana-address-lookup-table-program", 3942 | "solana-measure", 3943 | "solana-metrics", 3944 | "solana-sdk 1.14.16", 3945 | "solana-vote-program", 3946 | "spl-associated-token-account", 3947 | "spl-memo", 3948 | "spl-token", 3949 | "spl-token-2022", 3950 | "thiserror", 3951 | ] 3952 | 3953 | [[package]] 3954 | name = "solana-version" 3955 | version = "1.14.16" 3956 | source = "git+https://github.com/jito-foundation/jito-solana.git?tag=v1.14.16-jito#9857335b7453be86795f62380c7a8f79e2b84f27" 3957 | dependencies = [ 3958 | "log", 3959 | "rustc_version", 3960 | "semver", 3961 | "serde", 3962 | "serde_derive", 3963 | "solana-frozen-abi 1.14.16", 3964 | "solana-frozen-abi-macro 1.14.16", 3965 | "solana-sdk 1.14.16", 3966 | ] 3967 | 3968 | [[package]] 3969 | name = "solana-vote-program" 3970 | version = "1.14.16" 3971 | source = "git+https://github.com/jito-foundation/jito-solana.git?tag=v1.14.16-jito#9857335b7453be86795f62380c7a8f79e2b84f27" 3972 | dependencies = [ 3973 | "bincode", 3974 | "log", 3975 | "num-derive", 3976 | "num-traits", 3977 | "rustc_version", 3978 | "serde", 3979 | "serde_derive", 3980 | "solana-frozen-abi 1.14.16", 3981 | "solana-frozen-abi-macro 1.14.16", 3982 | "solana-metrics", 3983 | "solana-program-runtime", 3984 | "solana-sdk 1.14.16", 3985 | "thiserror", 3986 | ] 3987 | 3988 | [[package]] 3989 | name = "solana-zk-token-sdk" 3990 | version = "1.14.13" 3991 | source = "registry+https://github.com/rust-lang/crates.io-index" 3992 | checksum = "cebca4083e982ae01583d1a590c4d679e6f648a4761364ddfb43026d2c433142" 3993 | dependencies = [ 3994 | "aes-gcm-siv", 3995 | "arrayref", 3996 | "base64 0.13.1", 3997 | "bincode", 3998 | "bytemuck", 3999 | "byteorder", 4000 | "cipher 0.4.4", 4001 | "curve25519-dalek", 4002 | "getrandom 0.1.16", 4003 | "itertools", 4004 | "lazy_static", 4005 | "merlin", 4006 | "num-derive", 4007 | "num-traits", 4008 | "rand 0.7.3", 4009 | "serde", 4010 | "serde_json", 4011 | "sha3 0.9.1", 4012 | "solana-program 1.14.13", 4013 | "solana-sdk 1.14.13", 4014 | "subtle", 4015 | "thiserror", 4016 | "zeroize", 4017 | ] 4018 | 4019 | [[package]] 4020 | name = "spin" 4021 | version = "0.5.2" 4022 | source = "registry+https://github.com/rust-lang/crates.io-index" 4023 | checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" 4024 | 4025 | [[package]] 4026 | name = "spki" 4027 | version = "0.5.4" 4028 | source = "registry+https://github.com/rust-lang/crates.io-index" 4029 | checksum = "44d01ac02a6ccf3e07db148d2be087da624fea0221a16152ed01f0496a6b0a27" 4030 | dependencies = [ 4031 | "base64ct", 4032 | "der", 4033 | ] 4034 | 4035 | [[package]] 4036 | name = "spl-associated-token-account" 4037 | version = "1.1.2" 4038 | source = "registry+https://github.com/rust-lang/crates.io-index" 4039 | checksum = "fbc000f0fdf1f12f99d77d398137c1751345b18c88258ce0f99b7872cf6c9bd6" 4040 | dependencies = [ 4041 | "assert_matches", 4042 | "borsh", 4043 | "num-derive", 4044 | "num-traits", 4045 | "solana-program 1.14.13", 4046 | "spl-token", 4047 | "spl-token-2022", 4048 | "thiserror", 4049 | ] 4050 | 4051 | [[package]] 4052 | name = "spl-memo" 4053 | version = "3.0.1" 4054 | source = "registry+https://github.com/rust-lang/crates.io-index" 4055 | checksum = "bd0dc6f70db6bacea7ff25870b016a65ba1d1b6013536f08e4fd79a8f9005325" 4056 | dependencies = [ 4057 | "solana-program 1.14.13", 4058 | ] 4059 | 4060 | [[package]] 4061 | name = "spl-token" 4062 | version = "3.5.0" 4063 | source = "registry+https://github.com/rust-lang/crates.io-index" 4064 | checksum = "8e85e168a785e82564160dcb87b2a8e04cee9bfd1f4d488c729d53d6a4bd300d" 4065 | dependencies = [ 4066 | "arrayref", 4067 | "bytemuck", 4068 | "num-derive", 4069 | "num-traits", 4070 | "num_enum", 4071 | "solana-program 1.14.13", 4072 | "thiserror", 4073 | ] 4074 | 4075 | [[package]] 4076 | name = "spl-token-2022" 4077 | version = "0.5.0" 4078 | source = "registry+https://github.com/rust-lang/crates.io-index" 4079 | checksum = "0edb869dbe159b018f17fb9bfa67118c30f232d7f54a73742bc96794dff77ed8" 4080 | dependencies = [ 4081 | "arrayref", 4082 | "bytemuck", 4083 | "num-derive", 4084 | "num-traits", 4085 | "num_enum", 4086 | "solana-program 1.14.13", 4087 | "solana-zk-token-sdk", 4088 | "spl-memo", 4089 | "spl-token", 4090 | "thiserror", 4091 | ] 4092 | 4093 | [[package]] 4094 | name = "strsim" 4095 | version = "0.8.0" 4096 | source = "registry+https://github.com/rust-lang/crates.io-index" 4097 | checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" 4098 | 4099 | [[package]] 4100 | name = "strsim" 4101 | version = "0.10.0" 4102 | source = "registry+https://github.com/rust-lang/crates.io-index" 4103 | checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" 4104 | 4105 | [[package]] 4106 | name = "subtle" 4107 | version = "2.4.1" 4108 | source = "registry+https://github.com/rust-lang/crates.io-index" 4109 | checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" 4110 | 4111 | [[package]] 4112 | name = "syn" 4113 | version = "0.15.44" 4114 | source = "registry+https://github.com/rust-lang/crates.io-index" 4115 | checksum = "9ca4b3b69a77cbe1ffc9e198781b7acb0c7365a883670e8f1c1bc66fba79a5c5" 4116 | dependencies = [ 4117 | "proc-macro2 0.4.30", 4118 | "quote 0.6.13", 4119 | "unicode-xid 0.1.0", 4120 | ] 4121 | 4122 | [[package]] 4123 | name = "syn" 4124 | version = "1.0.109" 4125 | source = "registry+https://github.com/rust-lang/crates.io-index" 4126 | checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" 4127 | dependencies = [ 4128 | "proc-macro2 1.0.56", 4129 | "quote 1.0.26", 4130 | "unicode-ident", 4131 | ] 4132 | 4133 | [[package]] 4134 | name = "syn" 4135 | version = "2.0.13" 4136 | source = "registry+https://github.com/rust-lang/crates.io-index" 4137 | checksum = "4c9da457c5285ac1f936ebd076af6dac17a61cfe7826f2076b4d015cf47bc8ec" 4138 | dependencies = [ 4139 | "proc-macro2 1.0.56", 4140 | "quote 1.0.26", 4141 | "unicode-ident", 4142 | ] 4143 | 4144 | [[package]] 4145 | name = "sync_wrapper" 4146 | version = "0.1.2" 4147 | source = "registry+https://github.com/rust-lang/crates.io-index" 4148 | checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" 4149 | 4150 | [[package]] 4151 | name = "synstructure" 4152 | version = "0.12.6" 4153 | source = "registry+https://github.com/rust-lang/crates.io-index" 4154 | checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" 4155 | dependencies = [ 4156 | "proc-macro2 1.0.56", 4157 | "quote 1.0.26", 4158 | "syn 1.0.109", 4159 | "unicode-xid 0.2.4", 4160 | ] 4161 | 4162 | [[package]] 4163 | name = "tempfile" 4164 | version = "3.4.0" 4165 | source = "registry+https://github.com/rust-lang/crates.io-index" 4166 | checksum = "af18f7ae1acd354b992402e9ec5864359d693cd8a79dcbef59f76891701c1e95" 4167 | dependencies = [ 4168 | "cfg-if", 4169 | "fastrand", 4170 | "redox_syscall", 4171 | "rustix 0.36.9", 4172 | "windows-sys 0.42.0", 4173 | ] 4174 | 4175 | [[package]] 4176 | name = "termcolor" 4177 | version = "1.2.0" 4178 | source = "registry+https://github.com/rust-lang/crates.io-index" 4179 | checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" 4180 | dependencies = [ 4181 | "winapi-util", 4182 | ] 4183 | 4184 | [[package]] 4185 | name = "textwrap" 4186 | version = "0.11.0" 4187 | source = "registry+https://github.com/rust-lang/crates.io-index" 4188 | checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" 4189 | dependencies = [ 4190 | "unicode-width", 4191 | ] 4192 | 4193 | [[package]] 4194 | name = "textwrap" 4195 | version = "0.16.0" 4196 | source = "registry+https://github.com/rust-lang/crates.io-index" 4197 | checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" 4198 | 4199 | [[package]] 4200 | name = "thiserror" 4201 | version = "1.0.40" 4202 | source = "registry+https://github.com/rust-lang/crates.io-index" 4203 | checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac" 4204 | dependencies = [ 4205 | "thiserror-impl", 4206 | ] 4207 | 4208 | [[package]] 4209 | name = "thiserror-impl" 4210 | version = "1.0.40" 4211 | source = "registry+https://github.com/rust-lang/crates.io-index" 4212 | checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" 4213 | dependencies = [ 4214 | "proc-macro2 1.0.56", 4215 | "quote 1.0.26", 4216 | "syn 2.0.13", 4217 | ] 4218 | 4219 | [[package]] 4220 | name = "time" 4221 | version = "0.1.45" 4222 | source = "registry+https://github.com/rust-lang/crates.io-index" 4223 | checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a" 4224 | dependencies = [ 4225 | "libc", 4226 | "wasi 0.10.0+wasi-snapshot-preview1", 4227 | "winapi", 4228 | ] 4229 | 4230 | [[package]] 4231 | name = "time" 4232 | version = "0.3.20" 4233 | source = "registry+https://github.com/rust-lang/crates.io-index" 4234 | checksum = "cd0cbfecb4d19b5ea75bb31ad904eb5b9fa13f21079c3b92017ebdf4999a5890" 4235 | dependencies = [ 4236 | "itoa", 4237 | "serde", 4238 | "time-core", 4239 | "time-macros", 4240 | ] 4241 | 4242 | [[package]] 4243 | name = "time-core" 4244 | version = "0.1.0" 4245 | source = "registry+https://github.com/rust-lang/crates.io-index" 4246 | checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd" 4247 | 4248 | [[package]] 4249 | name = "time-macros" 4250 | version = "0.2.8" 4251 | source = "registry+https://github.com/rust-lang/crates.io-index" 4252 | checksum = "fd80a657e71da814b8e5d60d3374fc6d35045062245d80224748ae522dd76f36" 4253 | dependencies = [ 4254 | "time-core", 4255 | ] 4256 | 4257 | [[package]] 4258 | name = "tiny-bip39" 4259 | version = "0.8.2" 4260 | source = "registry+https://github.com/rust-lang/crates.io-index" 4261 | checksum = "ffc59cb9dfc85bb312c3a78fd6aa8a8582e310b0fa885d5bb877f6dcc601839d" 4262 | dependencies = [ 4263 | "anyhow", 4264 | "hmac 0.8.1", 4265 | "once_cell", 4266 | "pbkdf2 0.4.0", 4267 | "rand 0.7.3", 4268 | "rustc-hash", 4269 | "sha2 0.9.9", 4270 | "thiserror", 4271 | "unicode-normalization", 4272 | "wasm-bindgen", 4273 | "zeroize", 4274 | ] 4275 | 4276 | [[package]] 4277 | name = "tinyvec" 4278 | version = "1.6.0" 4279 | source = "registry+https://github.com/rust-lang/crates.io-index" 4280 | checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" 4281 | dependencies = [ 4282 | "tinyvec_macros", 4283 | ] 4284 | 4285 | [[package]] 4286 | name = "tinyvec_macros" 4287 | version = "0.1.1" 4288 | source = "registry+https://github.com/rust-lang/crates.io-index" 4289 | checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" 4290 | 4291 | [[package]] 4292 | name = "tokio" 4293 | version = "1.27.0" 4294 | source = "registry+https://github.com/rust-lang/crates.io-index" 4295 | checksum = "d0de47a4eecbe11f498978a9b29d792f0d2692d1dd003650c24c76510e3bc001" 4296 | dependencies = [ 4297 | "autocfg", 4298 | "bytes", 4299 | "libc", 4300 | "mio", 4301 | "num_cpus", 4302 | "parking_lot", 4303 | "pin-project-lite", 4304 | "signal-hook-registry", 4305 | "socket2", 4306 | "tokio-macros", 4307 | "windows-sys 0.45.0", 4308 | ] 4309 | 4310 | [[package]] 4311 | name = "tokio-io-timeout" 4312 | version = "1.2.0" 4313 | source = "registry+https://github.com/rust-lang/crates.io-index" 4314 | checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf" 4315 | dependencies = [ 4316 | "pin-project-lite", 4317 | "tokio", 4318 | ] 4319 | 4320 | [[package]] 4321 | name = "tokio-macros" 4322 | version = "2.0.0" 4323 | source = "registry+https://github.com/rust-lang/crates.io-index" 4324 | checksum = "61a573bdc87985e9d6ddeed1b3d864e8a302c847e40d647746df2f1de209d1ce" 4325 | dependencies = [ 4326 | "proc-macro2 1.0.56", 4327 | "quote 1.0.26", 4328 | "syn 2.0.13", 4329 | ] 4330 | 4331 | [[package]] 4332 | name = "tokio-rustls" 4333 | version = "0.23.4" 4334 | source = "registry+https://github.com/rust-lang/crates.io-index" 4335 | checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59" 4336 | dependencies = [ 4337 | "rustls", 4338 | "tokio", 4339 | "webpki", 4340 | ] 4341 | 4342 | [[package]] 4343 | name = "tokio-stream" 4344 | version = "0.1.12" 4345 | source = "registry+https://github.com/rust-lang/crates.io-index" 4346 | checksum = "8fb52b74f05dbf495a8fba459fdc331812b96aa086d9eb78101fa0d4569c3313" 4347 | dependencies = [ 4348 | "futures-core", 4349 | "pin-project-lite", 4350 | "tokio", 4351 | ] 4352 | 4353 | [[package]] 4354 | name = "tokio-tungstenite" 4355 | version = "0.17.2" 4356 | source = "registry+https://github.com/rust-lang/crates.io-index" 4357 | checksum = "f714dd15bead90401d77e04243611caec13726c2408afd5b31901dfcdcb3b181" 4358 | dependencies = [ 4359 | "futures-util", 4360 | "log", 4361 | "rustls", 4362 | "tokio", 4363 | "tokio-rustls", 4364 | "tungstenite", 4365 | "webpki", 4366 | "webpki-roots", 4367 | ] 4368 | 4369 | [[package]] 4370 | name = "tokio-util" 4371 | version = "0.7.2" 4372 | source = "registry+https://github.com/rust-lang/crates.io-index" 4373 | checksum = "f988a1a1adc2fb21f9c12aa96441da33a1728193ae0b95d2be22dbd17fcb4e5c" 4374 | dependencies = [ 4375 | "bytes", 4376 | "futures-core", 4377 | "futures-sink", 4378 | "pin-project-lite", 4379 | "tokio", 4380 | "tracing", 4381 | ] 4382 | 4383 | [[package]] 4384 | name = "toml" 4385 | version = "0.5.11" 4386 | source = "registry+https://github.com/rust-lang/crates.io-index" 4387 | checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" 4388 | dependencies = [ 4389 | "serde", 4390 | ] 4391 | 4392 | [[package]] 4393 | name = "toml_datetime" 4394 | version = "0.6.1" 4395 | source = "registry+https://github.com/rust-lang/crates.io-index" 4396 | checksum = "3ab8ed2edee10b50132aed5f331333428b011c99402b5a534154ed15746f9622" 4397 | 4398 | [[package]] 4399 | name = "toml_edit" 4400 | version = "0.19.7" 4401 | source = "registry+https://github.com/rust-lang/crates.io-index" 4402 | checksum = "dc18466501acd8ac6a3f615dd29a3438f8ca6bb3b19537138b3106e575621274" 4403 | dependencies = [ 4404 | "indexmap", 4405 | "toml_datetime", 4406 | "winnow", 4407 | ] 4408 | 4409 | [[package]] 4410 | name = "tonic" 4411 | version = "0.8.3" 4412 | source = "registry+https://github.com/rust-lang/crates.io-index" 4413 | checksum = "8f219fad3b929bef19b1f86fbc0358d35daed8f2cac972037ac0dc10bbb8d5fb" 4414 | dependencies = [ 4415 | "async-stream", 4416 | "async-trait", 4417 | "axum", 4418 | "base64 0.13.1", 4419 | "bytes", 4420 | "futures-core", 4421 | "futures-util", 4422 | "h2", 4423 | "http", 4424 | "http-body", 4425 | "hyper", 4426 | "hyper-timeout", 4427 | "percent-encoding", 4428 | "pin-project", 4429 | "prost", 4430 | "prost-derive", 4431 | "rustls-native-certs", 4432 | "rustls-pemfile 1.0.2", 4433 | "tokio", 4434 | "tokio-rustls", 4435 | "tokio-stream", 4436 | "tokio-util", 4437 | "tower", 4438 | "tower-layer", 4439 | "tower-service", 4440 | "tracing", 4441 | "tracing-futures", 4442 | "webpki-roots", 4443 | ] 4444 | 4445 | [[package]] 4446 | name = "tonic-build" 4447 | version = "0.8.4" 4448 | source = "registry+https://github.com/rust-lang/crates.io-index" 4449 | checksum = "5bf5e9b9c0f7e0a7c027dcfaba7b2c60816c7049171f679d99ee2ff65d0de8c4" 4450 | dependencies = [ 4451 | "prettyplease", 4452 | "proc-macro2 1.0.56", 4453 | "prost-build", 4454 | "quote 1.0.26", 4455 | "syn 1.0.109", 4456 | ] 4457 | 4458 | [[package]] 4459 | name = "tower" 4460 | version = "0.4.13" 4461 | source = "registry+https://github.com/rust-lang/crates.io-index" 4462 | checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" 4463 | dependencies = [ 4464 | "futures-core", 4465 | "futures-util", 4466 | "indexmap", 4467 | "pin-project", 4468 | "pin-project-lite", 4469 | "rand 0.8.5", 4470 | "slab", 4471 | "tokio", 4472 | "tokio-util", 4473 | "tower-layer", 4474 | "tower-service", 4475 | "tracing", 4476 | ] 4477 | 4478 | [[package]] 4479 | name = "tower-layer" 4480 | version = "0.3.2" 4481 | source = "registry+https://github.com/rust-lang/crates.io-index" 4482 | checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" 4483 | 4484 | [[package]] 4485 | name = "tower-service" 4486 | version = "0.3.2" 4487 | source = "registry+https://github.com/rust-lang/crates.io-index" 4488 | checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" 4489 | 4490 | [[package]] 4491 | name = "tracing" 4492 | version = "0.1.37" 4493 | source = "registry+https://github.com/rust-lang/crates.io-index" 4494 | checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" 4495 | dependencies = [ 4496 | "cfg-if", 4497 | "pin-project-lite", 4498 | "tracing-attributes", 4499 | "tracing-core", 4500 | ] 4501 | 4502 | [[package]] 4503 | name = "tracing-attributes" 4504 | version = "0.1.23" 4505 | source = "registry+https://github.com/rust-lang/crates.io-index" 4506 | checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" 4507 | dependencies = [ 4508 | "proc-macro2 1.0.56", 4509 | "quote 1.0.26", 4510 | "syn 1.0.109", 4511 | ] 4512 | 4513 | [[package]] 4514 | name = "tracing-core" 4515 | version = "0.1.30" 4516 | source = "registry+https://github.com/rust-lang/crates.io-index" 4517 | checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" 4518 | dependencies = [ 4519 | "once_cell", 4520 | ] 4521 | 4522 | [[package]] 4523 | name = "tracing-futures" 4524 | version = "0.2.5" 4525 | source = "registry+https://github.com/rust-lang/crates.io-index" 4526 | checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" 4527 | dependencies = [ 4528 | "pin-project", 4529 | "tracing", 4530 | ] 4531 | 4532 | [[package]] 4533 | name = "try-lock" 4534 | version = "0.2.4" 4535 | source = "registry+https://github.com/rust-lang/crates.io-index" 4536 | checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" 4537 | 4538 | [[package]] 4539 | name = "tungstenite" 4540 | version = "0.17.3" 4541 | source = "registry+https://github.com/rust-lang/crates.io-index" 4542 | checksum = "e27992fd6a8c29ee7eef28fc78349aa244134e10ad447ce3b9f0ac0ed0fa4ce0" 4543 | dependencies = [ 4544 | "base64 0.13.1", 4545 | "byteorder", 4546 | "bytes", 4547 | "http", 4548 | "httparse", 4549 | "log", 4550 | "rand 0.8.5", 4551 | "rustls", 4552 | "sha-1", 4553 | "thiserror", 4554 | "url", 4555 | "utf-8", 4556 | "webpki", 4557 | "webpki-roots", 4558 | ] 4559 | 4560 | [[package]] 4561 | name = "typenum" 4562 | version = "1.16.0" 4563 | source = "registry+https://github.com/rust-lang/crates.io-index" 4564 | checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" 4565 | 4566 | [[package]] 4567 | name = "unicode-bidi" 4568 | version = "0.3.11" 4569 | source = "registry+https://github.com/rust-lang/crates.io-index" 4570 | checksum = "524b68aca1d05e03fdf03fcdce2c6c94b6daf6d16861ddaa7e4f2b6638a9052c" 4571 | 4572 | [[package]] 4573 | name = "unicode-ident" 4574 | version = "1.0.8" 4575 | source = "registry+https://github.com/rust-lang/crates.io-index" 4576 | checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" 4577 | 4578 | [[package]] 4579 | name = "unicode-normalization" 4580 | version = "0.1.22" 4581 | source = "registry+https://github.com/rust-lang/crates.io-index" 4582 | checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" 4583 | dependencies = [ 4584 | "tinyvec", 4585 | ] 4586 | 4587 | [[package]] 4588 | name = "unicode-segmentation" 4589 | version = "1.10.1" 4590 | source = "registry+https://github.com/rust-lang/crates.io-index" 4591 | checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" 4592 | 4593 | [[package]] 4594 | name = "unicode-width" 4595 | version = "0.1.10" 4596 | source = "registry+https://github.com/rust-lang/crates.io-index" 4597 | checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" 4598 | 4599 | [[package]] 4600 | name = "unicode-xid" 4601 | version = "0.1.0" 4602 | source = "registry+https://github.com/rust-lang/crates.io-index" 4603 | checksum = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" 4604 | 4605 | [[package]] 4606 | name = "unicode-xid" 4607 | version = "0.2.4" 4608 | source = "registry+https://github.com/rust-lang/crates.io-index" 4609 | checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" 4610 | 4611 | [[package]] 4612 | name = "universal-hash" 4613 | version = "0.4.1" 4614 | source = "registry+https://github.com/rust-lang/crates.io-index" 4615 | checksum = "9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05" 4616 | dependencies = [ 4617 | "generic-array", 4618 | "subtle", 4619 | ] 4620 | 4621 | [[package]] 4622 | name = "untrusted" 4623 | version = "0.7.1" 4624 | source = "registry+https://github.com/rust-lang/crates.io-index" 4625 | checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" 4626 | 4627 | [[package]] 4628 | name = "uriparse" 4629 | version = "0.6.4" 4630 | source = "registry+https://github.com/rust-lang/crates.io-index" 4631 | checksum = "0200d0fc04d809396c2ad43f3c95da3582a2556eba8d453c1087f4120ee352ff" 4632 | dependencies = [ 4633 | "fnv", 4634 | "lazy_static", 4635 | ] 4636 | 4637 | [[package]] 4638 | name = "url" 4639 | version = "2.3.1" 4640 | source = "registry+https://github.com/rust-lang/crates.io-index" 4641 | checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" 4642 | dependencies = [ 4643 | "form_urlencoded", 4644 | "idna", 4645 | "percent-encoding", 4646 | ] 4647 | 4648 | [[package]] 4649 | name = "utf-8" 4650 | version = "0.7.6" 4651 | source = "registry+https://github.com/rust-lang/crates.io-index" 4652 | checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" 4653 | 4654 | [[package]] 4655 | name = "utf8parse" 4656 | version = "0.2.1" 4657 | source = "registry+https://github.com/rust-lang/crates.io-index" 4658 | checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" 4659 | 4660 | [[package]] 4661 | name = "uuid" 4662 | version = "1.8.0" 4663 | source = "registry+https://github.com/rust-lang/crates.io-index" 4664 | checksum = "a183cf7feeba97b4dd1c0d46788634f6221d87fa961b305bed08c851829efcc0" 4665 | dependencies = [ 4666 | "getrandom 0.2.8", 4667 | "rand 0.8.5", 4668 | ] 4669 | 4670 | [[package]] 4671 | name = "vec_map" 4672 | version = "0.8.2" 4673 | source = "registry+https://github.com/rust-lang/crates.io-index" 4674 | checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" 4675 | 4676 | [[package]] 4677 | name = "version_check" 4678 | version = "0.9.4" 4679 | source = "registry+https://github.com/rust-lang/crates.io-index" 4680 | checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" 4681 | 4682 | [[package]] 4683 | name = "want" 4684 | version = "0.3.0" 4685 | source = "registry+https://github.com/rust-lang/crates.io-index" 4686 | checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" 4687 | dependencies = [ 4688 | "log", 4689 | "try-lock", 4690 | ] 4691 | 4692 | [[package]] 4693 | name = "wasi" 4694 | version = "0.9.0+wasi-snapshot-preview1" 4695 | source = "registry+https://github.com/rust-lang/crates.io-index" 4696 | checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" 4697 | 4698 | [[package]] 4699 | name = "wasi" 4700 | version = "0.10.0+wasi-snapshot-preview1" 4701 | source = "registry+https://github.com/rust-lang/crates.io-index" 4702 | checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" 4703 | 4704 | [[package]] 4705 | name = "wasi" 4706 | version = "0.11.0+wasi-snapshot-preview1" 4707 | source = "registry+https://github.com/rust-lang/crates.io-index" 4708 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 4709 | 4710 | [[package]] 4711 | name = "wasm-bindgen" 4712 | version = "0.2.84" 4713 | source = "registry+https://github.com/rust-lang/crates.io-index" 4714 | checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b" 4715 | dependencies = [ 4716 | "cfg-if", 4717 | "wasm-bindgen-macro", 4718 | ] 4719 | 4720 | [[package]] 4721 | name = "wasm-bindgen-backend" 4722 | version = "0.2.84" 4723 | source = "registry+https://github.com/rust-lang/crates.io-index" 4724 | checksum = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9" 4725 | dependencies = [ 4726 | "bumpalo", 4727 | "log", 4728 | "once_cell", 4729 | "proc-macro2 1.0.56", 4730 | "quote 1.0.26", 4731 | "syn 1.0.109", 4732 | "wasm-bindgen-shared", 4733 | ] 4734 | 4735 | [[package]] 4736 | name = "wasm-bindgen-futures" 4737 | version = "0.4.34" 4738 | source = "registry+https://github.com/rust-lang/crates.io-index" 4739 | checksum = "f219e0d211ba40266969f6dbdd90636da12f75bee4fc9d6c23d1260dadb51454" 4740 | dependencies = [ 4741 | "cfg-if", 4742 | "js-sys", 4743 | "wasm-bindgen", 4744 | "web-sys", 4745 | ] 4746 | 4747 | [[package]] 4748 | name = "wasm-bindgen-macro" 4749 | version = "0.2.84" 4750 | source = "registry+https://github.com/rust-lang/crates.io-index" 4751 | checksum = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5" 4752 | dependencies = [ 4753 | "quote 1.0.26", 4754 | "wasm-bindgen-macro-support", 4755 | ] 4756 | 4757 | [[package]] 4758 | name = "wasm-bindgen-macro-support" 4759 | version = "0.2.84" 4760 | source = "registry+https://github.com/rust-lang/crates.io-index" 4761 | checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6" 4762 | dependencies = [ 4763 | "proc-macro2 1.0.56", 4764 | "quote 1.0.26", 4765 | "syn 1.0.109", 4766 | "wasm-bindgen-backend", 4767 | "wasm-bindgen-shared", 4768 | ] 4769 | 4770 | [[package]] 4771 | name = "wasm-bindgen-shared" 4772 | version = "0.2.84" 4773 | source = "registry+https://github.com/rust-lang/crates.io-index" 4774 | checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d" 4775 | 4776 | [[package]] 4777 | name = "web-sys" 4778 | version = "0.3.61" 4779 | source = "registry+https://github.com/rust-lang/crates.io-index" 4780 | checksum = "e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97" 4781 | dependencies = [ 4782 | "js-sys", 4783 | "wasm-bindgen", 4784 | ] 4785 | 4786 | [[package]] 4787 | name = "webpki" 4788 | version = "0.22.0" 4789 | source = "registry+https://github.com/rust-lang/crates.io-index" 4790 | checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd" 4791 | dependencies = [ 4792 | "ring", 4793 | "untrusted", 4794 | ] 4795 | 4796 | [[package]] 4797 | name = "webpki-roots" 4798 | version = "0.22.6" 4799 | source = "registry+https://github.com/rust-lang/crates.io-index" 4800 | checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87" 4801 | dependencies = [ 4802 | "webpki", 4803 | ] 4804 | 4805 | [[package]] 4806 | name = "which" 4807 | version = "4.4.0" 4808 | source = "registry+https://github.com/rust-lang/crates.io-index" 4809 | checksum = "2441c784c52b289a054b7201fc93253e288f094e2f4be9058343127c4226a269" 4810 | dependencies = [ 4811 | "either", 4812 | "libc", 4813 | "once_cell", 4814 | ] 4815 | 4816 | [[package]] 4817 | name = "winapi" 4818 | version = "0.3.9" 4819 | source = "registry+https://github.com/rust-lang/crates.io-index" 4820 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 4821 | dependencies = [ 4822 | "winapi-i686-pc-windows-gnu", 4823 | "winapi-x86_64-pc-windows-gnu", 4824 | ] 4825 | 4826 | [[package]] 4827 | name = "winapi-i686-pc-windows-gnu" 4828 | version = "0.4.0" 4829 | source = "registry+https://github.com/rust-lang/crates.io-index" 4830 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 4831 | 4832 | [[package]] 4833 | name = "winapi-util" 4834 | version = "0.1.5" 4835 | source = "registry+https://github.com/rust-lang/crates.io-index" 4836 | checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" 4837 | dependencies = [ 4838 | "winapi", 4839 | ] 4840 | 4841 | [[package]] 4842 | name = "winapi-x86_64-pc-windows-gnu" 4843 | version = "0.4.0" 4844 | source = "registry+https://github.com/rust-lang/crates.io-index" 4845 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 4846 | 4847 | [[package]] 4848 | name = "windows-sys" 4849 | version = "0.42.0" 4850 | source = "registry+https://github.com/rust-lang/crates.io-index" 4851 | checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" 4852 | dependencies = [ 4853 | "windows_aarch64_gnullvm", 4854 | "windows_aarch64_msvc", 4855 | "windows_i686_gnu", 4856 | "windows_i686_msvc", 4857 | "windows_x86_64_gnu", 4858 | "windows_x86_64_gnullvm", 4859 | "windows_x86_64_msvc", 4860 | ] 4861 | 4862 | [[package]] 4863 | name = "windows-sys" 4864 | version = "0.45.0" 4865 | source = "registry+https://github.com/rust-lang/crates.io-index" 4866 | checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" 4867 | dependencies = [ 4868 | "windows-targets", 4869 | ] 4870 | 4871 | [[package]] 4872 | name = "windows-targets" 4873 | version = "0.42.2" 4874 | source = "registry+https://github.com/rust-lang/crates.io-index" 4875 | checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" 4876 | dependencies = [ 4877 | "windows_aarch64_gnullvm", 4878 | "windows_aarch64_msvc", 4879 | "windows_i686_gnu", 4880 | "windows_i686_msvc", 4881 | "windows_x86_64_gnu", 4882 | "windows_x86_64_gnullvm", 4883 | "windows_x86_64_msvc", 4884 | ] 4885 | 4886 | [[package]] 4887 | name = "windows_aarch64_gnullvm" 4888 | version = "0.42.2" 4889 | source = "registry+https://github.com/rust-lang/crates.io-index" 4890 | checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" 4891 | 4892 | [[package]] 4893 | name = "windows_aarch64_msvc" 4894 | version = "0.42.2" 4895 | source = "registry+https://github.com/rust-lang/crates.io-index" 4896 | checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" 4897 | 4898 | [[package]] 4899 | name = "windows_i686_gnu" 4900 | version = "0.42.2" 4901 | source = "registry+https://github.com/rust-lang/crates.io-index" 4902 | checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" 4903 | 4904 | [[package]] 4905 | name = "windows_i686_msvc" 4906 | version = "0.42.2" 4907 | source = "registry+https://github.com/rust-lang/crates.io-index" 4908 | checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" 4909 | 4910 | [[package]] 4911 | name = "windows_x86_64_gnu" 4912 | version = "0.42.2" 4913 | source = "registry+https://github.com/rust-lang/crates.io-index" 4914 | checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" 4915 | 4916 | [[package]] 4917 | name = "windows_x86_64_gnullvm" 4918 | version = "0.42.2" 4919 | source = "registry+https://github.com/rust-lang/crates.io-index" 4920 | checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" 4921 | 4922 | [[package]] 4923 | name = "windows_x86_64_msvc" 4924 | version = "0.42.2" 4925 | source = "registry+https://github.com/rust-lang/crates.io-index" 4926 | checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" 4927 | 4928 | [[package]] 4929 | name = "winnow" 4930 | version = "0.3.6" 4931 | source = "registry+https://github.com/rust-lang/crates.io-index" 4932 | checksum = "23d020b441f92996c80d94ae9166e8501e59c7bb56121189dc9eab3bd8216966" 4933 | dependencies = [ 4934 | "memchr", 4935 | ] 4936 | 4937 | [[package]] 4938 | name = "winreg" 4939 | version = "0.10.1" 4940 | source = "registry+https://github.com/rust-lang/crates.io-index" 4941 | checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" 4942 | dependencies = [ 4943 | "winapi", 4944 | ] 4945 | 4946 | [[package]] 4947 | name = "x509-parser" 4948 | version = "0.14.0" 4949 | source = "registry+https://github.com/rust-lang/crates.io-index" 4950 | checksum = "e0ecbeb7b67ce215e40e3cc7f2ff902f94a223acf44995934763467e7b1febc8" 4951 | dependencies = [ 4952 | "asn1-rs", 4953 | "base64 0.13.1", 4954 | "data-encoding", 4955 | "der-parser", 4956 | "lazy_static", 4957 | "nom", 4958 | "oid-registry", 4959 | "rusticata-macros", 4960 | "thiserror", 4961 | "time 0.3.20", 4962 | ] 4963 | 4964 | [[package]] 4965 | name = "yaml-rust" 4966 | version = "0.4.5" 4967 | source = "registry+https://github.com/rust-lang/crates.io-index" 4968 | checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85" 4969 | dependencies = [ 4970 | "linked-hash-map", 4971 | ] 4972 | 4973 | [[package]] 4974 | name = "yansi" 4975 | version = "0.5.1" 4976 | source = "registry+https://github.com/rust-lang/crates.io-index" 4977 | checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" 4978 | 4979 | [[package]] 4980 | name = "yasna" 4981 | version = "0.5.1" 4982 | source = "registry+https://github.com/rust-lang/crates.io-index" 4983 | checksum = "aed2e7a52e3744ab4d0c05c20aa065258e84c49fd4226f5191b2ed29712710b4" 4984 | dependencies = [ 4985 | "time 0.3.20", 4986 | ] 4987 | 4988 | [[package]] 4989 | name = "zeroize" 4990 | version = "1.3.0" 4991 | source = "registry+https://github.com/rust-lang/crates.io-index" 4992 | checksum = "4756f7db3f7b5574938c3eb1c117038b8e07f95ee6718c0efad4ac21508f1efd" 4993 | dependencies = [ 4994 | "zeroize_derive", 4995 | ] 4996 | 4997 | [[package]] 4998 | name = "zeroize_derive" 4999 | version = "1.3.3" 5000 | source = "registry+https://github.com/rust-lang/crates.io-index" 5001 | checksum = "44bf07cb3e50ea2003396695d58bf46bc9887a1f362260446fad6bc4e79bd36c" 5002 | dependencies = [ 5003 | "proc-macro2 1.0.56", 5004 | "quote 1.0.26", 5005 | "syn 1.0.109", 5006 | "synstructure", 5007 | ] 5008 | 5009 | [[package]] 5010 | name = "zstd" 5011 | version = "0.11.2+zstd.1.5.2" 5012 | source = "registry+https://github.com/rust-lang/crates.io-index" 5013 | checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4" 5014 | dependencies = [ 5015 | "zstd-safe", 5016 | ] 5017 | 5018 | [[package]] 5019 | name = "zstd-safe" 5020 | version = "5.0.2+zstd.1.5.2" 5021 | source = "registry+https://github.com/rust-lang/crates.io-index" 5022 | checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db" 5023 | dependencies = [ 5024 | "libc", 5025 | "zstd-sys", 5026 | ] 5027 | 5028 | [[package]] 5029 | name = "zstd-sys" 5030 | version = "2.0.7+zstd.1.5.4" 5031 | source = "registry+https://github.com/rust-lang/crates.io-index" 5032 | checksum = "94509c3ba2fe55294d752b79842c530ccfab760192521df74a081a78d2b3c7f5" 5033 | dependencies = [ 5034 | "cc", 5035 | "libc", 5036 | "pkg-config", 5037 | ] 5038 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [workspace] 2 | members = [ 3 | "examples/*", 4 | "protos", 5 | "searcher_client", 6 | ] 7 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright (c) 2025 Jito Labs 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## jito-rs 2 | This repository contains code to communicate with Jito's Block-Engine via gRPC. 3 | -------------------------------------------------------------------------------- /examples/backrun/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "jito-backrun-example" 3 | version = "0.1.0" 4 | edition = "2021" 5 | license = "Apache-2.0" 6 | 7 | [dependencies] 8 | bincode = "1.3.3" 9 | chrono = "0.4.24" 10 | clap = { version = "4", features = ["derive", "env"] } 11 | crossbeam-channel = "0.5.7" 12 | env_logger = "0.10.0" 13 | futures = "0.3.28" 14 | futures-util = "0.3.28" 15 | jito-protos = { path = "../../protos" } 16 | log = "0.4.17" 17 | prost-types = "0.11.8" 18 | rand = "0.8.5" 19 | jito-searcher-client = { path = "../../searcher_client" } 20 | solana-client = { git = "https://github.com/jito-foundation/jito-solana.git", tag = "v1.14.16-jito" } 21 | solana-metrics = { git = "https://github.com/jito-foundation/jito-solana.git", tag = "v1.14.16-jito" } 22 | solana-sdk = { git = "https://github.com/jito-foundation/jito-solana.git", tag = "v1.14.16-jito" } 23 | solana-transaction-status = { git = "https://github.com/jito-foundation/jito-solana.git", tag = "v1.14.16-jito" } 24 | thiserror = "1.0.40" 25 | tokio = "1.27.0" 26 | tonic = { version = "0.8.3", features = ["tls", "tls-roots", "tls-webpki-roots"] } 27 | uuid = "1.8.0" 28 | -------------------------------------------------------------------------------- /examples/backrun/README.md: -------------------------------------------------------------------------------- 1 | # Backrun Example 2 | 3 | ## Example 4 | 5 | ```bash 6 | 7 | git submodule update --init --recursive 8 | 9 | cargo b --release && \ 10 | RUST_LOG=info ./target/release/jito-backrun-example \ 11 | --block-engine-addr \ 12 | --payer-keypair \ 13 | --auth-keypair \ 14 | --pubsub-url ws://{RPC_URL}:8900 \ 15 | --rpc-url http://{RPC_URL}:8899 \ 16 | --tip-program-id {TIP_PROGRAM_ID} \ 17 | --accounts-to-backrun {account} 18 | # Note: Don't provide AUTH_KEYPAIR if not planning to use authentication 19 | ``` 20 | -------------------------------------------------------------------------------- /examples/backrun/src/main.rs: -------------------------------------------------------------------------------- 1 | use std::{ 2 | panic, 3 | panic::PanicInfo, 4 | path::Path, 5 | process, result, 6 | str::FromStr, 7 | sync::{ 8 | atomic::{AtomicBool, Ordering}, 9 | Arc, 10 | }, 11 | time::Duration, 12 | }; 13 | 14 | use clap::Parser; 15 | use env_logger::TimestampPrecision; 16 | use jito_protos::{ 17 | auth::auth_service_client::AuthServiceClient, bundle::BundleResult, 18 | searcher::searcher_service_client::SearcherServiceClient, 19 | }; 20 | use jito_searcher_client::{ 21 | client_interceptor::ClientInterceptor, cluster_data_impl::ClusterDataImpl, grpc_connect, 22 | utils::derive_tip_accounts, BundleId, ClusterData, SearcherClient, SearcherClientError, 23 | SearcherClientResult, 24 | }; 25 | use log::*; 26 | use rand::{thread_rng, Rng}; 27 | use solana_client::{ 28 | client_error::ClientError, 29 | nonblocking::{pubsub_client::PubsubClientError, rpc_client::RpcClient}, 30 | }; 31 | use solana_metrics::{datapoint_error, set_host_id}; 32 | use solana_sdk::{ 33 | commitment_config::{CommitmentConfig, CommitmentLevel}, 34 | hash::Hash, 35 | instruction::{AccountMeta, Instruction}, 36 | pubkey::Pubkey, 37 | signature::{read_keypair_file, Keypair, Signer}, 38 | system_instruction::transfer, 39 | transaction::{Transaction, VersionedTransaction}, 40 | }; 41 | use thiserror::Error; 42 | use tokio::{ 43 | sync::mpsc::Receiver, 44 | time::{interval, sleep}, 45 | }; 46 | use tonic::codegen::{Body, Bytes, StdError}; 47 | use tonic::{codegen::InterceptedService, transport::Channel, Status}; 48 | 49 | #[derive(Parser, Debug)] 50 | #[clap(author, version, about, long_about = None)] 51 | struct Args { 52 | /// Address for auth service 53 | #[clap(long, env)] 54 | block_engine_addr: String, 55 | 56 | /// Accounts to backrun 57 | #[clap(long, env)] 58 | accounts_to_backrun: Vec, 59 | 60 | /// Path to keypair file used to sign and pay for transactions 61 | #[clap(long, env)] 62 | payer_keypair: String, 63 | 64 | /// Path to keypair file used to authenticate with the backend 65 | #[clap(long, env)] 66 | auth_keypair: Option, 67 | 68 | /// Pubsub URL. 69 | #[clap(long, env)] 70 | pubsub_url: String, 71 | 72 | /// RPC URL to get block hashes from 73 | #[clap(long, env)] 74 | rpc_url: String, 75 | 76 | /// Memo program message 77 | #[clap(long, env, default_value_t = String::from("jito backrun"))] 78 | message: String, 79 | 80 | /// Tip program public key 81 | #[clap(long, env)] 82 | tip_program_id: String, 83 | 84 | /// Subscribe and print bundle results. 85 | #[clap(long, env)] 86 | subscribe_bundle_results: bool, 87 | } 88 | 89 | #[derive(Debug, Error)] 90 | enum BackrunError { 91 | #[error("TonicError {0}")] 92 | Tonic(#[from] tonic::transport::Error), 93 | #[error("GrpcError {0}")] 94 | Grpc(#[from] Status), 95 | #[error("RpcError {0}")] 96 | Rpc(#[from] ClientError), 97 | #[error("PubSubError {0}")] 98 | PubSub(#[from] PubsubClientError), 99 | } 100 | 101 | #[derive(Clone, Debug)] 102 | struct BundledTransactions { 103 | mempool_txs: Vec, 104 | backrun_txs: Vec, 105 | } 106 | 107 | type Result = result::Result; 108 | 109 | async fn send_bundles( 110 | searcher_client: &mut SearcherClient, 111 | bundles: &[BundledTransactions], 112 | ) -> Result>> 113 | where 114 | T: tonic::client::GrpcService + Send + 'static + Clone, 115 | T::Error: Into, 116 | T::ResponseBody: Body + Send + 'static, 117 | ::Error: Into + Send, 118 | >::Future: std::marker::Send, 119 | { 120 | let mut futs = vec![]; 121 | for b in bundles { 122 | let txs = b 123 | .mempool_txs 124 | .clone() 125 | .into_iter() 126 | .chain(b.backrun_txs.clone().into_iter()) 127 | .collect::>(); 128 | 129 | let searcher_client = searcher_client.clone(); 130 | 131 | let task = tokio::spawn(async move { searcher_client.send_bundle(txs, 3).await }); 132 | futs.push(task); 133 | } 134 | 135 | let responses = futures::future::join_all(futs).await; 136 | let send_bundle_responses = responses.into_iter().map(|r| r.unwrap()).collect(); 137 | Ok(send_bundle_responses) 138 | } 139 | 140 | #[tokio::main] 141 | async fn main() { 142 | env_logger::builder() 143 | .format_timestamp(Some(TimestampPrecision::Micros)) 144 | .init(); 145 | let args: Args = Args::parse(); 146 | 147 | let payer_keypair = 148 | Arc::new(read_keypair_file(Path::new(&args.payer_keypair)).expect("parse kp file")); 149 | let auth_keypair = args 150 | .auth_keypair 151 | .as_ref() 152 | .map(|path| Arc::new(read_keypair_file(Path::new(path)).expect("parse kp file"))); 153 | 154 | set_host_id( 155 | auth_keypair 156 | .as_ref() 157 | .map(|kp| kp.pubkey().to_string()) 158 | .unwrap_or(uuid::Uuid::new_v4().to_string()), 159 | ); 160 | 161 | let accounts_to_backrun: Vec = args 162 | .accounts_to_backrun 163 | .iter() 164 | .map(|a| Pubkey::from_str(a).unwrap()) 165 | .collect(); 166 | let tip_program_pubkey = Pubkey::from_str(&args.tip_program_id).unwrap(); 167 | let exit = graceful_panic(None); 168 | 169 | match auth_keypair { 170 | Some(auth_keypair) => { 171 | let (searcher_client, cluster_data) = get_searcher_client_auth( 172 | &auth_keypair, 173 | &exit, 174 | args.block_engine_addr.as_str(), 175 | args.rpc_url.as_str(), 176 | ) 177 | .await 178 | .expect("Failed to get searcher client with auth. Note: If you don't pass in the auth keypair, we can attempt to connect to the no auth endpoint"); 179 | 180 | tokio::spawn(async move { 181 | backrun_loop( 182 | searcher_client, 183 | cluster_data, 184 | payer_keypair, 185 | args.block_engine_addr, 186 | args.rpc_url, 187 | args.pubsub_url, 188 | args.message, 189 | tip_program_pubkey, 190 | accounts_to_backrun, 191 | graceful_panic(None), 192 | ) 193 | .await 194 | .unwrap() 195 | }) 196 | .await 197 | .unwrap(); 198 | } 199 | None => { 200 | let (searcher_client, cluster_data) = get_searcher_client_no_auth( 201 | &exit, 202 | args.block_engine_addr.as_str(), 203 | args.rpc_url.as_str(), 204 | ) 205 | .await 206 | .expect("Failed to get searcher client without auth"); 207 | 208 | tokio::spawn(async move { 209 | backrun_loop( 210 | searcher_client, 211 | cluster_data, 212 | payer_keypair, 213 | args.block_engine_addr, 214 | args.rpc_url, 215 | args.pubsub_url, 216 | args.message, 217 | tip_program_pubkey, 218 | accounts_to_backrun, 219 | graceful_panic(None), 220 | ) 221 | .await 222 | .unwrap() 223 | }) 224 | .await 225 | .unwrap(); 226 | } 227 | } 228 | } 229 | 230 | async fn get_searcher_client_auth( 231 | auth_keypair: &Arc, 232 | exit: &Arc, 233 | block_engine_url: &str, 234 | rpc_pubsub_addr: &str, 235 | ) -> SearcherClientResult<( 236 | SearcherClient>, 237 | ClusterDataImpl, 238 | )> { 239 | let auth_channel = grpc_connect(block_engine_url).await?; 240 | let client_interceptor = 241 | ClientInterceptor::new(AuthServiceClient::new(auth_channel), auth_keypair).await?; 242 | 243 | let searcher_channel = grpc_connect(block_engine_url).await?; 244 | let searcher_service_client = 245 | SearcherServiceClient::with_interceptor(searcher_channel, client_interceptor); 246 | 247 | let cluster_data_impl = ClusterDataImpl::new( 248 | rpc_pubsub_addr.to_string(), 249 | searcher_service_client.clone(), 250 | exit.clone(), 251 | ) 252 | .await; 253 | 254 | Ok(( 255 | SearcherClient::new( 256 | cluster_data_impl.clone(), 257 | searcher_service_client, 258 | exit.clone(), 259 | ), 260 | cluster_data_impl, 261 | )) 262 | } 263 | 264 | async fn get_searcher_client_no_auth( 265 | exit: &Arc, 266 | block_engine_url: &str, 267 | rpc_pubsub_addr: &str, 268 | ) -> SearcherClientResult<(SearcherClient, ClusterDataImpl)> { 269 | let searcher_channel = grpc_connect(block_engine_url).await?; 270 | let searcher_service_client = SearcherServiceClient::new(searcher_channel); 271 | 272 | let cluster_data_impl = ClusterDataImpl::new( 273 | rpc_pubsub_addr.to_string(), 274 | searcher_service_client.clone(), 275 | exit.clone(), 276 | ) 277 | .await; 278 | 279 | Ok(( 280 | SearcherClient::new( 281 | cluster_data_impl.clone(), 282 | searcher_service_client, 283 | exit.clone(), 284 | ), 285 | cluster_data_impl, 286 | )) 287 | } 288 | 289 | #[allow(clippy::too_many_arguments)] 290 | async fn backrun_loop( 291 | mut searcher_client: SearcherClient, 292 | cluster_data: ClusterDataImpl, 293 | payer_keypair: Arc, 294 | _block_engine_addr: String, 295 | rpc_addr: String, 296 | _rpc_pubsub_addr: String, 297 | backrun_message: String, 298 | tip_program_pubkey: Pubkey, 299 | accounts_to_backrun: Vec, 300 | exit: Arc, 301 | ) -> Result<()> 302 | where 303 | T: tonic::client::GrpcService + Send + 'static + Clone, 304 | T::Error: Into, 305 | T::ResponseBody: Body + Send + 'static, 306 | ::Error: Into + Send, 307 | >::Future: std::marker::Send, 308 | { 309 | let _conns_errs: usize = 0; 310 | let mut mempool_subscription_conns_errs: usize = 0; 311 | let mut bundle_results_subscription_conns_errs: usize = 0; 312 | let mut mempool_subscription_errs: usize = 0; 313 | let mut bundle_results_subscription_errs: usize = 0; 314 | 315 | let tip_accounts = derive_tip_accounts(&tip_program_pubkey); 316 | info!("tip accounts: {:?}", tip_accounts); 317 | 318 | let mut blockhash_tick = interval(Duration::from_secs(5)); 319 | 320 | while !exit.load(Ordering::Relaxed) { 321 | sleep(Duration::from_millis(1000)).await; 322 | 323 | let rpc_client = Arc::new(RpcClient::new(rpc_addr.clone())); 324 | let mut blockhash = rpc_client 325 | .get_latest_blockhash_with_commitment(CommitmentConfig { 326 | commitment: CommitmentLevel::Confirmed, 327 | }) 328 | .await? 329 | .0; 330 | 331 | let mempool_receiver = searcher_client 332 | .subscribe_mempool_accounts(&accounts_to_backrun[..], vec![], 1_000) 333 | .await; 334 | if let Err(e) = mempool_receiver { 335 | mempool_subscription_conns_errs += 1; 336 | datapoint_error!( 337 | "subscribe_mempool_accounts_error", 338 | ("errors", mempool_subscription_conns_errs, i64), 339 | ("msg", e.to_string(), String) 340 | ); 341 | continue; 342 | } 343 | 344 | let bundle_results_receiver = searcher_client.subscribe_bundle_results(1_000).await; 345 | if let Err(e) = bundle_results_receiver { 346 | bundle_results_subscription_conns_errs += 1; 347 | datapoint_error!( 348 | "subscribe_bundle_results_error", 349 | ("errors", bundle_results_subscription_conns_errs, i64), 350 | ("msg", e.to_string(), String) 351 | ); 352 | continue; 353 | } 354 | 355 | let mut mempool_receiver: Receiver> = mempool_receiver.unwrap(); 356 | let mut bundle_results_receiver: Receiver = bundle_results_receiver.unwrap(); 357 | 358 | while !exit.load(Ordering::Relaxed) { 359 | tokio::select! { 360 | _ = blockhash_tick.tick() => { 361 | blockhash = rpc_client 362 | .get_latest_blockhash_with_commitment(CommitmentConfig { 363 | commitment: CommitmentLevel::Confirmed, 364 | }) 365 | .await? 366 | .0; 367 | 368 | if let Some((next_jito_validator, next_slot)) = cluster_data.next_jito_validator().await { 369 | let current_slot = cluster_data.current_slot().await; 370 | 371 | if next_slot >= current_slot { 372 | info!("validator {next_jito_validator} upcoming in {} slots", next_slot - current_slot); 373 | } else { 374 | warn!("no upcoming jito validator"); 375 | } 376 | } else { 377 | warn!("no connected jito validators"); 378 | } 379 | 380 | } 381 | maybe_transactions = mempool_receiver.recv() => { 382 | if maybe_transactions.is_none() { 383 | datapoint_error!( 384 | "mempool_subscription_error", 385 | ("errors", mempool_subscription_errs, i64), 386 | ("msg", "channel closed", String) 387 | ); 388 | mempool_subscription_errs += 1; 389 | break; 390 | } 391 | let transactions = maybe_transactions.unwrap(); 392 | info!("received mempool {} transactions", transactions.len()); 393 | 394 | let bundles = build_backrun_bundles(transactions, &payer_keypair, &blockhash, &tip_accounts, &backrun_message); 395 | if !bundles.is_empty() { 396 | let results = send_bundles(&mut searcher_client, &bundles).await?; 397 | let successful_sends = results.iter().filter(|res| res.is_ok()).collect::>(); 398 | let failed_sends = results.iter().filter(|res| res.is_err()).collect::>(); 399 | info!("successful_sends={}, failed_send={}", successful_sends.len(), failed_sends.len()); 400 | } 401 | } 402 | maybe_bundle_result = bundle_results_receiver.recv() => { 403 | if maybe_bundle_result.is_none() { 404 | datapoint_error!( 405 | "bundle_results_subscription_error", 406 | ("errors", bundle_results_subscription_errs, i64), 407 | ("msg", "channel closed", String) 408 | ); 409 | bundle_results_subscription_errs += 1; 410 | break; 411 | } 412 | let bundle_result = maybe_bundle_result.unwrap(); 413 | info!("received bundle_result: [bundle_id={:?}, result={:?}]", bundle_result.bundle_id, bundle_result.result); 414 | } 415 | } 416 | } 417 | } 418 | 419 | Ok(()) 420 | } 421 | 422 | fn build_backrun_bundles( 423 | transactions: Vec, 424 | keypair: &Keypair, 425 | blockhash: &Hash, 426 | tip_accounts: &[Pubkey], 427 | message: &str, 428 | ) -> Vec { 429 | let mut rng = thread_rng(); 430 | transactions 431 | .into_iter() 432 | .map(|mempool_tx| { 433 | let tip_account = tip_accounts[rng.gen_range(0..tip_accounts.len())]; 434 | 435 | let backrun_tx = Transaction::new_signed_with_payer( 436 | &[ 437 | build_memo( 438 | format!("{}: {:?}", message, mempool_tx.signatures[0]).as_bytes(), 439 | &[], 440 | ), 441 | transfer(&keypair.pubkey(), &tip_account, 10_000), 442 | ], 443 | Some(&keypair.pubkey()), 444 | &[keypair], 445 | *blockhash, 446 | ); 447 | BundledTransactions { 448 | mempool_txs: vec![mempool_tx], 449 | backrun_txs: vec![backrun_tx.into()], 450 | } 451 | }) 452 | .collect() 453 | } 454 | 455 | /// Returns an exit boolean to let other threads gracefully shut down 456 | pub fn graceful_panic(callback: Option) -> Arc { 457 | let exit = Arc::new(AtomicBool::new(false)); 458 | // Fail fast! 459 | let panic_hook = panic::take_hook(); 460 | { 461 | let exit = exit.clone(); 462 | panic::set_hook(Box::new(move |panic_info| { 463 | if let Some(f) = callback { 464 | f(panic_info); 465 | } 466 | exit.store(true, Ordering::Relaxed); 467 | error!("exiting process"); 468 | // let other loops finish up 469 | std::thread::sleep(Duration::from_secs(5)); 470 | // invoke the default handler and exit the process 471 | panic_hook(panic_info); // print the panic backtrace. default exit code is 101 472 | 473 | process::exit(1); // bail us out if thread blocks/refuses to join main thread 474 | })); 475 | } 476 | exit 477 | } 478 | 479 | mod spl_memo_3_0 { 480 | solana_sdk::declare_id!("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"); 481 | } 482 | 483 | fn build_memo(memo: &[u8], signer_pubkeys: &[&Pubkey]) -> Instruction { 484 | Instruction { 485 | program_id: spl_memo_3_0::id(), 486 | accounts: signer_pubkeys 487 | .iter() 488 | .map(|&pubkey| AccountMeta::new_readonly(*pubkey, true)) 489 | .collect(), 490 | data: memo.to_vec(), 491 | } 492 | } 493 | -------------------------------------------------------------------------------- /protos/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "jito-protos" 3 | version = "0.1.0" 4 | edition = "2021" 5 | license = "Apache-2.0" 6 | 7 | [dependencies] 8 | prost = "0.11.8" 9 | prost-types = "0.11.8" 10 | tonic = "0.8.3" 11 | 12 | [build-dependencies] 13 | tonic-build = "0.8.4" 14 | -------------------------------------------------------------------------------- /protos/build.rs: -------------------------------------------------------------------------------- 1 | use tonic_build::configure; 2 | 3 | fn main() { 4 | configure() 5 | .compile( 6 | &[ 7 | "mev-protos/auth.proto", 8 | "mev-protos/block.proto", 9 | "mev-protos/block_engine.proto", 10 | "mev-protos/bundle.proto", 11 | "mev-protos/packet.proto", 12 | "mev-protos/relayer.proto", 13 | "mev-protos/searcher.proto", 14 | "mev-protos/shared.proto", 15 | "mev-protos/shredstream.proto", 16 | "mev-protos/trace_shred.proto", 17 | ], 18 | &["mev-protos"], 19 | ) 20 | .unwrap(); 21 | } 22 | -------------------------------------------------------------------------------- /protos/src/lib.rs: -------------------------------------------------------------------------------- 1 | pub mod auth { 2 | tonic::include_proto!("auth"); 3 | } 4 | 5 | pub mod block { 6 | tonic::include_proto!("block"); 7 | } 8 | 9 | pub mod block_engine { 10 | tonic::include_proto!("block_engine"); 11 | } 12 | 13 | pub mod bundle { 14 | tonic::include_proto!("bundle"); 15 | } 16 | 17 | pub mod packet { 18 | tonic::include_proto!("packet"); 19 | } 20 | 21 | pub mod relayer { 22 | tonic::include_proto!("relayer"); 23 | } 24 | 25 | pub mod searcher { 26 | tonic::include_proto!("searcher"); 27 | } 28 | 29 | pub mod shared { 30 | tonic::include_proto!("shared"); 31 | } 32 | -------------------------------------------------------------------------------- /rust-toolchain.toml: -------------------------------------------------------------------------------- 1 | [toolchain] 2 | # Needs to be compiled with the same rust version that the RPC loading this plugin was compiled with. 3 | # https://github.com/solana-labs/solana/blob/v1.16.14/rust-toolchain.toml 4 | channel = "1.73.0" 5 | components = [ "rustfmt", "rustc-dev", "clippy", "cargo" ] 6 | -------------------------------------------------------------------------------- /rustfmt.toml: -------------------------------------------------------------------------------- 1 | edition = "2021" 2 | imports_granularity="Crate" 3 | format_code_in_doc_comments = true 4 | error_on_unformatted = true 5 | group_imports = "StdExternalCrate" 6 | -------------------------------------------------------------------------------- /searcher_client/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "jito-searcher-client" 3 | version = "0.1.0-beta" 4 | edition = "2021" 5 | license = "Apache-2.0" 6 | 7 | [dependencies] 8 | bincode = "1.3.3" 9 | bytes = "1.4" 10 | futures = "0.3" 11 | futures-util = "0.3" 12 | jito-protos = { path = "../protos" } 13 | log = "0.4.17" 14 | prost-types = "0.11.8" 15 | solana-client = { git = "https://github.com/jito-foundation/jito-solana.git", tag = "v1.14.16-jito" } 16 | solana-metrics = { git = "https://github.com/jito-foundation/jito-solana.git", tag = "v1.14.16-jito" } 17 | solana-perf = { git = "https://github.com/jito-foundation/jito-solana.git", tag = "v1.14.16-jito" } 18 | solana-sdk = { git = "https://github.com/jito-foundation/jito-solana.git", tag = "v1.14.16-jito" } 19 | thiserror = "1.0.39" 20 | tokio = { version = "1.14.1", features = ["full"] } 21 | tonic = { version = "0.8.3", features = ["tls"] } 22 | -------------------------------------------------------------------------------- /searcher_client/src/client_interceptor.rs: -------------------------------------------------------------------------------- 1 | use std::{ 2 | sync::{Arc, RwLock}, 3 | time::{Duration, SystemTime}, 4 | }; 5 | 6 | use jito_protos::auth::{ 7 | auth_service_client::AuthServiceClient, GenerateAuthChallengeRequest, 8 | GenerateAuthTokensRequest, RefreshAccessTokenRequest, Role, Token, 9 | }; 10 | use prost_types::Timestamp; 11 | use solana_metrics::datapoint_info; 12 | use solana_sdk::signature::{Keypair, Signer}; 13 | use tokio::time::sleep; 14 | use tonic::{service::Interceptor, transport::Channel, Request, Status}; 15 | 16 | use crate::SearcherClientResult; 17 | 18 | const AUTHORIZATION_HEADER: &str = "authorization"; 19 | 20 | /// Adds the token to each requests' authorization header. 21 | /// Manages refreshing the token in a separate thread. 22 | #[derive(Clone)] 23 | pub struct ClientInterceptor { 24 | /// The token added to each request header. 25 | bearer_token: Arc>, 26 | } 27 | 28 | impl ClientInterceptor { 29 | pub async fn new( 30 | mut auth_service_client: AuthServiceClient, 31 | keypair: &Arc, 32 | ) -> SearcherClientResult { 33 | const ROLE: Role = Role::Searcher; 34 | 35 | let (access_token, refresh_token) = 36 | Self::auth(&mut auth_service_client, keypair, ROLE).await?; 37 | 38 | let bearer_token = Arc::new(RwLock::new(access_token.value.clone())); 39 | 40 | tokio::spawn(Self::token_refresh_loop( 41 | auth_service_client, 42 | bearer_token.clone(), 43 | refresh_token, 44 | access_token.expires_at_utc.unwrap(), 45 | keypair.clone(), 46 | ROLE, 47 | )); 48 | 49 | Ok(Self { bearer_token }) 50 | } 51 | 52 | async fn auth( 53 | auth_service_client: &mut AuthServiceClient, 54 | keypair: &Keypair, 55 | role: Role, 56 | ) -> SearcherClientResult<(Token, Token)> { 57 | let challenge_resp = auth_service_client 58 | .generate_auth_challenge(GenerateAuthChallengeRequest { 59 | role: role as i32, 60 | pubkey: keypair.pubkey().as_ref().to_vec(), 61 | }) 62 | .await? 63 | .into_inner(); 64 | 65 | let challenge = format!("{}-{}", keypair.pubkey(), challenge_resp.challenge); 66 | let signed_challenge = keypair.sign_message(challenge.as_bytes()).as_ref().to_vec(); 67 | 68 | let tokens = auth_service_client 69 | .generate_auth_tokens(GenerateAuthTokensRequest { 70 | challenge, 71 | client_pubkey: keypair.pubkey().as_ref().to_vec(), 72 | signed_challenge, 73 | }) 74 | .await? 75 | .into_inner(); 76 | 77 | Ok((tokens.access_token.unwrap(), tokens.refresh_token.unwrap())) 78 | } 79 | 80 | async fn token_refresh_loop( 81 | mut auth_service_client: AuthServiceClient, 82 | bearer_token: Arc>, 83 | refresh_token: Token, 84 | access_token_expiration: Timestamp, 85 | keypair: Arc, 86 | role: Role, 87 | ) { 88 | let mut refresh_token = refresh_token; 89 | let mut access_token_expiration = access_token_expiration; 90 | 91 | loop { 92 | let access_token_ttl = SystemTime::try_from(access_token_expiration.clone()) 93 | .unwrap() 94 | .duration_since(SystemTime::now()) 95 | .unwrap_or_else(|_| Duration::from_secs(0)); 96 | let refresh_token_ttl = 97 | SystemTime::try_from(refresh_token.expires_at_utc.as_ref().unwrap().clone()) 98 | .unwrap() 99 | .duration_since(SystemTime::now()) 100 | .unwrap_or_else(|_| Duration::from_secs(0)); 101 | 102 | let does_access_token_expire_soon = access_token_ttl < Duration::from_secs(5 * 60); 103 | let does_refresh_token_expire_soon = refresh_token_ttl < Duration::from_secs(5 * 60); 104 | 105 | match ( 106 | does_refresh_token_expire_soon, 107 | does_access_token_expire_soon, 108 | ) { 109 | // re-run entire auth workflow is refresh token expiring soon 110 | (true, _) => { 111 | let is_error = { 112 | if let Ok((new_access_token, new_refresh_token)) = 113 | Self::auth(&mut auth_service_client, &keypair, role).await 114 | { 115 | *bearer_token.write().unwrap() = new_access_token.value.clone(); 116 | access_token_expiration = new_access_token.expires_at_utc.unwrap(); 117 | refresh_token = new_refresh_token; 118 | false 119 | } else { 120 | true 121 | } 122 | }; 123 | datapoint_info!("searcher-full-auth", ("is_error", is_error, bool)); 124 | } 125 | // re-up the access token if it expires soon 126 | (_, true) => { 127 | let is_error = { 128 | if let Ok(refresh_resp) = auth_service_client 129 | .refresh_access_token(RefreshAccessTokenRequest { 130 | refresh_token: refresh_token.value.clone(), 131 | }) 132 | .await 133 | { 134 | let access_token = refresh_resp.into_inner().access_token.unwrap(); 135 | *bearer_token.write().unwrap() = access_token.value.clone(); 136 | access_token_expiration = access_token.expires_at_utc.unwrap(); 137 | false 138 | } else { 139 | true 140 | } 141 | }; 142 | 143 | datapoint_info!("searcher-refresh-auth", ("is_error", is_error, bool)); 144 | } 145 | _ => { 146 | sleep(Duration::from_secs(60)).await; 147 | } 148 | } 149 | } 150 | } 151 | } 152 | 153 | impl Interceptor for ClientInterceptor { 154 | fn call(&mut self, mut request: Request<()>) -> Result, Status> { 155 | let l_token = self.bearer_token.read().unwrap(); 156 | 157 | if !l_token.is_empty() { 158 | request.metadata_mut().insert( 159 | AUTHORIZATION_HEADER, 160 | format!("Bearer {l_token}").parse().unwrap(), 161 | ); 162 | } 163 | 164 | Ok(request) 165 | } 166 | } 167 | -------------------------------------------------------------------------------- /searcher_client/src/cluster_data_impl.rs: -------------------------------------------------------------------------------- 1 | use std::{ 2 | collections::{BTreeMap, HashMap}, 3 | str::FromStr, 4 | sync::{ 5 | atomic::{AtomicBool, AtomicU64, Ordering}, 6 | Arc, 7 | }, 8 | time::Duration, 9 | }; 10 | 11 | use jito_protos::searcher::{ 12 | searcher_service_client::SearcherServiceClient, ConnectedLeadersRequest, 13 | ConnectedLeadersResponse, 14 | }; 15 | use log::error; 16 | use solana_sdk::pubkey::Pubkey; 17 | use tokio::{ 18 | sync::{ 19 | mpsc::{channel, Receiver}, 20 | Mutex, 21 | }, 22 | time::{interval, timeout, Interval}, 23 | }; 24 | use tonic::codegen::{Body, Bytes, StdError}; 25 | 26 | use crate::{ClusterData, Slot}; 27 | 28 | /// Convenient types. 29 | type JitoLeaderScheduleCache = Arc>>; 30 | 31 | struct LeaderScheduleCacheEntry { 32 | validator_identity: Arc, 33 | } 34 | 35 | /// Main object keeping track of cluster data. 36 | #[derive(Clone)] 37 | pub struct ClusterDataImpl { 38 | /// Tracks the current slot. 39 | current_slot: Arc, 40 | 41 | /// Keeps track of Jito-Solana slot schedules. 42 | jito_leader_schedule_cache: JitoLeaderScheduleCache, 43 | } 44 | 45 | impl ClusterDataImpl { 46 | /// Creates a new instance of this object; also spawns a few background tokio tasks. 47 | pub async fn new( 48 | rpc_pubsub_addr: String, 49 | searcher_service_client: SearcherServiceClient, 50 | exit: Arc, 51 | ) -> Self 52 | where 53 | T: tonic::client::GrpcService + Send + 'static, 54 | T::Error: Into, 55 | T::ResponseBody: Body + Send + 'static, 56 | ::Error: Into + Send, 57 | >::Future: std::marker::Send, 58 | { 59 | let current_slot = Arc::new(AtomicU64::new(0)); 60 | let jito_leader_schedule_cache = Arc::new(Mutex::new(BTreeMap::new())); 61 | 62 | let (slot_sender, slot_receiver) = channel(1_000); 63 | tokio::spawn(rpc_utils::slot_subscribe_loop( 64 | rpc_pubsub_addr, 65 | slot_sender, 66 | exit.clone(), 67 | )); 68 | tokio::spawn(Self::current_slot_updater( 69 | current_slot.clone(), 70 | slot_receiver, 71 | exit.clone(), 72 | )); 73 | 74 | let fetch_interval = interval(Duration::from_secs(30)); 75 | tokio::spawn(Self::jito_leader_schedule_cache_updater( 76 | jito_leader_schedule_cache.clone(), 77 | current_slot.clone(), 78 | searcher_service_client, 79 | fetch_interval, 80 | exit, 81 | )); 82 | 83 | Self { 84 | current_slot, 85 | jito_leader_schedule_cache, 86 | } 87 | } 88 | 89 | async fn current_slot_updater( 90 | current_slot: Arc, 91 | mut slot_receiver: Receiver, 92 | exit: Arc, 93 | ) { 94 | let timeout_duration = Duration::from_secs(3); 95 | while !exit.load(Ordering::Relaxed) { 96 | match timeout(timeout_duration, slot_receiver.recv()).await { 97 | Err(_) => continue, 98 | Ok(Some(slot)) => { 99 | current_slot.store(slot, Ordering::Relaxed); 100 | } 101 | Ok(None) => { 102 | break; 103 | } 104 | } 105 | } 106 | } 107 | 108 | async fn jito_leader_schedule_cache_updater( 109 | jito_leader_schedule_cache: JitoLeaderScheduleCache, 110 | current_slot: Arc, 111 | mut searcher_service_client: SearcherServiceClient, 112 | mut fetch_interval: Interval, 113 | exit: Arc, 114 | ) where 115 | T: tonic::client::GrpcService + Send, 116 | T::Error: Into, 117 | T::ResponseBody: Body + Send + 'static, 118 | ::Error: Into + Send, 119 | >::Future: std::marker::Send, 120 | { 121 | const MAX_RETRIES: usize = 5; 122 | while !exit.load(Ordering::Relaxed) { 123 | let _ = fetch_interval.tick().await; 124 | if let Some(connected_leaders_resp) = Self::fetch_connected_leaders_with_retries( 125 | &mut searcher_service_client, 126 | MAX_RETRIES, 127 | ) 128 | .await 129 | { 130 | let mut leader_schedule = HashMap::with_capacity( 131 | connected_leaders_resp.connected_validators.values().len(), 132 | ); 133 | 134 | let current_slot = current_slot.load(Ordering::Relaxed); 135 | for (validator_identity, slots) in connected_leaders_resp.connected_validators { 136 | if let Ok(validator_identity) = Pubkey::from_str(&validator_identity) { 137 | let validator_identity = Arc::new(validator_identity); 138 | 139 | slots 140 | .slots 141 | .iter() 142 | .filter(|&&slot| slot >= current_slot) 143 | .for_each(|&slot| { 144 | leader_schedule.insert( 145 | slot, 146 | LeaderScheduleCacheEntry { 147 | validator_identity: validator_identity.clone(), 148 | }, 149 | ); 150 | }); 151 | } else { 152 | error!("error parsing validator identity: {validator_identity}"); 153 | } 154 | } 155 | 156 | *jito_leader_schedule_cache.lock().await = 157 | BTreeMap::from_iter(leader_schedule.into_iter()); 158 | } else { 159 | exit.store(true, Ordering::Relaxed); 160 | return; 161 | } 162 | } 163 | } 164 | 165 | async fn fetch_connected_leaders_with_retries( 166 | searcher_service_client: &mut SearcherServiceClient, 167 | max_retries: usize, 168 | ) -> Option 169 | where 170 | T: tonic::client::GrpcService + Send, 171 | T::Error: Into, 172 | T::ResponseBody: Body + Send + 'static, 173 | ::Error: Into + Send, 174 | >::Future: std::marker::Send, 175 | { 176 | for _ in 0..max_retries { 177 | if let Ok(resp) = searcher_service_client 178 | .get_connected_leaders(ConnectedLeadersRequest {}) 179 | .await 180 | { 181 | return Some(resp.into_inner()); 182 | } 183 | } 184 | None 185 | } 186 | } 187 | 188 | #[tonic::async_trait] 189 | impl ClusterData for ClusterDataImpl { 190 | async fn current_slot(&self) -> Slot { 191 | self.current_slot.load(Ordering::Relaxed) as Slot 192 | } 193 | 194 | async fn next_jito_validator(&self) -> Option<(Pubkey, Slot)> { 195 | let l_jito_leader_schedule_cache = self.jito_leader_schedule_cache.lock().await; 196 | let (slot, entry) = l_jito_leader_schedule_cache.first_key_value()?; 197 | Some((*entry.validator_identity, *slot)) 198 | } 199 | } 200 | 201 | mod rpc_utils { 202 | use std::{ 203 | sync::{ 204 | atomic::{AtomicBool, Ordering}, 205 | Arc, 206 | }, 207 | time::Duration, 208 | }; 209 | 210 | use futures_util::StreamExt; 211 | use solana_client::{nonblocking::pubsub_client::PubsubClient, rpc_response::SlotUpdate}; 212 | use solana_metrics::{datapoint_error, datapoint_info}; 213 | use solana_sdk::clock::Slot; 214 | use tokio::{sync::mpsc::Sender, time::sleep}; 215 | 216 | // Maintains a RPC subscription to keep track of the current slot. 217 | pub async fn slot_subscribe_loop( 218 | pubsub_addr: String, 219 | slot_sender: Sender, 220 | exit: Arc, 221 | ) { 222 | let mut connect_errors: u64 = 0; 223 | let mut slot_subscribe_errors: u64 = 0; 224 | let mut slot_subscribe_disconnect_errors: u64 = 0; 225 | 226 | while !exit.load(Ordering::Relaxed) { 227 | sleep(Duration::from_secs(1)).await; 228 | 229 | match PubsubClient::new(&pubsub_addr).await { 230 | Ok(pubsub_client) => match pubsub_client.slot_updates_subscribe().await { 231 | Ok((mut slot_update_subscription, _unsubscribe_fn)) => { 232 | while let Some(slot_update) = slot_update_subscription.next().await { 233 | if let SlotUpdate::FirstShredReceived { slot, timestamp: _ } = 234 | slot_update 235 | { 236 | datapoint_info!("slot_subscribe_slot", ("slot", slot, i64)); 237 | if slot_sender.send(slot).await.is_err() { 238 | datapoint_error!( 239 | "slot_subscribe_send_error", 240 | ("errors", 1, i64) 241 | ); 242 | exit.store(true, Ordering::Relaxed); 243 | return; 244 | } 245 | } 246 | 247 | if exit.load(Ordering::Relaxed) { 248 | return; 249 | } 250 | } 251 | slot_subscribe_disconnect_errors += 1; 252 | datapoint_error!( 253 | "slot_subscribe_disconnect_error", 254 | ("errors", slot_subscribe_disconnect_errors, i64) 255 | ); 256 | } 257 | Err(e) => { 258 | slot_subscribe_errors += 1; 259 | datapoint_error!( 260 | "slot_subscribe_error", 261 | ("errors", slot_subscribe_errors, i64), 262 | ("error_str", e.to_string(), String), 263 | ); 264 | } 265 | }, 266 | Err(e) => { 267 | connect_errors += 1; 268 | datapoint_error!( 269 | "slot_subscribe_pubsub_connect_error", 270 | ("errors", connect_errors, i64), 271 | ("error_str", e.to_string(), String) 272 | ); 273 | } 274 | } 275 | } 276 | } 277 | } 278 | -------------------------------------------------------------------------------- /searcher_client/src/convert.rs: -------------------------------------------------------------------------------- 1 | //! Contains utility functions convert to/from protos and Rust structs. 2 | 3 | use std::{ 4 | cmp::min, 5 | net::{IpAddr, Ipv4Addr}, 6 | }; 7 | 8 | use bincode::serialize; 9 | use jito_protos::packet::{ 10 | Meta as ProtoMeta, Packet as ProtoPacket, PacketBatch as ProtoPacketBatch, 11 | PacketFlags as ProtoPacketFlags, 12 | }; 13 | use solana_perf::packet::{Meta, Packet, PacketBatch, PacketFlags, PACKET_DATA_SIZE}; 14 | use solana_sdk::transaction::VersionedTransaction; 15 | 16 | /// Converts a Solana packet to a protobuf packet 17 | /// NOTE: the packet.data() function will filter packets marked for discard 18 | pub fn packet_to_proto_packet(p: &Packet) -> Option { 19 | Some(ProtoPacket { 20 | data: p.data(..)?.to_vec(), 21 | meta: Some(ProtoMeta { 22 | size: p.meta.size as u64, 23 | addr: p.meta.addr.to_string(), 24 | port: p.meta.port as u32, 25 | flags: Some(ProtoPacketFlags { 26 | discard: p.meta.discard(), 27 | forwarded: p.meta.forwarded(), 28 | repair: p.meta.repair(), 29 | simple_vote_tx: p.meta.is_simple_vote_tx(), 30 | tracer_packet: false, 31 | }), 32 | sender_stake: p.meta.sender_stake, 33 | }), 34 | }) 35 | } 36 | 37 | pub fn packet_batches_to_proto_packets( 38 | batches: &[PacketBatch], 39 | ) -> impl Iterator + '_ { 40 | batches.iter().flat_map(|b| { 41 | b.iter() 42 | .filter(|p| !p.meta.discard()) 43 | .filter_map(packet_to_proto_packet) 44 | }) 45 | } 46 | 47 | /// converts from a protobuf packet to packet 48 | pub fn proto_packet_to_packet(p: &ProtoPacket) -> Packet { 49 | let mut data = [0; PACKET_DATA_SIZE]; 50 | let copy_len = min(data.len(), p.data.len()); 51 | data[..copy_len].copy_from_slice(&p.data[..copy_len]); 52 | let mut packet = Packet::new(data, Default::default()); 53 | if let Some(meta) = &p.meta { 54 | packet.meta.size = meta.size as usize; 55 | packet.meta.addr = meta.addr.parse().unwrap_or(UNKNOWN_IP); 56 | packet.meta.port = meta.port as u16; 57 | if let Some(flags) = &meta.flags { 58 | if flags.simple_vote_tx { 59 | packet.meta.flags.insert(PacketFlags::SIMPLE_VOTE_TX); 60 | } 61 | if flags.forwarded { 62 | packet.meta.flags.insert(PacketFlags::FORWARDED); 63 | } 64 | if flags.tracer_packet { 65 | packet.meta.flags.insert(PacketFlags::TRACER_PACKET); 66 | } 67 | if flags.repair { 68 | packet.meta.flags.insert(PacketFlags::REPAIR); 69 | } 70 | } 71 | packet.meta.sender_stake = meta.sender_stake; 72 | } 73 | packet 74 | } 75 | 76 | const UNKNOWN_IP: IpAddr = IpAddr::V4(Ipv4Addr::new(0, 0, 0, 0)); 77 | pub fn proto_packet_batch_to_packets( 78 | packet_batch: ProtoPacketBatch, 79 | ) -> impl Iterator { 80 | packet_batch.packets.into_iter().map(|proto_packet| { 81 | let mut packet = Packet::new([0; PACKET_DATA_SIZE], Meta::default()); 82 | let copy_len = min(PACKET_DATA_SIZE, proto_packet.data.len()); 83 | packet.buffer_mut()[..copy_len].copy_from_slice(&proto_packet.data[..copy_len]); 84 | if let Some(meta) = &proto_packet.meta { 85 | packet.meta.size = meta.size as usize; 86 | packet.meta.addr = meta.addr.parse().unwrap_or(UNKNOWN_IP); 87 | packet.meta.port = meta.port as u16; 88 | if let Some(flags) = &meta.flags { 89 | if flags.simple_vote_tx { 90 | packet.meta.flags.insert(PacketFlags::SIMPLE_VOTE_TX); 91 | } 92 | if flags.forwarded { 93 | packet.meta.flags.insert(PacketFlags::FORWARDED); 94 | } 95 | if flags.tracer_packet { 96 | packet.meta.flags.insert(PacketFlags::TRACER_PACKET); 97 | } 98 | if flags.repair { 99 | packet.meta.flags.insert(PacketFlags::REPAIR); 100 | } 101 | if flags.discard { 102 | packet.meta.flags.insert(PacketFlags::DISCARD); 103 | } 104 | } 105 | packet.meta.sender_stake = meta.sender_stake; 106 | } 107 | packet 108 | }) 109 | } 110 | 111 | /// Converts a protobuf packet to a VersionedTransaction 112 | pub fn versioned_tx_from_packet(p: &ProtoPacket) -> Option { 113 | let mut data = [0; PACKET_DATA_SIZE]; 114 | let copy_len = min(data.len(), p.data.len()); 115 | data[..copy_len].copy_from_slice(&p.data[..copy_len]); 116 | let mut packet = Packet::new(data, Default::default()); 117 | if let Some(meta) = &p.meta { 118 | packet.meta.size = meta.size as usize; 119 | } 120 | packet.deserialize_slice(..).ok() 121 | } 122 | 123 | /// Converts a VersionedTransaction to a protobuf packet 124 | pub fn proto_packet_from_versioned_tx(tx: &VersionedTransaction) -> ProtoPacket { 125 | let data = serialize(tx).expect("serializes"); 126 | let size = data.len() as u64; 127 | ProtoPacket { 128 | data, 129 | meta: Some(ProtoMeta { 130 | size, 131 | addr: "".to_string(), 132 | port: 0, 133 | flags: None, 134 | sender_stake: 0, 135 | }), 136 | } 137 | } 138 | 139 | #[cfg(test)] 140 | mod tests { 141 | use solana_perf::test_tx::test_tx; 142 | 143 | use super::*; 144 | 145 | #[test] 146 | fn test_proto_to_packet() { 147 | let tx_before = VersionedTransaction::from(test_tx()); 148 | let tx_after = versioned_tx_from_packet(&proto_packet_from_versioned_tx(&tx_before)) 149 | .expect("tx_after"); 150 | 151 | assert_eq!(tx_before, tx_after); 152 | } 153 | } 154 | -------------------------------------------------------------------------------- /searcher_client/src/lib.rs: -------------------------------------------------------------------------------- 1 | pub mod client_interceptor; 2 | pub mod cluster_data_impl; 3 | pub mod convert; 4 | 5 | use std::sync::{ 6 | atomic::{AtomicBool, Ordering}, 7 | Arc, 8 | }; 9 | 10 | use bincode::serialize; 11 | use bytes::Bytes; 12 | use futures::{future::join_all, StreamExt}; 13 | use jito_protos::{ 14 | bundle::{Bundle, BundleResult}, 15 | searcher::{ 16 | mempool_subscription, searcher_service_client::SearcherServiceClient, MempoolSubscription, 17 | SendBundleRequest, SubscribeBundleResultsRequest, WriteLockedAccountSubscriptionV0, 18 | }, 19 | }; 20 | use log::*; 21 | use solana_client::nonblocking::tpu_client::TpuClient; 22 | use solana_sdk::{clock::Slot, pubkey::Pubkey, transaction::VersionedTransaction}; 23 | use thiserror::Error; 24 | use tokio::sync::{ 25 | mpsc::{channel, Receiver}, 26 | Mutex, 27 | }; 28 | use tonic::{ 29 | codegen::{Body, StdError}, 30 | transport, 31 | transport::{Channel, Endpoint}, 32 | Status, 33 | }; 34 | 35 | use crate::convert::{proto_packet_from_versioned_tx, versioned_tx_from_packet}; 36 | 37 | /// BundleId is expected to be a hash of the contained transaction signatures: 38 | /// fn derive_bundle_id(transactions: &[VersionedTransaction]) -> String { 39 | /// let mut hasher = Sha256::new(); 40 | /// hasher.update(transactions.iter().map(|tx| tx.signatures[0]).join(",")); 41 | /// format!("{:x}", hasher.finalize()) 42 | /// } 43 | pub type BundleId = String; 44 | 45 | #[derive(Error, Debug)] 46 | pub enum SearcherClientError { 47 | #[error("block-engine transport error {0}")] 48 | BlockEngineTransportError(#[from] transport::Error), 49 | 50 | #[error("no upcoming validator is running jito-solana")] 51 | NoUpcomingJitoValidator, 52 | 53 | #[error("grpc client error {0}")] 54 | GrpcClientError(#[from] Status), 55 | 56 | #[error("the grpc stream was closed")] 57 | GrpcStreamClosed, 58 | 59 | #[error("error serializing transaction")] 60 | TransactionSerializationError, 61 | 62 | #[error("tpu client error")] 63 | TpuClientError, 64 | } 65 | 66 | pub type SearcherClientResult = Result; 67 | 68 | #[tonic::async_trait] 69 | pub trait ClusterData { 70 | async fn current_slot(&self) -> Slot; 71 | async fn next_jito_validator(&self) -> Option<(Pubkey, Slot)>; 72 | } 73 | 74 | #[derive(Clone)] 75 | pub struct SearcherClient { 76 | cluster_data: Arc, 77 | searcher_service_client: Arc>>, 78 | exit: Arc, 79 | } 80 | 81 | impl SearcherClient 82 | where 83 | T: tonic::client::GrpcService, 84 | T::Error: Into, 85 | T::ResponseBody: Body + Send + 'static, 86 | ::Error: Into + Send, 87 | { 88 | pub fn new( 89 | cluster_data: C, 90 | searcher_service_client: SearcherServiceClient, 91 | exit: Arc, 92 | ) -> Self { 93 | Self { 94 | searcher_service_client: Arc::new(Mutex::new(searcher_service_client)), 95 | cluster_data: Arc::new(cluster_data), 96 | exit, 97 | } 98 | } 99 | 100 | /// Sends the list of transactions as a bundle iff the leader is a jito-solana. 101 | /// Returns the bundle's id. 102 | pub async fn send_bundle( 103 | &self, 104 | transactions: Vec, 105 | // Defines how many slots to lookahead for a jito-solana validator in order to 106 | // determine whether or not the bundle can be sent. 107 | slot_lookahead: u64, 108 | ) -> SearcherClientResult { 109 | let next_leader_slot = self 110 | .cluster_data 111 | .next_jito_validator() 112 | .await 113 | .ok_or(SearcherClientError::NoUpcomingJitoValidator)? 114 | .1; 115 | 116 | if next_leader_slot > slot_lookahead + self.cluster_data.current_slot().await { 117 | return Err(SearcherClientError::NoUpcomingJitoValidator); 118 | } 119 | 120 | let resp = self 121 | .searcher_service_client 122 | .lock() 123 | .await 124 | .send_bundle(SendBundleRequest { 125 | bundle: Some(Bundle { 126 | header: None, 127 | packets: transactions 128 | .iter() 129 | .map(proto_packet_from_versioned_tx) 130 | .collect(), 131 | }), 132 | }) 133 | .await?; 134 | 135 | Ok(resp.into_inner().uuid) 136 | } 137 | 138 | /// Sends transactions through the normal pipeline, regardless of if the leader is running jito-solana. 139 | /// Returns a list of results corresponding to the supplied transactions ordering. 140 | pub async fn send_transactions( 141 | &self, 142 | tpu_client: &TpuClient, 143 | transactions: Vec, 144 | ) -> Vec> { 145 | let futs = transactions 146 | .into_iter() 147 | .map(|tx| async move { 148 | let serialized_tx = serialize(&tx) 149 | .map_err(|_e| SearcherClientError::TransactionSerializationError)?; 150 | if !tpu_client.send_wire_transaction(serialized_tx).await { 151 | Err(SearcherClientError::TpuClientError) 152 | } else { 153 | Ok(()) 154 | } 155 | }) 156 | .collect::>(); 157 | 158 | join_all(futs).await.into_iter().collect() 159 | } 160 | 161 | pub async fn subscribe_mempool_accounts( 162 | &self, 163 | accounts: &[Pubkey], 164 | // Regions to subscribe to 165 | regions: Vec, 166 | buffer_size: usize, 167 | ) -> SearcherClientResult>> { 168 | let (sender, receiver) = channel(buffer_size); 169 | 170 | let mut stream = self 171 | .searcher_service_client 172 | .lock() 173 | .await 174 | .subscribe_mempool(MempoolSubscription { 175 | msg: Some(mempool_subscription::Msg::WlaV0Sub( 176 | WriteLockedAccountSubscriptionV0 { 177 | accounts: accounts.iter().map(|account| account.to_string()).collect(), 178 | }, 179 | )), 180 | regions, 181 | }) 182 | .await? 183 | .into_inner(); 184 | 185 | let exit = self.exit.clone(); 186 | tokio::spawn(async move { 187 | while !exit.load(Ordering::Relaxed) { 188 | let msg = match stream.next().await { 189 | None => { 190 | error!("mempool stream closed"); 191 | return; 192 | } 193 | Some(res) => { 194 | if let Err(e) = res { 195 | error!("mempool stream received error status: {e}"); 196 | return; 197 | } 198 | res.unwrap() 199 | } 200 | }; 201 | 202 | let transactions = msg 203 | .transactions 204 | .iter() 205 | .filter_map(versioned_tx_from_packet) 206 | .collect(); 207 | 208 | if let Err(e) = sender.send(transactions).await { 209 | error!("error sending transactions: {e}"); 210 | return; 211 | } 212 | } 213 | }); 214 | 215 | Ok(receiver) 216 | } 217 | 218 | pub async fn subscribe_bundle_results( 219 | &self, 220 | buffer_size: usize, 221 | ) -> SearcherClientResult> { 222 | let (sender, receiver) = channel(buffer_size); 223 | 224 | let mut stream = self 225 | .searcher_service_client 226 | .lock() 227 | .await 228 | .subscribe_bundle_results(SubscribeBundleResultsRequest {}) 229 | .await? 230 | .into_inner(); 231 | 232 | let exit = self.exit.clone(); 233 | tokio::spawn(async move { 234 | while !exit.load(Ordering::Relaxed) { 235 | let msg = match stream.next().await { 236 | None => { 237 | error!("bundle results stream closed"); 238 | return; 239 | } 240 | Some(res) => { 241 | if let Err(e) = res { 242 | error!("bundle results stream received error status: {e}"); 243 | return; 244 | } 245 | res.unwrap() 246 | } 247 | }; 248 | 249 | if let Err(e) = sender.send(msg).await { 250 | error!("error sending bundle result: {e}"); 251 | return; 252 | } 253 | } 254 | }); 255 | 256 | Ok(receiver) 257 | } 258 | } 259 | 260 | pub async fn grpc_connect(url: &str) -> SearcherClientResult { 261 | let endpoint = if url.contains("https") { 262 | Endpoint::from_shared(url.to_string()) 263 | .expect("invalid url") 264 | .tls_config(transport::ClientTlsConfig::new()) 265 | } else { 266 | Endpoint::from_shared(url.to_string()) 267 | }?; 268 | 269 | Ok(endpoint.connect().await?) 270 | } 271 | 272 | pub mod utils { 273 | use solana_sdk::pubkey::Pubkey; 274 | 275 | pub fn derive_tip_accounts(tip_program_pubkey: &Pubkey) -> Vec { 276 | let tip_pda_0 = Pubkey::find_program_address(&[b"TIP_ACCOUNT_0"], tip_program_pubkey).0; 277 | let tip_pda_1 = Pubkey::find_program_address(&[b"TIP_ACCOUNT_1"], tip_program_pubkey).0; 278 | let tip_pda_2 = Pubkey::find_program_address(&[b"TIP_ACCOUNT_2"], tip_program_pubkey).0; 279 | let tip_pda_3 = Pubkey::find_program_address(&[b"TIP_ACCOUNT_3"], tip_program_pubkey).0; 280 | let tip_pda_4 = Pubkey::find_program_address(&[b"TIP_ACCOUNT_4"], tip_program_pubkey).0; 281 | let tip_pda_5 = Pubkey::find_program_address(&[b"TIP_ACCOUNT_5"], tip_program_pubkey).0; 282 | let tip_pda_6 = Pubkey::find_program_address(&[b"TIP_ACCOUNT_6"], tip_program_pubkey).0; 283 | let tip_pda_7 = Pubkey::find_program_address(&[b"TIP_ACCOUNT_7"], tip_program_pubkey).0; 284 | 285 | vec![ 286 | tip_pda_0, tip_pda_1, tip_pda_2, tip_pda_3, tip_pda_4, tip_pda_5, tip_pda_6, tip_pda_7, 287 | ] 288 | } 289 | } 290 | --------------------------------------------------------------------------------